From cceea734b3f13ec94b6ee21d0da8550f68557d16 Mon Sep 17 00:00:00 2001 From: Yana De Pauw Date: Mon, 12 Dec 2022 11:43:56 +0100 Subject: [PATCH 001/425] 97248: Remove hardcoded 'default' configuration --- src/app/shared/search/search.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/shared/search/search.component.ts b/src/app/shared/search/search.component.ts index c017a5065b..bc6b10dc8d 100644 --- a/src/app/shared/search/search.component.ts +++ b/src/app/shared/search/search.component.ts @@ -60,7 +60,7 @@ export class SearchComponent implements OnInit { * The configuration to use for the search options * If empty, 'default' is used */ - @Input() configuration = 'default'; + @Input() configuration; /** * The actual query for the fixed filter. From c3d71cbdd615ff707482852fd3d76f688950e1f1 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Wed, 11 Jan 2023 14:18:20 +0100 Subject: [PATCH 002/425] 98422: Themed ItemStatusComponent and EditBitstreamPageComponent --- .../bitstream-page-routing.module.ts | 4 ++-- .../bitstream-page/bitstream-page.module.ts | 4 +++- .../themed-edit-bitstream-page.component.ts | 22 ++++++++++++++++++ .../edit-item-page/edit-item-page.module.ts | 2 ++ .../edit-item-page.routing.module.ts | 4 ++-- .../themed-item-status.component.ts | 23 +++++++++++++++++++ .../edit-bitstream-page.component.html | 0 .../edit-bitstream-page.component.scss | 0 .../edit-bitstream-page.component.ts | 13 +++++++++++ .../item-status/item-status.component.html | 0 .../item-status/item-status.component.ts | 16 +++++++++++++ src/themes/custom/theme.module.ts | 6 ++++- 12 files changed, 88 insertions(+), 6 deletions(-) create mode 100644 src/app/bitstream-page/edit-bitstream-page/themed-edit-bitstream-page.component.ts create mode 100644 src/app/item-page/edit-item-page/item-status/themed-item-status.component.ts create mode 100644 src/themes/custom/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.html create mode 100644 src/themes/custom/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.scss create mode 100644 src/themes/custom/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts create mode 100644 src/themes/custom/app/item-page/edit-item-page/item-status/item-status.component.html create mode 100644 src/themes/custom/app/item-page/edit-item-page/item-status/item-status.component.ts diff --git a/src/app/bitstream-page/bitstream-page-routing.module.ts b/src/app/bitstream-page/bitstream-page-routing.module.ts index 27b9db9a05..bab5e91467 100644 --- a/src/app/bitstream-page/bitstream-page-routing.module.ts +++ b/src/app/bitstream-page/bitstream-page-routing.module.ts @@ -1,6 +1,5 @@ import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; -import { EditBitstreamPageComponent } from './edit-bitstream-page/edit-bitstream-page.component'; import { AuthenticatedGuard } from '../core/auth/authenticated.guard'; import { BitstreamPageResolver } from './bitstream-page.resolver'; import { BitstreamDownloadPageComponent } from '../shared/bitstream-download-page/bitstream-download-page.component'; @@ -10,6 +9,7 @@ import { ResourcePolicyResolver } from '../shared/resource-policies/resolvers/re import { ResourcePolicyEditComponent } from '../shared/resource-policies/edit/resource-policy-edit.component'; import { BitstreamAuthorizationsComponent } from './bitstream-authorizations/bitstream-authorizations.component'; import { LegacyBitstreamUrlResolver } from './legacy-bitstream-url.resolver'; +import { ThemedEditBitstreamPageComponent } from './edit-bitstream-page/themed-edit-bitstream-page.component'; const EDIT_BITSTREAM_PATH = ':id/edit'; const EDIT_BITSTREAM_AUTHORIZATIONS_PATH = ':id/authorizations'; @@ -46,7 +46,7 @@ const EDIT_BITSTREAM_AUTHORIZATIONS_PATH = ':id/authorizations'; }, { path: EDIT_BITSTREAM_PATH, - component: EditBitstreamPageComponent, + component: ThemedEditBitstreamPageComponent, resolve: { bitstream: BitstreamPageResolver }, diff --git a/src/app/bitstream-page/bitstream-page.module.ts b/src/app/bitstream-page/bitstream-page.module.ts index d168a06db2..ea8ed510e1 100644 --- a/src/app/bitstream-page/bitstream-page.module.ts +++ b/src/app/bitstream-page/bitstream-page.module.ts @@ -6,6 +6,7 @@ import { BitstreamPageRoutingModule } from './bitstream-page-routing.module'; import { BitstreamAuthorizationsComponent } from './bitstream-authorizations/bitstream-authorizations.component'; import { FormModule } from '../shared/form/form.module'; import { ResourcePoliciesModule } from '../shared/resource-policies/resource-policies.module'; +import { ThemedEditBitstreamPageComponent } from './edit-bitstream-page/themed-edit-bitstream-page.component'; /** * This module handles all components that are necessary for Bitstream related pages @@ -20,7 +21,8 @@ import { ResourcePoliciesModule } from '../shared/resource-policies/resource-pol ], declarations: [ BitstreamAuthorizationsComponent, - EditBitstreamPageComponent + EditBitstreamPageComponent, + ThemedEditBitstreamPageComponent, ] }) export class BitstreamPageModule { diff --git a/src/app/bitstream-page/edit-bitstream-page/themed-edit-bitstream-page.component.ts b/src/app/bitstream-page/edit-bitstream-page/themed-edit-bitstream-page.component.ts new file mode 100644 index 0000000000..dcca28a495 --- /dev/null +++ b/src/app/bitstream-page/edit-bitstream-page/themed-edit-bitstream-page.component.ts @@ -0,0 +1,22 @@ +import { Component } from '@angular/core'; +import { EditBitstreamPageComponent } from './edit-bitstream-page.component'; +import { ThemedComponent } from '../../shared/theme-support/themed.component'; + +@Component({ + selector: 'ds-themed-edit-bitstream-page', + styleUrls: [], + templateUrl: '../../shared/theme-support/themed.component.html', +}) +export class ThemedEditBitstreamPageComponent extends ThemedComponent { + protected getComponentName(): string { + return 'EditBitstreamPageComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../themes/${themeName}/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./edit-bitstream-page.component'); + } +} diff --git a/src/app/item-page/edit-item-page/edit-item-page.module.ts b/src/app/item-page/edit-item-page/edit-item-page.module.ts index 97901bd7c8..e033919dba 100644 --- a/src/app/item-page/edit-item-page/edit-item-page.module.ts +++ b/src/app/item-page/edit-item-page/edit-item-page.module.ts @@ -35,6 +35,7 @@ import { ItemVersionHistoryComponent } from './item-version-history/item-version import { ItemAuthorizationsComponent } from './item-authorizations/item-authorizations.component'; import { ObjectValuesPipe } from '../../shared/utils/object-values-pipe'; import { ResourcePoliciesModule } from '../../shared/resource-policies/resource-policies.module'; +import { ThemedItemStatusComponent } from './item-status/themed-item-status.component'; /** @@ -61,6 +62,7 @@ import { ResourcePoliciesModule } from '../../shared/resource-policies/resource- ItemPublicComponent, ItemDeleteComponent, ItemStatusComponent, + ThemedItemStatusComponent, ItemMetadataComponent, ItemRelationshipsComponent, ItemBitstreamsComponent, diff --git a/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts b/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts index 2535e42216..6deffe47a8 100644 --- a/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts +++ b/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts @@ -6,7 +6,6 @@ import { ItemReinstateComponent } from './item-reinstate/item-reinstate.componen import { ItemPrivateComponent } from './item-private/item-private.component'; import { ItemPublicComponent } from './item-public/item-public.component'; import { ItemDeleteComponent } from './item-delete/item-delete.component'; -import { ItemStatusComponent } from './item-status/item-status.component'; import { ItemMetadataComponent } from './item-metadata/item-metadata.component'; import { ItemBitstreamsComponent } from './item-bitstreams/item-bitstreams.component'; import { ItemCollectionMapperComponent } from './item-collection-mapper/item-collection-mapper.component'; @@ -38,6 +37,7 @@ import { ItemPageBitstreamsGuard } from './item-page-bitstreams.guard'; import { ItemPageRelationshipsGuard } from './item-page-relationships.guard'; import { ItemPageVersionHistoryGuard } from './item-page-version-history.guard'; import { ItemPageCollectionMapperGuard } from './item-page-collection-mapper.guard'; +import { ThemedItemPageComponent } from '../simple/themed-item-page.component'; /** * Routing module that handles the routing for the Edit Item page administrator functionality @@ -63,7 +63,7 @@ import { ItemPageCollectionMapperGuard } from './item-page-collection-mapper.gua }, { path: 'status', - component: ItemStatusComponent, + component: ThemedItemPageComponent, data: { title: 'item.edit.tabs.status.title', showBreadcrumbs: true }, canActivate: [ItemPageStatusGuard] }, diff --git a/src/app/item-page/edit-item-page/item-status/themed-item-status.component.ts b/src/app/item-page/edit-item-page/item-status/themed-item-status.component.ts new file mode 100644 index 0000000000..eac5a53702 --- /dev/null +++ b/src/app/item-page/edit-item-page/item-status/themed-item-status.component.ts @@ -0,0 +1,23 @@ +import { Component } from '@angular/core'; +import { ThemedComponent } from '../../../shared/theme-support/themed.component'; +import { ItemStatusComponent } from './item-status.component'; + +@Component({ + selector: 'ds-themed-item-status', + styleUrls: [], + templateUrl: '../../../shared/theme-support/themed.component.html', +}) +export class ThemedItemStatusComponent extends ThemedComponent { + protected getComponentName(): string { + return 'ItemStatusComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../themes/${themeName}/app/item-page/edit-item-page/item-status/item-status.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./item-status.component'); + } + +} diff --git a/src/themes/custom/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.html b/src/themes/custom/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.scss b/src/themes/custom/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts b/src/themes/custom/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts new file mode 100644 index 0000000000..f8ca14addb --- /dev/null +++ b/src/themes/custom/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts @@ -0,0 +1,13 @@ +import { EditBitstreamPageComponent as BaseComponent } from '../../../../../app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component'; +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'ds-edit-bitstream-page', + // styleUrls: ['./edit-bitstream-page.component.scss'], + styleUrls: ['../../../../../app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.scss'], + // templateUrl: './edit-bitstream-page.component.html', + templateUrl: '../../../../../app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class EditBitstreamPageComponent extends BaseComponent { +} diff --git a/src/themes/custom/app/item-page/edit-item-page/item-status/item-status.component.html b/src/themes/custom/app/item-page/edit-item-page/item-status/item-status.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/item-page/edit-item-page/item-status/item-status.component.ts b/src/themes/custom/app/item-page/edit-item-page/item-status/item-status.component.ts new file mode 100644 index 0000000000..95acec2275 --- /dev/null +++ b/src/themes/custom/app/item-page/edit-item-page/item-status/item-status.component.ts @@ -0,0 +1,16 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { fadeIn, fadeInOut } from '../../../../../../app/shared/animations/fade'; +import { ItemStatusComponent as BaseComponent } from '../../../../../../app/item-page/edit-item-page/item-status/item-status.component'; + +@Component({ + selector: 'ds-item-status', + // templateUrl: './item-status.component.html', + templateUrl: '../../../../../../app/item-page/edit-item-page/item-status/item-status.component.html', + changeDetection: ChangeDetectionStrategy.Default, + animations: [ + fadeIn, + fadeInOut + ] +}) +export class ItemStatusComponent extends BaseComponent { +} diff --git a/src/themes/custom/theme.module.ts b/src/themes/custom/theme.module.ts index e2e97b9087..ab69e86a8e 100644 --- a/src/themes/custom/theme.module.ts +++ b/src/themes/custom/theme.module.ts @@ -84,6 +84,8 @@ import { SearchModule } from '../../app/shared/search/search.module'; import { ResourcePoliciesModule } from '../../app/shared/resource-policies/resource-policies.module'; import { ComcolModule } from '../../app/shared/comcol/comcol.module'; import { FeedbackComponent } from './app/info/feedback/feedback.component'; +import { ItemStatusComponent } from './app/item-page/edit-item-page/item-status/item-status.component'; +import { EditBitstreamPageComponent } from './app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component'; const DECLARATIONS = [ FileSectionComponent, @@ -126,7 +128,9 @@ const DECLARATIONS = [ NavbarComponent, HeaderNavbarWrapperComponent, BreadcrumbsComponent, - FeedbackComponent + FeedbackComponent, + ItemStatusComponent, + EditBitstreamPageComponent, ]; @NgModule({ From de7fcb30da5711b73bd9d88c37923de913aacdc6 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Wed, 11 Jan 2023 14:49:21 +0100 Subject: [PATCH 003/425] 98422: Themed component import fixes --- src/app/item-page/edit-item-page/edit-item-page.module.ts | 3 ++- .../item-page/edit-item-page/edit-item-page.routing.module.ts | 3 ++- src/themes/custom/theme.module.ts | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/app/item-page/edit-item-page/edit-item-page.module.ts b/src/app/item-page/edit-item-page/edit-item-page.module.ts index e033919dba..8ef9c9f82f 100644 --- a/src/app/item-page/edit-item-page/edit-item-page.module.ts +++ b/src/app/item-page/edit-item-page/edit-item-page.module.ts @@ -85,7 +85,8 @@ import { ThemedItemStatusComponent } from './item-status/themed-item-status.comp ObjectValuesPipe ], exports: [ - ItemMetadataComponent + ItemMetadataComponent, + ItemOperationComponent, ] }) export class EditItemPageModule { diff --git a/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts b/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts index 6deffe47a8..0221043d55 100644 --- a/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts +++ b/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts @@ -38,6 +38,7 @@ import { ItemPageRelationshipsGuard } from './item-page-relationships.guard'; import { ItemPageVersionHistoryGuard } from './item-page-version-history.guard'; import { ItemPageCollectionMapperGuard } from './item-page-collection-mapper.guard'; import { ThemedItemPageComponent } from '../simple/themed-item-page.component'; +import { ThemedItemStatusComponent } from './item-status/themed-item-status.component'; /** * Routing module that handles the routing for the Edit Item page administrator functionality @@ -63,7 +64,7 @@ import { ThemedItemPageComponent } from '../simple/themed-item-page.component'; }, { path: 'status', - component: ThemedItemPageComponent, + component: ThemedItemStatusComponent, data: { title: 'item.edit.tabs.status.title', showBreadcrumbs: true }, canActivate: [ItemPageStatusGuard] }, diff --git a/src/themes/custom/theme.module.ts b/src/themes/custom/theme.module.ts index ab69e86a8e..964909b3c1 100644 --- a/src/themes/custom/theme.module.ts +++ b/src/themes/custom/theme.module.ts @@ -86,6 +86,7 @@ import { ComcolModule } from '../../app/shared/comcol/comcol.module'; import { FeedbackComponent } from './app/info/feedback/feedback.component'; import { ItemStatusComponent } from './app/item-page/edit-item-page/item-status/item-status.component'; import { EditBitstreamPageComponent } from './app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component'; +import { FormModule } from '../../app/shared/form/form.module'; const DECLARATIONS = [ FileSectionComponent, @@ -180,7 +181,8 @@ const DECLARATIONS = [ SearchModule, FormsModule, ResourcePoliciesModule, - ComcolModule + ComcolModule, + FormModule, ], declarations: DECLARATIONS }) From 4ba64fdfcc5b2a7ac6c291b712f14b3623d104d8 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Wed, 11 Jan 2023 14:55:16 +0100 Subject: [PATCH 004/425] 98422: Remove unused import --- .../item-page/edit-item-page/edit-item-page.routing.module.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts b/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts index 0221043d55..bc8b614643 100644 --- a/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts +++ b/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts @@ -37,7 +37,6 @@ import { ItemPageBitstreamsGuard } from './item-page-bitstreams.guard'; import { ItemPageRelationshipsGuard } from './item-page-relationships.guard'; import { ItemPageVersionHistoryGuard } from './item-page-version-history.guard'; import { ItemPageCollectionMapperGuard } from './item-page-collection-mapper.guard'; -import { ThemedItemPageComponent } from '../simple/themed-item-page.component'; import { ThemedItemStatusComponent } from './item-status/themed-item-status.component'; /** From e47b42bc89e0c34271e1a9fac5f9bbf08f77720f Mon Sep 17 00:00:00 2001 From: Sufiyan Shaikh Date: Mon, 7 Nov 2022 20:56:05 +0530 Subject: [PATCH 005/425] [CST-7216] Angular: Import saf via URL --- .../batch-import-page.component.html | 12 +++ .../batch-import-page.component.spec.ts | 87 ++++++++++++++++++- .../batch-import-page.component.ts | 29 ++++++- src/app/admin/admin.module.ts | 4 +- src/assets/i18n/en.json5 | 6 ++ 5 files changed, 130 insertions(+), 8 deletions(-) diff --git a/src/app/admin/admin-import-batch-page/batch-import-page.component.html b/src/app/admin/admin-import-batch-page/batch-import-page.component.html index dbc8c74437..190eb0d409 100644 --- a/src/app/admin/admin-import-batch-page/batch-import-page.component.html +++ b/src/app/admin/admin-import-batch-page/batch-import-page.component.html @@ -20,12 +20,24 @@ + + +
+ +
+
diff --git a/src/app/admin/admin-import-batch-page/batch-import-page.component.spec.ts b/src/app/admin/admin-import-batch-page/batch-import-page.component.spec.ts index 36ba1137c9..2c465d3f3d 100644 --- a/src/app/admin/admin-import-batch-page/batch-import-page.component.spec.ts +++ b/src/app/admin/admin-import-batch-page/batch-import-page.component.spec.ts @@ -86,10 +86,18 @@ describe('BatchImportPageComponent', () => { let fileMock: File; beforeEach(() => { + component.isUpload = true; fileMock = new File([''], 'filename.zip', { type: 'application/zip' }); component.setFile(fileMock); }); + it('should show the file dropzone', () => { + const fileDropzone = fixture.debugElement.query(By.css('[data-test="file-dropzone"]')); + const fileUrlInput = fixture.debugElement.query(By.css('[data-test="file-url-input"]')); + expect(fileDropzone).toBeTruthy(); + expect(fileUrlInput).toBeFalsy(); + }); + describe('if proceed button is pressed without validate only', () => { beforeEach(fakeAsync(() => { component.validateOnly = false; @@ -99,9 +107,9 @@ describe('BatchImportPageComponent', () => { })); it('metadata-import script is invoked with --zip fileName and the mockFile', () => { const parameterValues: ProcessParameter[] = [ - Object.assign(new ProcessParameter(), { name: '--zip', value: 'filename.zip' }), + Object.assign(new ProcessParameter(), { name: '--add' }), + Object.assign(new ProcessParameter(), { name: '--zip', value: 'filename.zip' }) ]; - parameterValues.push(Object.assign(new ProcessParameter(), { name: '--add' })); expect(scriptService.invoke).toHaveBeenCalledWith(BATCH_IMPORT_SCRIPT_NAME, parameterValues, [fileMock]); }); it('success notification is shown', () => { @@ -121,8 +129,8 @@ describe('BatchImportPageComponent', () => { })); it('metadata-import script is invoked with --zip fileName and the mockFile and -v validate-only', () => { const parameterValues: ProcessParameter[] = [ - Object.assign(new ProcessParameter(), { name: '--zip', value: 'filename.zip' }), Object.assign(new ProcessParameter(), { name: '--add' }), + Object.assign(new ProcessParameter(), { name: '--zip', value: 'filename.zip' }), Object.assign(new ProcessParameter(), { name: '-v', value: true }), ]; expect(scriptService.invoke).toHaveBeenCalledWith(BATCH_IMPORT_SCRIPT_NAME, parameterValues, [fileMock]); @@ -148,4 +156,77 @@ describe('BatchImportPageComponent', () => { }); }); }); + + describe('if url is set', () => { + beforeEach(fakeAsync(() => { + component.isUpload = false; + component.fileURL = 'example.fileURL.com'; + fixture.detectChanges(); + })); + + it('should show the file url input', () => { + const fileDropzone = fixture.debugElement.query(By.css('[data-test="file-dropzone"]')); + const fileUrlInput = fixture.debugElement.query(By.css('[data-test="file-url-input"]')); + expect(fileDropzone).toBeFalsy(); + expect(fileUrlInput).toBeTruthy(); + }); + + describe('if proceed button is pressed without validate only', () => { + beforeEach(fakeAsync(() => { + component.validateOnly = false; + const proceed = fixture.debugElement.query(By.css('#proceedButton')).nativeElement; + proceed.click(); + fixture.detectChanges(); + })); + it('metadata-import script is invoked with --u and the file url', () => { + const parameterValues: ProcessParameter[] = [ + Object.assign(new ProcessParameter(), { name: '--add' }), + Object.assign(new ProcessParameter(), { name: '--u', value: 'example.fileURL.com' }) + ]; + expect(scriptService.invoke).toHaveBeenCalledWith(BATCH_IMPORT_SCRIPT_NAME, parameterValues, [null]); + }); + it('success notification is shown', () => { + expect(notificationService.success).toHaveBeenCalled(); + }); + it('redirected to process page', () => { + expect(router.navigateByUrl).toHaveBeenCalledWith('/processes/46'); + }); + }); + + describe('if proceed button is pressed with validate only', () => { + beforeEach(fakeAsync(() => { + component.validateOnly = true; + const proceed = fixture.debugElement.query(By.css('#proceedButton')).nativeElement; + proceed.click(); + fixture.detectChanges(); + })); + it('metadata-import script is invoked with --u and the file url and -v validate-only', () => { + const parameterValues: ProcessParameter[] = [ + Object.assign(new ProcessParameter(), { name: '--add' }), + Object.assign(new ProcessParameter(), { name: '--u', value: 'example.fileURL.com' }), + Object.assign(new ProcessParameter(), { name: '-v', value: true }), + ]; + expect(scriptService.invoke).toHaveBeenCalledWith(BATCH_IMPORT_SCRIPT_NAME, parameterValues, [null]); + }); + it('success notification is shown', () => { + expect(notificationService.success).toHaveBeenCalled(); + }); + it('redirected to process page', () => { + expect(router.navigateByUrl).toHaveBeenCalledWith('/processes/46'); + }); + }); + + describe('if proceed is pressed; but script invoke fails', () => { + beforeEach(fakeAsync(() => { + jasmine.getEnv().allowRespy(true); + spyOn(scriptService, 'invoke').and.returnValue(createFailedRemoteDataObject$('Error', 500)); + const proceed = fixture.debugElement.query(By.css('#proceedButton')).nativeElement; + proceed.click(); + fixture.detectChanges(); + })); + it('error notification is shown', () => { + expect(notificationService.error).toHaveBeenCalled(); + }); + }); + }); }); diff --git a/src/app/admin/admin-import-batch-page/batch-import-page.component.ts b/src/app/admin/admin-import-batch-page/batch-import-page.component.ts index 7171c67585..79da641cc6 100644 --- a/src/app/admin/admin-import-batch-page/batch-import-page.component.ts +++ b/src/app/admin/admin-import-batch-page/batch-import-page.component.ts @@ -8,7 +8,7 @@ import { ProcessParameter } from '../../process-page/processes/process-parameter import { getFirstCompletedRemoteData } from '../../core/shared/operators'; import { RemoteData } from '../../core/data/remote-data'; import { Process } from '../../process-page/processes/process.model'; -import { isNotEmpty } from '../../shared/empty.util'; +import { isEmpty, isNotEmpty } from '../../shared/empty.util'; import { getProcessDetailRoute } from '../../process-page/process-page-routing.paths'; import { ImportBatchSelectorComponent @@ -32,11 +32,22 @@ export class BatchImportPageComponent { * The validate only flag */ validateOnly = true; + /** * dso object for community or collection */ dso: DSpaceObject = null; + /** + * The flag between upload and url + */ + isUpload = true; + + /** + * File URL when flag is for url + */ + fileURL: string; + public constructor(private location: Location, protected translate: TranslateService, protected notificationsService: NotificationsService, @@ -72,13 +83,18 @@ export class BatchImportPageComponent { * Starts import-metadata script with --zip fileName (and the selected file) */ public importMetadata() { - if (this.fileObject == null) { + if (this.fileObject == null && isEmpty(this.fileURL)) { this.notificationsService.error(this.translate.get('admin.metadata-import.page.error.addFile')); } else { const parameterValues: ProcessParameter[] = [ - Object.assign(new ProcessParameter(), { name: '--zip', value: this.fileObject.name }), Object.assign(new ProcessParameter(), { name: '--add' }) ]; + if (this.isUpload) { + parameterValues.push(Object.assign(new ProcessParameter(), { name: '--zip', value: this.fileObject.name })); + } else { + this.fileObject = null; + parameterValues.push(Object.assign(new ProcessParameter(), { name: '--u', value: this.fileURL })); + } if (this.dso) { parameterValues.push(Object.assign(new ProcessParameter(), { name: '--collection', value: this.dso.uuid })); } @@ -121,4 +137,11 @@ export class BatchImportPageComponent { removeDspaceObject(): void { this.dso = null; } + + /** + * toggle the flag between upload and url + */ + toggleUpload() { + this.isUpload = !this.isUpload; + } } diff --git a/src/app/admin/admin.module.ts b/src/app/admin/admin.module.ts index dff2e506c3..768e3120df 100644 --- a/src/app/admin/admin.module.ts +++ b/src/app/admin/admin.module.ts @@ -10,7 +10,7 @@ import { AdminSearchModule } from './admin-search-page/admin-search.module'; import { AdminSidebarSectionComponent } from './admin-sidebar/admin-sidebar-section/admin-sidebar-section.component'; import { ExpandableAdminSidebarSectionComponent } from './admin-sidebar/expandable-admin-sidebar-section/expandable-admin-sidebar-section.component'; import { BatchImportPageComponent } from './admin-import-batch-page/batch-import-page.component'; -import { UploadModule } from '../shared/upload/upload.module'; +import { UiSwitchModule } from 'ngx-ui-switch'; const ENTRY_COMPONENTS = [ // put only entry components that use custom decorator @@ -27,7 +27,7 @@ const ENTRY_COMPONENTS = [ AdminSearchModule.withEntryComponents(), AdminWorkflowModuleModule.withEntryComponents(), SharedModule, - UploadModule, + UiSwitchModule ], declarations: [ AdminCurationTasksComponent, diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index fc4c6aa74d..5eb069c804 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -586,6 +586,12 @@ "admin.batch-import.page.error.addFile": "Select Zip file first!", + "admin.metadata-import.page.toggle.upload": "Upload", + + "admin.metadata-import.page.toggle.url": "URL", + + "admin.metadata-import.page.urlMsg": "Insert the batch ZIP url to import", + "admin.metadata-import.page.validateOnly": "Validate Only", "admin.metadata-import.page.validateOnly.hint": "When selected, the uploaded CSV will be validated. You will receive a report of detected changes, but no changes will be saved.", From 98da08ead0c0b8c197f0aed998c9a2368915f6a9 Mon Sep 17 00:00:00 2001 From: Sufiyan Shaikh Date: Thu, 10 Nov 2022 19:31:32 +0530 Subject: [PATCH 006/425] [CST-7216] Design fixes and parameter changed --- .../batch-import-page.component.html | 7 ++++++- .../batch-import-page.component.spec.ts | 8 ++++---- .../batch-import-page.component.ts | 8 ++++++-- src/assets/i18n/en.json5 | 4 ++++ 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/app/admin/admin-import-batch-page/batch-import-page.component.html b/src/app/admin/admin-import-batch-page/batch-import-page.component.html index 190eb0d409..1092443436 100644 --- a/src/app/admin/admin-import-batch-page/batch-import-page.component.html +++ b/src/app/admin/admin-import-batch-page/batch-import-page.component.html @@ -20,10 +20,15 @@
- + + {{'admin.batch-import.page.toggle.help' | translate}} + + { proceed.click(); fixture.detectChanges(); })); - it('metadata-import script is invoked with --u and the file url', () => { + it('metadata-import script is invoked with --url and the file url', () => { const parameterValues: ProcessParameter[] = [ Object.assign(new ProcessParameter(), { name: '--add' }), - Object.assign(new ProcessParameter(), { name: '--u', value: 'example.fileURL.com' }) + Object.assign(new ProcessParameter(), { name: '--url', value: 'example.fileURL.com' }) ]; expect(scriptService.invoke).toHaveBeenCalledWith(BATCH_IMPORT_SCRIPT_NAME, parameterValues, [null]); }); @@ -200,10 +200,10 @@ describe('BatchImportPageComponent', () => { proceed.click(); fixture.detectChanges(); })); - it('metadata-import script is invoked with --u and the file url and -v validate-only', () => { + it('metadata-import script is invoked with --url and the file url and -v validate-only', () => { const parameterValues: ProcessParameter[] = [ Object.assign(new ProcessParameter(), { name: '--add' }), - Object.assign(new ProcessParameter(), { name: '--u', value: 'example.fileURL.com' }), + Object.assign(new ProcessParameter(), { name: '--url', value: 'example.fileURL.com' }), Object.assign(new ProcessParameter(), { name: '-v', value: true }), ]; expect(scriptService.invoke).toHaveBeenCalledWith(BATCH_IMPORT_SCRIPT_NAME, parameterValues, [null]); diff --git a/src/app/admin/admin-import-batch-page/batch-import-page.component.ts b/src/app/admin/admin-import-batch-page/batch-import-page.component.ts index 79da641cc6..744b3aecce 100644 --- a/src/app/admin/admin-import-batch-page/batch-import-page.component.ts +++ b/src/app/admin/admin-import-batch-page/batch-import-page.component.ts @@ -84,7 +84,11 @@ export class BatchImportPageComponent { */ public importMetadata() { if (this.fileObject == null && isEmpty(this.fileURL)) { - this.notificationsService.error(this.translate.get('admin.metadata-import.page.error.addFile')); + if (this.isUpload) { + this.notificationsService.error(this.translate.get('admin.metadata-import.page.error.addFile')); + } else { + this.notificationsService.error(this.translate.get('admin.metadata-import.page.error.addFileUrl')); + } } else { const parameterValues: ProcessParameter[] = [ Object.assign(new ProcessParameter(), { name: '--add' }) @@ -93,7 +97,7 @@ export class BatchImportPageComponent { parameterValues.push(Object.assign(new ProcessParameter(), { name: '--zip', value: this.fileObject.name })); } else { this.fileObject = null; - parameterValues.push(Object.assign(new ProcessParameter(), { name: '--u', value: this.fileURL })); + parameterValues.push(Object.assign(new ProcessParameter(), { name: '--url', value: this.fileURL })); } if (this.dso) { parameterValues.push(Object.assign(new ProcessParameter(), { name: '--collection', value: this.dso.uuid })); diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 5eb069c804..6d7ce0b884 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -568,6 +568,8 @@ "admin.batch-import.page.help": "Select the Collection to import into. Then, drop or browse to a Simple Archive Format (SAF) zip file that includes the Items to import", + "admin.batch-import.page.toggle.help": "It is possible to perform import either with file upload or via URL, use above toggle to set the input source", + "admin.metadata-import.page.dropMsg": "Drop a metadata CSV to import", "admin.batch-import.page.dropMsg": "Drop a batch ZIP to import", @@ -584,6 +586,8 @@ "admin.metadata-import.page.error.addFile": "Select file first!", + "admin.metadata-import.page.error.addFileUrl": "Insert file url first!", + "admin.batch-import.page.error.addFile": "Select Zip file first!", "admin.metadata-import.page.toggle.upload": "Upload", From 1e7ede015b59350d24058b57f425b912c7645ecf Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Mon, 6 Mar 2023 11:19:49 -0500 Subject: [PATCH 007/425] Don't allow the date picker to exceed the maximum start or end date for an access option. --- .../section-upload-file-edit.component.ts | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.ts b/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.ts index 195d291530..5ad9b21172 100644 --- a/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.ts +++ b/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.ts @@ -1,4 +1,4 @@ -import { ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core'; +import { ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild } from '@angular/core'; import { FormControl } from '@angular/forms'; import { @@ -66,7 +66,8 @@ import { DynamicDateControlValue } from '@ng-dynamic-forms/core/lib/model/dynami styleUrls: ['./section-upload-file-edit.component.scss'], templateUrl: './section-upload-file-edit.component.html', }) -export class SubmissionSectionUploadFileEditComponent implements OnInit { +export class SubmissionSectionUploadFileEditComponent + implements OnInit, OnDestroy { /** * The FormComponent reference @@ -435,13 +436,31 @@ export class SubmissionSectionUploadFileEditComponent implements OnInit { delete currentAccessCondition.startDate; } else if (accessCondition.startDate) { const startDate = this.retrieveValueFromField(accessCondition.startDate); - currentAccessCondition.startDate = dateToISOFormat(startDate); + // Clamp the start date to the maximum, if any, since the + // datepicker sometimes exceeds it. + let startDateDate = new Date(startDate); + if (accessConditionOpt.maxStartDate) { + const maxStartDateDate = new Date(accessConditionOpt.maxStartDate); + if (startDateDate > maxStartDateDate) { + startDateDate = maxStartDateDate; + } + } + currentAccessCondition.startDate = dateToISOFormat(startDateDate); } if (!accessConditionOpt.hasEndDate) { delete currentAccessCondition.endDate; } else if (accessCondition.endDate) { const endDate = this.retrieveValueFromField(accessCondition.endDate); - currentAccessCondition.endDate = dateToISOFormat(endDate); + // Clamp the end date to the maximum, if any, since the + // datepicker sometimes exceeds it. + let endDateDate = new Date(endDate); + if (accessConditionOpt.maxEndDate) { + const maxEndDateDate = new Date(accessConditionOpt.maxEndDate); + if (endDateDate > maxEndDateDate) { + endDateDate = maxEndDateDate; + } + } + currentAccessCondition.endDate = dateToISOFormat(endDateDate); } accessConditionsToSave.push(currentAccessCondition); } From b31fdf0be6c138f4d114eaa66abfb095cd8863e0 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Thu, 23 Mar 2023 11:59:50 +0100 Subject: [PATCH 008/425] [CST-7216] Imported UploadModule in AdminModule to fix build error --- src/app/admin/admin.module.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/admin/admin.module.ts b/src/app/admin/admin.module.ts index 768e3120df..3dc0036854 100644 --- a/src/app/admin/admin.module.ts +++ b/src/app/admin/admin.module.ts @@ -11,6 +11,7 @@ import { AdminSidebarSectionComponent } from './admin-sidebar/admin-sidebar-sect import { ExpandableAdminSidebarSectionComponent } from './admin-sidebar/expandable-admin-sidebar-section/expandable-admin-sidebar-section.component'; import { BatchImportPageComponent } from './admin-import-batch-page/batch-import-page.component'; import { UiSwitchModule } from 'ngx-ui-switch'; +import { UploadModule } from '../shared/upload/upload.module'; const ENTRY_COMPONENTS = [ // put only entry components that use custom decorator @@ -27,7 +28,8 @@ const ENTRY_COMPONENTS = [ AdminSearchModule.withEntryComponents(), AdminWorkflowModuleModule.withEntryComponents(), SharedModule, - UiSwitchModule + UiSwitchModule, + UploadModule, ], declarations: [ AdminCurationTasksComponent, From af9b4a292e4c289c50fcd96eeabcc49cf3e3045e Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Thu, 30 Mar 2023 12:28:48 +0200 Subject: [PATCH 009/425] Fix error message when updating ORCID settings --- .../orcid-sync-settings/orcid-sync-settings.component.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts b/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts index 494075c0f0..1ed8e95616 100644 --- a/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts +++ b/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts @@ -156,7 +156,8 @@ export class OrcidSyncSettingsComponent implements OnInit { } }), ).subscribe((remoteData: RemoteData) => { - if (remoteData.isSuccess) { + // hasSucceeded is true if the response is success or successStale + if (remoteData.hasSucceeded) { this.notificationsService.success(this.translateService.get(this.messagePrefix + '.synchronization-settings-update.success')); this.settingsUpdated.emit(); } else { From b00a0f5be9b28a4e44d35514503b4cf7acc22ec9 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Wed, 29 Mar 2023 17:56:48 +0200 Subject: [PATCH 010/425] 100553: Added extra regex validation to prevent users from adding namespaces, elements and qualifiers with spaces Minor fixes: - Metadata Registry's name field was not being emptied after successful submission - The first input from both forms both had the red error border after clearing the fields --- .../metadata-schema-form.component.spec.ts | 4 +++- .../metadata-schema-form.component.ts | 11 ++++++++--- .../metadata-field-form.component.spec.ts | 4 +++- .../metadata-field-form.component.ts | 15 +++++++++++++-- src/assets/i18n/en.json5 | 6 ++++++ 5 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.spec.ts b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.spec.ts index 8d416c2df8..98e98a6646 100644 --- a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.spec.ts +++ b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.spec.ts @@ -29,7 +29,9 @@ describe('MetadataSchemaFormComponent', () => { createFormGroup: () => { return { patchValue: () => { - } + }, + markAsUntouched(opts?: any) { + }, }; } }; diff --git a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts index 5c6885ae72..adb649696c 100644 --- a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts +++ b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts @@ -77,10 +77,10 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { } ngOnInit() { - combineLatest( + combineLatest([ this.translateService.get(`${this.messagePrefix}.name`), this.translateService.get(`${this.messagePrefix}.namespace`) - ).subscribe(([name, namespace]) => { + ]).subscribe(([name, namespace]) => { this.name = new DynamicInputModel({ id: 'name', label: name, @@ -97,8 +97,12 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { name: 'namespace', validators: { required: null, + pattern: '^[^.]*$', }, required: true, + errorMessages: { + pattern: 'error.validation.metadata.namespace.invalid-pattern', + }, }); this.formModel = [ new DynamicFormGroupModel( @@ -163,9 +167,10 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { * Reset all input-fields to be empty */ clearFields() { + this.formGroup.markAsUntouched(); this.formGroup.patchValue({ metadatadataschemagroup:{ - prefix: '', + name: '', namespace: '' } }); diff --git a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.spec.ts b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.spec.ts index e13180d633..fcd8dd395d 100644 --- a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.spec.ts +++ b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.spec.ts @@ -39,7 +39,9 @@ describe('MetadataFieldFormComponent', () => { createFormGroup: () => { return { patchValue: () => { - } + }, + markAsUntouched(opts?: any) { + }, }; } }; diff --git a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts index 1c000c3c76..14013f3cb7 100644 --- a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts +++ b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts @@ -98,25 +98,35 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy { * Initialize the component, setting up the necessary Models for the dynamic form */ ngOnInit() { - combineLatest( + combineLatest([ this.translateService.get(`${this.messagePrefix}.element`), this.translateService.get(`${this.messagePrefix}.qualifier`), this.translateService.get(`${this.messagePrefix}.scopenote`) - ).subscribe(([element, qualifier, scopenote]) => { + ]).subscribe(([element, qualifier, scopenote]) => { this.element = new DynamicInputModel({ id: 'element', label: element, name: 'element', validators: { required: null, + pattern: '^[^.]*$', }, required: true, + errorMessages: { + pattern: 'error.validation.metadata.element.invalid-pattern', + }, }); this.qualifier = new DynamicInputModel({ id: 'qualifier', label: qualifier, name: 'qualifier', + validators: { + pattern: '^[^.]*$', + }, required: false, + errorMessages: { + pattern: 'error.validation.metadata.qualifier.invalid-pattern', + }, }); this.scopeNote = new DynamicInputModel({ id: 'scopeNote', @@ -189,6 +199,7 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy { * Reset all input-fields to be empty */ clearFields() { + this.formGroup.markAsUntouched(); this.formGroup.patchValue({ metadatadatafieldgroup: { element: '', diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 597f226cc7..c0edb83a3b 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -1478,6 +1478,12 @@ "error.validation.groupExists": "This group already exists", + "error.validation.metadata.namespace.invalid-pattern": "This field cannot contain dots, please use the Element & Qualifier fields instead", + + "error.validation.metadata.element.invalid-pattern": "This field cannot contain dots, please use the Qualifier field instead", + + "error.validation.metadata.qualifier.invalid-pattern": "This field cannot contain dots", + "feed.description": "Syndication feed", From 792a614631dcc6e915ea0301355f06b387a3db4f Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Thu, 30 Mar 2023 17:09:50 +0200 Subject: [PATCH 011/425] 100553: Set the maximum amount of metadata fields shown on EditInPlaceFieldComponent back to 10 --- .../edit-in-place-field/edit-in-place-field.component.html | 2 +- .../edit-in-place-field.component.spec.ts | 2 +- .../edit-in-place-field/edit-in-place-field.component.ts | 6 ++++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.html b/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.html index 46299c1b08..64e863b8bf 100644 --- a/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.html +++ b/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.html @@ -12,7 +12,7 @@ (clickSuggestion)="update(suggestionControl)" (typeSuggestion)="update(suggestionControl)" (dsClickOutside)="checkValidity(suggestionControl)" - (findSuggestions)="findMetadataFieldSuggestions($event)" + (findSuggestions)="findMetadataFieldSuggestions($event, { elementsPerPage: 10 })" #suggestionControl="ngModel" [valid]="(valid | async) !== false" dsAutoFocus autoFocusSelector=".suggestion_input" diff --git a/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.spec.ts b/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.spec.ts index 121ab4580e..2a2ca7ffaa 100644 --- a/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.spec.ts +++ b/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.spec.ts @@ -228,7 +228,7 @@ describe('EditInPlaceFieldComponent', () => { })); it('it should call queryMetadataFields on the metadataFieldService with the correct query', () => { - expect(metadataFieldService.queryMetadataFields).toHaveBeenCalledWith(query, null, true, false, followLink('schema')); + expect(metadataFieldService.queryMetadataFields).toHaveBeenCalledWith(query, {}, true, false, followLink('schema')); }); it('it should set metadataFieldSuggestions to the right value', () => { diff --git a/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.ts b/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.ts index f1ebecb84f..6ed057bc6a 100644 --- a/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.ts +++ b/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.ts @@ -15,6 +15,7 @@ import { InputSuggestion } from '../../../../shared/input-suggestions/input-sugg import { followLink } from '../../../../shared/utils/follow-link-config.model'; import { FieldUpdate } from '../../../../core/data/object-updates/field-update.model'; import { FieldChangeType } from '../../../../core/data/object-updates/field-change-type.model'; +import { FindListOptions } from '../../../../core/data/find-list-options.model'; @Component({ // eslint-disable-next-line @angular-eslint/component-selector @@ -124,10 +125,11 @@ export class EditInPlaceFieldComponent implements OnInit, OnChanges { * Then sets all found metadata fields as metadataFieldSuggestions * Ignores fields from metadata schemas "relation" and "relationship" * @param query The query to look for + * @param options The options that need to be given to the backend */ - findMetadataFieldSuggestions(query: string) { + findMetadataFieldSuggestions(query: string, options: FindListOptions = {}) { if (isNotEmpty(query)) { - return this.registryService.queryMetadataFields(query, null, true, false, followLink('schema')).pipe( + return this.registryService.queryMetadataFields(query, options, true, false, followLink('schema')).pipe( getFirstSucceededRemoteData(), metadataFieldsToString(), ).subscribe((fieldNames: string[]) => { From 24e6cdd3ecbc30b9941f28564f9613be56a37928 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Mon, 3 Apr 2023 14:13:06 +0200 Subject: [PATCH 012/425] 100553: Removed possibility to updated schema name, element and qualifier --- .../metadata-schema-form.component.spec.ts | 27 ++++----- .../metadata-schema-form.component.ts | 49 ++++++++-------- .../metadata-field-form.component.spec.ts | 22 ++++--- .../metadata-field-form.component.ts | 58 +++++++++---------- 4 files changed, 75 insertions(+), 81 deletions(-) diff --git a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.spec.ts b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.spec.ts index 98e98a6646..b758767ddb 100644 --- a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.spec.ts +++ b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.spec.ts @@ -1,5 +1,4 @@ import { ComponentFixture, inject, TestBed, waitForAsync } from '@angular/core/testing'; - import { MetadataSchemaFormComponent } from './metadata-schema-form.component'; import { NO_ERRORS_SCHEMA } from '@angular/core'; import { CommonModule } from '@angular/common'; @@ -30,7 +29,7 @@ describe('MetadataSchemaFormComponent', () => { return { patchValue: () => { }, - markAsUntouched(opts?: any) { + reset(_value?: any, _options?: { onlySelf?: boolean; emitEvent?: boolean; }): void { }, }; } @@ -38,7 +37,7 @@ describe('MetadataSchemaFormComponent', () => { /* eslint-enable no-empty, @typescript-eslint/no-empty-function */ beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ + return TestBed.configureTestingModule({ imports: [CommonModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot(), NgbModule], declarations: [MetadataSchemaFormComponent, EnumKeysPipe], providers: [ @@ -66,7 +65,7 @@ describe('MetadataSchemaFormComponent', () => { const expected = Object.assign(new MetadataSchema(), { namespace: namespace, prefix: prefix - }); + } as MetadataSchema); beforeEach(() => { spyOn(component.submitForm, 'emit'); @@ -81,11 +80,10 @@ describe('MetadataSchemaFormComponent', () => { fixture.detectChanges(); }); - it('should emit a new schema using the correct values', waitForAsync(() => { - fixture.whenStable().then(() => { - expect(component.submitForm.emit).toHaveBeenCalledWith(expected); - }); - })); + it('should emit a new schema using the correct values', async () => { + await fixture.whenStable(); + expect(component.submitForm.emit).toHaveBeenCalledWith(expected); + }); }); describe('with an active schema', () => { @@ -93,7 +91,7 @@ describe('MetadataSchemaFormComponent', () => { id: 1, namespace: namespace, prefix: prefix - }); + } as MetadataSchema); beforeEach(() => { spyOn(registryService, 'getActiveMetadataSchema').and.returnValue(observableOf(expectedWithId)); @@ -101,11 +99,10 @@ describe('MetadataSchemaFormComponent', () => { fixture.detectChanges(); }); - it('should edit the existing schema using the correct values', waitForAsync(() => { - fixture.whenStable().then(() => { - expect(component.submitForm.emit).toHaveBeenCalledWith(expectedWithId); - }); - })); + it('should edit the existing schema using the correct values', async () => { + await fixture.whenStable(); + expect(component.submitForm.emit).toHaveBeenCalledWith(expectedWithId); + }); }); }); }); diff --git a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts index adb649696c..b7c16bc83f 100644 --- a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts +++ b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts @@ -87,9 +87,12 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { name: 'name', validators: { required: null, - pattern: '^[^ ,_]{1,32}$' + pattern: '^[^. ,_]{1,32}$', }, required: true, + errorMessages: { + pattern: 'error.validation.metadata.namespace.invalid-pattern', + }, }); this.namespace = new DynamicInputModel({ id: 'namespace', @@ -97,12 +100,8 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { name: 'namespace', validators: { required: null, - pattern: '^[^.]*$', }, required: true, - errorMessages: { - pattern: 'error.validation.metadata.namespace.invalid-pattern', - }, }); this.formModel = [ new DynamicFormGroupModel( @@ -112,13 +111,18 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { }) ]; this.formGroup = this.formBuilderService.createFormGroup(this.formModel); - this.registryService.getActiveMetadataSchema().subscribe((schema) => { - this.formGroup.patchValue({ - metadatadataschemagroup:{ - name: schema != null ? schema.prefix : '', - namespace: schema != null ? schema.namespace : '' - } - }); + this.registryService.getActiveMetadataSchema().subscribe((schema: MetadataSchema) => { + if (schema == null) { + this.clearFields(); + } else { + this.formGroup.patchValue({ + metadatadataschemagroup: { + name: schema.prefix, + namespace: schema.namespace, + }, + }); + this.name.disabled = true; + } }); }); } @@ -136,10 +140,10 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { * When the schema has no id attached -> Create new schema * Emit the updated/created schema using the EventEmitter submitForm */ - onSubmit() { + onSubmit(): void { this.registryService.clearMetadataSchemaRequests().subscribe(); this.registryService.getActiveMetadataSchema().pipe(take(1)).subscribe( - (schema) => { + (schema: MetadataSchema) => { const values = { prefix: this.name.value, namespace: this.namespace.value @@ -151,9 +155,9 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { } else { this.registryService.createOrUpdateMetadataSchema(Object.assign(new MetadataSchema(), schema, { id: schema.id, - prefix: (values.prefix ? values.prefix : schema.prefix), - namespace: (values.namespace ? values.namespace : schema.namespace) - })).subscribe((updatedSchema) => { + prefix: schema.prefix, + namespace: values.namespace, + })).subscribe((updatedSchema: MetadataSchema) => { this.submitForm.emit(updatedSchema); }); } @@ -166,14 +170,9 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { /** * Reset all input-fields to be empty */ - clearFields() { - this.formGroup.markAsUntouched(); - this.formGroup.patchValue({ - metadatadataschemagroup:{ - name: '', - namespace: '' - } - }); + clearFields(): void { + this.formGroup.reset('metadatadataschemagroup'); + this.name.disabled = false; } /** diff --git a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.spec.ts b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.spec.ts index fcd8dd395d..ad7b54945d 100644 --- a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.spec.ts +++ b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.spec.ts @@ -40,7 +40,7 @@ describe('MetadataFieldFormComponent', () => { return { patchValue: () => { }, - markAsUntouched(opts?: any) { + reset(_value?: any, _options?: { onlySelf?: boolean; emitEvent?: boolean; }): void { }, }; } @@ -48,7 +48,7 @@ describe('MetadataFieldFormComponent', () => { /* eslint-enable no-empty, @typescript-eslint/no-empty-function */ beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ + return TestBed.configureTestingModule({ imports: [CommonModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot(), NgbModule], declarations: [MetadataFieldFormComponent, EnumKeysPipe], providers: [ @@ -100,11 +100,10 @@ describe('MetadataFieldFormComponent', () => { fixture.detectChanges(); }); - it('should emit a new field using the correct values', waitForAsync(() => { - fixture.whenStable().then(() => { - expect(component.submitForm.emit).toHaveBeenCalledWith(expected); - }); - })); + it('should emit a new field using the correct values', async () => { + await fixture.whenStable(); + expect(component.submitForm.emit).toHaveBeenCalledWith(expected); + }); }); describe('with an active field', () => { @@ -122,11 +121,10 @@ describe('MetadataFieldFormComponent', () => { fixture.detectChanges(); }); - it('should edit the existing field using the correct values', waitForAsync(() => { - fixture.whenStable().then(() => { - expect(component.submitForm.emit).toHaveBeenCalledWith(expectedWithId); - }); - })); + it('should edit the existing field using the correct values', async () => { + await fixture.whenStable(); + expect(component.submitForm.emit).toHaveBeenCalledWith(expectedWithId); + }); }); }); }); diff --git a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts index 14013f3cb7..55950a8773 100644 --- a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts +++ b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts @@ -142,14 +142,20 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy { }) ]; this.formGroup = this.formBuilderService.createFormGroup(this.formModel); - this.registryService.getActiveMetadataField().subscribe((field) => { - this.formGroup.patchValue({ - metadatadatafieldgroup: { - element: field != null ? field.element : '', - qualifier: field != null ? field.qualifier : '', - scopeNote: field != null ? field.scopeNote : '' - } - }); + this.registryService.getActiveMetadataField().subscribe((field: MetadataField): void => { + if (field == null) { + this.clearFields(); + } else { + this.formGroup.patchValue({ + metadatadatafieldgroup: { + element: field.element, + qualifier: field.qualifier, + scopeNote: field.scopeNote, + }, + }); + this.element.disabled = true; + this.qualifier.disabled = true; + } }); }); } @@ -167,25 +173,24 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy { * When the field has no id attached -> Create new field * Emit the updated/created field using the EventEmitter submitForm */ - onSubmit() { + onSubmit(): void { this.registryService.getActiveMetadataField().pipe(take(1)).subscribe( - (field) => { - const values = { - element: this.element.value, - qualifier: this.qualifier.value, - scopeNote: this.scopeNote.value - }; + (field: MetadataField) => { if (field == null) { - this.registryService.createMetadataField(Object.assign(new MetadataField(), values), this.metadataSchema).subscribe((newField) => { + this.registryService.createMetadataField(Object.assign(new MetadataField(), { + element: this.element.value, + qualifier: this.qualifier.value, + scopeNote: this.scopeNote.value, + }), this.metadataSchema).subscribe((newField: MetadataField) => { this.submitForm.emit(newField); }); } else { this.registryService.updateMetadataField(Object.assign(new MetadataField(), field, { id: field.id, - element: (values.element ? values.element : field.element), - qualifier: (values.qualifier ? values.qualifier : field.qualifier), - scopeNote: (values.scopeNote ? values.scopeNote : field.scopeNote) - })).subscribe((updatedField) => { + element: field.element, + qualifier: field.qualifier, + scopeNote: this.scopeNote.value, + })).subscribe((updatedField: MetadataField) => { this.submitForm.emit(updatedField); }); } @@ -198,15 +203,10 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy { /** * Reset all input-fields to be empty */ - clearFields() { - this.formGroup.markAsUntouched(); - this.formGroup.patchValue({ - metadatadatafieldgroup: { - element: '', - qualifier: '', - scopeNote: '' - } - }); + clearFields(): void { + this.formGroup.reset('metadatadatafieldgroup'); + this.element.disabled = false; + this.qualifier.disabled = false; } /** From f4efe00671aed5cbff39571d45cf5ce49d60c631 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Fri, 14 Apr 2023 17:02:06 +0200 Subject: [PATCH 013/425] 101127: Create BrowseByTaxonomyPageComponent --- src/app/browse-by/browse-by-routing.module.ts | 8 ++++++ .../browse-by-taxonomy-page.component.html | 1 + .../browse-by-taxonomy-page.component.scss | 0 .../browse-by-taxonomy-page.component.spec.ts | 25 +++++++++++++++++++ .../browse-by-taxonomy-page.component.ts | 13 ++++++++++ src/app/browse-by/browse-by.module.ts | 6 ++++- 6 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html create mode 100644 src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.scss create mode 100644 src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts create mode 100644 src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts diff --git a/src/app/browse-by/browse-by-routing.module.ts b/src/app/browse-by/browse-by-routing.module.ts index 5788d3cc70..0bf61957ef 100644 --- a/src/app/browse-by/browse-by-routing.module.ts +++ b/src/app/browse-by/browse-by-routing.module.ts @@ -4,6 +4,7 @@ import { BrowseByGuard } from './browse-by-guard'; import { BrowseByDSOBreadcrumbResolver } from './browse-by-dso-breadcrumb.resolver'; import { BrowseByI18nBreadcrumbResolver } from './browse-by-i18n-breadcrumb.resolver'; import { ThemedBrowseBySwitcherComponent } from './browse-by-switcher/themed-browse-by-switcher.component'; +import { BrowseByTaxonomyPageComponent } from './browse-by-taxonomy-page/browse-by-taxonomy-page.component'; @NgModule({ imports: [ @@ -12,6 +13,13 @@ import { ThemedBrowseBySwitcherComponent } from './browse-by-switcher/themed-bro path: '', resolve: { breadcrumb: BrowseByDSOBreadcrumbResolver }, children: [ + { + path: 'srsc', + component: BrowseByTaxonomyPageComponent, + canActivate: [BrowseByGuard], + resolve: { breadcrumb: BrowseByI18nBreadcrumbResolver }, + data: { title: 'browse.title.page', breadcrumbKey: 'browse.metadata' } + }, { path: ':id', component: ThemedBrowseBySwitcherComponent, diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html new file mode 100644 index 0000000000..04f39bf727 --- /dev/null +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html @@ -0,0 +1 @@ +

browse-by-taxonomy-page works!

diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.scss b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts new file mode 100644 index 0000000000..b1ce257ef6 --- /dev/null +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BrowseByTaxonomyPageComponent } from './browse-by-taxonomy-page.component'; + +describe('BrowseByTaxonomyPageComponent', () => { + let component: BrowseByTaxonomyPageComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ BrowseByTaxonomyPageComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BrowseByTaxonomyPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts new file mode 100644 index 0000000000..97402843f5 --- /dev/null +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'ds-browse-by-taxonomy-page', + templateUrl: './browse-by-taxonomy-page.component.html', + styleUrls: ['./browse-by-taxonomy-page.component.scss'] +}) +/** + * Component for browsing items by metadata in a hierarchical controlled vocabulary + */ +export class BrowseByTaxonomyPageComponent { + +} diff --git a/src/app/browse-by/browse-by.module.ts b/src/app/browse-by/browse-by.module.ts index 14e21f8b4c..8cd52c887d 100644 --- a/src/app/browse-by/browse-by.module.ts +++ b/src/app/browse-by/browse-by.module.ts @@ -5,11 +5,13 @@ import { SharedModule } from '../shared/shared.module'; import { BrowseByMetadataPageComponent } from './browse-by-metadata-page/browse-by-metadata-page.component'; import { BrowseByDatePageComponent } from './browse-by-date-page/browse-by-date-page.component'; import { BrowseBySwitcherComponent } from './browse-by-switcher/browse-by-switcher.component'; +import { BrowseByTaxonomyPageComponent } from './browse-by-taxonomy-page/browse-by-taxonomy-page.component'; import { ThemedBrowseBySwitcherComponent } from './browse-by-switcher/themed-browse-by-switcher.component'; import { ComcolModule } from '../shared/comcol/comcol.module'; import { ThemedBrowseByMetadataPageComponent } from './browse-by-metadata-page/themed-browse-by-metadata-page.component'; import { ThemedBrowseByDatePageComponent } from './browse-by-date-page/themed-browse-by-date-page.component'; import { ThemedBrowseByTitlePageComponent } from './browse-by-title-page/themed-browse-by-title-page.component'; +import { FormModule } from '../shared/form/form.module'; const ENTRY_COMPONENTS = [ // put only entry components that use custom decorator @@ -27,11 +29,13 @@ const ENTRY_COMPONENTS = [ imports: [ CommonModule, ComcolModule, - SharedModule + SharedModule, + FormModule, ], declarations: [ BrowseBySwitcherComponent, ThemedBrowseBySwitcherComponent, + BrowseByTaxonomyPageComponent, ...ENTRY_COMPONENTS ], exports: [ From 3da2b3c0ef9f8f47a2cb3ad79f5dd3d76a5030c4 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Mon, 17 Apr 2023 10:13:14 +0200 Subject: [PATCH 014/425] 101127: Put modal from VocabularyTreeview in VocabularyTreeviewModal --- .../models/onebox/dynamic-onebox.component.ts | 4 +- src/app/shared/form/form.module.ts | 4 +- .../vocabulary-treeview-modal.component.html | 15 ++ .../vocabulary-treeview-modal.component.scss | 0 ...ocabulary-treeview-modal.component.spec.ts | 25 ++++ .../vocabulary-treeview-modal.component.ts | 38 +++++ .../vocabulary-treeview.component.html | 136 ++++++++---------- .../vocabulary-treeview.component.ts | 9 +- .../search-hierarchy-filter.component.ts | 8 +- 9 files changed, 156 insertions(+), 83 deletions(-) create mode 100644 src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.html create mode 100644 src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.scss create mode 100644 src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.spec.ts create mode 100644 src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.ts diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts index 008328bf73..63eca80dfe 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts @@ -30,8 +30,8 @@ import { VocabularyEntry } from '../../../../../../core/submission/vocabularies/ import { PageInfo } from '../../../../../../core/shared/page-info.model'; import { DsDynamicVocabularyComponent } from '../dynamic-vocabulary.component'; import { Vocabulary } from '../../../../../../core/submission/vocabularies/models/vocabulary.model'; -import { VocabularyTreeviewComponent } from '../../../../vocabulary-treeview/vocabulary-treeview.component'; import { VocabularyEntryDetail } from '../../../../../../core/submission/vocabularies/models/vocabulary-entry-detail.model'; +import { VocabularyTreeviewModalComponent } from '../../../../vocabulary-treeview-modal/vocabulary-treeview-modal.component'; /** * Component representing a onebox input field. @@ -222,7 +222,7 @@ export class DsDynamicOneboxComponent extends DsDynamicVocabularyComponent imple map((vocabulary: Vocabulary) => vocabulary.preloadLevel), take(1) ).subscribe((preloadLevel) => { - const modalRef: NgbModalRef = this.modalService.open(VocabularyTreeviewComponent, { size: 'lg', windowClass: 'treeview' }); + const modalRef: NgbModalRef = this.modalService.open(VocabularyTreeviewModalComponent, { size: 'lg', windowClass: 'treeview' }); modalRef.componentInstance.vocabularyOptions = this.model.vocabularyOptions; modalRef.componentInstance.preloadLevel = preloadLevel; modalRef.componentInstance.selectedItem = this.currentValue ? this.currentValue : ''; diff --git a/src/app/shared/form/form.module.ts b/src/app/shared/form/form.module.ts index 61fc7e3c39..6e3fc33832 100644 --- a/src/app/shared/form/form.module.ts +++ b/src/app/shared/form/form.module.ts @@ -33,6 +33,7 @@ import { AuthorityConfidenceStateDirective } from './directives/authority-confid import { SortablejsModule } from 'ngx-sortablejs'; import { VocabularyTreeviewComponent } from './vocabulary-treeview/vocabulary-treeview.component'; import { VocabularyTreeviewService } from './vocabulary-treeview/vocabulary-treeview.service'; +import { VocabularyTreeviewModalComponent } from './vocabulary-treeview-modal/vocabulary-treeview-modal.component'; import { FormBuilderService } from './builder/form-builder.service'; import { DsDynamicTypeBindRelationService } from './builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service'; import { FormService } from './form.service'; @@ -67,7 +68,8 @@ const COMPONENTS = [ ChipsComponent, NumberPickerComponent, VocabularyTreeviewComponent, - ThemedExternalSourceEntryImportModalComponent + VocabularyTreeviewModalComponent, + ThemedExternalSourceEntryImportModalComponent, ]; const DIRECTIVES = [ diff --git a/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.html b/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.html new file mode 100644 index 0000000000..55f5ab5092 --- /dev/null +++ b/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.html @@ -0,0 +1,15 @@ + + diff --git a/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.scss b/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.spec.ts b/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.spec.ts new file mode 100644 index 0000000000..989375fd13 --- /dev/null +++ b/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { VocabularyTreeviewModalComponent } from './vocabulary-treeview-modal.component'; + +describe('VocabularyTreeviewModalComponent', () => { + let component: VocabularyTreeviewModalComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ VocabularyTreeviewModalComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(VocabularyTreeviewModalComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.ts b/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.ts new file mode 100644 index 0000000000..48ff82f499 --- /dev/null +++ b/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.ts @@ -0,0 +1,38 @@ +import { Component, Input } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { VocabularyOptions } from '../../../core/submission/vocabularies/models/vocabulary-options.model'; + +@Component({ + selector: 'ds-vocabulary-treeview-modal', + templateUrl: './vocabulary-treeview-modal.component.html', + styleUrls: ['./vocabulary-treeview-modal.component.scss'] +}) +/** + * Component that contains a modal to display a VocabularyTreeviewComponent + */ +export class VocabularyTreeviewModalComponent { + + /** + * The {@link VocabularyOptions} object + */ + @Input() vocabularyOptions: VocabularyOptions; + + /** + * Representing how many tree level load at initialization + */ + @Input() preloadLevel = 2; + + /** + * The vocabulary entry already selected, if any + */ + @Input() selectedItem: any = null; + + /** + * Initialize instance variables + * + * @param {NgbActiveModal} activeModal + */ + constructor( + public activeModal: NgbActiveModal, + ) { } +} diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html index 39c62d6e53..18a61b73d7 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html @@ -1,77 +1,67 @@ - - diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts index 459442aabc..c534c5e205 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts @@ -25,16 +25,27 @@ export class BrowseByTaxonomyPageComponent implements OnInit { /** * The query parameters, contain the selected entries */ - queryParams: { 'f.subject': string[] }; + filterValues: string[]; ngOnInit() { this.vocabularyOptions = { name: 'srsc', closed: true }; } + /** + * Adds detail to selectedItems, transforms it to be used as query parameter + * and adds that to filterValues. If they already contained the detail, + * it gets deleted from both arrays. + * + * @param detail VocabularyEntryDetail to be added/deleted + */ onSelect(detail: VocabularyEntryDetail): void { - this.selectedItems.push(detail); - const filterValues = this.selectedItems - .map((item: VocabularyEntryDetail) => `${item.value},equals`); - this.queryParams = { 'f.subject': filterValues }; + if (!this.selectedItems.includes(detail)) { + this.selectedItems.push(detail); + this.filterValues = this.selectedItems + .map((item: VocabularyEntryDetail) => `${item.value},equals`); + } else { + this.selectedItems = this.selectedItems.filter((entry: VocabularyEntryDetail) => { return entry !== detail; }); + this.filterValues = this.filterValues.filter((value: string) => { return value !== `${detail.value},equals`; }); + } } } diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html index 2de1d375cb..0c90ae473b 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html @@ -33,8 +33,8 @@ container="body" (click)="onSelect(node.item)"> - - + + {{node.item.display}} @@ -57,8 +57,8 @@ container="body" (click)="onSelect(node.item)"> - - + + {{node.item.display}} diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts index 29e80cfc94..e5f5145e0a 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts @@ -264,14 +264,14 @@ describe('VocabularyTreeviewComponent test suite', () => { it('should not display checkboxes by default', async () => { fixture.detectChanges(); - expect(de.query(By.css('input[checkbox]'))).toBeNull(); + expect(de.query(By.css('.form-check-input'))).toBeNull(); expect(de.queryAll(By.css('cdk-tree-node')).length).toEqual(3); }); it('should display checkboxes if multiSelect is true', async () => { comp.multiSelect = true; fixture.detectChanges(); - expect(de.queryAll(By.css('#leaf-node-checkbox')).length).toEqual(3); + expect(de.queryAll(By.css('.form-check-input')).length).toEqual(3); expect(de.queryAll(By.css('cdk-tree-node')).length).toEqual(3); }); }); diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts index 572074d644..01225c638a 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts @@ -245,8 +245,12 @@ export class VocabularyTreeviewComponent implements OnDestroy, OnInit { * Method called on entry select */ onSelect(item: VocabularyEntryDetail) { - this.selectedItems.push(item.id); - this.select.emit(item); + if (!this.selectedItems.includes(item.id)) { + this.selectedItems.push(item.id); + this.select.emit(item); + } else { + this.selectedItems = this.selectedItems.filter((detail: string) => { return detail !== item.id; }); + } } /** From 14b053b70418537a412795545ba6ad933feae779 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Wed, 26 Apr 2023 17:46:10 +0200 Subject: [PATCH 029/425] 101353: Add deselect Output in VocabularyTreeview --- .../browse-by-taxonomy-page.component.html | 3 ++- .../browse-by-taxonomy-page.component.ts | 15 +++++++-------- .../vocabulary-treeview.component.ts | 7 +++++++ 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html index f84e3d72b1..149e1e6b33 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html @@ -2,7 +2,8 @@
+ (select)="onSelect($event)" + (deselect)="onDeselect($event)">
{{ 'browse.taxonomy.button' | translate }} diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts index c534c5e205..b132f299d6 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts @@ -33,19 +33,18 @@ export class BrowseByTaxonomyPageComponent implements OnInit { /** * Adds detail to selectedItems, transforms it to be used as query parameter - * and adds that to filterValues. If they already contained the detail, - * it gets deleted from both arrays. + * and adds that to filterValues. * - * @param detail VocabularyEntryDetail to be added/deleted + * @param detail VocabularyEntryDetail to be added */ onSelect(detail: VocabularyEntryDetail): void { - if (!this.selectedItems.includes(detail)) { this.selectedItems.push(detail); this.filterValues = this.selectedItems .map((item: VocabularyEntryDetail) => `${item.value},equals`); - } else { - this.selectedItems = this.selectedItems.filter((entry: VocabularyEntryDetail) => { return entry !== detail; }); - this.filterValues = this.filterValues.filter((value: string) => { return value !== `${detail.value},equals`; }); - } + } + + onDeselect(detail: VocabularyEntryDetail): void { + this.selectedItems = this.selectedItems.filter((entry: VocabularyEntryDetail) => { return entry !== detail; }); + this.filterValues = this.filterValues.filter((value: string) => { return value !== `${detail.value},equals`; }); } } diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts index 01225c638a..2199de920e 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts @@ -94,6 +94,12 @@ export class VocabularyTreeviewComponent implements OnDestroy, OnInit { */ @Output() select: EventEmitter = new EventEmitter(null); + /** + * An event fired when a vocabulary entry is deselected. + * Event's payload equals to {@link VocabularyEntryDetail} deselected. + */ + @Output() deselect: EventEmitter = new EventEmitter(null); + /** * A boolean representing if user is authenticated */ @@ -250,6 +256,7 @@ export class VocabularyTreeviewComponent implements OnDestroy, OnInit { this.select.emit(item); } else { this.selectedItems = this.selectedItems.filter((detail: string) => { return detail !== item.id; }); + this.deselect.emit(item); } } From bb242d99a6b7715203e2fcc96c1f9512173773a3 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Wed, 26 Apr 2023 18:37:55 +0200 Subject: [PATCH 030/425] 101353: Fix VocabularyTreeview onSelect being called twice --- .../vocabulary-treeview.component.html | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html index 0c90ae473b..82d8077dbc 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html @@ -33,7 +33,9 @@ container="body" (click)="onSelect(node.item)"> - + + {{node.item.display}} @@ -57,7 +59,9 @@ container="body" (click)="onSelect(node.item)"> - + + {{node.item.display}} From ea297d1296c4ee685a57e19efbf3c01fdd69ce06 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Wed, 26 Apr 2023 18:40:38 +0200 Subject: [PATCH 031/425] 101353: Add tests for BrowseByTaxonomyPageComponent --- .../browse-by-taxonomy-page.component.spec.ts | 47 ++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts index b1ce257ef6..bc9380d7ad 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts @@ -1,14 +1,21 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { BrowseByTaxonomyPageComponent } from './browse-by-taxonomy-page.component'; +import { VocabularyEntryDetail } from '../../core/submission/vocabularies/models/vocabulary-entry-detail.model'; +import { TranslateModule } from '@ngx-translate/core'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; describe('BrowseByTaxonomyPageComponent', () => { let component: BrowseByTaxonomyPageComponent; let fixture: ComponentFixture; + let detail1: VocabularyEntryDetail; + let detail2: VocabularyEntryDetail; beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ BrowseByTaxonomyPageComponent ] + imports: [ TranslateModule.forRoot() ], + declarations: [ BrowseByTaxonomyPageComponent ], + schemas: [NO_ERRORS_SCHEMA] }) .compileComponents(); }); @@ -17,9 +24,47 @@ describe('BrowseByTaxonomyPageComponent', () => { fixture = TestBed.createComponent(BrowseByTaxonomyPageComponent); component = fixture.componentInstance; fixture.detectChanges(); + detail1 = new VocabularyEntryDetail(); + detail2 = new VocabularyEntryDetail(); + detail1.value = 'HUMANITIES and RELIGION'; + detail2.value = 'TECHNOLOGY'; }); it('should create', () => { expect(component).toBeTruthy(); }); + + it('should handle select event', () => { + component.onSelect(detail1); + expect(component.selectedItems.length).toBe(1); + expect(component.selectedItems).toContain(detail1); + expect(component.selectedItems.length).toBe(1); + expect(component.filterValues).toEqual(['HUMANITIES and RELIGION,equals'] ); + }); + + it('should handle select event with multiple selected items', () => { + component.onSelect(detail1); + component.onSelect(detail2); + expect(component.selectedItems.length).toBe(2); + expect(component.selectedItems).toContain(detail1, detail2); + expect(component.selectedItems.length).toBe(2); + expect(component.filterValues).toEqual(['HUMANITIES and RELIGION,equals', 'TECHNOLOGY,equals'] ); + }); + + it('should handle deselect event', () => { + component.onSelect(detail1); + component.onSelect(detail2); + expect(component.selectedItems.length).toBe(2); + expect(component.selectedItems.length).toBe(2); + component.onDeselect(detail1); + expect(component.selectedItems.length).toBe(1); + expect(component.selectedItems).toContain(detail2); + expect(component.selectedItems.length).toBe(1); + expect(component.filterValues).toEqual(['TECHNOLOGY,equals'] ); + }); + + afterEach(() => { + fixture.destroy(); + component = null; + }); }); From 09f3dddde4c761ac24d1c2b3d8b6fbaa594e8afd Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Thu, 27 Apr 2023 10:52:51 +0200 Subject: [PATCH 032/425] 101393: Fix breadcrumbs on BrowseByTaxonomyPage --- src/app/browse-by/browse-by-routing.module.ts | 5 +++-- src/assets/i18n/en.json5 | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/app/browse-by/browse-by-routing.module.ts b/src/app/browse-by/browse-by-routing.module.ts index 0bf61957ef..9e078dd4eb 100644 --- a/src/app/browse-by/browse-by-routing.module.ts +++ b/src/app/browse-by/browse-by-routing.module.ts @@ -5,6 +5,7 @@ import { BrowseByDSOBreadcrumbResolver } from './browse-by-dso-breadcrumb.resolv import { BrowseByI18nBreadcrumbResolver } from './browse-by-i18n-breadcrumb.resolver'; import { ThemedBrowseBySwitcherComponent } from './browse-by-switcher/themed-browse-by-switcher.component'; import { BrowseByTaxonomyPageComponent } from './browse-by-taxonomy-page/browse-by-taxonomy-page.component'; +import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver'; @NgModule({ imports: [ @@ -17,8 +18,8 @@ import { BrowseByTaxonomyPageComponent } from './browse-by-taxonomy-page/browse- path: 'srsc', component: BrowseByTaxonomyPageComponent, canActivate: [BrowseByGuard], - resolve: { breadcrumb: BrowseByI18nBreadcrumbResolver }, - data: { title: 'browse.title.page', breadcrumbKey: 'browse.metadata' } + resolve: { breadcrumb: I18nBreadcrumbResolver }, + data: { title: 'browse.title.page', breadcrumbKey: 'browse.metadata.srsc' } }, { path: ':id', diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 5a0f5ce5d0..cf60499344 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -721,6 +721,8 @@ "browse.metadata.subject.breadcrumbs": "Browse by Subject", + "browse.metadata.srsc.breadcrumbs": "Browse by Subject Category", + "browse.metadata.title.breadcrumbs": "Browse by Title", "pagination.next.button": "Next", From da7c980ab1452ad5d7b0503d5389ef4adf748d37 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Thu, 27 Apr 2023 11:04:41 +0200 Subject: [PATCH 033/425] 101393: Add 'Browse by Subject Category' link to 'All of DSpace' --- src/app/menu.resolver.ts | 14 ++++++++++++++ src/assets/i18n/en.json5 | 2 ++ 2 files changed, 16 insertions(+) diff --git a/src/app/menu.resolver.ts b/src/app/menu.resolver.ts index 8630150c58..f771ef8b27 100644 --- a/src/app/menu.resolver.ts +++ b/src/app/menu.resolver.ts @@ -137,6 +137,20 @@ export class MenuResolver implements Resolve { } as TextMenuItemModel, } ); + menuList.push( + { + id: 'browse_global_by_srsc', + parentID: 'browse_global', + active: false, + visible: true, + index: 99, + model: { + type: MenuItemType.LINK, + text: `menu.section.browse_global_by_srsc`, + link: `/browse/srsc` + } as LinkMenuItemModel + } + ); } menuList.forEach((menuSection) => this.menuService.addSection(MenuID.PUBLIC, Object.assign(menuSection, { shouldPersistOnRouteChange: true diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index cf60499344..0958fc5d29 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -2649,6 +2649,8 @@ "menu.section.browse_global_by_subject": "By Subject", + "menu.section.browse_global_by_srsc": "By Subject Category", + "menu.section.browse_global_by_title": "By Title", "menu.section.browse_global_communities_and_collections": "Communities & Collections", From a5c300aebdceb3d64ff37b65ae7a1a86b852bd29 Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Thu, 27 Apr 2023 14:10:43 +0200 Subject: [PATCH 034/425] refactor mulitselect mode to use labels instead of buttons --- .../vocabulary-treeview.component.html | 63 ++++++++++++------- .../vocabulary-treeview.component.scss | 4 ++ 2 files changed, 43 insertions(+), 24 deletions(-) diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html index 82d8077dbc..a2a0b28a5c 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html @@ -25,20 +25,28 @@ - @@ -51,21 +59,28 @@ aria-hidden="true"> - + + {{node.item.display}} + + diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.scss b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.scss index 39050ff85b..3f0cea10d2 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.scss +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.scss @@ -5,3 +5,7 @@ cdk-tree .btn:focus { box-shadow: none !important; } + +label { + cursor: pointer; +} From 2a84c425314aec536b4f37b8b7b0d18193600900 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Thu, 27 Apr 2023 14:19:14 +0200 Subject: [PATCH 035/425] 101393: Fix VocabularyTreeview tests + Remove template comments --- .../vocabulary-treeview/vocabulary-treeview.component.html | 2 -- .../vocabulary-treeview.component.spec.ts | 6 +++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html index a2a0b28a5c..9f14795342 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html @@ -31,7 +31,6 @@ [openDelay]="500" container="body" > - - { })); afterEach(() => { - fixture.destroy(); + fixture?.destroy(); comp = null; compAsAny = null; }); @@ -264,14 +264,14 @@ describe('VocabularyTreeviewComponent test suite', () => { it('should not display checkboxes by default', async () => { fixture.detectChanges(); - expect(de.query(By.css('.form-check-input'))).toBeNull(); + expect(de.query(By.css('input[type=checkbox]'))).toBeNull(); expect(de.queryAll(By.css('cdk-tree-node')).length).toEqual(3); }); it('should display checkboxes if multiSelect is true', async () => { comp.multiSelect = true; fixture.detectChanges(); - expect(de.queryAll(By.css('.form-check-input')).length).toEqual(3); + expect(de.queryAll(By.css('input[type=checkbox]')).length).toEqual(3); expect(de.queryAll(By.css('cdk-tree-node')).length).toEqual(3); }); }); From 90a1f25ba9dce010f49c32b6b45ecd2db8fcfadc Mon Sep 17 00:00:00 2001 From: Alban Imami Date: Thu, 27 Apr 2023 16:51:41 +0200 Subject: [PATCH 036/425] Work for signposting --- server.ts | 9 +++ .../metadata-item.service.spec.ts | 16 +++++ .../metadata-item/metadata-item.service.ts | 70 +++++++++++++++++++ src/app/core/metadata/metadata.service.ts | 11 ++- src/app/init.service.ts | 3 + src/modules/app/browser-init.service.ts | 3 + src/modules/app/server-init.service.ts | 5 +- 7 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 src/app/core/metadata-item/metadata-item.service.spec.ts create mode 100644 src/app/core/metadata-item/metadata-item.service.ts diff --git a/server.ts b/server.ts index 3e10677a8b..5a3660e4de 100644 --- a/server.ts +++ b/server.ts @@ -180,6 +180,15 @@ export function app() { changeOrigin: true })); + /** + * Proxy the linksets + */ + router.use('/linksets**', createProxyMiddleware({ + target: `${environment.rest.baseUrl}/linksets`, + pathRewrite: path => path.replace(environment.ui.nameSpace, '/'), + changeOrigin: true + })); + /** * Checks if the rateLimiter property is present * When it is present, the rateLimiter will be enabled. When it is undefined, the rateLimiter will be disabled. diff --git a/src/app/core/metadata-item/metadata-item.service.spec.ts b/src/app/core/metadata-item/metadata-item.service.spec.ts new file mode 100644 index 0000000000..89ca15658d --- /dev/null +++ b/src/app/core/metadata-item/metadata-item.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { MetadataItemService } from './metadata-item.service'; + +describe('MetadataItemService', () => { + let service: MetadataItemService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(MetadataItemService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/core/metadata-item/metadata-item.service.ts b/src/app/core/metadata-item/metadata-item.service.ts new file mode 100644 index 0000000000..a4fbcf587b --- /dev/null +++ b/src/app/core/metadata-item/metadata-item.service.ts @@ -0,0 +1,70 @@ +import { Inject, Injectable } from '@angular/core'; +import { MetadataService } from '../metadata/metadata.service'; +import { ActivatedRoute, NavigationEnd, Event as NavigationEvent, NavigationStart, Router } from '@angular/router'; +import { TranslateService } from '@ngx-translate/core'; +import { Meta, Title } from '@angular/platform-browser'; +import { DSONameService } from '../breadcrumbs/dso-name.service'; +import { BundleDataService } from '../data/bundle-data.service'; +import { BitstreamDataService } from '../data/bitstream-data.service'; +import { BitstreamFormatDataService } from '../data/bitstream-format-data.service'; +import { RootDataService } from '../data/root-data.service'; +import { CoreState } from '../core-state.model'; +import { Store } from '@ngrx/store'; +import { HardRedirectService } from '../services/hard-redirect.service'; +import { APP_CONFIG, AppConfig } from 'src/config/app-config.interface'; +import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service'; +import { filter, map, switchMap, take, mergeMap } from 'rxjs/operators'; +import { DOCUMENT } from '@angular/common'; + +@Injectable({ + providedIn: 'root' +}) +export class MetadataItemService extends MetadataService { + + constructor( + private router1: ActivatedRoute, + router: Router, + translate: TranslateService, + meta: Meta, + title: Title, + dsoNameService: DSONameService, + bundleDataService: BundleDataService, + bitstreamDataService: BitstreamDataService, + bitstreamFormatDataService: BitstreamFormatDataService, + rootService: RootDataService, + store: Store, + hardRedirectService: HardRedirectService, + @Inject(APP_CONFIG) appConfig: AppConfig, + authorizationService: AuthorizationDataService, + @Inject(DOCUMENT) private document: Document + ) { + super(router, translate, meta, title, dsoNameService, bundleDataService, bitstreamDataService, bitstreamFormatDataService, rootService, store, hardRedirectService, appConfig, authorizationService); + } + + public checkCurrentRoute(){ + + console.log(this.router); + + this.router1.url.subscribe(url => { + console.log(url); + console.log(url[0].path); + }); + + // this.router.events.subscribe((event: NavigationEvent) => { + // if(event instanceof NavigationStart) { + // if(event.url.startsWith('/entities')){ + // console.log('We are on ENTITIES!'); + // } + // } + // }); + } + + setLinkTag(){ + this.clearMetaTags(); + + let link: HTMLLinkElement = this.document.createElement('link'); + link.setAttribute('rel', ''); + link.setAttribute('href', ''); + this.document.head.appendChild(link); + } +} diff --git a/src/app/core/metadata/metadata.service.ts b/src/app/core/metadata/metadata.service.ts index 204c925e6b..c46f8b1d6e 100644 --- a/src/app/core/metadata/metadata.service.ts +++ b/src/app/core/metadata/metadata.service.ts @@ -84,7 +84,7 @@ export class MetadataService { ]; constructor( - private router: Router, + protected router: Router, private translate: TranslateService, private meta: Meta, private title: Title, @@ -363,6 +363,15 @@ export class MetadataService { } } + /** + * Add to the + */ + // private setLinkTag(): void { + // const value = this.getMetaTagValue('dc.link'); + // this.meta.addTag({ name: 'Link', content: value }); + // this.addMetaTag('Link', value); + // } + getBitLinkIfDownloadable(bitstream: Bitstream, bitstreamRd: RemoteData>): Observable { return observableOf(bitstream).pipe( getDownloadableBitstream(this.authorizationService), diff --git a/src/app/init.service.ts b/src/app/init.service.ts index 9fef2ca4ed..d5978d782d 100644 --- a/src/app/init.service.ts +++ b/src/app/init.service.ts @@ -24,6 +24,7 @@ import { isAuthenticationBlocking } from './core/auth/selectors'; import { distinctUntilChanged, find } from 'rxjs/operators'; import { Observable } from 'rxjs'; import { MenuService } from './shared/menu/menu.service'; +import { MetadataItemService } from './core/metadata-item/metadata-item.service'; /** * Performs the initialization of the app. @@ -50,6 +51,7 @@ export abstract class InitService { protected localeService: LocaleService, protected angulartics2DSpace: Angulartics2DSpace, protected metadata: MetadataService, + protected metadataItem: MetadataItemService, protected breadcrumbsService: BreadcrumbsService, protected themeService: ThemeService, protected menuService: MenuService, @@ -188,6 +190,7 @@ export abstract class InitService { this.breadcrumbsService.listenForRouteChanges(); this.themeService.listenForRouteChanges(); this.menuService.listenForRouteChanges(); + this.metadataItem.checkCurrentRoute(); } /** diff --git a/src/modules/app/browser-init.service.ts b/src/modules/app/browser-init.service.ts index 61d57f10f9..f38883be1e 100644 --- a/src/modules/app/browser-init.service.ts +++ b/src/modules/app/browser-init.service.ts @@ -32,6 +32,7 @@ import { logStartupMessage } from '../../../startup-message'; import { MenuService } from '../../app/shared/menu/menu.service'; import { RootDataService } from '../../app/core/data/root-data.service'; import { firstValueFrom, Subscription } from 'rxjs'; +import { MetadataItemService } from 'src/app/core/metadata-item/metadata-item.service'; /** * Performs client-side initialization. @@ -51,6 +52,7 @@ export class BrowserInitService extends InitService { protected angulartics2DSpace: Angulartics2DSpace, protected googleAnalyticsService: GoogleAnalyticsService, protected metadata: MetadataService, + protected metadataItem: MetadataItemService, protected breadcrumbsService: BreadcrumbsService, protected klaroService: KlaroService, protected authService: AuthService, @@ -66,6 +68,7 @@ export class BrowserInitService extends InitService { localeService, angulartics2DSpace, metadata, + metadataItem, breadcrumbsService, themeService, menuService, diff --git a/src/modules/app/server-init.service.ts b/src/modules/app/server-init.service.ts index d909bb0e8d..074efc31e7 100644 --- a/src/modules/app/server-init.service.ts +++ b/src/modules/app/server-init.service.ts @@ -21,6 +21,7 @@ import { BreadcrumbsService } from '../../app/breadcrumbs/breadcrumbs.service'; import { ThemeService } from '../../app/shared/theme-support/theme.service'; import { take } from 'rxjs/operators'; import { MenuService } from '../../app/shared/menu/menu.service'; +import { MetadataItemService } from 'src/app/core/metadata-item/metadata-item.service'; /** * Performs server-side initialization. @@ -36,9 +37,10 @@ export class ServerInitService extends InitService { protected localeService: LocaleService, protected angulartics2DSpace: Angulartics2DSpace, protected metadata: MetadataService, + protected metadataItem: MetadataItemService, protected breadcrumbsService: BreadcrumbsService, protected themeService: ThemeService, - protected menuService: MenuService, + protected menuService: MenuService ) { super( store, @@ -48,6 +50,7 @@ export class ServerInitService extends InitService { localeService, angulartics2DSpace, metadata, + metadataItem, breadcrumbsService, themeService, menuService, From 3647292b8fa056503a31ea72e8b65b6fac5f9f6e Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Fri, 28 Apr 2023 16:47:07 +0200 Subject: [PATCH 037/425] [CST-9636] Added unit tests and the logic to create file object from payload --- .../collection-access-control.component.html | 91 +++++++++++++- .../collection-access-control.component.ts | 69 +++++++---- .../collection-access-control.service.ts | 54 +++++++++ .../edit-collection-page.module.ts | 6 + .../community-access-control.component.html | 93 ++++++++++++++- .../community-access-control.component.ts | 47 +++++++- .../community-access-control.service.ts | 54 +++++++++ .../edit-community-page.module.ts | 6 + .../edit-item-page/edit-item-page.module.ts | 6 + .../item-access-control.component.html | 111 +++++++++++++++++- .../item-access-control.component.ts | 55 ++++++++- .../item-access-control.service.ts | 71 +++++++++++ .../access-control-array-form.component.html | 68 +++++++++++ .../access-control-array-form.component.scss | 0 ...ccess-control-array-form.component.spec.ts | 101 ++++++++++++++++ .../access-control-array-form.component.ts | 88 ++++++++++++++ .../control-max-end-date.pipe.ts | 26 ++++ .../control-max-start-date.pipe.ts | 26 ++++ 18 files changed, 938 insertions(+), 34 deletions(-) create mode 100644 src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.service.ts create mode 100644 src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts create mode 100644 src/app/item-page/edit-item-page/item-access-control/item-access-control.service.ts create mode 100644 src/app/shared/access-control-array-form/access-control-array-form.component.html create mode 100644 src/app/shared/access-control-array-form/access-control-array-form.component.scss create mode 100644 src/app/shared/access-control-array-form/access-control-array-form.component.spec.ts create mode 100644 src/app/shared/access-control-array-form/access-control-array-form.component.ts create mode 100644 src/app/shared/access-control-array-form/control-max-end-date.pipe.ts create mode 100644 src/app/shared/access-control-array-form/control-max-start-date.pipe.ts diff --git a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.html b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.html index 0719a18d94..52eda57f2c 100644 --- a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.html +++ b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.html @@ -1,3 +1,92 @@
- Access control page!!! +
+
+

+ This form allows you to perform changes to the access condition of all the items owned by collection under this community. + Changes can be performed on the access condition for the metadata (item) or for the content (bitstream). +

+ +
+
+
+

Item's Metadata

+ +
+ +
+
Mode
+
+
+ + +
+
+ + +
+
+
+ +
+
Access conditions
+ +
+ You have not specified any access conditions, the new items access conditions will be inherited from the owning collection. +
+
+ + + + +
+
+
+

Bitstreams

+ +
+ +
+
Mode
+
+
+ + +
+
+ + +
+
+
+ +
+
Access conditions
+ +
+ You have not specified any access conditions, the new items access conditions will be inherited from the owning collection. +
+
+ + + + +
+
+ +
+ +
+ + +
+
+
diff --git a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.ts b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.ts index 8675e3a83f..0791e29233 100644 --- a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.ts +++ b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.ts @@ -1,37 +1,56 @@ -import { Component, OnInit } from '@angular/core'; -import { Observable } from 'rxjs'; -import { RemoteData } from '../../../core/data/remote-data'; -import { ActivatedRoute } from '@angular/router'; -import { first, map } from 'rxjs/operators'; -import { DSpaceObject } from '../../../core/shared/dspace-object.model'; +import { Component, OnInit, ViewChild } from '@angular/core'; +import { shareReplay } from 'rxjs'; +import { + AccessControlArrayFormComponent +} from '../../../shared/access-control-array-form/access-control-array-form.component'; +import { CollectionAccessControlService } from './collection-access-control.service'; @Component({ selector: 'ds-collection-access-control', templateUrl: './collection-access-control.component.html', - styleUrls: ['./collection-access-control.component.scss'] + styleUrls: ['./collection-access-control.component.scss'], + providers: [CollectionAccessControlService] }) -export class CollectionAccessControlComponent implements OnInit { +export class CollectionAccessControlComponent implements OnInit { - /** - * The initial DSO object - */ - public dsoRD$: Observable>; + @ViewChild('bitstreamAccessCmp', { static: true }) bitstreamAccessCmp: AccessControlArrayFormComponent; + @ViewChild('itemAccessCmp', { static: true }) itemAccessCmp: AccessControlArrayFormComponent; + + constructor(private collectionAccessControlService: CollectionAccessControlService) {} + + state = initialState; + + dropdownData$ = this.collectionAccessControlService.dropdownData$.pipe( + shareReplay(1) + ); + + ngOnInit(): void { - /** - * Initialize instance variables - * - * @param {ActivatedRoute} route - */ - constructor( - private route: ActivatedRoute - ) { } - /** - * Initialize the component, setting up the collection - */ - ngOnInit(): void { - this.dsoRD$ = this.route.parent.parent.data.pipe(first(), map((data) => data.dso)); + reset() { + this.bitstreamAccessCmp.reset(); + this.itemAccessCmp.reset(); + this.state = initialState; + } + + submit() { + const bitstreamAccess = this.bitstreamAccessCmp.getValue(); + const itemAccess = this.itemAccessCmp.getValue(); + + console.log('bitstreamAccess', bitstreamAccess); + console.log('itemAccess', itemAccess); } } + +const initialState = { + item: { + toggleStatus: false, + accessMode: '', + }, + bitstream: { + toggleStatus: false, + accessMode: '', + }, +}; diff --git a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.service.ts b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.service.ts new file mode 100644 index 0000000000..9cc7b8d85a --- /dev/null +++ b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.service.ts @@ -0,0 +1,54 @@ +import { Injectable } from '@angular/core'; +import { AccessControlItem } from '../../../shared/access-control-array-form/access-control-array-form.component'; +import { Observable, of } from 'rxjs'; + +export interface AccessControlDropdownDataResponse { + id: string; + itemAccessConditionOptions: AccessControlItem[]; + bitstreamAccessConditionOptions: AccessControlItem[]; +} + +@Injectable() +export class CollectionAccessControlService { + dropdownData$: Observable = of(accessControlDropdownData); +} + +const accessControlDropdownData: AccessControlDropdownDataResponse = { + 'id': 'default', + 'itemAccessConditionOptions': [ + { + 'name': 'openaccess' + }, + { + 'name': 'administrator' + }, + { + 'name': 'embargo', + 'hasStartDate': true, + 'maxStartDate': '2018-06-24T00:40:54.970+0000' + }, + { + 'name': 'lease', + 'hasEndDate': true, + 'maxEndDate': '2017-12-24T00:40:54.970+0000' + } + ], + 'bitstreamAccessConditionOptions': [ + { + 'name': 'openaccess' + }, + { + 'name': 'administrator' + }, + { + 'name': 'embargo', + 'hasStartDate': true, + 'maxStartDate': '2018-06-24T00:40:54.970+0000' + }, + { + 'name': 'lease', + 'hasEndDate': true, + 'maxEndDate': '2017-12-24T00:40:54.970+0000' + } + ] +}; diff --git a/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts b/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts index 3817122368..5af7d3189a 100644 --- a/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts +++ b/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts @@ -14,6 +14,10 @@ import { ResourcePoliciesModule } from '../../shared/resource-policies/resource- import { FormModule } from '../../shared/form/form.module'; import { ComcolModule } from '../../shared/comcol/comcol.module'; import { CollectionAccessControlComponent } from './collection-access-control/collection-access-control.component'; +import { + AccessControlArrayFormModule +} from '../../shared/access-control-array-form/access-control-array-form.component'; +import { UiSwitchModule } from 'ngx-ui-switch'; /** * Module that contains all components related to the Edit Collection page administrator functionality @@ -27,6 +31,8 @@ import { CollectionAccessControlComponent } from './collection-access-control/co ResourcePoliciesModule, FormModule, ComcolModule, + AccessControlArrayFormModule, + UiSwitchModule, ], declarations: [ EditCollectionPageComponent, diff --git a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html index cec7f44321..52eda57f2c 100644 --- a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html +++ b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html @@ -1 +1,92 @@ -

community-access-control works!

+
+
+
+

+ This form allows you to perform changes to the access condition of all the items owned by collection under this community. + Changes can be performed on the access condition for the metadata (item) or for the content (bitstream). +

+ +
+
+
+

Item's Metadata

+ +
+ +
+
Mode
+
+
+ + +
+
+ + +
+
+
+ +
+
Access conditions
+ +
+ You have not specified any access conditions, the new items access conditions will be inherited from the owning collection. +
+
+ + + + +
+
+
+

Bitstreams

+ +
+ +
+
Mode
+
+
+ + +
+
+ + +
+
+
+ +
+
Access conditions
+ +
+ You have not specified any access conditions, the new items access conditions will be inherited from the owning collection. +
+
+ + + + +
+
+ +
+ +
+ + +
+
+
+
diff --git a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts index 543d63564e..202c04b7b5 100644 --- a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts +++ b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts @@ -1,15 +1,56 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ViewChild } from '@angular/core'; +import { CommunityAccessControlService } from './community-access-control.service'; +import { shareReplay } from 'rxjs'; +import { + AccessControlArrayFormComponent +} from '../../../shared/access-control-array-form/access-control-array-form.component'; @Component({ selector: 'ds-community-access-control', templateUrl: './community-access-control.component.html', - styleUrls: ['./community-access-control.component.scss'] + styleUrls: ['./community-access-control.component.scss'], + providers: [CommunityAccessControlService] }) export class CommunityAccessControlComponent implements OnInit { - constructor() { } + @ViewChild('bitstreamAccessCmp', { static: true }) bitstreamAccessCmp: AccessControlArrayFormComponent; + @ViewChild('itemAccessCmp', { static: true }) itemAccessCmp: AccessControlArrayFormComponent; + + constructor(private communityAccessControlService: CommunityAccessControlService) {} + + state = initialState; + + dropdownData$ = this.communityAccessControlService.dropdownData$.pipe( + shareReplay(1) + ); ngOnInit(): void { + + } + + reset() { + this.bitstreamAccessCmp.reset(); + this.itemAccessCmp.reset(); + this.state = initialState; + } + + submit() { + const bitstreamAccess = this.bitstreamAccessCmp.getValue(); + const itemAccess = this.itemAccessCmp.getValue(); + + console.log('bitstreamAccess', bitstreamAccess); + console.log('itemAccess', itemAccess); } } + +const initialState = { + item: { + toggleStatus: false, + accessMode: '', + }, + bitstream: { + toggleStatus: false, + accessMode: '', + }, +}; diff --git a/src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts b/src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts new file mode 100644 index 0000000000..d78d42ba90 --- /dev/null +++ b/src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts @@ -0,0 +1,54 @@ +import { Injectable } from '@angular/core'; +import { AccessControlItem } from '../../../shared/access-control-array-form/access-control-array-form.component'; +import { Observable, of } from 'rxjs'; + +export interface AccessControlDropdownDataResponse { + id: string; + itemAccessConditionOptions: AccessControlItem[]; + bitstreamAccessConditionOptions: AccessControlItem[]; +} + +@Injectable() +export class CommunityAccessControlService { + dropdownData$: Observable = of(accessControlDropdownData); +} + +const accessControlDropdownData: AccessControlDropdownDataResponse = { + 'id': 'default', + 'itemAccessConditionOptions': [ + { + 'name': 'openaccess' + }, + { + 'name': 'administrator' + }, + { + 'name': 'embargo', + 'hasStartDate': true, + 'maxStartDate': '2018-06-24T00:40:54.970+0000' + }, + { + 'name': 'lease', + 'hasEndDate': true, + 'maxEndDate': '2017-12-24T00:40:54.970+0000' + } + ], + 'bitstreamAccessConditionOptions': [ + { + 'name': 'openaccess' + }, + { + 'name': 'administrator' + }, + { + 'name': 'embargo', + 'hasStartDate': true, + 'maxStartDate': '2018-06-24T00:40:54.970+0000' + }, + { + 'name': 'lease', + 'hasEndDate': true, + 'maxEndDate': '2017-12-24T00:40:54.970+0000' + } + ] +}; diff --git a/src/app/community-page/edit-community-page/edit-community-page.module.ts b/src/app/community-page/edit-community-page/edit-community-page.module.ts index a9f020a9e6..8aa52086ee 100644 --- a/src/app/community-page/edit-community-page/edit-community-page.module.ts +++ b/src/app/community-page/edit-community-page/edit-community-page.module.ts @@ -11,6 +11,10 @@ import { CommunityFormModule } from '../community-form/community-form.module'; import { ResourcePoliciesModule } from '../../shared/resource-policies/resource-policies.module'; import { ComcolModule } from '../../shared/comcol/comcol.module'; import { CommunityAccessControlComponent } from './community-access-control/community-access-control.component'; +import { UiSwitchModule } from 'ngx-ui-switch'; +import { + AccessControlArrayFormModule +} from '../../shared/access-control-array-form/access-control-array-form.component'; /** * Module that contains all components related to the Edit Community page administrator functionality @@ -23,6 +27,8 @@ import { CommunityAccessControlComponent } from './community-access-control/comm CommunityFormModule, ComcolModule, ResourcePoliciesModule, + UiSwitchModule, + AccessControlArrayFormModule, ], declarations: [ EditCommunityPageComponent, diff --git a/src/app/item-page/edit-item-page/edit-item-page.module.ts b/src/app/item-page/edit-item-page/edit-item-page.module.ts index d922cee0a5..65862b3de8 100644 --- a/src/app/item-page/edit-item-page/edit-item-page.module.ts +++ b/src/app/item-page/edit-item-page/edit-item-page.module.ts @@ -39,6 +39,10 @@ import { IdentifierDataComponent } from '../../shared/object-list/identifier-dat import { ItemRegisterDoiComponent } from './item-register-doi/item-register-doi.component'; import { DsoSharedModule } from '../../dso-shared/dso-shared.module'; import { ItemAccessControlComponent } from './item-access-control/item-access-control.component'; +import { + AccessControlArrayFormModule +} from '../../shared/access-control-array-form/access-control-array-form.component'; +import { UiSwitchModule } from 'ngx-ui-switch'; /** @@ -56,6 +60,8 @@ import { ItemAccessControlComponent } from './item-access-control/item-access-co NgbModule, ItemVersionsModule, DsoSharedModule, + AccessControlArrayFormModule, + UiSwitchModule, ], declarations: [ EditItemPageComponent, diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html index 416b785722..f5a02b0452 100644 --- a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html +++ b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html @@ -1 +1,110 @@ -

item-access-control works!

+
+
+
+

+ This form allows you to perform changes to the access condition of all the items owned by collection under this community. + Changes can be performed on the access condition for the metadata (item) or for the content (bitstream). +

+ +
+
+
+

Item's Metadata

+ +
+ +
+
Mode
+
+
+ + +
+
+ + +
+
+
+ +
+
Access conditions
+ +
+ You have not specified any access conditions, the new items access conditions will be inherited from the owning collection. +
+
+ + + + +
+
+
+

Bitstreams

+ +
+ +
+
Limit the changes to specific bitstreams
+
+
+ + +
+
+ + +
+
+
+ +
+
Mode
+
+
+ + +
+
+ + +
+
+
+ +
+
Access conditions
+ +
+ You have not specified any access conditions, the new items access conditions will be inherited from the owning collection. +
+
+ + + + +
+
+ +
+ +
+ + +
+
+
+
diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts index 5b42e5bf4e..6882dfb2a1 100644 --- a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts +++ b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts @@ -1,15 +1,64 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ViewChild } from '@angular/core'; +import { + AccessControlArrayFormComponent +} from '../../../shared/access-control-array-form/access-control-array-form.component'; +import { + CollectionAccessControlService +} from '../../../collection-page/edit-collection-page/collection-access-control/collection-access-control.service'; +import { shareReplay } from 'rxjs'; +import { ItemAccessControlService } from './item-access-control.service'; @Component({ selector: 'ds-item-access-control', templateUrl: './item-access-control.component.html', - styleUrls: ['./item-access-control.component.scss'] + styleUrls: ['./item-access-control.component.scss'], + providers: [ItemAccessControlService] }) export class ItemAccessControlComponent implements OnInit { - constructor() { } + @ViewChild('bitstreamAccessCmp', { static: true }) bitstreamAccessCmp: AccessControlArrayFormComponent; + @ViewChild('itemAccessCmp', { static: true }) itemAccessCmp: AccessControlArrayFormComponent; + + constructor(private itemAccessControlService: ItemAccessControlService) {} + + state = initialState; + + dropdownData$ = this.itemAccessControlService.dropdownData$.pipe( + shareReplay(1) + ); ngOnInit(): void { + + } + + reset() { + this.bitstreamAccessCmp.reset(); + this.itemAccessCmp.reset(); + this.state = initialState; + } + + submit() { + const bitstreamAccess = this.bitstreamAccessCmp.getValue(); + const itemAccess = this.itemAccessCmp.getValue(); + + this.itemAccessControlService.execute({ + bitstreamAccess, + itemAccess, + state: this.state + }); } } + +const initialState = { + item: { + toggleStatus: false, + accessMode: '', + }, + bitstream: { + toggleStatus: false, + accessMode: '', + changesLimit: '', // 'all' | 'selected' + selectedBitstreams: [] + }, +}; diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control.service.ts b/src/app/item-page/edit-item-page/item-access-control/item-access-control.service.ts new file mode 100644 index 0000000000..3eeacfe1ce --- /dev/null +++ b/src/app/item-page/edit-item-page/item-access-control/item-access-control.service.ts @@ -0,0 +1,71 @@ +import { Injectable } from '@angular/core'; +import { AccessControlItem } from '../../../shared/access-control-array-form/access-control-array-form.component'; +import { Observable, of } from 'rxjs'; + +export interface AccessControlDropdownDataResponse { + id: string; + itemAccessConditionOptions: AccessControlItem[]; + bitstreamAccessConditionOptions: AccessControlItem[]; +} + +@Injectable() +export class ItemAccessControlService { + dropdownData$: Observable = of(accessControlDropdownData); + + + execute(payload: any) { + console.log('execute', payload); + + const blob = new Blob([JSON.stringify(payload, null, 2)], { + type: 'application/json', + }); + + const file = new File([blob], 'data.json', { + type: 'application/json', + }); + + const url = URL.createObjectURL(file); + window.open(url, '_blank'); + + } +} + +const accessControlDropdownData: AccessControlDropdownDataResponse = { + 'id': 'default', + 'itemAccessConditionOptions': [ + { + 'name': 'openaccess' + }, + { + 'name': 'administrator' + }, + { + 'name': 'embargo', + 'hasStartDate': true, + 'maxStartDate': '2018-06-24T00:40:54.970+0000' + }, + { + 'name': 'lease', + 'hasEndDate': true, + 'maxEndDate': '2017-12-24T00:40:54.970+0000' + } + ], + 'bitstreamAccessConditionOptions': [ + { + 'name': 'openaccess' + }, + { + 'name': 'administrator' + }, + { + 'name': 'embargo', + 'hasStartDate': true, + 'maxStartDate': '2018-06-24T00:40:54.970+0000' + }, + { + 'name': 'lease', + 'hasEndDate': true, + 'maxEndDate': '2017-12-24T00:40:54.970+0000' + } + ] +}; diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.html b/src/app/shared/access-control-array-form/access-control-array-form.component.html new file mode 100644 index 0000000000..dc8caf403c --- /dev/null +++ b/src/app/shared/access-control-array-form/access-control-array-form.component.html @@ -0,0 +1,68 @@ +
+ +
+ +
+ +
+ +
+
+ +
+ +
+
+
+ +
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+ + + +
diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.scss b/src/app/shared/access-control-array-form/access-control-array-form.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.spec.ts b/src/app/shared/access-control-array-form/access-control-array-form.component.spec.ts new file mode 100644 index 0000000000..7c3ed06be1 --- /dev/null +++ b/src/app/shared/access-control-array-form/access-control-array-form.component.spec.ts @@ -0,0 +1,101 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AccessControlArrayFormComponent, AccessControlItemValue } from './access-control-array-form.component'; +import { ReactiveFormsModule } from '@angular/forms'; +import { SharedBrowseByModule } from '../browse-by/shared-browse-by.module'; +import { CommonModule } from '@angular/common'; +import { TranslateModule } from '@ngx-translate/core'; +import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap'; +import { ControlMaxStartDatePipe } from './control-max-start-date.pipe'; +import { ControlMaxEndDatePipe } from './control-max-end-date.pipe'; +import { DebugElement } from '@angular/core'; +import { By } from '@angular/platform-browser'; + +fdescribe('AccessControlArrayFormComponent', () => { + let component: AccessControlArrayFormComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ CommonModule, ReactiveFormsModule, SharedBrowseByModule, TranslateModule, NgbDatepickerModule ], + declarations: [ AccessControlArrayFormComponent, ControlMaxStartDatePipe, ControlMaxEndDatePipe ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AccessControlArrayFormComponent); + component = fixture.componentInstance; + component.dropdownOptions = [{name: 'Option1'}, {name: 'Option2'}]; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should have only one empty control access item in the form', () => { + const accessControlItems = fixture.debugElement.queryAll(By.css('[data-testId="access-control-item"]')); + expect(accessControlItems.length).toEqual(1); + }); + + it('should add access control item', () => { + component.addAccessControlItem(); + expect(component.accessControl.length).toEqual(2); + }); + + it('should remove access control item', () => { + component.removeAccessControlItem(0); + expect(component.accessControl.length).toEqual(0); + + component.addAccessControlItem(); + component.removeAccessControlItem(0); + expect(component.accessControl.length).toEqual(0); + }); + + it('should set access control item value', () => { + const item: AccessControlItemValue = { itemName: 'item1', startDate: '2022-01-01', endDate: '2022-02-01' }; + component.addAccessControlItem(item.itemName); + component.accessControl.controls[0].patchValue(item); + expect(component.form.value.accessControl[0]).toEqual(item); + }); + + it('should reset form value', () => { + const item: AccessControlItemValue = { itemName: 'item1', startDate: '2022-01-01', endDate: '2022-02-01' }; + component.addAccessControlItem(item.itemName); + component.accessControl.controls[1].patchValue(item); + component.reset(); + expect(component.form.value.accessControl[1].value).toEqual(undefined); + }); + + + it('should display a select dropdown with options', () => { + const selectElement: DebugElement = fixture.debugElement.query(By.css('select#accesscontroloption')); + expect(selectElement).toBeTruthy(); + + const options = selectElement.nativeElement.querySelectorAll('option'); + expect(options.length).toEqual(3); // 2 options + default empty option + + expect(options[0].value).toEqual(''); + expect(options[1].value).toEqual('Option1'); + expect(options[2].value).toEqual('Option2'); + }); + + it('should add new access control items when clicking "Add more" button', () => { + const addButton: DebugElement = fixture.debugElement.query(By.css('button#add-btn')); + addButton.nativeElement.click(); + fixture.detectChanges(); + + const accessControlItems = fixture.debugElement.queryAll(By.css('[data-testId="access-control-item"]')); + expect(accessControlItems.length).toEqual(2); + }); + + it('should remove access control items when clicking remove button', () => { + const removeButton: DebugElement = fixture.debugElement.query(By.css('button.btn-outline-danger')); + removeButton.nativeElement.click(); + fixture.detectChanges(); + + const accessControlItems = fixture.debugElement.queryAll(By.css('[data-testId="access-control-item"]')); + expect(accessControlItems.length).toEqual(0); + }); +}); diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-array-form/access-control-array-form.component.ts new file mode 100644 index 0000000000..00ff52c695 --- /dev/null +++ b/src/app/shared/access-control-array-form/access-control-array-form.component.ts @@ -0,0 +1,88 @@ +import { Component, Input, NgModule, OnInit } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormArray, FormBuilder, ReactiveFormsModule } from '@angular/forms'; +import { SharedBrowseByModule } from '../browse-by/shared-browse-by.module'; +import { TranslateModule } from '@ngx-translate/core'; +import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap'; +import { ControlMaxStartDatePipe } from './control-max-start-date.pipe'; +import { ControlMaxEndDatePipe } from './control-max-end-date.pipe'; + +// type of the dropdown item that comes from backend +export interface AccessControlItem { + name: string + hasStartDate?: boolean + maxStartDate?: string + hasEndDate?: boolean + maxEndDate?: string +} + +// will be used on the form value +export interface AccessControlItemValue { + itemName: string | null; // item name + startDate?: string; + endDate?: string; +} + +export interface AccessControlArrayFormValue { + accessControl: AccessControlItemValue[]; +} + +@Component({ + selector: 'ds-access-control-array-form', + templateUrl: './access-control-array-form.component.html', + styleUrls: [ './access-control-array-form.component.scss' ] +}) +export class AccessControlArrayFormComponent implements OnInit { + @Input() dropdownOptions: AccessControlItem[] = []; + @Input() accessControlItems: AccessControlItemValue[] = []; + + form = this.fb.group({ + accessControl: this.fb.array([]) + }); + + constructor(private fb: FormBuilder) { + } + + ngOnInit(): void { + if (this.accessControlItems.length === 0) { + this.addAccessControlItem(); + } else { + for (const item of this.accessControlItems) { + this.addAccessControlItem(item.itemName); + } + } + } + + get accessControl() { + return this.form.get('accessControl') as FormArray; + } + + addAccessControlItem(itemName: string = null) { + this.accessControl.push(this.fb.group({ + itemName, + startDate: null, + endDate: null + })); + } + + removeAccessControlItem(index: number) { + this.accessControl.removeAt(index); + } + + getValue() { + return this.form.value; + } + + reset() { + this.accessControl.reset([]); + } + +} + +@NgModule({ + imports: [ CommonModule, ReactiveFormsModule, SharedBrowseByModule, TranslateModule, NgbDatepickerModule ], + declarations: [ AccessControlArrayFormComponent, ControlMaxStartDatePipe, ControlMaxEndDatePipe ], + exports: [ AccessControlArrayFormComponent ], +}) +export class AccessControlArrayFormModule { +} diff --git a/src/app/shared/access-control-array-form/control-max-end-date.pipe.ts b/src/app/shared/access-control-array-form/control-max-end-date.pipe.ts new file mode 100644 index 0000000000..0ddff2a042 --- /dev/null +++ b/src/app/shared/access-control-array-form/control-max-end-date.pipe.ts @@ -0,0 +1,26 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { AbstractControl } from '@angular/forms'; +import { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap/datepicker/ngb-date-struct'; +import { AccessControlItem } from './access-control-array-form.component'; + +@Pipe({ + // eslint-disable-next-line @angular-eslint/pipe-prefix + name: 'maxEndDate', + pure: false +}) +export class ControlMaxEndDatePipe implements PipeTransform { + transform(control: AbstractControl, dropdownOptions: AccessControlItem[]): NgbDateStruct | null { + const { itemName } = control.value; + const item = dropdownOptions.find((x) => x.name === itemName); + if (!item?.hasEndDate) { + return null; + } + const date = new Date(item.maxEndDate); + return { + year: date.getFullYear(), + month: date.getMonth() + 1, + day: date.getDate() + } as NgbDateStruct; + } + +} diff --git a/src/app/shared/access-control-array-form/control-max-start-date.pipe.ts b/src/app/shared/access-control-array-form/control-max-start-date.pipe.ts new file mode 100644 index 0000000000..01a9607a16 --- /dev/null +++ b/src/app/shared/access-control-array-form/control-max-start-date.pipe.ts @@ -0,0 +1,26 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { AbstractControl } from '@angular/forms'; +import { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap/datepicker/ngb-date-struct'; +import { AccessControlItem } from './access-control-array-form.component'; + +@Pipe({ + // eslint-disable-next-line @angular-eslint/pipe-prefix + name: 'maxStartDate', + pure: false +}) +export class ControlMaxStartDatePipe implements PipeTransform { + transform(control: AbstractControl, dropdownOptions: AccessControlItem[]): NgbDateStruct | null { + const { itemName } = control.value; + const item = dropdownOptions.find((x) => x.name === itemName); + if (!item?.hasStartDate) { + return null; + } + const date = new Date(item.maxStartDate); + return { + year: date.getFullYear(), + month: date.getMonth() + 1, + day: date.getDate() + } as NgbDateStruct; + } + +} From 27d3c58d003f4e82026bb77b8b7d20a3e9ea5a78 Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Tue, 2 May 2023 17:09:55 +0200 Subject: [PATCH 038/425] add referrer to pageview events --- .../services/browser.referrer.service.spec.ts | 53 +++++++++++++++++++ .../core/services/browser.referrer.service.ts | 48 +++++++++++++++++ src/app/core/services/referrer.service.ts | 15 ++++++ .../services/server.referrer.service.spec.ts | 34 ++++++++++++ .../core/services/server.referrer.service.ts | 31 +++++++++++ .../angulartics/dspace-provider.spec.ts | 7 ++- .../statistics/angulartics/dspace-provider.ts | 2 +- .../dspace/view-tracker.component.ts | 43 ++++++++++++--- src/app/statistics/statistics.service.spec.ts | 3 +- src/app/statistics/statistics.service.ts | 9 +++- src/modules/app/browser-app.module.ts | 6 +++ src/modules/app/server-app.module.ts | 6 +++ 12 files changed, 244 insertions(+), 13 deletions(-) create mode 100644 src/app/core/services/browser.referrer.service.spec.ts create mode 100644 src/app/core/services/browser.referrer.service.ts create mode 100644 src/app/core/services/referrer.service.ts create mode 100644 src/app/core/services/server.referrer.service.spec.ts create mode 100644 src/app/core/services/server.referrer.service.ts diff --git a/src/app/core/services/browser.referrer.service.spec.ts b/src/app/core/services/browser.referrer.service.spec.ts new file mode 100644 index 0000000000..bff01bf913 --- /dev/null +++ b/src/app/core/services/browser.referrer.service.spec.ts @@ -0,0 +1,53 @@ +import { of as observableOf } from 'rxjs'; +import { RouteService } from './route.service'; +import { BrowserReferrerService } from './browser.referrer.service'; + +describe(`BrowserReferrerService`, () => { + let service: BrowserReferrerService; + const documentReferrer = 'https://www.referrer.com'; + const origin = 'https://www.dspace.org'; + let routeService: RouteService; + + beforeEach(() => { + routeService = { + getPreviousUrl: () => observableOf('') + } as any; + service = new BrowserReferrerService( + { referrer: documentReferrer }, + routeService, + { getCurrentOrigin: () => origin } as any + ); + }); + + describe(`getReferrer`, () => { + let prevUrl: string; + + describe(`when getPreviousUrl is an empty string`, () => { + beforeEach(() => { + prevUrl = ''; + spyOn(routeService, 'getPreviousUrl').and.returnValue(observableOf(prevUrl)); + }); + + it(`should return document.referrer`, (done: DoneFn) => { + service.getReferrer().subscribe((emittedReferrer: string) => { + expect(emittedReferrer).toBe(documentReferrer); + done(); + }); + }); + }); + + describe(`when getPreviousUrl is not empty`, () => { + beforeEach(() => { + prevUrl = '/some/local/route'; + spyOn(routeService, 'getPreviousUrl').and.returnValue(observableOf(prevUrl)); + }); + + it(`should return the value emitted by getPreviousUrl combined with the origin from HardRedirectService`, (done: DoneFn) => { + service.getReferrer().subscribe((emittedReferrer: string) => { + expect(emittedReferrer).toBe(origin + prevUrl); + done(); + }); + }); + }); + }); +}); diff --git a/src/app/core/services/browser.referrer.service.ts b/src/app/core/services/browser.referrer.service.ts new file mode 100644 index 0000000000..1bf1cf2d4a --- /dev/null +++ b/src/app/core/services/browser.referrer.service.ts @@ -0,0 +1,48 @@ +import { ReferrerService } from './referrer.service'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { isEmpty } from '../../shared/empty.util'; +import { URLCombiner } from '../url-combiner/url-combiner'; +import { Inject, Injectable } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import { HardRedirectService } from './hard-redirect.service'; +import { RouteService } from './route.service'; + +/** + * A service to determine the referrer + * + * The browser implementation will get the referrer from document.referrer, in the event that the + * previous page visited was not an angular URL. If it was, the route history in the store must be + * used, since document.referrer doesn't get updated on route changes + */ +@Injectable() +export class BrowserReferrerService extends ReferrerService { + + constructor( + @Inject(DOCUMENT) protected document: any, + protected routeService: RouteService, + protected hardRedirectService: HardRedirectService, + ) { + super(); + } + + /** + * Return the referrer + * + * Return the referrer URL based on the route history in the store. If there is no route history + * in the store yet, document.referrer will be used + */ + public getReferrer(): Observable { + return this.routeService.getPreviousUrl().pipe( + map((prevUrl: string) => { + // if we don't have anything in the history yet, return document.referrer + // (note that that may be empty too, e.g. if you've just opened a new browser tab) + if (isEmpty(prevUrl)) { + return this.document.referrer; + } else { + return new URLCombiner(this.hardRedirectService.getCurrentOrigin(), prevUrl).toString(); + } + }) + ); + } +} diff --git a/src/app/core/services/referrer.service.ts b/src/app/core/services/referrer.service.ts new file mode 100644 index 0000000000..79621fdbeb --- /dev/null +++ b/src/app/core/services/referrer.service.ts @@ -0,0 +1,15 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; + +/** + * A service to determine the referrer, i.e. the previous URL that led the user to the current one + */ +@Injectable() +export abstract class ReferrerService { + + /** + * Return the referrer + */ + abstract getReferrer(): Observable; + +} diff --git a/src/app/core/services/server.referrer.service.spec.ts b/src/app/core/services/server.referrer.service.spec.ts new file mode 100644 index 0000000000..4a7f841093 --- /dev/null +++ b/src/app/core/services/server.referrer.service.spec.ts @@ -0,0 +1,34 @@ +import { ServerReferrerService } from './server.referrer.service'; + +describe(`ServerReferrerService`, () => { + let service: ServerReferrerService; + const referrer = 'https://www.referrer.com'; + + describe(`getReferrer`, () => { + describe(`when the referer header is set`, () => { + beforeEach(() => { + service = new ServerReferrerService({ headers: { referer: referrer }}); + }); + + it(`should return the referer header`, (done: DoneFn) => { + service.getReferrer().subscribe((emittedReferrer: string) => { + expect(emittedReferrer).toBe(referrer); + done(); + }); + }); + }); + + describe(`when the referer header is not set`, () => { + beforeEach(() => { + service = new ServerReferrerService({ headers: {}}); + }); + + it(`should return an empty string`, (done: DoneFn) => { + service.getReferrer().subscribe((emittedReferrer: string) => { + expect(emittedReferrer).toBe(''); + done(); + }); + }); + }); + }); +}); diff --git a/src/app/core/services/server.referrer.service.ts b/src/app/core/services/server.referrer.service.ts new file mode 100644 index 0000000000..b2f063a07c --- /dev/null +++ b/src/app/core/services/server.referrer.service.ts @@ -0,0 +1,31 @@ +import { ReferrerService } from './referrer.service'; +import { Observable, of as observableOf } from 'rxjs'; +import { Inject, Injectable } from '@angular/core'; +import { REQUEST } from '@nguniversal/express-engine/tokens'; + +/** + * A service to determine the referrer + * + * The server implementation will get the referrer from the 'Referer' header of the request sent to + * the express server + */ +@Injectable() +export class ServerReferrerService extends ReferrerService { + + constructor( + @Inject(REQUEST) protected request: any, + ) { + super(); + } + + /** + * Return the referrer + * + * Return the 'Referer' header from the request, or an empty string if the header wasn't set + * (for consistency with the document.referrer property on the browser side) + */ + public getReferrer(): Observable { + const referrer = this.request.headers.referer || ''; + return observableOf(referrer); + } +} diff --git a/src/app/statistics/angulartics/dspace-provider.spec.ts b/src/app/statistics/angulartics/dspace-provider.spec.ts index 8491d8e80c..b917337648 100644 --- a/src/app/statistics/angulartics/dspace-provider.spec.ts +++ b/src/app/statistics/angulartics/dspace-provider.spec.ts @@ -11,7 +11,10 @@ describe('Angulartics2DSpace', () => { beforeEach(() => { angulartics2 = { - eventTrack: observableOf({action: 'pageView', properties: {object: 'mock-object'}}), + eventTrack: observableOf({action: 'pageView', properties: { + object: 'mock-object', + referrer: 'https://www.referrer.com' + }}), filterDeveloperMode: () => filter(() => true) } as any; statisticsService = jasmine.createSpyObj('statisticsService', {trackViewEvent: null}); @@ -20,7 +23,7 @@ describe('Angulartics2DSpace', () => { it('should use the statisticsService', () => { provider.startTracking(); - expect(statisticsService.trackViewEvent).toHaveBeenCalledWith('mock-object' as any); + expect(statisticsService.trackViewEvent).toHaveBeenCalledWith('mock-object' as any, 'https://www.referrer.com'); }); }); diff --git a/src/app/statistics/angulartics/dspace-provider.ts b/src/app/statistics/angulartics/dspace-provider.ts index cd1aab94bd..8d6607b1c4 100644 --- a/src/app/statistics/angulartics/dspace-provider.ts +++ b/src/app/statistics/angulartics/dspace-provider.ts @@ -25,7 +25,7 @@ export class Angulartics2DSpace { private eventTrack(event) { if (event.action === 'pageView') { - this.statisticsService.trackViewEvent(event.properties.object); + this.statisticsService.trackViewEvent(event.properties.object, event.properties.referrer); } else if (event.action === 'search') { this.statisticsService.trackSearchEvent( event.properties.searchOptions, diff --git a/src/app/statistics/angulartics/dspace/view-tracker.component.ts b/src/app/statistics/angulartics/dspace/view-tracker.component.ts index 85588aeb97..af9c62f98e 100644 --- a/src/app/statistics/angulartics/dspace/view-tracker.component.ts +++ b/src/app/statistics/angulartics/dspace/view-tracker.component.ts @@ -1,6 +1,10 @@ -import { Component, Input, OnInit } from '@angular/core'; +import { Component, Input, OnInit, OnDestroy } from '@angular/core'; import { Angulartics2 } from 'angulartics2'; import { DSpaceObject } from '../../../core/shared/dspace-object.model'; +import { Subscription } from 'rxjs/internal/Subscription'; +import { take } from 'rxjs/operators'; +import { hasValue } from '../../../shared/empty.util'; +import { ReferrerService } from '../../../core/services/referrer.service'; /** * This component triggers a page view statistic @@ -10,18 +14,43 @@ import { DSpaceObject } from '../../../core/shared/dspace-object.model'; styleUrls: ['./view-tracker.component.scss'], templateUrl: './view-tracker.component.html', }) -export class ViewTrackerComponent implements OnInit { +export class ViewTrackerComponent implements OnInit, OnDestroy { + /** + * The DSpaceObject to track a view event about + */ @Input() object: DSpaceObject; + /** + * The subscription on this.referrerService.getReferrer() + * @protected + */ + protected sub: Subscription; + constructor( - public angulartics2: Angulartics2 + public angulartics2: Angulartics2, + public referrerService: ReferrerService ) { } ngOnInit(): void { - this.angulartics2.eventTrack.next({ - action: 'pageView', - properties: {object: this.object}, - }); + this.sub = this.referrerService.getReferrer() + .pipe(take(1)) + .subscribe((referrer: string) => { + this.angulartics2.eventTrack.next({ + action: 'pageView', + properties: { + object: this.object, + referrer + }, + }); + }); + } + + ngOnDestroy(): void { + // unsubscribe in the case that this component is destroyed before + // this.referrerService.getReferrer() has emitted + if (hasValue(this.sub)) { + this.sub.unsubscribe(); + } } } diff --git a/src/app/statistics/statistics.service.spec.ts b/src/app/statistics/statistics.service.spec.ts index cdf81afdb6..2f04755143 100644 --- a/src/app/statistics/statistics.service.spec.ts +++ b/src/app/statistics/statistics.service.spec.ts @@ -26,12 +26,13 @@ describe('StatisticsService', () => { it('should send a request to track an item view ', () => { const mockItem: any = {uuid: 'mock-item-uuid', type: 'item'}; - service.trackViewEvent(mockItem); + service.trackViewEvent(mockItem, 'https://www.referrer.com'); const request: TrackRequest = requestService.send.calls.mostRecent().args[0]; expect(request.body).toBeDefined('request.body'); const body = JSON.parse(request.body); expect(body.targetId).toBe('mock-item-uuid'); expect(body.targetType).toBe('item'); + expect(body.referrer).toBe('https://www.referrer.com'); }); }); diff --git a/src/app/statistics/statistics.service.ts b/src/app/statistics/statistics.service.ts index 9e12e627b5..4835b55e7d 100644 --- a/src/app/statistics/statistics.service.ts +++ b/src/app/statistics/statistics.service.ts @@ -31,11 +31,16 @@ export class StatisticsService { /** * To track a page view * @param dso: The dso which was viewed + * @param referrer: The referrer used by the client to reach the dso page */ - trackViewEvent(dso: DSpaceObject) { + trackViewEvent( + dso: DSpaceObject, + referrer: string + ) { this.sendEvent('/statistics/viewevents', { targetId: dso.uuid, - targetType: (dso as any).type + targetType: (dso as any).type, + referrer }); } diff --git a/src/modules/app/browser-app.module.ts b/src/modules/app/browser-app.module.ts index 29d138be1a..20895cb9a6 100644 --- a/src/modules/app/browser-app.module.ts +++ b/src/modules/app/browser-app.module.ts @@ -33,6 +33,8 @@ import { GoogleAnalyticsService } from '../../app/statistics/google-analytics.se import { RouterModule, NoPreloading } from '@angular/router'; import { AuthRequestService } from '../../app/core/auth/auth-request.service'; import { BrowserAuthRequestService } from '../../app/core/auth/browser-auth-request.service'; +import { ReferrerService } from '../../app/core/services/referrer.service'; +import { BrowserReferrerService } from '../../app/core/services/browser.referrer.service'; export const REQ_KEY = makeStateKey('req'); @@ -111,6 +113,10 @@ export function getRequest(transferState: TransferState): any { provide: AuthRequestService, useClass: BrowserAuthRequestService, }, + { + provide: ReferrerService, + useClass: BrowserReferrerService, + }, { provide: LocationToken, useFactory: locationProvider, diff --git a/src/modules/app/server-app.module.ts b/src/modules/app/server-app.module.ts index dad3a60d5c..34ab29b71b 100644 --- a/src/modules/app/server-app.module.ts +++ b/src/modules/app/server-app.module.ts @@ -33,6 +33,8 @@ import { Angulartics2Mock } from '../../app/shared/mocks/angulartics2.service.mo import { RouterModule } from '@angular/router'; import { AuthRequestService } from '../../app/core/auth/auth-request.service'; import { ServerAuthRequestService } from '../../app/core/auth/server-auth-request.service'; +import { ReferrerService } from '../../app/core/services/referrer.service'; +import { ServerReferrerService } from '../../app/core/services/server.referrer.service'; export function createTranslateLoader() { return new TranslateJson5UniversalLoader('dist/server/assets/i18n/', '.json5'); @@ -102,6 +104,10 @@ export function createTranslateLoader() { provide: HardRedirectService, useClass: ServerHardRedirectService, }, + { + provide: ReferrerService, + useClass: ServerReferrerService, + }, ] }) export class ServerAppModule { From 5aaa4ef371046049f624d1b99d8f3acde8486a04 Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Tue, 2 May 2023 18:11:57 +0200 Subject: [PATCH 039/425] ensure the rel="noopener" attribute is only set when target="_blank" and remove "noreferrer" in all cases --- .../journal-issue-search-result-grid-element.component.html | 4 ++-- .../journal-volume-search-result-grid-element.component.html | 4 ++-- .../journal/journal-search-result-grid-element.component.html | 4 ++-- .../journal-issue-search-result-list-element.component.html | 2 +- .../journal-volume-search-result-list-element.component.html | 2 +- .../journal/journal-search-result-list-element.component.html | 2 +- .../org-unit-search-result-grid-element.component.html | 4 ++-- .../person/person-search-result-grid-element.component.html | 4 ++-- .../project/project-search-result-grid-element.component.html | 4 ++-- .../org-unit-search-result-list-element.component.html | 2 +- .../person/person-search-result-list-element.component.html | 2 +- .../project/project-search-result-list-element.component.html | 2 +- .../collection-grid-element.component.html | 4 ++-- .../community-grid-element.component.html | 4 ++-- .../collection-search-result-grid-element.component.html | 4 ++-- .../community-search-result-grid-element.component.html | 4 ++-- .../item/item-search-result-grid-element.component.html | 4 ++-- .../browse-entry-list-element.component.html | 2 +- .../collection-list-element.component.html | 2 +- .../community-list-element.component.html | 2 +- .../collection-search-result-list-element.component.html | 2 +- .../community-search-result-list-element.component.html | 2 +- .../item/item-search-result-list-element.component.html | 2 +- .../cc-license/submission-section-cc-licenses.component.html | 2 +- 24 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html index 028876b3d0..a54c78fb78 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html +++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html @@ -5,7 +5,7 @@ diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html index 65ff75a731..0ae775a9de 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html +++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html @@ -5,7 +5,7 @@ diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html index 0c5824c6d6..e71049bdbc 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html +++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html @@ -5,7 +5,7 @@ diff --git a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html index fa4c06d36a..a51f55f5a1 100644 --- a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html +++ b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html @@ -1,6 +1,6 @@ - - - diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html index 680a9909bc..7dafbf0dc2 100644 --- a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html +++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html @@ -5,7 +5,7 @@ diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html index 204f8fc8cb..54f7d73cdc 100644 --- a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html +++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html @@ -5,7 +5,7 @@ diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html index fb0ad21b6e..52273d18aa 100644 --- a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html +++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html @@ -1,6 +1,6 @@ - - - - + @@ -11,7 +11,7 @@

{{object.name}}

{{object.shortDescription}}

- View + View
diff --git a/src/app/shared/object-grid/community-grid-element/community-grid-element.component.html b/src/app/shared/object-grid/community-grid-element/community-grid-element.component.html index 63097c4f57..9049d8ad18 100644 --- a/src/app/shared/object-grid/community-grid-element/community-grid-element.component.html +++ b/src/app/shared/object-grid/community-grid-element/community-grid-element.component.html @@ -1,5 +1,5 @@
- + @@ -11,7 +11,7 @@

{{object.name}}

{{object.shortDescription}}

- View + View
diff --git a/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html index 739fa6c7a8..e452353a95 100644 --- a/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html @@ -1,5 +1,5 @@
- + @@ -12,7 +12,7 @@

{{dso.name}}

{{dso.shortDescription}}

- View + View
diff --git a/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html index d8c253c8a9..4674d3d750 100644 --- a/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html @@ -1,5 +1,5 @@
- + @@ -12,7 +12,7 @@

{{dso.name}}

{{dso.shortDescription}}

- View + View
diff --git a/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html index d2454b28e6..8d4421a15c 100644 --- a/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html @@ -3,7 +3,7 @@
- diff --git a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html index e3455bf095..99d79f3670 100644 --- a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html +++ b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html @@ -1,5 +1,5 @@
- + {{object.value}} diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html index c61adf5dad..3f2cff33c2 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html @@ -1,4 +1,4 @@ - + {{object.name}} diff --git a/src/app/shared/object-list/community-list-element/community-list-element.component.html b/src/app/shared/object-list/community-list-element/community-list-element.component.html index af01999ca7..fca6ff77c2 100644 --- a/src/app/shared/object-list/community-list-element/community-list-element.component.html +++ b/src/app/shared/object-list/community-list-element/community-list-element.component.html @@ -1,4 +1,4 @@ - + {{object.name}} diff --git a/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html index c98003cd1d..e85667382c 100644 --- a/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html @@ -1,4 +1,4 @@ - +
diff --git a/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html index e0f0319ffc..bba6bf2c5e 100644 --- a/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html @@ -1,4 +1,4 @@ - +
diff --git a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html index 80a4fd81fd..a12989ada3 100644 --- a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html @@ -1,7 +1,7 @@ - {{ 'submission.sections.ccLicense.link' | translate }}
- + {{ licenseLink }}
From 3a45ecf5784bc622b993baf80fc7b5c4d7cca762 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Wed, 3 May 2023 09:31:01 +0200 Subject: [PATCH 040/425] [CST-9636] Added bulk access condition options service --- .../community-access-control.service.ts | 23 ++++++---- .../bulk-access-condition-options.service.ts | 33 ++++++++++++++ .../bulk-access-condition-options.model.ts | 45 +++++++++++++++++++ .../access-control-array-form.component.ts | 13 +----- 4 files changed, 93 insertions(+), 21 deletions(-) create mode 100644 src/app/core/data/bulk-access-condition-options.service.ts create mode 100644 src/app/core/shared/bulk-access-condition-options.model.ts diff --git a/src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts b/src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts index d78d42ba90..89534683b7 100644 --- a/src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts +++ b/src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts @@ -1,19 +1,24 @@ import { Injectable } from '@angular/core'; -import { AccessControlItem } from '../../../shared/access-control-array-form/access-control-array-form.component'; -import { Observable, of } from 'rxjs'; +import { of } from 'rxjs'; +import { BulkAccessConditionOptionsService } from '../../../core/data/bulk-access-condition-options.service'; +import { BulkAccessConditionOptions } from '../../../core/shared/bulk-access-condition-options.model'; -export interface AccessControlDropdownDataResponse { - id: string; - itemAccessConditionOptions: AccessControlItem[]; - bitstreamAccessConditionOptions: AccessControlItem[]; -} @Injectable() export class CommunityAccessControlService { - dropdownData$: Observable = of(accessControlDropdownData); + constructor(private service: BulkAccessConditionOptionsService) {} + + dropdownData$ = of(accessControlDropdownData); + + // dropdownData$ = this.service.getAll().pipe( + // getAllSucceededRemoteData(), + // filter((data) => data.hasSucceeded), + // map((data) => data.payload) + // ); } -const accessControlDropdownData: AccessControlDropdownDataResponse = { +const accessControlDropdownData: BulkAccessConditionOptions = { + _links: { self: undefined }, type: undefined, uuid: '', 'id': 'default', 'itemAccessConditionOptions': [ { diff --git a/src/app/core/data/bulk-access-condition-options.service.ts b/src/app/core/data/bulk-access-condition-options.service.ts new file mode 100644 index 0000000000..bfff0a8dd6 --- /dev/null +++ b/src/app/core/data/bulk-access-condition-options.service.ts @@ -0,0 +1,33 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; +import { ObjectCacheService } from '../cache/object-cache.service'; +import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { RemoteData } from './remote-data'; +import { RequestService } from './request.service'; +import { IdentifiableDataService } from './base/identifiable-data.service'; +import { BulkAccessConditionOptions } from '../shared/bulk-access-condition-options.model'; + +@Injectable() +/** + * Data Service responsible for retrieving Bulk Access Condition Options from the REST API + */ +export class BulkAccessConditionOptionsService extends IdentifiableDataService { + + constructor( + protected requestService: RequestService, + protected rdbService: RemoteDataBuildService, + protected objectCache: ObjectCacheService, + protected halService: HALEndpointService, + ) { + super('bulkaccessconditionoptions', requestService, rdbService, objectCache, halService); + } + + getAll(): Observable> { + return this.findByHref(this.halService.getEndpoint(this.linkPath)); + } + + // findByPropertyName(name: string): Observable> { + // return this.findById(name); + // } +} diff --git a/src/app/core/shared/bulk-access-condition-options.model.ts b/src/app/core/shared/bulk-access-condition-options.model.ts new file mode 100644 index 0000000000..a1c8fe0702 --- /dev/null +++ b/src/app/core/shared/bulk-access-condition-options.model.ts @@ -0,0 +1,45 @@ +import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; +import { typedObject } from '../cache/builders/build-decorators'; +import { excludeFromEquals } from '../utilities/equals.decorators'; +import { ResourceType } from './resource-type'; +import { CacheableObject } from '../cache/cacheable-object.model'; +import { HALLink } from './hal-link.model'; + +export const BULK_ACCESS_CONDITION_OPTIONS = new ResourceType('bulkAccessConditionOptions'); + +/** + * Model class for a bulk access condition options + */ +@typedObject +export class BulkAccessConditionOptions implements CacheableObject { + static type = BULK_ACCESS_CONDITION_OPTIONS; + + /** + * The object type + */ + @excludeFromEquals + @autoserialize + type: ResourceType; + + @autoserializeAs(String, 'name') + uuid: string; + + @autoserialize + id: string; + + @deserialize + itemAccessConditionOptions: AccessControlItem[]; + + @deserialize + bitstreamAccessConditionOptions: AccessControlItem[]; + + _links: { self: HALLink }; +} + +export interface AccessControlItem { + name: string + hasStartDate?: boolean + maxStartDate?: string + hasEndDate?: boolean + maxEndDate?: string +} diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-array-form/access-control-array-form.component.ts index 00ff52c695..bde7d30be8 100644 --- a/src/app/shared/access-control-array-form/access-control-array-form.component.ts +++ b/src/app/shared/access-control-array-form/access-control-array-form.component.ts @@ -6,15 +6,8 @@ import { TranslateModule } from '@ngx-translate/core'; import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap'; import { ControlMaxStartDatePipe } from './control-max-start-date.pipe'; import { ControlMaxEndDatePipe } from './control-max-end-date.pipe'; +import { AccessControlItem } from '../../core/shared/bulk-access-condition-options.model'; -// type of the dropdown item that comes from backend -export interface AccessControlItem { - name: string - hasStartDate?: boolean - maxStartDate?: string - hasEndDate?: boolean - maxEndDate?: string -} // will be used on the form value export interface AccessControlItemValue { @@ -23,10 +16,6 @@ export interface AccessControlItemValue { endDate?: string; } -export interface AccessControlArrayFormValue { - accessControl: AccessControlItemValue[]; -} - @Component({ selector: 'ds-access-control-array-form', templateUrl: './access-control-array-form.component.html', From 89eb4e3cb2a8a07f45ee939f74387f1624c4e0c5 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Wed, 3 May 2023 15:29:12 +0200 Subject: [PATCH 041/425] [DURACOM-131] Show output files in separate lines --- src/app/process-page/detail/process-detail.component.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/app/process-page/detail/process-detail.component.html b/src/app/process-page/detail/process-detail.component.html index 29cbfc113f..8825c71cee 100644 --- a/src/app/process-page/detail/process-detail.component.html +++ b/src/app/process-page/detail/process-detail.component.html @@ -17,10 +17,12 @@
+
- {{getFileName(file)}} - ({{(file?.sizeBytes) | dsFileSize }}) + {{getFileName(file)}} + ({{(file?.sizeBytes) | dsFileSize }}) +
From c066bc9d54e7ea0c9256ffedc7bb02b4ff2ee6b9 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Wed, 3 May 2023 17:22:20 +0200 Subject: [PATCH 042/425] [DURACOM-131] Added automatic refresh every 5 seconds if the status is running --- .../detail/process-detail.component.html | 19 ++-- .../detail/process-detail.component.ts | 102 ++++++++++++++---- 2 files changed, 93 insertions(+), 28 deletions(-) diff --git a/src/app/process-page/detail/process-detail.component.html b/src/app/process-page/detail/process-detail.component.html index 8825c71cee..9e7a24d3af 100644 --- a/src/app/process-page/detail/process-detail.component.html +++ b/src/app/process-page/detail/process-detail.component.html @@ -1,10 +1,15 @@ -
-
-

{{'process.detail.title' | translate:{ - id: process?.processId, - name: process?.scriptName - } }}

+
+
+
+

+ {{ 'process.detail.title' | translate:{ id: process?.processId, name: process?.scriptName } }} +

+
+
+ Refreshing in {{ seconds }}s +
+
{{ process?.scriptName }}
@@ -72,7 +77,7 @@ -
+
diff --git a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.ts b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.ts index 35ba6076f9..4192fe5a9a 100644 --- a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.ts +++ b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.ts @@ -1,64 +1,24 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; -import { shareReplay } from 'rxjs'; -import { - AccessControlArrayFormComponent -} from '../../../shared/access-control-array-form/access-control-array-form.component'; -import { CollectionAccessControlService } from './collection-access-control.service'; +import { Component, OnInit } from '@angular/core'; +import { Observable } from 'rxjs'; +import { RemoteData } from '../../../core/data/remote-data'; +import { Community } from '../../../core/shared/community.model'; +import { ActivatedRoute } from '@angular/router'; +import { map } from 'rxjs/operators'; +import { getFirstSucceededRemoteData } from '../../../core/shared/operators'; @Component({ selector: 'ds-collection-access-control', templateUrl: './collection-access-control.component.html', styleUrls: ['./collection-access-control.component.scss'], - providers: [CollectionAccessControlService] }) export class CollectionAccessControlComponent implements OnInit { + itemRD$: Observable>; - @ViewChild('bitstreamAccessCmp', { static: true }) bitstreamAccessCmp: AccessControlArrayFormComponent; - @ViewChild('itemAccessCmp', { static: true }) itemAccessCmp: AccessControlArrayFormComponent; - - constructor(private collectionAccessControlService: CollectionAccessControlService) {} - - state = initialState; - - dropdownData$ = this.collectionAccessControlService.dropdownData$.pipe( - shareReplay(1) - ); + constructor(private route: ActivatedRoute) {} ngOnInit(): void { - + this.itemRD$ = this.route.parent.parent.data.pipe( + map((data) => data.dso) + ).pipe(getFirstSucceededRemoteData()) as Observable>; } - - reset() { - this.bitstreamAccessCmp.reset(); - this.itemAccessCmp.reset(); - this.state = initialState; - } - - submit() { - const bitstreamAccess = this.bitstreamAccessCmp.getValue(); - const itemAccess = this.itemAccessCmp.getValue(); - - console.log('bitstreamAccess', bitstreamAccess); - console.log('itemAccess', itemAccess); - } - - handleStatusChange(type: 'item' | 'bitstream', active: boolean) { - if (type === 'bitstream') { - active ? this.bitstreamAccessCmp.enable() : this.bitstreamAccessCmp.disable(); - } else if (type === 'item') { - active ? this.itemAccessCmp.enable() : this.itemAccessCmp.disable(); - } - } - } - -const initialState = { - item: { - toggleStatus: false, - accessMode: '', - }, - bitstream: { - toggleStatus: false, - accessMode: '', - }, -}; diff --git a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.service.ts b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.service.ts deleted file mode 100644 index 3267461fe6..0000000000 --- a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.service.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { Injectable } from '@angular/core'; -import { AccessControlItem } from 'src/app/core/shared/bulk-access-condition-options.model'; -import { Observable, of } from 'rxjs'; - -export interface AccessControlDropdownDataResponse { - id: string; - itemAccessConditionOptions: AccessControlItem[]; - bitstreamAccessConditionOptions: AccessControlItem[]; -} - -@Injectable() -export class CollectionAccessControlService { - dropdownData$: Observable = of(accessControlDropdownData); -} - -const accessControlDropdownData: AccessControlDropdownDataResponse = { - 'id': 'default', - 'itemAccessConditionOptions': [ - { - 'name': 'openaccess' - }, - { - 'name': 'administrator' - }, - { - 'name': 'embargo', - 'hasStartDate': true, - 'maxStartDate': '2018-06-24T00:40:54.970+0000' - }, - { - 'name': 'lease', - 'hasEndDate': true, - 'maxEndDate': '2017-12-24T00:40:54.970+0000' - } - ], - 'bitstreamAccessConditionOptions': [ - { - 'name': 'openaccess' - }, - { - 'name': 'administrator' - }, - { - 'name': 'embargo', - 'hasStartDate': true, - 'maxStartDate': '2018-06-24T00:40:54.970+0000' - }, - { - 'name': 'lease', - 'hasEndDate': true, - 'maxEndDate': '2017-12-24T00:40:54.970+0000' - } - ] -}; diff --git a/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts b/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts index 5af7d3189a..9d703c0cf4 100644 --- a/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts +++ b/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts @@ -18,6 +18,9 @@ import { AccessControlArrayFormModule } from '../../shared/access-control-array-form/access-control-array-form.component'; import { UiSwitchModule } from 'ngx-ui-switch'; +import { + AccessControlFormContainerModule +} from '../../shared/access-control-form-container/access-control-form-container.component'; /** * Module that contains all components related to the Edit Collection page administrator functionality @@ -33,6 +36,7 @@ import { UiSwitchModule } from 'ngx-ui-switch'; ComcolModule, AccessControlArrayFormModule, UiSwitchModule, + AccessControlFormContainerModule, ], declarations: [ EditCollectionPageComponent, diff --git a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html index 26f394620a..89999955eb 100644 --- a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html +++ b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html @@ -1,120 +1,6 @@ -
-
-
-

{{ 'community-access-control-title' | translate }}

- -
-
-
-

- {{ 'access-control-item-header-toggle' | translate }} -

- - -
- -
-
- {{'access-control-mode' | translate}} -
-
-
- - -
-
- - -
-
-
- -
-
{{'access-control-access-conditions' | translate}}
- -
- {{'access-control-no-access-conditions-warning-message' | translate}} -
-
- - - - -
-
-
-

- {{ 'access-control-bitstream-header-toggle' | translate }} -

- -
- -
-
- {{'access-control-mode' | translate}} -
-
-
- - -
-
- - -
-
-
- -
-
{{'access-control-access-conditions' | translate}}
- -
- {{'access-control-no-access-conditions-warning-message' | translate}} -
-
- - - - -
-
- -
- -
- - -
-
-
-
+ +

{{'community-access-control-title' | translate }}

+
diff --git a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts index a25adb177c..b24069b9ac 100644 --- a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts +++ b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts @@ -1,63 +1,26 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; -import { CommunityAccessControlService } from './community-access-control.service'; -import { shareReplay } from 'rxjs'; -import { - AccessControlArrayFormComponent -} from '../../../shared/access-control-array-form/access-control-array-form.component'; +import { Component, OnInit } from '@angular/core'; +import { Observable } from 'rxjs'; +import { RemoteData } from '../../../core/data/remote-data'; +import { SelectableListService } from '../../../shared/object-list/selectable-list/selectable-list.service'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { ActivatedRoute } from '@angular/router'; +import { map } from 'rxjs/operators'; +import { getFirstSucceededRemoteData } from '../../../core/shared/operators'; +import { Community } from '../../../core/shared/community.model'; @Component({ selector: 'ds-community-access-control', templateUrl: './community-access-control.component.html', styleUrls: ['./community-access-control.component.scss'], - providers: [CommunityAccessControlService] }) export class CommunityAccessControlComponent implements OnInit { + itemRD$: Observable>; - @ViewChild('bitstreamAccessCmp', { static: true }) bitstreamAccessCmp: AccessControlArrayFormComponent; - @ViewChild('itemAccessCmp', { static: true }) itemAccessCmp: AccessControlArrayFormComponent; - - constructor(private communityAccessControlService: CommunityAccessControlService) {} - - state = initialState; - - dropdownData$ = this.communityAccessControlService.dropdownData$.pipe( - shareReplay(1) - ); + constructor(private route: ActivatedRoute) {} ngOnInit(): void { - - } - - reset() { - this.bitstreamAccessCmp.reset(); - this.itemAccessCmp.reset(); - this.state = initialState; - } - - submit() { - const bitstreamAccess = this.bitstreamAccessCmp.getValue(); - const itemAccess = this.itemAccessCmp.getValue(); - - console.log('bitstreamAccess', bitstreamAccess); - console.log('itemAccess', itemAccess); - } - - handleStatusChange(type: 'item' | 'bitstream', active: boolean) { - if (type === 'bitstream') { - active ? this.bitstreamAccessCmp.enable() : this.bitstreamAccessCmp.disable(); - } else if (type === 'item') { - active ? this.itemAccessCmp.enable() : this.itemAccessCmp.disable(); - } + this.itemRD$ = this.route.parent.parent.data.pipe( + map((data) => data.dso) + ).pipe(getFirstSucceededRemoteData()) as Observable>; } } - -const initialState = { - item: { - toggleStatus: false, - accessMode: '', - }, - bitstream: { - toggleStatus: false, - accessMode: '', - }, -}; diff --git a/src/app/community-page/edit-community-page/edit-community-page.module.ts b/src/app/community-page/edit-community-page/edit-community-page.module.ts index 8aa52086ee..5ed2e401c6 100644 --- a/src/app/community-page/edit-community-page/edit-community-page.module.ts +++ b/src/app/community-page/edit-community-page/edit-community-page.module.ts @@ -15,6 +15,9 @@ import { UiSwitchModule } from 'ngx-ui-switch'; import { AccessControlArrayFormModule } from '../../shared/access-control-array-form/access-control-array-form.component'; +import { + AccessControlFormContainerModule +} from '../../shared/access-control-form-container/access-control-form-container.component'; /** * Module that contains all components related to the Edit Community page administrator functionality @@ -29,6 +32,7 @@ import { ResourcePoliciesModule, UiSwitchModule, AccessControlArrayFormModule, + AccessControlFormContainerModule, ], declarations: [ EditCommunityPageComponent, diff --git a/src/app/item-page/edit-item-page/edit-item-page.module.ts b/src/app/item-page/edit-item-page/edit-item-page.module.ts index fb46697c7d..322c6c6999 100644 --- a/src/app/item-page/edit-item-page/edit-item-page.module.ts +++ b/src/app/item-page/edit-item-page/edit-item-page.module.ts @@ -1,7 +1,7 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { NgbTooltipModule, NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { NgbModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap'; import { SharedModule } from '../../shared/shared.module'; import { EditItemPageRoutingModule } from './edit-item-page.routing.module'; @@ -20,14 +20,22 @@ import { SearchPageModule } from '../../search-page/search-page.module'; import { ItemCollectionMapperComponent } from './item-collection-mapper/item-collection-mapper.component'; import { ItemRelationshipsComponent } from './item-relationships/item-relationships.component'; import { EditRelationshipComponent } from './item-relationships/edit-relationship/edit-relationship.component'; -import { EditRelationshipListComponent } from './item-relationships/edit-relationship-list/edit-relationship-list.component'; +import { + EditRelationshipListComponent +} from './item-relationships/edit-relationship-list/edit-relationship-list.component'; import { AbstractItemUpdateComponent } from './abstract-item-update/abstract-item-update.component'; import { ItemMoveComponent } from './item-move/item-move.component'; -import { ItemEditBitstreamBundleComponent } from './item-bitstreams/item-edit-bitstream-bundle/item-edit-bitstream-bundle.component'; +import { + ItemEditBitstreamBundleComponent +} from './item-bitstreams/item-edit-bitstream-bundle/item-edit-bitstream-bundle.component'; import { BundleDataService } from '../../core/data/bundle-data.service'; import { DragDropModule } from '@angular/cdk/drag-drop'; -import { ItemEditBitstreamDragHandleComponent } from './item-bitstreams/item-edit-bitstream-drag-handle/item-edit-bitstream-drag-handle.component'; -import { PaginatedDragAndDropBitstreamListComponent } from './item-bitstreams/item-edit-bitstream-bundle/paginated-drag-and-drop-bitstream-list/paginated-drag-and-drop-bitstream-list.component'; +import { + ItemEditBitstreamDragHandleComponent +} from './item-bitstreams/item-edit-bitstream-drag-handle/item-edit-bitstream-drag-handle.component'; +import { + PaginatedDragAndDropBitstreamListComponent +} from './item-bitstreams/item-edit-bitstream-bundle/paginated-drag-and-drop-bitstream-list/paginated-drag-and-drop-bitstream-list.component'; import { VirtualMetadataComponent } from './virtual-metadata/virtual-metadata.component'; import { ItemVersionHistoryComponent } from './item-version-history/item-version-history.component'; import { ItemAuthorizationsComponent } from './item-authorizations/item-authorizations.component'; @@ -43,10 +51,10 @@ import { AccessControlArrayFormModule } from '../../shared/access-control-array-form/access-control-array-form.component'; import { UiSwitchModule } from 'ngx-ui-switch'; -import { - ItemAccessControlSelectBitstreamsModalComponent -} from './item-access-control/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component'; import { ResultsBackButtonModule } from '../../shared/results-back-button/results-back-button.module'; +import { + AccessControlFormContainerModule +} from '../../shared/access-control-form-container/access-control-form-container.component'; /** @@ -67,6 +75,7 @@ import { ResultsBackButtonModule } from '../../shared/results-back-button/result AccessControlArrayFormModule, UiSwitchModule, ResultsBackButtonModule, + AccessControlFormContainerModule, ], declarations: [ EditItemPageComponent, @@ -95,7 +104,6 @@ import { ResultsBackButtonModule } from '../../shared/results-back-button/result IdentifierDataComponent, ItemRegisterDoiComponent, ItemAccessControlComponent, - ItemAccessControlSelectBitstreamsModalComponent ], providers: [ BundleDataService, diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html index 6b65f2fe8b..7bef310717 100644 --- a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html +++ b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html @@ -1,159 +1,6 @@ -
-
-
-

{{ 'item-access-control-title' | translate }}

- -
-
-
-

- {{ 'access-control-item-header-toggle' | translate }} -

- - -
- -
-
- {{ 'access-control-mode' | translate }} -
-
-
- - -
-
- - -
-
-
- -
-
{{'access-control-access-conditions' | translate}}
-
- {{'access-control-no-access-conditions-warning-message' | translate}} -
-
- - - - -
-
-
-

- {{'access-control-bitstream-header-toggle' | translate}} -

- - -
- -
-
- {{'access-control-limit-to-specific' | translate}} -
-
-
- - -
-
- - -
-
-
- -
-
- {{'access-control-mode' | translate}} -
-
-
- - -
-
- - -
-
-
- -
-
- {{'access-control-access-conditions' | translate}} -
- -
- {{'access-control-no-access-conditions-warning-message' | translate}} -
-
- - - - -
-
- -
- -
- - -
-
-
-
+ +

{{ 'item-access-control-title' | translate }}

+
diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts index 29f1d55ada..096c66577a 100644 --- a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts +++ b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts @@ -1,48 +1,24 @@ -import { ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild } from '@angular/core'; -import { - AccessControlArrayFormComponent -} from '../../../shared/access-control-array-form/access-control-array-form.component'; -import { concatMap, Observable, shareReplay } from 'rxjs'; +import { Component, OnInit } from '@angular/core'; +import { Observable } from 'rxjs'; import { ItemAccessControlService } from './item-access-control.service'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { - ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID, - ItemAccessControlSelectBitstreamsModalComponent -} from './item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component'; -import { map, take } from 'rxjs/operators'; +import { map } from 'rxjs/operators'; import { getFirstSucceededRemoteData } from '../../../core/shared/operators'; import { RemoteData } from '../../../core/data/remote-data'; import { Item } from '../../../core/shared/item.model'; import { ActivatedRoute } from '@angular/router'; import { SelectableListService } from '../../../shared/object-list/selectable-list/selectable-list.service'; -import { ListableObject } from '../../../shared/object-collection/shared/listable-object.model'; @Component({ selector: 'ds-item-access-control', templateUrl: './item-access-control.component.html', styleUrls: [ './item-access-control.component.scss' ], - providers: [ ItemAccessControlService ] }) -export class ItemAccessControlComponent implements OnInit, OnDestroy { +export class ItemAccessControlComponent implements OnInit { itemRD$: Observable>; - @ViewChild('bitstreamAccessCmp', { static: true }) bitstreamAccessCmp: AccessControlArrayFormComponent; - @ViewChild('itemAccessCmp', { static: true }) itemAccessCmp: AccessControlArrayFormComponent; - - constructor( - private itemAccessControlService: ItemAccessControlService, - private selectableListService: SelectableListService, - protected modalService: NgbModal, - private route: ActivatedRoute, - private cdr: ChangeDetectorRef - ) {} - - state = initialState; - - dropdownData$ = this.itemAccessControlService.dropdownData$.pipe( - shareReplay(1) - ); + constructor(private route: ActivatedRoute) {} ngOnInit(): void { this.itemRD$ = this.route.parent.parent.data.pipe( @@ -50,59 +26,4 @@ export class ItemAccessControlComponent implements OnInit, OnDestroy { ).pipe(getFirstSucceededRemoteData()) as Observable>; } - reset() { - this.bitstreamAccessCmp.reset(); - this.itemAccessCmp.reset(); - this.state = initialState; - } - - submit() { - const bitstreamAccess = this.bitstreamAccessCmp.getValue(); - const itemAccess = this.itemAccessCmp.getValue(); - - this.itemAccessControlService.execute({ - bitstreamAccess, - itemAccess, - state: this.state - }); - } - - handleStatusChange(type: 'item' | 'bitstream', active: boolean) { - if (type === 'bitstream') { - active ? this.bitstreamAccessCmp.enable() : this.bitstreamAccessCmp.disable(); - } else if (type === 'item') { - active ? this.itemAccessCmp.enable() : this.itemAccessCmp.disable(); - } - } - - openSelectBitstreamsModal(item: Item) { - const ref = this.modalService.open(ItemAccessControlSelectBitstreamsModalComponent); - ref.componentInstance.selectedBitstreams = this.state.bitstream.selectedBitstreams; - ref.componentInstance.item = item; - - ref.closed.pipe( - concatMap(() => this.selectableListService.getSelectableList(ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID)), - take(1) - ).subscribe((list) => { - this.state.bitstream.selectedBitstreams = list.selection; - this.cdr.detectChanges(); - }); - } - - ngOnDestroy(): void { - this.selectableListService.deselectAll(ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID); - } } - -const initialState = { - item: { - toggleStatus: false, - accessMode: '', - }, - bitstream: { - toggleStatus: false, - accessMode: '', - changesLimit: '', // 'all' | 'selected' - selectedBitstreams: [] as ListableObject[], - }, -}; diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control.service.ts b/src/app/item-page/edit-item-page/item-access-control/item-access-control.service.ts index 57b28f81b0..6bdc523aa8 100644 --- a/src/app/item-page/edit-item-page/item-access-control/item-access-control.service.ts +++ b/src/app/item-page/edit-item-page/item-access-control/item-access-control.service.ts @@ -8,7 +8,7 @@ export interface AccessControlDropdownDataResponse { bitstreamAccessConditionOptions: AccessControlItem[]; } -@Injectable() +@Injectable({ providedIn: 'root' }) export class ItemAccessControlService { dropdownData$: Observable = of(accessControlDropdownData); diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.html b/src/app/shared/access-control-form-container/access-control-form-container.component.html new file mode 100644 index 0000000000..bcf385f0d4 --- /dev/null +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.html @@ -0,0 +1,163 @@ +
+
+
+ + + + + + +
+
+
+

+ {{ 'access-control-item-header-toggle' | translate }} +

+ + +
+ +
+
+ {{ 'access-control-mode' | translate }} +
+
+
+ + +
+
+ + +
+
+
+ +
+
{{'access-control-access-conditions' | translate}}
+
+ {{'access-control-no-access-conditions-warning-message' | translate}} +
+
+ + + + +
+
+
+

+ {{'access-control-bitstream-header-toggle' | translate}} +

+ + +
+ +
+
+ {{'access-control-limit-to-specific' | translate}} +
+
+
+ + +
+
+ + +
+
+
+ +
+
+ {{'access-control-mode' | translate}} +
+
+
+ + +
+
+ + +
+
+
+ +
+
+ {{'access-control-access-conditions' | translate}} +
+ +
+ {{'access-control-no-access-conditions-warning-message' | translate}} +
+
+ + + + +
+
+ +
+ +
+ + +
+
+
+
diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.scss b/src/app/shared/access-control-form-container/access-control-form-container.component.scss similarity index 100% rename from src/app/item-page/edit-item-page/item-access-control/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.scss rename to src/app/shared/access-control-form-container/access-control-form-container.component.scss diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts new file mode 100644 index 0000000000..871e301209 --- /dev/null +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AccessControlFormContainerComponent } from './access-control-form-container.component'; + +describe('AccessControlFormContainerComponent', () => { + let component: AccessControlFormContainerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AccessControlFormContainerComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AccessControlFormContainerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts new file mode 100644 index 0000000000..00030f8474 --- /dev/null +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -0,0 +1,119 @@ +import { ChangeDetectorRef, Component, Input, NgModule, ViewChild } from '@angular/core'; +import { concatMap, shareReplay } from 'rxjs'; +import { RemoteData } from '../../core/data/remote-data'; +import { Item } from '../../core/shared/item.model'; +import { + AccessControlArrayFormComponent, + AccessControlArrayFormModule +} from '../access-control-array-form/access-control-array-form.component'; +import { + ItemAccessControlService +} from '../../item-page/edit-item-page/item-access-control/item-access-control.service'; +import { SelectableListService } from '../object-list/selectable-list/selectable-list.service'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { take } from 'rxjs/operators'; +import { CommonModule } from '@angular/common'; +import { ListableObject } from '../object-collection/shared/listable-object.model'; +import { SharedModule } from '../shared.module'; +import { TranslateModule } from '@ngx-translate/core'; +import { UiSwitchModule } from 'ngx-ui-switch'; +import { DSpaceObject } from '../../core/shared/dspace-object.model'; +import { + ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID, + ItemAccessControlSelectBitstreamsModalComponent +} from './item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component'; + +@Component({ + selector: 'ds-access-control-form-container', + templateUrl: './access-control-form-container.component.html', + styleUrls: ['./access-control-form-container.component.scss'] +}) +export class AccessControlFormContainerComponent { + + @Input() showLimitToSpecificBitstreams = false; + @Input() itemRD: RemoteData; + + @ViewChild('bitstreamAccessCmp', { static: true }) bitstreamAccessCmp: AccessControlArrayFormComponent; + @ViewChild('itemAccessCmp', { static: true }) itemAccessCmp: AccessControlArrayFormComponent; + + constructor( + private itemAccessControlService: ItemAccessControlService, + private selectableListService: SelectableListService, + protected modalService: NgbModal, + private cdr: ChangeDetectorRef + ) {} + + state = initialState; + + dropdownData$ = this.itemAccessControlService.dropdownData$.pipe( + shareReplay(1) + ); + + reset() { + this.bitstreamAccessCmp.reset(); + this.itemAccessCmp.reset(); + this.state = initialState; + } + + submit() { + const bitstreamAccess = this.bitstreamAccessCmp.getValue(); + const itemAccess = this.itemAccessCmp.getValue(); + + this.itemAccessControlService.execute({ + bitstreamAccess, + itemAccess, + state: this.state + }); + } + + handleStatusChange(type: 'item' | 'bitstream', active: boolean) { + if (type === 'bitstream') { + active ? this.bitstreamAccessCmp.enable() : this.bitstreamAccessCmp.disable(); + } else if (type === 'item') { + active ? this.itemAccessCmp.enable() : this.itemAccessCmp.disable(); + } + } + + openSelectBitstreamsModal(item: Item) { + const ref = this.modalService.open(ItemAccessControlSelectBitstreamsModalComponent); + ref.componentInstance.selectedBitstreams = this.state.bitstream.selectedBitstreams; + ref.componentInstance.item = item; + + ref.closed.pipe( + concatMap(() => this.selectableListService.getSelectableList(ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID)), + take(1) + ).subscribe((list) => { + this.state.bitstream.selectedBitstreams = list.selection; + this.cdr.detectChanges(); + }); + } + + // eslint-disable-next-line @angular-eslint/use-lifecycle-interface + ngOnDestroy(): void { + this.selectableListService.deselectAll(ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID); + } +} + + +const initialState = { + item: { + toggleStatus: false, + accessMode: '', + }, + bitstream: { + toggleStatus: false, + accessMode: '', + changesLimit: '', // 'all' | 'selected' + selectedBitstreams: [] as ListableObject[], + }, +}; + + +@NgModule({ + imports: [ CommonModule, AccessControlArrayFormModule, SharedModule, TranslateModule, UiSwitchModule ], + exports: [AccessControlFormContainerComponent], + declarations: [ AccessControlFormContainerComponent, ItemAccessControlSelectBitstreamsModalComponent ], +}) +export class AccessControlFormContainerModule {} + + diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.html b/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.html similarity index 100% rename from src/app/item-page/edit-item-page/item-access-control/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.html rename to src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.html diff --git a/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.scss b/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.spec.ts b/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.spec.ts similarity index 100% rename from src/app/item-page/edit-item-page/item-access-control/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.spec.ts rename to src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.spec.ts diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.ts b/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.ts similarity index 69% rename from src/app/item-page/edit-item-page/item-access-control/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.ts rename to src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.ts index dbae803c44..171b1d59c1 100644 --- a/src/app/item-page/edit-item-page/item-access-control/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.ts +++ b/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.ts @@ -1,17 +1,17 @@ import { Component, Input, OnInit } from '@angular/core'; import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; -import { PaginationService } from '../../../../core/pagination/pagination.service'; -import { TranslateService } from '@ngx-translate/core'; -import { BitstreamDataService } from '../../../../core/data/bitstream-data.service'; import { BehaviorSubject } from 'rxjs'; -import { Item } from '../../../../core/shared/item.model'; -import { getFirstCompletedRemoteData } from '../../../../core/shared/operators'; -import { PaginatedList } from '../../../../core/data/paginated-list.model'; -import { Bitstream } from '../../../../core/shared/bitstream.model'; -import { RemoteData } from '../../../../core/data/remote-data'; -import { PaginationComponentOptions } from '../../../../shared/pagination/pagination-component-options.model'; -import { hasValue } from '../../../../shared/empty.util'; -import { Context } from '../../../../core/shared/context.model'; +import { PaginatedList } from 'src/app/core/data/paginated-list.model'; +import { RemoteData } from 'src/app/core/data/remote-data'; +import { Bitstream } from 'src/app/core/shared/bitstream.model'; +import { Context } from 'src/app/core/shared/context.model'; +import { PaginationComponentOptions } from '../../pagination/pagination-component-options.model'; +import { Item } from '../../../core/shared/item.model'; +import { BitstreamDataService } from '../../../core/data/bitstream-data.service'; +import { PaginationService } from '../../../core/pagination/pagination.service'; +import { TranslateService } from '@ngx-translate/core'; +import { hasValue } from '../../empty.util'; +import { getFirstCompletedRemoteData } from '../../../core/shared/operators'; export const ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID = 'item-access-control-select-bitstreams' From 723e1e1278a3c5a12f02d5b0375cc53da3999614 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Wed, 10 May 2023 15:11:44 +0200 Subject: [PATCH 060/425] [CST-9636] Make access control form container reusable --- .../browse/bulk-access-browse.component.ts | 54 +++++++++++++++++-- .../item-access-control.component.ts | 3 -- ...cess-control-form-container.component.html | 11 ++-- ...access-control-form-container.component.ts | 45 ++++++++++++---- .../bulk-access-control.service.ts} | 25 +++++++-- 5 files changed, 110 insertions(+), 28 deletions(-) rename src/app/{item-page/edit-item-page/item-access-control/item-access-control.service.ts => shared/access-control-form-container/bulk-access-control.service.ts} (66%) diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts index a91cdf35df..e6dba0cafe 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts @@ -16,7 +16,56 @@ import { PaginationComponentOptions } from '../../../shared/pagination/paginatio @Component({ selector: 'ds-bulk-access-browse', - templateUrl: './bulk-access-browse.component.html', + template: ` + + + +
+ +
+
+ + +
+
+
+
+ + +
+
+
+
+ `, styleUrls: ['./bulk-access-browse.component.scss'], providers: [ { @@ -44,8 +93,7 @@ export class BulkAccessBrowseComponent implements OnInit { paginationOptions: PaginationComponentOptions; private subs: Subscription[] = []; - constructor(private selectableListService: SelectableListService) { - } + constructor(private selectableListService: SelectableListService) {} ngOnInit(): void { this.paginationOptions = Object.assign(new PaginationComponentOptions(), { diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts index 096c66577a..874b624494 100644 --- a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts +++ b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts @@ -1,13 +1,10 @@ import { Component, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; -import { ItemAccessControlService } from './item-access-control.service'; -import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { map } from 'rxjs/operators'; import { getFirstSucceededRemoteData } from '../../../core/shared/operators'; import { RemoteData } from '../../../core/data/remote-data'; import { Item } from '../../../core/shared/item.model'; import { ActivatedRoute } from '@angular/router'; -import { SelectableListService } from '../../../shared/object-list/selectable-list/selectable-list.service'; @Component({ selector: 'ds-item-access-control', diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.html b/src/app/shared/access-control-form-container/access-control-form-container.component.html index bcf385f0d4..71175ce588 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.html +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.html @@ -3,10 +3,6 @@
- - - -
@@ -95,7 +91,8 @@ @@ -148,9 +145,9 @@
-
+
-
+
diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index 00030f8474..a2e9cb08ab 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -6,9 +6,7 @@ import { AccessControlArrayFormComponent, AccessControlArrayFormModule } from '../access-control-array-form/access-control-array-form.component'; -import { - ItemAccessControlService -} from '../../item-page/edit-item-page/item-access-control/item-access-control.service'; +import { BulkAccessControlService } from './bulk-access-control.service'; import { SelectableListService } from '../object-list/selectable-list/selectable-list.service'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { take } from 'rxjs/operators'; @@ -26,18 +24,21 @@ import { @Component({ selector: 'ds-access-control-form-container', templateUrl: './access-control-form-container.component.html', - styleUrls: ['./access-control-form-container.component.scss'] + styleUrls: [ './access-control-form-container.component.scss' ], + exportAs: 'dsAccessControlForm' }) export class AccessControlFormContainerComponent { @Input() showLimitToSpecificBitstreams = false; @Input() itemRD: RemoteData; + @Input() hideSubmit = false; + @ViewChild('bitstreamAccessCmp', { static: true }) bitstreamAccessCmp: AccessControlArrayFormComponent; @ViewChild('itemAccessCmp', { static: true }) itemAccessCmp: AccessControlArrayFormComponent; constructor( - private itemAccessControlService: ItemAccessControlService, + private bulkAccessControlService: BulkAccessControlService, private selectableListService: SelectableListService, protected modalService: NgbModal, private cdr: ChangeDetectorRef @@ -45,10 +46,18 @@ export class AccessControlFormContainerComponent { state = initialState; - dropdownData$ = this.itemAccessControlService.dropdownData$.pipe( + dropdownData$ = this.bulkAccessControlService.dropdownData$.pipe( shareReplay(1) ); + getFormValue() { + return { + bitstream: this.bitstreamAccessCmp.getValue(), + item: this.itemAccessCmp.getValue(), + state: this.state + }; + } + reset() { this.bitstreamAccessCmp.reset(); this.itemAccessCmp.reset(); @@ -59,11 +68,18 @@ export class AccessControlFormContainerComponent { const bitstreamAccess = this.bitstreamAccessCmp.getValue(); const itemAccess = this.itemAccessCmp.getValue(); - this.itemAccessControlService.execute({ + const { file } = this.bulkAccessControlService.createPayloadFile({ bitstreamAccess, itemAccess, state: this.state }); + + this.bulkAccessControlService.executeScript( + [ this.itemRD.payload.uuid ], + file + ).pipe(take(1)).subscribe((res) => { + console.log('success', res); + }); } handleStatusChange(type: 'item' | 'bitstream', active: boolean) { @@ -110,9 +126,18 @@ const initialState = { @NgModule({ - imports: [ CommonModule, AccessControlArrayFormModule, SharedModule, TranslateModule, UiSwitchModule ], - exports: [AccessControlFormContainerComponent], - declarations: [ AccessControlFormContainerComponent, ItemAccessControlSelectBitstreamsModalComponent ], + imports: [ + CommonModule, + AccessControlArrayFormModule, + SharedModule, + TranslateModule, + UiSwitchModule + ], + declarations: [ + AccessControlFormContainerComponent, + ItemAccessControlSelectBitstreamsModalComponent + ], + exports: [ AccessControlFormContainerComponent ], }) export class AccessControlFormContainerModule {} diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control.service.ts b/src/app/shared/access-control-form-container/bulk-access-control.service.ts similarity index 66% rename from src/app/item-page/edit-item-page/item-access-control/item-access-control.service.ts rename to src/app/shared/access-control-form-container/bulk-access-control.service.ts index 6bdc523aa8..85ec05cd60 100644 --- a/src/app/item-page/edit-item-page/item-access-control/item-access-control.service.ts +++ b/src/app/shared/access-control-form-container/bulk-access-control.service.ts @@ -1,6 +1,8 @@ import { Injectable } from '@angular/core'; import { Observable, of } from 'rxjs'; -import { AccessControlItem } from '../../../core/shared/bulk-access-condition-options.model'; +import { AccessControlItem } from '../../core/shared/bulk-access-condition-options.model'; +import { ScriptDataService } from '../../core/data/processes/script-data.service'; +import { ProcessParameter } from '../../process-page/processes/process-parameter.model'; export interface AccessControlDropdownDataResponse { id: string; @@ -9,11 +11,12 @@ export interface AccessControlDropdownDataResponse { } @Injectable({ providedIn: 'root' }) -export class ItemAccessControlService { +export class BulkAccessControlService { + constructor(private scriptService: ScriptDataService) {} + dropdownData$: Observable = of(accessControlDropdownData); - - execute(payload: any) { + createPayloadFile(payload: any) { console.log('execute', payload); const blob = new Blob([JSON.stringify(payload, null, 2)], { @@ -25,7 +28,19 @@ export class ItemAccessControlService { }); const url = URL.createObjectURL(file); - window.open(url, '_blank'); + window.open(url, '_blank'); // remove this later + + return { url, file }; + } + + executeScript(uuids: string[], file: File) { + console.log('execute', { uuids, file }); + + const params: ProcessParameter[] = [ + { name: 'uuid', value: uuids.join(',') }, + ]; + + return this.scriptService.invoke('bulk-access-control', params, [file]); } } From 35d4561d53f75c40c307c01a084d50fb780020b0 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Wed, 10 May 2023 15:12:55 +0200 Subject: [PATCH 061/425] [CST-9636] WIP improve bulk access page --- .../browse/bulk-access-browse.component.html | 23 +++-- .../browse/bulk-access-browse.component.ts | 89 +++++++++++++++---- .../bulk-access/bulk-access.component.html | 4 +- .../bulk-access/bulk-access.component.ts | 6 ++ .../bulk-access-settings.component.ts | 7 +- 5 files changed, 100 insertions(+), 29 deletions(-) diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html index 760134aba5..9851aab835 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html @@ -22,7 +22,7 @@ {{'admin.access-control.bulk-access-browse.search.header' | translate}}
- @@ -30,15 +30,20 @@
  • - {{'admin.access-control.bulk-access-browse.selected.header' | translate: {number: ((objectsSelected$ | async)?.payload?.totalElements) ? (objectsSelected$ | async)?.payload?.totalElements : '0'} }} + + {{'admin.access-control.bulk-access-browse.selected.header' | translate: {number: ((objectsSelected$ | async)?.payload?.totalElements) ? (objectsSelected$ | async)?.payload?.totalElements : '0'} }} + - +
  • diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts index a91cdf35df..ed94398f6d 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, Input, OnDestroy, OnInit } from '@angular/core'; import { BehaviorSubject, Subscription } from 'rxjs'; import { distinctUntilChanged, map } from 'rxjs/operators'; @@ -13,6 +13,7 @@ import { ListableObject } from '../../../shared/object-collection/shared/listabl import { createSuccessfulRemoteDataObject } from '../../../shared/remote-data.utils'; import { PageInfo } from '../../../core/shared/page-info.model'; import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model'; +import { hasValue } from '../../../shared/empty.util'; @Component({ selector: 'ds-bulk-access-browse', @@ -25,43 +26,97 @@ import { PaginationComponentOptions } from '../../../shared/pagination/paginatio } ] }) -export class BulkAccessBrowseComponent implements OnInit { +export class BulkAccessBrowseComponent implements OnInit, OnDestroy { + + /** + * The selection list id + */ + @Input() listId!: string; + /** * The active nav id */ activateId = 'search'; - /** - * The selection list id - */ - listId: string = 'bulk-access-list'; - /** * The list of the objects already selected */ objectsSelected$: BehaviorSubject>> = new BehaviorSubject>>(null); - paginationOptions: PaginationComponentOptions; + /** + * The pagination options object used for the list of selected elements + */ + paginationOptions$: BehaviorSubject = new BehaviorSubject(Object.assign(new PaginationComponentOptions(), { + id: 'bas', + pageSize: 5, + currentPage: 1 + })); + + /** + * Array to track all subscriptions and unsubscribe them onDestroy + */ private subs: Subscription[] = []; constructor(private selectableListService: SelectableListService) { } + /** + * Subscribe to selectable list updates + */ ngOnInit(): void { - this.paginationOptions = Object.assign(new PaginationComponentOptions(), { - id: 'elp', - pageSize: 10, - currentPage: 1 - }); + this.subs.push( this.selectableListService.getSelectableList(this.listId).pipe( distinctUntilChanged(), - map((list: SelectableListState) => { - console.log(list); - return createSuccessfulRemoteDataObject(buildPaginatedList(new PageInfo(), list?.selection || [])) - }) + map((list: SelectableListState) => this.generatePaginatedListBySelectedElements(list)) ).subscribe(this.objectsSelected$) ) } + pageNext() { + this.paginationOptions$.next(Object.assign(new PaginationComponentOptions(), this.paginationOptions$.value, { + currentPage: this.paginationOptions$.value.currentPage + 1 + })); + console.log(this.paginationOptions$.value); + } + + pagePrev() { + this.paginationOptions$.next(Object.assign(new PaginationComponentOptions(), this.paginationOptions$.value, { + currentPage: this.paginationOptions$.value.currentPage - 1 + })); + console.log(this.paginationOptions$.value); + } + + private calculatePageCount(pageSize, totalCount = 0) { + // we suppose that if we have 0 items we want 1 empty page + return totalCount < pageSize ? 1 : Math.ceil(totalCount / pageSize); + }; + + /** + * Generate The RemoteData object containing the list of the selected elements + * @param list + * @private + */ + private generatePaginatedListBySelectedElements(list: SelectableListState): RemoteData> { + const pageInfo = new PageInfo({ + elementsPerPage: this.paginationOptions$.value.pageSize, + totalElements: list?.selection.length, + totalPages: this.calculatePageCount(this.paginationOptions$.value.pageSize, list?.selection.length), + currentPage: this.paginationOptions$.value.currentPage + }); + if (pageInfo.currentPage > pageInfo.totalPages) { + pageInfo.currentPage = pageInfo.totalPages; + this.paginationOptions$.next(Object.assign(new PaginationComponentOptions(), this.paginationOptions$.value, { + currentPage: pageInfo.currentPage + })); + } + return createSuccessfulRemoteDataObject(buildPaginatedList(pageInfo, list?.selection || [])); + } + + ngOnDestroy(): void { + this.subs + .filter((sub) => hasValue(sub)) + .forEach((sub) => sub.unsubscribe()); + this.selectableListService.deselectAll(this.listId) + } } diff --git a/src/app/access-control/bulk-access/bulk-access.component.html b/src/app/access-control/bulk-access/bulk-access.component.html index e0eafb6e36..12ab88cd1a 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.html +++ b/src/app/access-control/bulk-access/bulk-access.component.html @@ -1,8 +1,8 @@
    - +
    - +
    diff --git a/src/app/access-control/bulk-access/bulk-access.component.ts b/src/app/access-control/bulk-access/bulk-access.component.ts index 9e45b2c59b..bc0d293e61 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.ts +++ b/src/app/access-control/bulk-access/bulk-access.component.ts @@ -7,6 +7,12 @@ import { Component, OnInit } from '@angular/core'; }) export class BulkAccessComponent implements OnInit { + + /** + * The selection list id + */ + listId: string = 'bulk-access-list'; + constructor() { } ngOnInit(): void { diff --git a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts index 631b786b01..cad9e5b981 100644 --- a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts +++ b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, Input, OnInit } from '@angular/core'; @Component({ selector: 'ds-bulk-access-settings', @@ -7,6 +7,11 @@ import { Component, OnInit } from '@angular/core'; }) export class BulkAccessSettingsComponent implements OnInit { + /** + * The selection list id + */ + @Input() listId!: string; + constructor() { } ngOnInit(): void { From 5455c79563d75b69e80240ad981f4e7c684d541d Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Wed, 10 May 2023 15:53:00 +0200 Subject: [PATCH 062/425] [CST-9636] WIP add bulk-access-config-data.service --- .../browse/bulk-access-browse.component.ts | 51 +--------------- .../community-access-control.service.ts | 59 ------------------- .../bulk-access-config-data.service.ts} | 18 +++--- src/app/core/config/config-data.service.ts | 8 ++- .../bulk-access-condition-options.model.ts | 38 ++++++++++++ .../bulk-access-condition-options.model.ts | 45 -------------- .../access-control-array-form.component.html | 6 +- .../access-control-array-form.component.ts | 29 ++++++--- .../control-max-end-date.pipe.ts | 4 +- .../control-max-start-date.pipe.ts | 5 +- ...cess-control-form-container.component.html | 10 +--- ...access-control-form-container.component.ts | 17 ++++-- .../bulk-access-control.service.ts | 51 +--------------- 13 files changed, 97 insertions(+), 244 deletions(-) delete mode 100644 src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts rename src/app/core/{data/bulk-access-condition-options.service.ts => config/bulk-access-config-data.service.ts} (53%) create mode 100644 src/app/core/config/models/bulk-access-condition-options.model.ts delete mode 100644 src/app/core/shared/bulk-access-condition-options.model.ts diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts index 43adae7ec0..7cbb8740a7 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts @@ -17,56 +17,7 @@ import { hasValue } from '../../../shared/empty.util'; @Component({ selector: 'ds-bulk-access-browse', - template: ` - - - -
    - -
    -
    - - -
    -
    -
    -
    - - -
    -
    -
    -
    - `, + templateUrl: 'bulk-access-browse.component.html', styleUrls: ['./bulk-access-browse.component.scss'], providers: [ { diff --git a/src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts b/src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts deleted file mode 100644 index 89534683b7..0000000000 --- a/src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { Injectable } from '@angular/core'; -import { of } from 'rxjs'; -import { BulkAccessConditionOptionsService } from '../../../core/data/bulk-access-condition-options.service'; -import { BulkAccessConditionOptions } from '../../../core/shared/bulk-access-condition-options.model'; - - -@Injectable() -export class CommunityAccessControlService { - constructor(private service: BulkAccessConditionOptionsService) {} - - dropdownData$ = of(accessControlDropdownData); - - // dropdownData$ = this.service.getAll().pipe( - // getAllSucceededRemoteData(), - // filter((data) => data.hasSucceeded), - // map((data) => data.payload) - // ); -} - -const accessControlDropdownData: BulkAccessConditionOptions = { - _links: { self: undefined }, type: undefined, uuid: '', - 'id': 'default', - 'itemAccessConditionOptions': [ - { - 'name': 'openaccess' - }, - { - 'name': 'administrator' - }, - { - 'name': 'embargo', - 'hasStartDate': true, - 'maxStartDate': '2018-06-24T00:40:54.970+0000' - }, - { - 'name': 'lease', - 'hasEndDate': true, - 'maxEndDate': '2017-12-24T00:40:54.970+0000' - } - ], - 'bitstreamAccessConditionOptions': [ - { - 'name': 'openaccess' - }, - { - 'name': 'administrator' - }, - { - 'name': 'embargo', - 'hasStartDate': true, - 'maxStartDate': '2018-06-24T00:40:54.970+0000' - }, - { - 'name': 'lease', - 'hasEndDate': true, - 'maxEndDate': '2017-12-24T00:40:54.970+0000' - } - ] -}; diff --git a/src/app/core/data/bulk-access-condition-options.service.ts b/src/app/core/config/bulk-access-config-data.service.ts similarity index 53% rename from src/app/core/data/bulk-access-condition-options.service.ts rename to src/app/core/config/bulk-access-config-data.service.ts index 30e0402dbf..f27b59eee1 100644 --- a/src/app/core/data/bulk-access-condition-options.service.ts +++ b/src/app/core/config/bulk-access-config-data.service.ts @@ -3,16 +3,16 @@ import { Observable } from 'rxjs'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; -import { RemoteData } from './remote-data'; -import { RequestService } from './request.service'; -import { IdentifiableDataService } from './base/identifiable-data.service'; -import { BulkAccessConditionOptions } from '../shared/bulk-access-condition-options.model'; +import { RemoteData } from '../data/remote-data'; +import { RequestService } from '../data/request.service'; +import { BulkAccessConditionOptions } from './models/bulk-access-condition-options.model'; +import { ConfigDataService } from './config-data.service'; @Injectable({ providedIn: 'root' }) /** * Data Service responsible for retrieving Bulk Access Condition Options from the REST API */ -export class BulkAccessConditionOptionsService extends IdentifiableDataService { +export class BulkAccessConfigDataService extends ConfigDataService { constructor( protected requestService: RequestService, @@ -23,11 +23,7 @@ export class BulkAccessConditionOptionsService extends IdentifiableDataService> { - return this.findByHref(this.halService.getEndpoint(this.linkPath)); + findByPropertyName(name: string): Observable> { + return this.findById(name) as Observable>; } - - // findByPropertyName(name: string): Observable> { - // return this.findById(name); - // } } diff --git a/src/app/core/config/config-data.service.ts b/src/app/core/config/config-data.service.ts index 9ef2f11ad1..f8f46435c5 100644 --- a/src/app/core/config/config-data.service.ts +++ b/src/app/core/config/config-data.service.ts @@ -4,13 +4,13 @@ import { RemoteData } from '../data/remote-data'; import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { getFirstCompletedRemoteData } from '../shared/operators'; import { map } from 'rxjs/operators'; -import { BaseDataService } from '../data/base/base-data.service'; +import { IdentifiableDataService } from '../data/base/identifiable-data.service'; /** * Abstract data service to retrieve configuration objects from the REST server. * Common logic for configuration objects should be implemented here. */ -export abstract class ConfigDataService extends BaseDataService { +export abstract class ConfigDataService extends IdentifiableDataService { /** * Returns an observable of {@link RemoteData} of an object, based on an href, with a list of * {@link FollowLinkConfig}, to automatically resolve {@link HALLink}s of the object @@ -37,4 +37,8 @@ export abstract class ConfigDataService extends BaseDataService { }), ); } + + findByName(name: string, useCachedVersionIfAvailable = true, reRequestOnStale = true, ...linksToFollow: FollowLinkConfig[]): Observable> { + return super.findById(name, useCachedVersionIfAvailable, reRequestOnStale, ...linksToFollow); + } } diff --git a/src/app/core/config/models/bulk-access-condition-options.model.ts b/src/app/core/config/models/bulk-access-condition-options.model.ts new file mode 100644 index 0000000000..f10965ea31 --- /dev/null +++ b/src/app/core/config/models/bulk-access-condition-options.model.ts @@ -0,0 +1,38 @@ +import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; +import { typedObject } from '../../cache/builders/build-decorators'; +import { excludeFromEquals } from '../../utilities/equals.decorators'; +import { ResourceType } from '../../shared/resource-type'; +import { HALLink } from '../../shared/hal-link.model'; +import { ConfigObject } from './config.model'; +import { AccessesConditionOption } from './config-accesses-conditions-options.model'; + +export const BULK_ACCESS_CONDITION_OPTIONS = new ResourceType('bulkAccessConditionOptions'); + +/** + * Model class for a bulk access condition options + */ +@typedObject +export class BulkAccessConditionOptions extends ConfigObject { + static type = BULK_ACCESS_CONDITION_OPTIONS; + + /** + * The object type + */ + @excludeFromEquals + @autoserialize + type: ResourceType; + + @autoserializeAs(String, 'name') + uuid: string; + + @autoserialize + id: string; + + @deserialize + itemAccessConditionOptions: AccessesConditionOption[]; + + @deserialize + bitstreamAccessConditionOptions: AccessesConditionOption[]; + + _links: { self: HALLink }; +} diff --git a/src/app/core/shared/bulk-access-condition-options.model.ts b/src/app/core/shared/bulk-access-condition-options.model.ts deleted file mode 100644 index a1c8fe0702..0000000000 --- a/src/app/core/shared/bulk-access-condition-options.model.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; -import { typedObject } from '../cache/builders/build-decorators'; -import { excludeFromEquals } from '../utilities/equals.decorators'; -import { ResourceType } from './resource-type'; -import { CacheableObject } from '../cache/cacheable-object.model'; -import { HALLink } from './hal-link.model'; - -export const BULK_ACCESS_CONDITION_OPTIONS = new ResourceType('bulkAccessConditionOptions'); - -/** - * Model class for a bulk access condition options - */ -@typedObject -export class BulkAccessConditionOptions implements CacheableObject { - static type = BULK_ACCESS_CONDITION_OPTIONS; - - /** - * The object type - */ - @excludeFromEquals - @autoserialize - type: ResourceType; - - @autoserializeAs(String, 'name') - uuid: string; - - @autoserialize - id: string; - - @deserialize - itemAccessConditionOptions: AccessControlItem[]; - - @deserialize - bitstreamAccessConditionOptions: AccessControlItem[]; - - _links: { self: HALLink }; -} - -export interface AccessControlItem { - name: string - hasStartDate?: boolean - maxStartDate?: string - hasEndDate?: boolean - maxEndDate?: string -} diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.html b/src/app/shared/access-control-array-form/access-control-array-form.component.html index 24dcc11120..5d0fb6d97e 100644 --- a/src/app/shared/access-control-array-form/access-control-array-form.component.html +++ b/src/app/shared/access-control-array-form/access-control-array-form.component.html @@ -7,7 +7,7 @@
    @@ -20,7 +20,7 @@ placeholder="yyyy-mm-dd" name="dp" formControlName="startDate" - [minDate]="control | maxStartDate: dropdownOptions" + [minDate]="control | maxStartDate: (dropdownData$ | async)" ngbDatepicker #d="ngbDatepicker" /> @@ -40,7 +40,7 @@ placeholder="yyyy-mm-dd" name="dp" formControlName="endDate" - [maxDate]="control | maxEndDate: dropdownOptions" + [maxDate]="control | maxEndDate: (dropdownData$ | async)" ngbDatepicker #d1="ngbDatepicker" /> diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-array-form/access-control-array-form.component.ts index ace507a3a6..13d13375b2 100644 --- a/src/app/shared/access-control-array-form/access-control-array-form.component.ts +++ b/src/app/shared/access-control-array-form/access-control-array-form.component.ts @@ -1,4 +1,4 @@ -import { Component, Input, NgModule, OnDestroy, OnInit } from '@angular/core'; +import { Component, NgModule, OnDestroy, OnInit } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FormArray, FormBuilder, FormControl, ReactiveFormsModule } from '@angular/forms'; import { SharedBrowseByModule } from '../browse-by/shared-browse-by.module'; @@ -6,9 +6,13 @@ import { TranslateModule } from '@ngx-translate/core'; import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap'; import { ControlMaxStartDatePipe } from './control-max-start-date.pipe'; import { ControlMaxEndDatePipe } from './control-max-end-date.pipe'; -import { AccessControlItem } from '../../core/shared/bulk-access-condition-options.model'; -import { distinctUntilChanged, takeUntil } from 'rxjs/operators'; + +import { distinctUntilChanged, map, shareReplay, takeUntil, tap } from 'rxjs/operators'; import { Subject } from 'rxjs'; +import { getFirstCompletedRemoteData } from '../../core/shared/operators'; +import { RemoteData } from '../../core/data/remote-data'; +import { BulkAccessConditionOptions } from '../../core/config/models/bulk-access-condition-options.model'; +import { BulkAccessConfigDataService } from '../../core/config/bulk-access-config-data.service'; // will be used on the form value @@ -25,8 +29,6 @@ export interface AccessControlItemValue { exportAs: 'accessControlArrayForm' }) export class AccessControlArrayFormComponent implements OnInit, OnDestroy { - @Input() dropdownOptions: AccessControlItem[] = []; - @Input() accessControlItems: AccessControlItemValue[] = []; private destroy$ = new Subject(); @@ -34,17 +36,28 @@ export class AccessControlArrayFormComponent implements OnInit, OnDestroy { accessControl: this.fb.array([]) }); - constructor(private fb: FormBuilder) { + constructor(private bulkAccessConfigService: BulkAccessConfigDataService, + private fb: FormBuilder) { } + dropdownData$ = this.bulkAccessConfigService.findByPropertyName('default').pipe( + getFirstCompletedRemoteData(), + map((configRD: RemoteData) => configRD.hasSucceeded ? configRD.payload : null), + shareReplay(1), + tap(console.log) + ); + ngOnInit(): void { - if (this.accessControlItems.length === 0) { + // console.log(this.dropdownOptions); +/* if (this.accessControlItems.length === 0) { this.addAccessControlItem(); } else { for (const item of this.accessControlItems) { this.addAccessControlItem(item.itemName); } - } + }*/ + + this.addAccessControlItem(); this.accessControl.valueChanges .pipe( diff --git a/src/app/shared/access-control-array-form/control-max-end-date.pipe.ts b/src/app/shared/access-control-array-form/control-max-end-date.pipe.ts index 810f3e71d0..86ba3b996a 100644 --- a/src/app/shared/access-control-array-form/control-max-end-date.pipe.ts +++ b/src/app/shared/access-control-array-form/control-max-end-date.pipe.ts @@ -1,7 +1,7 @@ import { Pipe, PipeTransform } from '@angular/core'; import { AbstractControl } from '@angular/forms'; import { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap/datepicker/ngb-date-struct'; -import { AccessControlItem } from 'src/app/core/shared/bulk-access-condition-options.model'; +import { AccessesConditionOption } from '../../core/config/models/config-accesses-conditions-options.model'; @Pipe({ // eslint-disable-next-line @angular-eslint/pipe-prefix @@ -9,7 +9,7 @@ import { AccessControlItem } from 'src/app/core/shared/bulk-access-condition-opt pure: false }) export class ControlMaxEndDatePipe implements PipeTransform { - transform(control: AbstractControl, dropdownOptions: AccessControlItem[]): NgbDateStruct | null { + transform(control: AbstractControl, dropdownOptions: AccessesConditionOption[]): NgbDateStruct | null { const { itemName } = control.value; const item = dropdownOptions.find((x) => x.name === itemName); if (!item?.hasEndDate) { diff --git a/src/app/shared/access-control-array-form/control-max-start-date.pipe.ts b/src/app/shared/access-control-array-form/control-max-start-date.pipe.ts index 458cb36465..77be77b029 100644 --- a/src/app/shared/access-control-array-form/control-max-start-date.pipe.ts +++ b/src/app/shared/access-control-array-form/control-max-start-date.pipe.ts @@ -1,7 +1,8 @@ import { Pipe, PipeTransform } from '@angular/core'; import { AbstractControl } from '@angular/forms'; import { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap/datepicker/ngb-date-struct'; -import { AccessControlItem } from 'src/app/core/shared/bulk-access-condition-options.model'; +import { AccessesConditionOption } from '../../core/config/models/config-accesses-conditions-options.model'; + @Pipe({ // eslint-disable-next-line @angular-eslint/pipe-prefix @@ -9,7 +10,7 @@ import { AccessControlItem } from 'src/app/core/shared/bulk-access-condition-opt pure: false }) export class ControlMaxStartDatePipe implements PipeTransform { - transform(control: AbstractControl, dropdownOptions: AccessControlItem[]): NgbDateStruct | null { + transform(control: AbstractControl, dropdownOptions: AccessesConditionOption[]): NgbDateStruct | null { const { itemName } = control.value; const item = dropdownOptions.find((x) => x.name === itemName); if (!item?.hasStartDate) { diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.html b/src/app/shared/access-control-form-container/access-control-form-container.component.html index 71175ce588..70f1b1e6cd 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.html +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.html @@ -48,10 +48,7 @@
    - - +
    @@ -137,10 +134,7 @@
    - - +
    diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index a2e9cb08ab..0807236796 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectorRef, Component, Input, NgModule, ViewChild } from '@angular/core'; -import { concatMap, shareReplay } from 'rxjs'; +import { concatMap } from 'rxjs'; import { RemoteData } from '../../core/data/remote-data'; import { Item } from '../../core/shared/item.model'; import { @@ -20,6 +20,7 @@ import { ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID, ItemAccessControlSelectBitstreamsModalComponent } from './item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component'; +import { BulkAccessConfigDataService } from '../../core/config/bulk-access-config-data.service'; @Component({ selector: 'ds-access-control-form-container', @@ -27,7 +28,7 @@ import { styleUrls: [ './access-control-form-container.component.scss' ], exportAs: 'dsAccessControlForm' }) -export class AccessControlFormContainerComponent { +export class AccessControlFormContainerComponent implements OnInit { @Input() showLimitToSpecificBitstreams = false; @Input() itemRD: RemoteData; @@ -38,6 +39,7 @@ export class AccessControlFormContainerComponent { @ViewChild('itemAccessCmp', { static: true }) itemAccessCmp: AccessControlArrayFormComponent; constructor( + private bulkAccessConfigService: BulkAccessConfigDataService, private bulkAccessControlService: BulkAccessControlService, private selectableListService: SelectableListService, protected modalService: NgbModal, @@ -46,9 +48,16 @@ export class AccessControlFormContainerComponent { state = initialState; - dropdownData$ = this.bulkAccessControlService.dropdownData$.pipe( +/* dropdownData$ = this.bulkAccessConfigService.findByPropertyName('default').pipe( + getFirstCompletedRemoteData(), + map((configRD: RemoteData) => configRD.hasSucceeded ? configRD.payload : null), + shareReplay(1), + tap(console.log) + );*/ + +/* dropdownData$ = this.bulkAccessControlService.dropdownData$.pipe( shareReplay(1) - ); + );*/ getFormValue() { return { diff --git a/src/app/shared/access-control-form-container/bulk-access-control.service.ts b/src/app/shared/access-control-form-container/bulk-access-control.service.ts index 85ec05cd60..1cce44d828 100644 --- a/src/app/shared/access-control-form-container/bulk-access-control.service.ts +++ b/src/app/shared/access-control-form-container/bulk-access-control.service.ts @@ -1,21 +1,12 @@ import { Injectable } from '@angular/core'; -import { Observable, of } from 'rxjs'; -import { AccessControlItem } from '../../core/shared/bulk-access-condition-options.model'; + import { ScriptDataService } from '../../core/data/processes/script-data.service'; import { ProcessParameter } from '../../process-page/processes/process-parameter.model'; -export interface AccessControlDropdownDataResponse { - id: string; - itemAccessConditionOptions: AccessControlItem[]; - bitstreamAccessConditionOptions: AccessControlItem[]; -} - @Injectable({ providedIn: 'root' }) export class BulkAccessControlService { constructor(private scriptService: ScriptDataService) {} - dropdownData$: Observable = of(accessControlDropdownData); - createPayloadFile(payload: any) { console.log('execute', payload); @@ -43,43 +34,3 @@ export class BulkAccessControlService { return this.scriptService.invoke('bulk-access-control', params, [file]); } } - -const accessControlDropdownData: AccessControlDropdownDataResponse = { - 'id': 'default', - 'itemAccessConditionOptions': [ - { - 'name': 'openaccess' - }, - { - 'name': 'administrator' - }, - { - 'name': 'embargo', - 'hasStartDate': true, - 'maxStartDate': '2023-05-12T00:40:54.970+0000' - }, - { - 'name': 'lease', - 'hasEndDate': true, - 'maxEndDate': '2017-12-24T00:40:54.970+0000' - } - ], - 'bitstreamAccessConditionOptions': [ - { - 'name': 'openaccess' - }, - { - 'name': 'administrator' - }, - { - 'name': 'embargo', - 'hasStartDate': true, - 'maxStartDate': '2018-06-24T00:40:54.970+0000' - }, - { - 'name': 'lease', - 'hasEndDate': true, - 'maxEndDate': '2017-12-24T00:40:54.970+0000' - } - ] -}; From 4bf10c880a4b4ace19b1ea692fc85f18981ed512 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Wed, 10 May 2023 16:02:01 +0200 Subject: [PATCH 063/425] [CST-9636] Refactor access control array form to accept dropdown options --- .../access-control-array-form.component.html | 6 +-- .../access-control-array-form.component.ts | 37 +++---------------- ...cess-control-form-container.component.html | 18 +++++---- ...access-control-form-container.component.ts | 20 +++++----- 4 files changed, 28 insertions(+), 53 deletions(-) diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.html b/src/app/shared/access-control-array-form/access-control-array-form.component.html index 5d0fb6d97e..24dcc11120 100644 --- a/src/app/shared/access-control-array-form/access-control-array-form.component.html +++ b/src/app/shared/access-control-array-form/access-control-array-form.component.html @@ -7,7 +7,7 @@
    @@ -20,7 +20,7 @@ placeholder="yyyy-mm-dd" name="dp" formControlName="startDate" - [minDate]="control | maxStartDate: (dropdownData$ | async)" + [minDate]="control | maxStartDate: dropdownOptions" ngbDatepicker #d="ngbDatepicker" /> @@ -40,7 +40,7 @@ placeholder="yyyy-mm-dd" name="dp" formControlName="endDate" - [maxDate]="control | maxEndDate: (dropdownData$ | async)" + [maxDate]="control | maxEndDate: dropdownOptions" ngbDatepicker #d1="ngbDatepicker" /> diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-array-form/access-control-array-form.component.ts index 13d13375b2..090b22d94c 100644 --- a/src/app/shared/access-control-array-form/access-control-array-form.component.ts +++ b/src/app/shared/access-control-array-form/access-control-array-form.component.ts @@ -1,4 +1,4 @@ -import { Component, NgModule, OnDestroy, OnInit } from '@angular/core'; +import { Component, Input, NgModule, OnDestroy, OnInit } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FormArray, FormBuilder, FormControl, ReactiveFormsModule } from '@angular/forms'; import { SharedBrowseByModule } from '../browse-by/shared-browse-by.module'; @@ -7,21 +7,11 @@ import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap'; import { ControlMaxStartDatePipe } from './control-max-start-date.pipe'; import { ControlMaxEndDatePipe } from './control-max-end-date.pipe'; -import { distinctUntilChanged, map, shareReplay, takeUntil, tap } from 'rxjs/operators'; +import { distinctUntilChanged, takeUntil } from 'rxjs/operators'; import { Subject } from 'rxjs'; -import { getFirstCompletedRemoteData } from '../../core/shared/operators'; -import { RemoteData } from '../../core/data/remote-data'; -import { BulkAccessConditionOptions } from '../../core/config/models/bulk-access-condition-options.model'; -import { BulkAccessConfigDataService } from '../../core/config/bulk-access-config-data.service'; +import { AccessesConditionOption } from '../../core/config/models/config-accesses-conditions-options.model'; -// will be used on the form value -export interface AccessControlItemValue { - itemName: string | null; // item name - startDate?: string; - endDate?: string; -} - @Component({ selector: 'ds-access-control-array-form', templateUrl: './access-control-array-form.component.html', @@ -29,6 +19,7 @@ export interface AccessControlItemValue { exportAs: 'accessControlArrayForm' }) export class AccessControlArrayFormComponent implements OnInit, OnDestroy { + @Input() dropdownOptions: AccessesConditionOption[] = []; private destroy$ = new Subject(); @@ -36,27 +27,9 @@ export class AccessControlArrayFormComponent implements OnInit, OnDestroy { accessControl: this.fb.array([]) }); - constructor(private bulkAccessConfigService: BulkAccessConfigDataService, - private fb: FormBuilder) { - } - - dropdownData$ = this.bulkAccessConfigService.findByPropertyName('default').pipe( - getFirstCompletedRemoteData(), - map((configRD: RemoteData) => configRD.hasSucceeded ? configRD.payload : null), - shareReplay(1), - tap(console.log) - ); + constructor(private fb: FormBuilder) {} ngOnInit(): void { - // console.log(this.dropdownOptions); -/* if (this.accessControlItems.length === 0) { - this.addAccessControlItem(); - } else { - for (const item of this.accessControlItems) { - this.addAccessControlItem(item.itemName); - } - }*/ - this.addAccessControlItem(); this.accessControl.valueChanges diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.html b/src/app/shared/access-control-form-container/access-control-form-container.component.html index 70f1b1e6cd..c45774dcf9 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.html +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.html @@ -48,7 +48,10 @@
    - + +
    @@ -125,23 +128,24 @@
    -
    - {{'access-control-access-conditions' | translate}} -
    +
    {{'access-control-access-conditions' | translate}}
    {{'access-control-no-access-conditions-warning-message' | translate}}
    - + +
    -
    +
    -
    +
    diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index 0807236796..9efc90a3f2 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectorRef, Component, Input, NgModule, ViewChild } from '@angular/core'; -import { concatMap } from 'rxjs'; +import { concatMap, Observable, shareReplay } from 'rxjs'; import { RemoteData } from '../../core/data/remote-data'; import { Item } from '../../core/shared/item.model'; import { @@ -9,7 +9,7 @@ import { import { BulkAccessControlService } from './bulk-access-control.service'; import { SelectableListService } from '../object-list/selectable-list/selectable-list.service'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { take } from 'rxjs/operators'; +import { map, take, tap } from 'rxjs/operators'; import { CommonModule } from '@angular/common'; import { ListableObject } from '../object-collection/shared/listable-object.model'; import { SharedModule } from '../shared.module'; @@ -21,6 +21,8 @@ import { ItemAccessControlSelectBitstreamsModalComponent } from './item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component'; import { BulkAccessConfigDataService } from '../../core/config/bulk-access-config-data.service'; +import { getFirstCompletedRemoteData } from '../../core/shared/operators'; +import { BulkAccessConditionOptions } from '../../core/config/models/bulk-access-condition-options.model'; @Component({ selector: 'ds-access-control-form-container', @@ -28,12 +30,12 @@ import { BulkAccessConfigDataService } from '../../core/config/bulk-access-confi styleUrls: [ './access-control-form-container.component.scss' ], exportAs: 'dsAccessControlForm' }) -export class AccessControlFormContainerComponent implements OnInit { +export class AccessControlFormContainerComponent { @Input() showLimitToSpecificBitstreams = false; @Input() itemRD: RemoteData; - @Input() hideSubmit = false; + @Input() showSubmit = true; @ViewChild('bitstreamAccessCmp', { static: true }) bitstreamAccessCmp: AccessControlArrayFormComponent; @ViewChild('itemAccessCmp', { static: true }) itemAccessCmp: AccessControlArrayFormComponent; @@ -48,16 +50,12 @@ export class AccessControlFormContainerComponent impleme state = initialState; -/* dropdownData$ = this.bulkAccessConfigService.findByPropertyName('default').pipe( + dropdownData$: Observable = this.bulkAccessConfigService.findByPropertyName('default').pipe( getFirstCompletedRemoteData(), map((configRD: RemoteData) => configRD.hasSucceeded ? configRD.payload : null), shareReplay(1), - tap(console.log) - );*/ - -/* dropdownData$ = this.bulkAccessControlService.dropdownData$.pipe( - shareReplay(1) - );*/ + tap(x => console.log('options', x)) + ); getFormValue() { return { From b279b97c37b4e6682f89d71fdaf9ecc9a2de3893 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Wed, 10 May 2023 16:23:27 +0200 Subject: [PATCH 064/425] [CST-9636] WIP Fix bulk-access-config-data.service --- .../config/bulk-access-config-data.service.ts | 11 ++++------- src/app/core/config/config-data.service.ts | 18 ++++++++++++++++-- .../bulk-access-condition-options.model.ts | 10 +++++----- src/app/core/config/models/config-type.ts | 2 ++ src/app/core/core.module.ts | 2 ++ .../access-control-form-container.component.ts | 7 +++---- 6 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/app/core/config/bulk-access-config-data.service.ts b/src/app/core/config/bulk-access-config-data.service.ts index f27b59eee1..28b4029ea2 100644 --- a/src/app/core/config/bulk-access-config-data.service.ts +++ b/src/app/core/config/bulk-access-config-data.service.ts @@ -1,17 +1,17 @@ import { Injectable } from '@angular/core'; -import { Observable } from 'rxjs'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; -import { RemoteData } from '../data/remote-data'; import { RequestService } from '../data/request.service'; -import { BulkAccessConditionOptions } from './models/bulk-access-condition-options.model'; import { ConfigDataService } from './config-data.service'; +import { dataService } from '../data/base/data-service.decorator'; +import { BULK_ACCESS_CONDITION_OPTIONS } from './models/config-type'; -@Injectable({ providedIn: 'root' }) /** * Data Service responsible for retrieving Bulk Access Condition Options from the REST API */ +@Injectable({ providedIn: 'root' }) +@dataService(BULK_ACCESS_CONDITION_OPTIONS) export class BulkAccessConfigDataService extends ConfigDataService { constructor( @@ -23,7 +23,4 @@ export class BulkAccessConfigDataService extends ConfigDataService { super('bulkaccessconditionoptions', requestService, rdbService, objectCache, halService); } - findByPropertyName(name: string): Observable> { - return this.findById(name) as Observable>; - } } diff --git a/src/app/core/config/config-data.service.ts b/src/app/core/config/config-data.service.ts index f8f46435c5..58b023e62c 100644 --- a/src/app/core/config/config-data.service.ts +++ b/src/app/core/config/config-data.service.ts @@ -1,9 +1,10 @@ import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + import { ConfigObject } from './models/config.model'; import { RemoteData } from '../data/remote-data'; import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { getFirstCompletedRemoteData } from '../shared/operators'; -import { map } from 'rxjs/operators'; import { IdentifiableDataService } from '../data/base/identifiable-data.service'; /** @@ -38,7 +39,20 @@ export abstract class ConfigDataService extends IdentifiableDataService[]): Observable> { + /** + * Returns a config object by given name + * + * Throws an error if a configuration object cannot be retrieved. + * + * @param name The name of configuration to retrieve + * @param useCachedVersionIfAvailable If this is true, the request will only be sent if there's + * no valid cached version. Defaults to true + * @param reRequestOnStale Whether or not the request should automatically be re- + * requested after the response becomes stale + * @param linksToFollow List of {@link FollowLinkConfig} that indicate which + * {@link HALLink}s should be automatically resolved + */ + public findByName(name: string, useCachedVersionIfAvailable = true, reRequestOnStale = true, ...linksToFollow: FollowLinkConfig[]): Observable> { return super.findById(name, useCachedVersionIfAvailable, reRequestOnStale, ...linksToFollow); } } diff --git a/src/app/core/config/models/bulk-access-condition-options.model.ts b/src/app/core/config/models/bulk-access-condition-options.model.ts index f10965ea31..d84e14b95d 100644 --- a/src/app/core/config/models/bulk-access-condition-options.model.ts +++ b/src/app/core/config/models/bulk-access-condition-options.model.ts @@ -1,17 +1,17 @@ -import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; +import { autoserialize, autoserializeAs, inheritSerialization } from 'cerialize'; import { typedObject } from '../../cache/builders/build-decorators'; import { excludeFromEquals } from '../../utilities/equals.decorators'; import { ResourceType } from '../../shared/resource-type'; import { HALLink } from '../../shared/hal-link.model'; import { ConfigObject } from './config.model'; import { AccessesConditionOption } from './config-accesses-conditions-options.model'; - -export const BULK_ACCESS_CONDITION_OPTIONS = new ResourceType('bulkAccessConditionOptions'); +import { BULK_ACCESS_CONDITION_OPTIONS } from './config-type'; /** * Model class for a bulk access condition options */ @typedObject +@inheritSerialization(ConfigObject) export class BulkAccessConditionOptions extends ConfigObject { static type = BULK_ACCESS_CONDITION_OPTIONS; @@ -28,10 +28,10 @@ export class BulkAccessConditionOptions extends ConfigObject { @autoserialize id: string; - @deserialize + @autoserialize itemAccessConditionOptions: AccessesConditionOption[]; - @deserialize + @autoserialize bitstreamAccessConditionOptions: AccessesConditionOption[]; _links: { self: HALLink }; diff --git a/src/app/core/config/models/config-type.ts b/src/app/core/config/models/config-type.ts index 19864536f0..5733f5bfad 100644 --- a/src/app/core/config/models/config-type.ts +++ b/src/app/core/config/models/config-type.ts @@ -17,3 +17,5 @@ export const SUBMISSION_UPLOADS_TYPE = new ResourceType('submissionuploads'); export const SUBMISSION_UPLOAD_TYPE = new ResourceType('submissionupload'); export const SUBMISSION_ACCESSES_TYPE = new ResourceType('submissionaccessoption'); + +export const BULK_ACCESS_CONDITION_OPTIONS = new ResourceType('bulkaccessconditionoption'); diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts index 319b42d58b..7d540ccfcf 100644 --- a/src/app/core/core.module.ts +++ b/src/app/core/core.module.ts @@ -177,6 +177,7 @@ import { IdentifierData } from '../shared/object-list/identifier-data/identifier import { Subscription } from '../shared/subscriptions/models/subscription.model'; import { SupervisionOrderDataService } from './supervision-order/supervision-order-data.service'; import { ItemRequest } from './shared/item-request.model'; +import { BulkAccessConditionOptions } from './config/models/bulk-access-condition-options.model'; /** * When not in production, endpoint responses can be mocked for testing purposes @@ -371,6 +372,7 @@ export const models = IdentifierData, Subscription, ItemRequest, + BulkAccessConditionOptions ]; @NgModule({ diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index 9efc90a3f2..d09911a9d6 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -9,7 +9,7 @@ import { import { BulkAccessControlService } from './bulk-access-control.service'; import { SelectableListService } from '../object-list/selectable-list/selectable-list.service'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { map, take, tap } from 'rxjs/operators'; +import { map, take } from 'rxjs/operators'; import { CommonModule } from '@angular/common'; import { ListableObject } from '../object-collection/shared/listable-object.model'; import { SharedModule } from '../shared.module'; @@ -50,11 +50,10 @@ export class AccessControlFormContainerComponent { state = initialState; - dropdownData$: Observable = this.bulkAccessConfigService.findByPropertyName('default').pipe( + dropdownData$: Observable = this.bulkAccessConfigService.findByName('default').pipe( getFirstCompletedRemoteData(), map((configRD: RemoteData) => configRD.hasSucceeded ? configRD.payload : null), - shareReplay(1), - tap(x => console.log('options', x)) + shareReplay(1) ); getFormValue() { From 5f74446bf50ac07a3e6ece2b6cf437a2d733f6da Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Wed, 10 May 2023 16:27:53 +0200 Subject: [PATCH 065/425] [CST-9636] Added jsdoc comments --- ...ccess-control-array-form.component.spec.ts | 8 +- .../access-control-array-form.component.ts | 126 ++++++++++++------ ...s-control-form-container.component.spec.ts | 4 +- ...access-control-form-container.component.ts | 39 +++++- 4 files changed, 124 insertions(+), 53 deletions(-) diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.spec.ts b/src/app/shared/access-control-array-form/access-control-array-form.component.spec.ts index 7c3ed06be1..b99a0fff8e 100644 --- a/src/app/shared/access-control-array-form/access-control-array-form.component.spec.ts +++ b/src/app/shared/access-control-array-form/access-control-array-form.component.spec.ts @@ -1,6 +1,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { AccessControlArrayFormComponent, AccessControlItemValue } from './access-control-array-form.component'; +import { AccessControlArrayFormComponent } from './access-control-array-form.component'; import { ReactiveFormsModule } from '@angular/forms'; import { SharedBrowseByModule } from '../browse-by/shared-browse-by.module'; import { CommonModule } from '@angular/common'; @@ -26,7 +26,7 @@ fdescribe('AccessControlArrayFormComponent', () => { beforeEach(() => { fixture = TestBed.createComponent(AccessControlArrayFormComponent); component = fixture.componentInstance; - component.dropdownOptions = [{name: 'Option1'}, {name: 'Option2'}]; + component.dropdownOptions = [{name: 'Option1'}, {name: 'Option2'}] as any; fixture.detectChanges(); }); @@ -54,14 +54,14 @@ fdescribe('AccessControlArrayFormComponent', () => { }); it('should set access control item value', () => { - const item: AccessControlItemValue = { itemName: 'item1', startDate: '2022-01-01', endDate: '2022-02-01' }; + const item = { itemName: 'item1', startDate: '2022-01-01', endDate: '2022-02-01' }; component.addAccessControlItem(item.itemName); component.accessControl.controls[0].patchValue(item); expect(component.form.value.accessControl[0]).toEqual(item); }); it('should reset form value', () => { - const item: AccessControlItemValue = { itemName: 'item1', startDate: '2022-01-01', endDate: '2022-02-01' }; + const item = { itemName: 'item1', startDate: '2022-01-01', endDate: '2022-02-01' }; component.addAccessControlItem(item.itemName); component.accessControl.controls[1].patchValue(item); component.reset(); diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-array-form/access-control-array-form.component.ts index 090b22d94c..60060dec16 100644 --- a/src/app/shared/access-control-array-form/access-control-array-form.component.ts +++ b/src/app/shared/access-control-array-form/access-control-array-form.component.ts @@ -31,7 +31,89 @@ export class AccessControlArrayFormComponent implements OnInit, OnDestroy { ngOnInit(): void { this.addAccessControlItem(); + this.handleValidationOnFormArrayChanges(); + } + /** + * Get the access control form array. + */ + get accessControl() { + return this.form.get('accessControl') as FormArray; + } + + /** + * Add a new access control item to the form. + * Start and end date are disabled by default. + * @param itemName The name of the item to add + */ + addAccessControlItem(itemName: string = null) { + this.accessControl.push(this.fb.group({ + itemName, + startDate: new FormControl({ value: null, disabled: true }), + endDate: new FormControl({ value: null, disabled: true }) + })); + } + + /** + * Remove an access control item from the form. + * @param index + */ + removeAccessControlItem(index: number) { + this.accessControl.removeAt(index); + } + + /** + * Get the value of the form. + * This will be used to read the form value from the parent component. + * @return The form value + */ + getValue() { + return this.form.value; + } + + /** + * Set the value of the form from the parent component. + */ + reset() { + this.accessControl.reset([]); + } + + /** + * Disable the form. + * This will be used to disable the form from the parent component. + * This will also disable all date controls. + */ + disable() { + this.form.disable(); + + // disable all date controls + for (const control of this.accessControl.controls) { + control.get('startDate').disable(); + control.get('endDate').disable(); + } + } + + /** + * Enable the form. + * This will be used to enable the form from the parent component. + * This will also enable all date controls. + */ + enable() { + this.form.enable(); + + // enable date controls + for (const control of this.accessControl.controls) { + control.get('startDate').enable(); + control.get('endDate').enable(); + } + } + + /** + * Handle validation on form array changes. + * This will be used to enable/disable date controls based on the selected item. + * @private + */ + private handleValidationOnFormArrayChanges() { this.accessControl.valueChanges .pipe( distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)), @@ -61,50 +143,6 @@ export class AccessControlArrayFormComponent implements OnInit, OnDestroy { }); } - get accessControl() { - return this.form.get('accessControl') as FormArray; - } - - addAccessControlItem(itemName: string = null) { - this.accessControl.push(this.fb.group({ - itemName, - startDate: new FormControl({ value: null, disabled: true }), - endDate: new FormControl({ value: null, disabled: true }) - })); - } - - removeAccessControlItem(index: number) { - this.accessControl.removeAt(index); - } - - getValue() { - return this.form.value; - } - - reset() { - this.accessControl.reset([]); - } - - disable() { - this.form.disable(); - - // disable all date controls - for (const control of this.accessControl.controls) { - control.get('startDate').disable(); - control.get('endDate').disable(); - } - } - - enable() { - this.form.enable(); - - // enable date controls - for (const control of this.accessControl.controls) { - control.get('startDate').enable(); - control.get('endDate').enable(); - } - } - ngOnDestroy() { this.destroy$.next(); this.destroy$.complete(); diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts index 871e301209..7412b9569f 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts @@ -3,8 +3,8 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { AccessControlFormContainerComponent } from './access-control-form-container.component'; describe('AccessControlFormContainerComponent', () => { - let component: AccessControlFormContainerComponent; - let fixture: ComponentFixture; + let component: AccessControlFormContainerComponent; + let fixture: ComponentFixture>; beforeEach(async () => { await TestBed.configureTestingModule({ diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index 9efc90a3f2..23ba64c4f6 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -1,4 +1,4 @@ -import { ChangeDetectorRef, Component, Input, NgModule, ViewChild } from '@angular/core'; +import { ChangeDetectorRef, Component, Input, NgModule, OnDestroy, ViewChild } from '@angular/core'; import { concatMap, Observable, shareReplay } from 'rxjs'; import { RemoteData } from '../../core/data/remote-data'; import { Item } from '../../core/shared/item.model'; @@ -30,11 +30,23 @@ import { BulkAccessConditionOptions } from '../../core/config/models/bulk-access styleUrls: [ './access-control-form-container.component.scss' ], exportAs: 'dsAccessControlForm' }) -export class AccessControlFormContainerComponent { +export class AccessControlFormContainerComponent implements OnDestroy { + /** + * Will be used to determine if we need to show the limit changes to specific bitstreams radio buttons + */ @Input() showLimitToSpecificBitstreams = false; + + /** + * The item to which the access control form applies + */ @Input() itemRD: RemoteData; + /** + * Whether to show the submit and cancel button + * We want to hide these buttons when the form is + * used in an accordion, and we want to show buttons somewhere else + */ @Input() showSubmit = true; @ViewChild('bitstreamAccessCmp', { static: true }) bitstreamAccessCmp: AccessControlArrayFormComponent; @@ -57,6 +69,9 @@ export class AccessControlFormContainerComponent { tap(x => console.log('options', x)) ); + /** + * Will be used from a parent component to read the value of the form + */ getFormValue() { return { bitstream: this.bitstreamAccessCmp.getValue(), @@ -65,12 +80,20 @@ export class AccessControlFormContainerComponent { }; } + /** + * Reset the form to its initial state + * This will also reset the state of the child components (bitstream and item access) + */ reset() { this.bitstreamAccessCmp.reset(); this.itemAccessCmp.reset(); this.state = initialState; } + /** + * Submit the form + * This will create a payload file and execute the script + */ submit() { const bitstreamAccess = this.bitstreamAccessCmp.getValue(); const itemAccess = this.itemAccessCmp.getValue(); @@ -89,6 +112,12 @@ export class AccessControlFormContainerComponent { }); } + /** + * Handle the status change of the access control form (item or bitstream) + * This will enable/disable the access control form for the item or bitstream + * @param type The type of the access control form (item or bitstream) + * @param active boolean indicating whether the access control form should be enabled or disabled + */ handleStatusChange(type: 'item' | 'bitstream', active: boolean) { if (type === 'bitstream') { active ? this.bitstreamAccessCmp.enable() : this.bitstreamAccessCmp.disable(); @@ -97,6 +126,11 @@ export class AccessControlFormContainerComponent { } } + /** + * Open the modal to select bitstreams for which to change the access control + * This will open the modal and pass the currently selected bitstreams + * @param item The item for which to change the access control + */ openSelectBitstreamsModal(item: Item) { const ref = this.modalService.open(ItemAccessControlSelectBitstreamsModalComponent); ref.componentInstance.selectedBitstreams = this.state.bitstream.selectedBitstreams; @@ -111,7 +145,6 @@ export class AccessControlFormContainerComponent { }); } - // eslint-disable-next-line @angular-eslint/use-lifecycle-interface ngOnDestroy(): void { this.selectableListService.deselectAll(ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID); } From 628732b93238bceff518eea93f66872925e4d804 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Wed, 10 May 2023 16:45:17 +0200 Subject: [PATCH 066/425] [CST-9636] Show warning only when there are no controls and form is not disabled --- .../edit-collection-page.module.ts | 2 +- .../edit-community-page.module.ts | 2 +- .../edit-item-page/edit-item-page.module.ts | 4 ---- .../access-control-array-form.component.html | 4 ++++ .../access-control-array-form.component.scss | 0 .../access-control-array-form.component.spec.ts | 2 +- .../access-control-array-form.component.ts | 4 ++-- .../control-max-end-date.pipe.ts | 2 +- .../control-max-start-date.pipe.ts | 2 +- .../access-control-form-container.component.html | 15 ++------------- .../access-control-form-container.component.ts | 4 ++-- 11 files changed, 15 insertions(+), 26 deletions(-) rename src/app/shared/{ => access-control-form-container}/access-control-array-form/access-control-array-form.component.html (92%) rename src/app/shared/{ => access-control-form-container}/access-control-array-form/access-control-array-form.component.scss (100%) rename src/app/shared/{ => access-control-form-container}/access-control-array-form/access-control-array-form.component.spec.ts (98%) rename src/app/shared/{ => access-control-form-container}/access-control-array-form/access-control-array-form.component.ts (96%) rename src/app/shared/{ => access-control-form-container}/access-control-array-form/control-max-end-date.pipe.ts (87%) rename src/app/shared/{ => access-control-form-container}/access-control-array-form/control-max-start-date.pipe.ts (87%) diff --git a/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts b/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts index 9d703c0cf4..58563f440b 100644 --- a/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts +++ b/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts @@ -16,7 +16,7 @@ import { ComcolModule } from '../../shared/comcol/comcol.module'; import { CollectionAccessControlComponent } from './collection-access-control/collection-access-control.component'; import { AccessControlArrayFormModule -} from '../../shared/access-control-array-form/access-control-array-form.component'; +} from '../../shared/access-control-form-container/access-control-array-form/access-control-array-form.component'; import { UiSwitchModule } from 'ngx-ui-switch'; import { AccessControlFormContainerModule diff --git a/src/app/community-page/edit-community-page/edit-community-page.module.ts b/src/app/community-page/edit-community-page/edit-community-page.module.ts index 5ed2e401c6..d88aadfd8e 100644 --- a/src/app/community-page/edit-community-page/edit-community-page.module.ts +++ b/src/app/community-page/edit-community-page/edit-community-page.module.ts @@ -14,7 +14,7 @@ import { CommunityAccessControlComponent } from './community-access-control/comm import { UiSwitchModule } from 'ngx-ui-switch'; import { AccessControlArrayFormModule -} from '../../shared/access-control-array-form/access-control-array-form.component'; +} from '../../shared/access-control-form-container/access-control-array-form/access-control-array-form.component'; import { AccessControlFormContainerModule } from '../../shared/access-control-form-container/access-control-form-container.component'; diff --git a/src/app/item-page/edit-item-page/edit-item-page.module.ts b/src/app/item-page/edit-item-page/edit-item-page.module.ts index 322c6c6999..9d132abe53 100644 --- a/src/app/item-page/edit-item-page/edit-item-page.module.ts +++ b/src/app/item-page/edit-item-page/edit-item-page.module.ts @@ -47,9 +47,6 @@ import { IdentifierDataComponent } from '../../shared/object-list/identifier-dat import { ItemRegisterDoiComponent } from './item-register-doi/item-register-doi.component'; import { DsoSharedModule } from '../../dso-shared/dso-shared.module'; import { ItemAccessControlComponent } from './item-access-control/item-access-control.component'; -import { - AccessControlArrayFormModule -} from '../../shared/access-control-array-form/access-control-array-form.component'; import { UiSwitchModule } from 'ngx-ui-switch'; import { ResultsBackButtonModule } from '../../shared/results-back-button/results-back-button.module'; import { @@ -72,7 +69,6 @@ import { NgbModule, ItemVersionsModule, DsoSharedModule, - AccessControlArrayFormModule, UiSwitchModule, ResultsBackButtonModule, AccessControlFormContainerModule, diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.html b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html similarity index 92% rename from src/app/shared/access-control-array-form/access-control-array-form.component.html rename to src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html index 24dcc11120..9b1f018ffb 100644 --- a/src/app/shared/access-control-array-form/access-control-array-form.component.html +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html @@ -1,4 +1,8 @@
    +
    + {{'access-control-no-access-conditions-warning-message' | translate}} +
    +
    -
    -
    {{'access-control-access-conditions' | translate}}
    -
    - {{'access-control-no-access-conditions-warning-message' | translate}} -
    -
    +
    {{'access-control-access-conditions' | translate}}
    -
    -
    {{'access-control-access-conditions' | translate}}
    - -
    - {{'access-control-no-access-conditions-warning-message' | translate}} -
    -
    +
    {{'access-control-access-conditions' | translate}}
    Date: Wed, 10 May 2023 17:12:53 +0200 Subject: [PATCH 067/425] [CST-9636] Added state transformer to file model, added tests for bulk access control service --- .../access-control-array-form.component.ts | 4 +- ...s-control-form-container.component.spec.ts | 63 +++++++++++-------- ...access-control-form-container.component.ts | 14 ++++- .../bulk-access-control.service.spec.ts | 51 +++++++++++++++ .../bulk-access-control.service.ts | 47 +++++++++++++- 5 files changed, 149 insertions(+), 30 deletions(-) create mode 100644 src/app/shared/access-control-form-container/bulk-access-control.service.spec.ts diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts index 171bec8395..41b51d73dc 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts @@ -68,7 +68,9 @@ export class AccessControlArrayFormComponent implements OnInit, OnDestroy { * @return The form value */ getValue() { - return this.form.value; + return this.form.value.accessControl + .filter(x => x.itemName !== null && x.itemName !== '') + .map(x => ({ name: x.itemName, startDate: x.startDate || null, endDate: x.endDate || null })); } /** diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts index 7412b9569f..66ef20444e 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts @@ -1,25 +1,38 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { AccessControlFormContainerComponent } from './access-control-form-container.component'; - -describe('AccessControlFormContainerComponent', () => { - let component: AccessControlFormContainerComponent; - let fixture: ComponentFixture>; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ AccessControlFormContainerComponent ] - }) - .compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(AccessControlFormContainerComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); +// +// describe('AccessControlFormContainerComponent', () => { +// let component: AccessControlFormContainerComponent; +// let fixture: ComponentFixture>; +// +// let bulkAccessConfigDataServiceMock: BulkAccessConfigDataService; +// +// beforeEach(async () => { +// +// bulkAccessConfigDataServiceMock = jasmine.createSpyObj('BulkAccessConfigDataService', { +// findByName: jasmine.createSpy('findByName'), +// }); +// +// +// await TestBed.configureTestingModule({ +// declarations: [ AccessControlFormContainerComponent ], +// imports: [ CommonModule, ReactiveFormsModule, SharedBrowseByModule, TranslateModule, NgbDatepickerModule ], +// providers: [ +// { provide: BulkAccessConfigDataService, useValue: bulkAccessConfigDataServiceMock }, +// // private bulkAccessControlService: BulkAccessControlService, +// // private selectableListService: SelectableListService, +// // protected modalService: NgbModal, +// // private cdr: ChangeDetectorRef +// ] +// }) +// .compileComponents(); +// }); +// +// beforeEach(() => { +// fixture = TestBed.createComponent(AccessControlFormContainerComponent); +// component = fixture.componentInstance; +// fixture.detectChanges(); +// }); +// +// it('should create', () => { +// expect(component).toBeTruthy(); +// }); +// }); diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index eec4996073..e34928361f 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -150,7 +150,7 @@ export class AccessControlFormContainerComponent impleme } -const initialState = { +const initialState: AccessControlFormState = { item: { toggleStatus: false, accessMode: '', @@ -163,6 +163,18 @@ const initialState = { }, }; +export interface AccessControlFormState { + item: { + toggleStatus: boolean, + accessMode: string, + }, + bitstream: { + toggleStatus: boolean, + accessMode: string, + changesLimit: string, + selectedBitstreams: ListableObject[], + } +} @NgModule({ imports: [ diff --git a/src/app/shared/access-control-form-container/bulk-access-control.service.spec.ts b/src/app/shared/access-control-form-container/bulk-access-control.service.spec.ts new file mode 100644 index 0000000000..9e733b5694 --- /dev/null +++ b/src/app/shared/access-control-form-container/bulk-access-control.service.spec.ts @@ -0,0 +1,51 @@ +import { TestBed } from '@angular/core/testing'; +import { BulkAccessControlService } from './bulk-access-control.service'; +import { ScriptDataService } from '../../core/data/processes/script-data.service'; +import { ProcessParameter } from '../../process-page/processes/process-parameter.model'; + +fdescribe('BulkAccessControlService', () => { + let service: BulkAccessControlService; + let scriptServiceSpy: jasmine.SpyObj; + + beforeEach(() => { + const spy = jasmine.createSpyObj('ScriptDataService', ['invoke']); + TestBed.configureTestingModule({ + providers: [ + BulkAccessControlService, + { provide: ScriptDataService, useValue: spy } + ] + }); + service = TestBed.inject(BulkAccessControlService); + scriptServiceSpy = TestBed.inject(ScriptDataService) as jasmine.SpyObj; + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); + + describe('createPayloadFile', () => { + it('should create a file and return the URL and file object', () => { + const payload = { data: 'test' }; + const result = service.createPayloadFile(payload); + + expect(result.url).toBeTruthy(); + expect(result.file).toBeTruthy(); + }); + }); + + describe('executeScript', () => { + it('should invoke the script service with the correct parameters', () => { + const uuids = ['123', '456']; + const file = new File(['test'], 'data.json', { type: 'application/json' }); + const expectedParams: ProcessParameter[] = [{ name: 'uuid', value: '123,456' }]; + + // @ts-ignore + scriptServiceSpy.invoke.and.returnValue(Promise.resolve({})); + + const result = service.executeScript(uuids, file); + + expect(scriptServiceSpy.invoke).toHaveBeenCalledWith('bulk-access-control', expectedParams, [file]); + expect(result).toBeTruthy(); + }); + }); +}); diff --git a/src/app/shared/access-control-form-container/bulk-access-control.service.ts b/src/app/shared/access-control-form-container/bulk-access-control.service.ts index 1cce44d828..f5afe338dd 100644 --- a/src/app/shared/access-control-form-container/bulk-access-control.service.ts +++ b/src/app/shared/access-control-form-container/bulk-access-control.service.ts @@ -2,15 +2,16 @@ import { Injectable } from '@angular/core'; import { ScriptDataService } from '../../core/data/processes/script-data.service'; import { ProcessParameter } from '../../process-page/processes/process-parameter.model'; +import { AccessControlFormState } from './access-control-form-container.component'; @Injectable({ providedIn: 'root' }) export class BulkAccessControlService { constructor(private scriptService: ScriptDataService) {} - createPayloadFile(payload: any) { - console.log('execute', payload); + createPayloadFile(payload: { state: AccessControlFormState, bitstreamAccess, itemAccess }) { + const content = convertToBulkAccessControlFileModel(payload); - const blob = new Blob([JSON.stringify(payload, null, 2)], { + const blob = new Blob([JSON.stringify(content, null, 2)], { type: 'application/json', }); @@ -34,3 +35,43 @@ export class BulkAccessControlService { return this.scriptService.invoke('bulk-access-control', params, [file]); } } + +export const convertToBulkAccessControlFileModel = (payload: { state: AccessControlFormState, bitstreamAccess: AccessCondition[], itemAccess: AccessCondition[] }): BulkAccessControlFileModel => { + const constraints = { uuid: [] }; + + if (payload.state.bitstream.changesLimit === 'selected') { + // @ts-ignore + constraints.uuid = payload.state.bitstream.selectedBitstreams.map((x) => x.id); + } + + return { + item: { + mode: payload.state.item.accessMode, + accessConditions: payload.itemAccess + }, + bitstream: { + constraints, + mode: payload.state.bitstream.accessMode, + accessConditions: payload.bitstreamAccess + } + }; +}; + + +export interface BulkAccessControlFileModel { + item: { + mode: string; + accessConditions: AccessCondition[]; + }, + bitstream: { + constraints: { uuid: string[] }; + mode: string; + accessConditions: AccessCondition[]; + } +} + +interface AccessCondition { + name: string; + startDate?: string; + endDate?: string; +} From e31fc562c5ab4006ffb8a6220f6001a4b0fb929f Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Wed, 10 May 2023 18:25:41 +0200 Subject: [PATCH 068/425] [CST-9636] WIP Create the access-control.module --- .../edit-collection-page.module.ts | 16 +++------ .../community-access-control.component.ts | 2 -- .../edit-community-page.module.ts | 12 ++----- .../edit-item-page/edit-item-page.module.ts | 9 ++--- .../access-control-array-form.component.ts | 19 ++-------- ...access-control-form-container.component.ts | 29 ++------------- .../access-control-form.module.ts | 36 +++++++++++++++++++ 7 files changed, 51 insertions(+), 72 deletions(-) create mode 100644 src/app/shared/access-control-form-container/access-control-form.module.ts diff --git a/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts b/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts index 58563f440b..8d0cb179f1 100644 --- a/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts +++ b/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts @@ -9,18 +9,14 @@ import { CollectionCurateComponent } from './collection-curate/collection-curate import { CollectionSourceComponent } from './collection-source/collection-source.component'; import { CollectionAuthorizationsComponent } from './collection-authorizations/collection-authorizations.component'; import { CollectionFormModule } from '../collection-form/collection-form.module'; -import { CollectionSourceControlsComponent } from './collection-source/collection-source-controls/collection-source-controls.component'; +import { + CollectionSourceControlsComponent +} from './collection-source/collection-source-controls/collection-source-controls.component'; import { ResourcePoliciesModule } from '../../shared/resource-policies/resource-policies.module'; import { FormModule } from '../../shared/form/form.module'; import { ComcolModule } from '../../shared/comcol/comcol.module'; import { CollectionAccessControlComponent } from './collection-access-control/collection-access-control.component'; -import { - AccessControlArrayFormModule -} from '../../shared/access-control-form-container/access-control-array-form/access-control-array-form.component'; -import { UiSwitchModule } from 'ngx-ui-switch'; -import { - AccessControlFormContainerModule -} from '../../shared/access-control-form-container/access-control-form-container.component'; +import { AccessControlFormModule } from '../../shared/access-control-form-container/access-control-form.module'; /** * Module that contains all components related to the Edit Collection page administrator functionality @@ -34,9 +30,7 @@ import { ResourcePoliciesModule, FormModule, ComcolModule, - AccessControlArrayFormModule, - UiSwitchModule, - AccessControlFormContainerModule, + AccessControlFormModule, ], declarations: [ EditCollectionPageComponent, diff --git a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts index b24069b9ac..8a216e38df 100644 --- a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts +++ b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts @@ -1,8 +1,6 @@ import { Component, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; import { RemoteData } from '../../../core/data/remote-data'; -import { SelectableListService } from '../../../shared/object-list/selectable-list/selectable-list.service'; -import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { ActivatedRoute } from '@angular/router'; import { map } from 'rxjs/operators'; import { getFirstSucceededRemoteData } from '../../../core/shared/operators'; diff --git a/src/app/community-page/edit-community-page/edit-community-page.module.ts b/src/app/community-page/edit-community-page/edit-community-page.module.ts index d88aadfd8e..5190d6a008 100644 --- a/src/app/community-page/edit-community-page/edit-community-page.module.ts +++ b/src/app/community-page/edit-community-page/edit-community-page.module.ts @@ -11,13 +11,9 @@ import { CommunityFormModule } from '../community-form/community-form.module'; import { ResourcePoliciesModule } from '../../shared/resource-policies/resource-policies.module'; import { ComcolModule } from '../../shared/comcol/comcol.module'; import { CommunityAccessControlComponent } from './community-access-control/community-access-control.component'; -import { UiSwitchModule } from 'ngx-ui-switch'; import { - AccessControlArrayFormModule -} from '../../shared/access-control-form-container/access-control-array-form/access-control-array-form.component'; -import { - AccessControlFormContainerModule -} from '../../shared/access-control-form-container/access-control-form-container.component'; + AccessControlFormModule +} from '../../shared/access-control-form-container/access-control-form.module'; /** * Module that contains all components related to the Edit Community page administrator functionality @@ -30,9 +26,7 @@ import { CommunityFormModule, ComcolModule, ResourcePoliciesModule, - UiSwitchModule, - AccessControlArrayFormModule, - AccessControlFormContainerModule, + AccessControlFormModule, ], declarations: [ EditCommunityPageComponent, diff --git a/src/app/item-page/edit-item-page/edit-item-page.module.ts b/src/app/item-page/edit-item-page/edit-item-page.module.ts index 9d132abe53..ef6abf4a84 100644 --- a/src/app/item-page/edit-item-page/edit-item-page.module.ts +++ b/src/app/item-page/edit-item-page/edit-item-page.module.ts @@ -47,12 +47,10 @@ import { IdentifierDataComponent } from '../../shared/object-list/identifier-dat import { ItemRegisterDoiComponent } from './item-register-doi/item-register-doi.component'; import { DsoSharedModule } from '../../dso-shared/dso-shared.module'; import { ItemAccessControlComponent } from './item-access-control/item-access-control.component'; -import { UiSwitchModule } from 'ngx-ui-switch'; import { ResultsBackButtonModule } from '../../shared/results-back-button/results-back-button.module'; import { - AccessControlFormContainerModule -} from '../../shared/access-control-form-container/access-control-form-container.component'; - + AccessControlFormModule +} from '../../shared/access-control-form-container/access-control-form.module'; /** * Module that contains all components related to the Edit Item page administrator functionality @@ -69,9 +67,8 @@ import { NgbModule, ItemVersionsModule, DsoSharedModule, - UiSwitchModule, ResultsBackButtonModule, - AccessControlFormContainerModule, + AccessControlFormModule, ], declarations: [ EditItemPageComponent, diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts index 41b51d73dc..1e978d9aa9 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts @@ -1,17 +1,10 @@ -import { Component, Input, NgModule, OnDestroy, OnInit } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormArray, FormBuilder, FormControl, ReactiveFormsModule } from '@angular/forms'; -import { SharedBrowseByModule } from '../../browse-by/shared-browse-by.module'; -import { TranslateModule } from '@ngx-translate/core'; -import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap'; -import { ControlMaxStartDatePipe } from './control-max-start-date.pipe'; -import { ControlMaxEndDatePipe } from './control-max-end-date.pipe'; +import { Component, Input, OnDestroy, OnInit } from '@angular/core'; +import { FormArray, FormBuilder, FormControl } from '@angular/forms'; import { distinctUntilChanged, takeUntil } from 'rxjs/operators'; import { Subject } from 'rxjs'; import { AccessesConditionOption } from '../../../core/config/models/config-accesses-conditions-options.model'; - @Component({ selector: 'ds-access-control-array-form', templateUrl: './access-control-array-form.component.html', @@ -151,11 +144,3 @@ export class AccessControlArrayFormComponent implements OnInit, OnDestroy { } } - -@NgModule({ - imports: [ CommonModule, ReactiveFormsModule, SharedBrowseByModule, TranslateModule, NgbDatepickerModule ], - declarations: [ AccessControlArrayFormComponent, ControlMaxStartDatePipe, ControlMaxEndDatePipe ], - exports: [ AccessControlArrayFormComponent ], -}) -export class AccessControlArrayFormModule { -} diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index e34928361f..10ce81d6fc 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -1,20 +1,13 @@ -import { ChangeDetectorRef, Component, Input, NgModule, OnDestroy, ViewChild } from '@angular/core'; +import { ChangeDetectorRef, Component, Input, OnDestroy, ViewChild } from '@angular/core'; import { concatMap, Observable, shareReplay } from 'rxjs'; import { RemoteData } from '../../core/data/remote-data'; import { Item } from '../../core/shared/item.model'; -import { - AccessControlArrayFormComponent, - AccessControlArrayFormModule -} from './access-control-array-form/access-control-array-form.component'; +import { AccessControlArrayFormComponent } from './access-control-array-form/access-control-array-form.component'; import { BulkAccessControlService } from './bulk-access-control.service'; import { SelectableListService } from '../object-list/selectable-list/selectable-list.service'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { map, take } from 'rxjs/operators'; -import { CommonModule } from '@angular/common'; import { ListableObject } from '../object-collection/shared/listable-object.model'; -import { SharedModule } from '../shared.module'; -import { TranslateModule } from '@ngx-translate/core'; -import { UiSwitchModule } from 'ngx-ui-switch'; import { DSpaceObject } from '../../core/shared/dspace-object.model'; import { ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID, @@ -175,21 +168,3 @@ export interface AccessControlFormState { selectedBitstreams: ListableObject[], } } - -@NgModule({ - imports: [ - CommonModule, - AccessControlArrayFormModule, - SharedModule, - TranslateModule, - UiSwitchModule - ], - declarations: [ - AccessControlFormContainerComponent, - ItemAccessControlSelectBitstreamsModalComponent - ], - exports: [ AccessControlFormContainerComponent, AccessControlArrayFormModule ], -}) -export class AccessControlFormContainerModule {} - - diff --git a/src/app/shared/access-control-form-container/access-control-form.module.ts b/src/app/shared/access-control-form-container/access-control-form.module.ts new file mode 100644 index 0000000000..4bba26033f --- /dev/null +++ b/src/app/shared/access-control-form-container/access-control-form.module.ts @@ -0,0 +1,36 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { TranslateModule } from '@ngx-translate/core'; +import { UiSwitchModule } from 'ngx-ui-switch'; + +import { + AccessControlArrayFormComponent +} from './access-control-array-form/access-control-array-form.component'; +import { SharedModule } from '../shared.module'; +import { + ItemAccessControlSelectBitstreamsModalComponent +} from './item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component'; +import { AccessControlFormContainerComponent } from './access-control-form-container.component'; +import { ControlMaxStartDatePipe } from './access-control-array-form/control-max-start-date.pipe'; +import { ControlMaxEndDatePipe } from './access-control-array-form/control-max-end-date.pipe'; +import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap'; + +@NgModule({ + imports: [ + CommonModule, + SharedModule, + TranslateModule, + UiSwitchModule, + NgbDatepickerModule + ], + declarations: [ + AccessControlFormContainerComponent, + AccessControlArrayFormComponent, + ItemAccessControlSelectBitstreamsModalComponent, + ControlMaxStartDatePipe, + ControlMaxEndDatePipe + ], + exports: [ AccessControlFormContainerComponent, AccessControlArrayFormComponent ], +}) +export class AccessControlFormModule {} From 64c0fff37010897427ecd72323378050bf0858a6 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Wed, 10 May 2023 20:18:20 +0200 Subject: [PATCH 069/425] [CST-9636] WIP Create unit tests --- .../access-control/access-control.module.ts | 20 ++-- .../browse/bulk-access-browse.component.html | 3 - .../bulk-access-browse.component.spec.ts | 75 ++++++++++++-- .../browse/bulk-access-browse.component.ts | 7 +- .../bulk-access/bulk-access.component.html | 14 ++- .../bulk-access/bulk-access.component.spec.ts | 96 +++++++++++++++++- .../bulk-access/bulk-access.component.ts | 98 ++++++++++++++++++- .../bulk-access-settings.component.html | 2 +- .../bulk-access-settings.component.spec.ts | 65 +++++++++++- .../bulk-access-settings.component.ts | 30 ++++-- ...ccess-control-array-form.component.spec.ts | 2 +- ...access-control-form-container.component.ts | 5 + .../bulk-access-control.service.spec.ts | 8 +- .../bulk-access-control.service.ts | 8 +- .../selectable-list.service.spec.ts | 2 +- 15 files changed, 382 insertions(+), 53 deletions(-) diff --git a/src/app/access-control/access-control.module.ts b/src/app/access-control/access-control.module.ts index ba7334d24f..3dc4b6cedc 100644 --- a/src/app/access-control/access-control.module.ts +++ b/src/app/access-control/access-control.module.ts @@ -17,6 +17,7 @@ import { NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap'; import { BulkAccessBrowseComponent } from './bulk-access/browse/bulk-access-browse.component'; import { BulkAccessSettingsComponent } from './bulk-access/settings/bulk-access-settings.component'; import { SearchModule } from '../shared/search/search.module'; +import { AccessControlFormModule } from '../shared/access-control-form-container/access-control-form.module'; /** * Condition for displaying error messages on email form field @@ -27,15 +28,16 @@ export const ValidateEmailErrorStateMatcher: DynamicErrorMessagesMatcher = }; @NgModule({ - imports: [ - CommonModule, - SharedModule, - RouterModule, - AccessControlRoutingModule, - FormModule, - NgbAccordionModule, - SearchModule, - ], + imports: [ + CommonModule, + SharedModule, + RouterModule, + AccessControlRoutingModule, + FormModule, + NgbAccordionModule, + SearchModule, + AccessControlFormModule, + ], exports: [ MembersListComponent, ], diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html index 9851aab835..6ef45cdd5b 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html @@ -51,6 +51,3 @@ - - - diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts index 12cfabae08..c8379b06ee 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts @@ -1,25 +1,82 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; + +import { of } from 'rxjs'; +import { NgbAccordionModule, NgbNavModule } from '@ng-bootstrap/ng-bootstrap'; +import { TranslateModule } from '@ngx-translate/core'; import { BulkAccessBrowseComponent } from './bulk-access-browse.component'; +import { SelectableListService } from '../../../shared/object-list/selectable-list/selectable-list.service'; +import { SelectableObject } from '../../../shared/object-list/selectable-list/selectable-list.service.spec'; +import { PageInfo } from '../../../core/shared/page-info.model'; +import { buildPaginatedList } from '../../../core/data/paginated-list.model'; +import { createSuccessfulRemoteDataObject } from '../../../shared/remote-data.utils'; -describe('BrowseComponent', () => { +describe('BulkAccessBrowseComponent', () => { let component: BulkAccessBrowseComponent; let fixture: ComponentFixture; - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ BulkAccessBrowseComponent ] - }) - .compileComponents(); - }); + const listID1 = 'id1'; + const value1 = 'Selected object'; + const value2 = 'Another selected object'; + + const selected1 = new SelectableObject(value1); + const selected2 = new SelectableObject(value2); + + const testSelection = { id: listID1, selection: [selected1, selected2] } ; + + const selectableListService = jasmine.createSpyObj('SelectableListService', ['getSelectableList', 'deselectAll']); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + NgbAccordionModule, + NgbNavModule, + TranslateModule.forRoot() + ], + declarations: [BulkAccessBrowseComponent], + providers: [ { provide: SelectableListService, useValue: selectableListService }, ], + schemas: [ + NO_ERRORS_SCHEMA + ] + }).compileComponents(); + })); beforeEach(() => { fixture = TestBed.createComponent(BulkAccessBrowseComponent); component = fixture.componentInstance; + (component as any).selectableListService.getSelectableList.and.returnValue(of(testSelection)); fixture.detectChanges(); }); - it('should create', () => { + afterEach(() => { + fixture.destroy(); + component = null; + }); + + it('should create the component', () => { expect(component).toBeTruthy(); }); + + it('should have an initial active nav id of "search"', () => { + expect(component.activateId).toEqual('search'); + }); + + it('should have an initial pagination options object with default values', () => { + expect(component.paginationOptions$.getValue().id).toEqual('bas'); + expect(component.paginationOptions$.getValue().pageSize).toEqual(5); + expect(component.paginationOptions$.getValue().currentPage).toEqual(1); + }); + + it('should have an initial remote data with a paginated list as value', () => { + const list = buildPaginatedList(new PageInfo({ + "elementsPerPage": 5, + "totalElements": 2, + "totalPages": 1, + "currentPage": 1 + }), [selected1, selected2]) ; + const rd = createSuccessfulRemoteDataObject(list); + + expect(component.objectsSelected$.value).toEqual(rd); + }); + }); diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts index 7cbb8740a7..53a7302b46 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts @@ -1,7 +1,7 @@ import { Component, Input, OnDestroy, OnInit } from '@angular/core'; import { BehaviorSubject, Subscription } from 'rxjs'; -import { distinctUntilChanged, map } from 'rxjs/operators'; +import { distinctUntilChanged, map, tap } from 'rxjs/operators'; import { SEARCH_CONFIG_SERVICE } from '../../../my-dspace-page/my-dspace-page.component'; import { SearchConfigurationService } from '../../../core/shared/search/search-configuration.service'; @@ -67,7 +67,8 @@ export class BulkAccessBrowseComponent implements OnInit, OnDestroy { this.subs.push( this.selectableListService.getSelectableList(this.listId).pipe( distinctUntilChanged(), - map((list: SelectableListState) => this.generatePaginatedListBySelectedElements(list)) + map((list: SelectableListState) => this.generatePaginatedListBySelectedElements(list)), + tap(console.log) ).subscribe(this.objectsSelected$) ) } @@ -76,14 +77,12 @@ export class BulkAccessBrowseComponent implements OnInit, OnDestroy { this.paginationOptions$.next(Object.assign(new PaginationComponentOptions(), this.paginationOptions$.value, { currentPage: this.paginationOptions$.value.currentPage + 1 })); - console.log(this.paginationOptions$.value); } pagePrev() { this.paginationOptions$.next(Object.assign(new PaginationComponentOptions(), this.paginationOptions$.value, { currentPage: this.paginationOptions$.value.currentPage - 1 })); - console.log(this.paginationOptions$.value); } private calculatePageCount(pageSize, totalCount = 0) { diff --git a/src/app/access-control/bulk-access/bulk-access.component.html b/src/app/access-control/bulk-access/bulk-access.component.html index 12ab88cd1a..aa6c82e133 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.html +++ b/src/app/access-control/bulk-access/bulk-access.component.html @@ -1,8 +1,18 @@ -
    - + + +
    + +
    + + +
    diff --git a/src/app/access-control/bulk-access/bulk-access.component.spec.ts b/src/app/access-control/bulk-access/bulk-access.component.spec.ts index 61fab1e5a9..3372f98dab 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.spec.ts +++ b/src/app/access-control/bulk-access/bulk-access.component.spec.ts @@ -1,25 +1,115 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; + +import { TranslateModule } from '@ngx-translate/core'; +import { of } from 'rxjs'; import { BulkAccessComponent } from './bulk-access.component'; +import { BulkAccessControlService } from '../../shared/access-control-form-container/bulk-access-control.service'; +import { SelectableListService } from '../../shared/object-list/selectable-list/selectable-list.service'; +import { SelectableListState } from '../../shared/object-list/selectable-list/selectable-list.reducer'; +import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; +import { Process } from '../../process-page/processes/process.model'; -describe('BulkAccessComponent', () => { +fdescribe('BulkAccessComponent', () => { let component: BulkAccessComponent; let fixture: ComponentFixture; + let bulkAccessControlService: any; + let selectableListService: any; + + const selectableListServiceMock = jasmine.createSpyObj('SelectableListService', ['getSelectableList', 'deselectAll']); + const bulkAccessControlServiceMock = jasmine.createSpyObj('bulkAccessControlService', ['createPayloadFile', 'executeScript']); + + const mockFormState = { + "bitstream": [], + "item": [ + { + "name": "embargo", + "startDate": { + "year": 2026, + "month": 5, + "day": 31 + }, + "endDate": null + } + ], + "state": { + "item": { + "toggleStatus": true, + "accessMode": "replace" + }, + "bitstream": { + "toggleStatus": false, + "accessMode": "", + "changesLimit": "", + "selectedBitstreams": [] + } + } + }; + + const mockSettings: any = jasmine.createSpyObj('AccessControlFormContainerComponent', { + getValue: jasmine.createSpy('getValue'), + reset: jasmine.createSpy('reset') + }); + const selection: any[] = [{ indexableObject: { uuid: '1234' } }, { indexableObject: { uuid: '5678' } }]; + const selectableListState: SelectableListState = { id: 'test', selection }; + const expectedIdList = ['1234', '5678']; beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ BulkAccessComponent ] + imports: [ TranslateModule.forRoot() ], + declarations: [ BulkAccessComponent ], + providers: [ + { provide: BulkAccessControlService, useValue: bulkAccessControlServiceMock }, + { provide: SelectableListService, useValue: selectableListServiceMock } + ], + schemas: [NO_ERRORS_SCHEMA] }) - .compileComponents(); + .compileComponents(); }); beforeEach(() => { fixture = TestBed.createComponent(BulkAccessComponent); component = fixture.componentInstance; + bulkAccessControlService = TestBed.inject(BulkAccessControlService); + selectableListService = TestBed.inject(SelectableListService); + (component as any).selectableListService.getSelectableList.and.returnValue(of(selectableListState)); fixture.detectChanges(); + component.settings = mockSettings; + }); + + afterEach(() => { + fixture.destroy(); }); it('should create', () => { expect(component).toBeTruthy(); }); + + it('should generate the id list by selected elements', () => { + expect(component.objectsSelected$.value).toEqual(expectedIdList); + }); + + it('should disable the execute button when there are no objects selected', () => { + expect(component.canExport()).toBe(false); + }); + + it('should enable the execute button when there are objects selected', () => { + component.objectsSelected$.next(['1234']); + expect(component.canExport()).toBe(true); + }); + + it('should call the settings reset method when reset is called', () => { + spyOn(component.settings, 'reset'); + component.reset(); + expect(component.settings.reset).toHaveBeenCalled(); + }); + + it('should call the bulkAccessControlService executeScript method when submit is called', () => { + (component.settings as any).getValue.and.returnValue(mockFormState) + bulkAccessControlService.executeScript.and.returnValue(createSuccessfulRemoteDataObject$(new Process())); + component.objectsSelected$.next(['1234']); + component.submit(); + expect(bulkAccessControlService.executeScript).toHaveBeenCalled(); + }); }); diff --git a/src/app/access-control/bulk-access/bulk-access.component.ts b/src/app/access-control/bulk-access/bulk-access.component.ts index bc0d293e61..8a82edb273 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.ts +++ b/src/app/access-control/bulk-access/bulk-access.component.ts @@ -1,8 +1,31 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ViewChild } from '@angular/core'; + +import { BulkAccessSettingsComponent } from './settings/bulk-access-settings.component'; +import { distinctUntilChanged, map, take, tap } from 'rxjs/operators'; +import { BulkAccessControlService } from '../../shared/access-control-form-container/bulk-access-control.service'; +import { SelectableListState } from '../../shared/object-list/selectable-list/selectable-list.reducer'; +import { BehaviorSubject, Subscription } from 'rxjs'; +import { SelectableListService } from '../../shared/object-list/selectable-list/selectable-list.service'; @Component({ selector: 'ds-bulk-access', - templateUrl: './bulk-access.component.html', + // templateUrl: './bulk-access.component.html', + template: `
    + +
    + + +
    + +
    + + +
    +
    `, styleUrls: ['./bulk-access.component.scss'] }) export class BulkAccessComponent implements OnInit { @@ -13,9 +36,78 @@ export class BulkAccessComponent implements OnInit { */ listId: string = 'bulk-access-list'; - constructor() { } + /** + * The list of the objects already selected + */ + objectsSelected$: BehaviorSubject = new BehaviorSubject([]); + + /** + * Array to track all subscriptions and unsubscribe them onDestroy + */ + private subs: Subscription[] = []; + + /** + * The SectionsDirective reference + */ + @ViewChild('dsBulkSettings') settings: BulkAccessSettingsComponent; + + constructor( + private bulkAccessControlService: BulkAccessControlService, + private selectableListService: SelectableListService + ) { } ngOnInit(): void { + this.subs.push( + this.selectableListService.getSelectableList(this.listId).pipe( + distinctUntilChanged(), + tap(console.log), + map((list: SelectableListState) => this.generateIdListBySelectedElements(list)), + tap(console.log) + ).subscribe(this.objectsSelected$) + ) } + canExport(): boolean { + return this.objectsSelected$.value?.length > 0; + } + + /** + * Reset the form to its initial state + * This will also reset the state of the child components (bitstream and item access) + */ + reset(): void { + this.settings.reset() + } + + /** + * Submit the form + * This will create a payload file and execute the script + */ + submit(): void { + const settings = this.settings.getValue(); + const bitstreamAccess = settings.bitstream; + const itemAccess = settings.item; + + const { file } = this.bulkAccessControlService.createPayloadFile({ + bitstreamAccess, + itemAccess, + state: settings.state + }); + + this.bulkAccessControlService.executeScript( + this.objectsSelected$.value || [], + file + ).pipe(take(1)).subscribe((res) => { + console.log('success', res); + }); + } + + /** + * Generate The RemoteData object containing the list of the selected elements + * @param list + * @private + */ + private generateIdListBySelectedElements(list: SelectableListState): string[] { + return list?.selection?.map((entry: any) => entry.indexableObject.uuid); + } } diff --git a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.html b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.html index a5c292eddd..01f36ef03f 100644 --- a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.html +++ b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.html @@ -15,7 +15,7 @@
    -

    bulk-access-settings works!

    +
    diff --git a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.spec.ts b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.spec.ts index 435f2828b9..306d4eebde 100644 --- a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.spec.ts +++ b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.spec.ts @@ -1,25 +1,80 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; - +import { NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap'; +import { TranslateModule } from '@ngx-translate/core'; import { BulkAccessSettingsComponent } from './bulk-access-settings.component'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; describe('BulkAccessSettingsComponent', () => { let component: BulkAccessSettingsComponent; let fixture: ComponentFixture; + const mockFormState = { + "bitstream": [], + "item": [ + { + "name": "embargo", + "startDate": { + "year": 2026, + "month": 5, + "day": 31 + }, + "endDate": null + } + ], + "state": { + "item": { + "toggleStatus": true, + "accessMode": "replace" + }, + "bitstream": { + "toggleStatus": false, + "accessMode": "", + "changesLimit": "", + "selectedBitstreams": [] + } + } + }; + + const mockControl: any = jasmine.createSpyObj('AccessControlFormContainerComponent', { + getFormValue: jasmine.createSpy('getFormValue'), + reset: jasmine.createSpy('reset') + }); beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ BulkAccessSettingsComponent ] - }) - .compileComponents(); + imports: [NgbAccordionModule, TranslateModule.forRoot()], + declarations: [BulkAccessSettingsComponent], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); }); beforeEach(() => { fixture = TestBed.createComponent(BulkAccessSettingsComponent); component = fixture.componentInstance; fixture.detectChanges(); + component.controlForm = mockControl; }); - it('should create', () => { + it('should create the component', () => { expect(component).toBeTruthy(); }); + + it('should have a method to get the form value', () => { + expect(component.getValue).toBeDefined(); + }); + + it('should have a method to reset the form', () => { + expect(component.reset).toBeDefined(); + }); + + it('should return the correct form value', () => { + const expectedValue = mockFormState; + (component.controlForm as any).getFormValue.and.returnValue(mockFormState) + const actualValue = component.getValue(); + expect(actualValue).toEqual(expectedValue); + }); + + it('should call reset on the control form', () => { + component.reset(); + expect(component.controlForm.reset).toHaveBeenCalled(); + }); }); diff --git a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts index cad9e5b981..978fc41ed8 100644 --- a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts +++ b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts @@ -1,20 +1,34 @@ -import { Component, Input, OnInit } from '@angular/core'; +import { Component, ViewChild } from '@angular/core'; +import { + AccessControlFormContainerComponent +} from '../../../shared/access-control-form-container/access-control-form-container.component'; @Component({ selector: 'ds-bulk-access-settings', - templateUrl: './bulk-access-settings.component.html', - styleUrls: ['./bulk-access-settings.component.scss'] + templateUrl: 'bulk-access-settings.component.html', + styleUrls: ['./bulk-access-settings.component.scss'], + exportAs: 'dsBulkSettings' }) -export class BulkAccessSettingsComponent implements OnInit { +export class BulkAccessSettingsComponent { /** - * The selection list id + * The SectionsDirective reference */ - @Input() listId!: string; + @ViewChild('dsAccessControlForm') controlForm: AccessControlFormContainerComponent; - constructor() { } + /** + * Will be used from a parent component to read the value of the form + */ + getValue() { + return this.controlForm.getFormValue(); + } - ngOnInit(): void { + /** + * Reset the form to its initial state + * This will also reset the state of the child components (bitstream and item access) + */ + reset() { + this.controlForm.reset() } } diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.spec.ts b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.spec.ts index 5c97e3abc5..ca715a238c 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.spec.ts +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.spec.ts @@ -11,7 +11,7 @@ import { ControlMaxEndDatePipe } from './control-max-end-date.pipe'; import { DebugElement } from '@angular/core'; import { By } from '@angular/platform-browser'; -fdescribe('AccessControlArrayFormComponent', () => { +describe('AccessControlArrayFormComponent', () => { let component: AccessControlArrayFormComponent; let fixture: ComponentFixture; diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index 10ce81d6fc..7e46a53ed5 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -65,6 +65,11 @@ export class AccessControlFormContainerComponent impleme * Will be used from a parent component to read the value of the form */ getFormValue() { + console.log({ + bitstream: this.bitstreamAccessCmp.getValue(), + item: this.itemAccessCmp.getValue(), + state: this.state + }); return { bitstream: this.bitstreamAccessCmp.getValue(), item: this.itemAccessCmp.getValue(), diff --git a/src/app/shared/access-control-form-container/bulk-access-control.service.spec.ts b/src/app/shared/access-control-form-container/bulk-access-control.service.spec.ts index 9e733b5694..1bd2efcfef 100644 --- a/src/app/shared/access-control-form-container/bulk-access-control.service.spec.ts +++ b/src/app/shared/access-control-form-container/bulk-access-control.service.spec.ts @@ -1,12 +1,14 @@ import { TestBed } from '@angular/core/testing'; -import { BulkAccessControlService } from './bulk-access-control.service'; +import { BulkAccessControlService, BulkAccessPayload } from './bulk-access-control.service'; import { ScriptDataService } from '../../core/data/processes/script-data.service'; import { ProcessParameter } from '../../process-page/processes/process-parameter.model'; -fdescribe('BulkAccessControlService', () => { +describe('BulkAccessControlService', () => { let service: BulkAccessControlService; let scriptServiceSpy: jasmine.SpyObj; + + beforeEach(() => { const spy = jasmine.createSpyObj('ScriptDataService', ['invoke']); TestBed.configureTestingModule({ @@ -25,7 +27,7 @@ fdescribe('BulkAccessControlService', () => { describe('createPayloadFile', () => { it('should create a file and return the URL and file object', () => { - const payload = { data: 'test' }; + const payload: BulkAccessPayload = { state: null, bitstreamAccess: null, itemAccess: null }; const result = service.createPayloadFile(payload); expect(result.url).toBeTruthy(); diff --git a/src/app/shared/access-control-form-container/bulk-access-control.service.ts b/src/app/shared/access-control-form-container/bulk-access-control.service.ts index f5afe338dd..77fbcbffb2 100644 --- a/src/app/shared/access-control-form-container/bulk-access-control.service.ts +++ b/src/app/shared/access-control-form-container/bulk-access-control.service.ts @@ -4,11 +4,17 @@ import { ScriptDataService } from '../../core/data/processes/script-data.service import { ProcessParameter } from '../../process-page/processes/process-parameter.model'; import { AccessControlFormState } from './access-control-form-container.component'; +export interface BulkAccessPayload { + state: AccessControlFormState; + bitstreamAccess: any; + itemAccess: any; +} + @Injectable({ providedIn: 'root' }) export class BulkAccessControlService { constructor(private scriptService: ScriptDataService) {} - createPayloadFile(payload: { state: AccessControlFormState, bitstreamAccess, itemAccess }) { + createPayloadFile(payload: BulkAccessPayload) { const content = convertToBulkAccessControlFileModel(payload); const blob = new Blob([JSON.stringify(content, null, 2)], { diff --git a/src/app/shared/object-list/selectable-list/selectable-list.service.spec.ts b/src/app/shared/object-list/selectable-list/selectable-list.service.spec.ts index 1535671f79..496ef28761 100644 --- a/src/app/shared/object-list/selectable-list/selectable-list.service.spec.ts +++ b/src/app/shared/object-list/selectable-list/selectable-list.service.spec.ts @@ -11,7 +11,7 @@ import { } from './selectable-list.actions'; import { AppState } from '../../../app.reducer'; -class SelectableObject extends ListableObject { +export class SelectableObject extends ListableObject { constructor(private value: string) { super(); } From f3aa2d47a6dc5b1397a3f683452b90d6fe1f4784 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Thu, 11 May 2023 11:10:00 +0200 Subject: [PATCH 070/425] [CST-9636] finalize implementation --- .../browse/bulk-access-browse.component.ts | 5 +- .../bulk-access/bulk-access.component.spec.ts | 97 +++++++++++++------ .../bulk-access/bulk-access.component.ts | 65 +++++++------ 3 files changed, 109 insertions(+), 58 deletions(-) diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts index 53a7302b46..eff5942d4e 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts @@ -1,7 +1,7 @@ import { Component, Input, OnDestroy, OnInit } from '@angular/core'; import { BehaviorSubject, Subscription } from 'rxjs'; -import { distinctUntilChanged, map, tap } from 'rxjs/operators'; +import { distinctUntilChanged, map } from 'rxjs/operators'; import { SEARCH_CONFIG_SERVICE } from '../../../my-dspace-page/my-dspace-page.component'; import { SearchConfigurationService } from '../../../core/shared/search/search-configuration.service'; @@ -67,8 +67,7 @@ export class BulkAccessBrowseComponent implements OnInit, OnDestroy { this.subs.push( this.selectableListService.getSelectableList(this.listId).pipe( distinctUntilChanged(), - map((list: SelectableListState) => this.generatePaginatedListBySelectedElements(list)), - tap(console.log) + map((list: SelectableListState) => this.generatePaginatedListBySelectedElements(list)) ).subscribe(this.objectsSelected$) ) } diff --git a/src/app/access-control/bulk-access/bulk-access.component.spec.ts b/src/app/access-control/bulk-access/bulk-access.component.spec.ts index 3372f98dab..8a64d01df4 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.spec.ts +++ b/src/app/access-control/bulk-access/bulk-access.component.spec.ts @@ -10,6 +10,9 @@ import { SelectableListService } from '../../shared/object-list/selectable-list/ import { SelectableListState } from '../../shared/object-list/selectable-list/selectable-list.reducer'; import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; import { Process } from '../../process-page/processes/process.model'; +import { RouterTestingModule } from '@angular/router/testing'; +import { NotificationsService } from '../../shared/notifications/notifications.service'; +import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; fdescribe('BulkAccessComponent', () => { let component: BulkAccessComponent; @@ -47,6 +50,13 @@ fdescribe('BulkAccessComponent', () => { } }; + const mockFile = { + "uuids": [ + '1234', '5678' + ], + "file": { } + } + const mockSettings: any = jasmine.createSpyObj('AccessControlFormContainerComponent', { getValue: jasmine.createSpy('getValue'), reset: jasmine.createSpy('reset') @@ -55,12 +65,18 @@ fdescribe('BulkAccessComponent', () => { const selectableListState: SelectableListState = { id: 'test', selection }; const expectedIdList = ['1234', '5678']; + const selectableListStateEmpty: SelectableListState = { id: 'test', selection: [] }; + beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ TranslateModule.forRoot() ], + imports: [ + RouterTestingModule, + TranslateModule.forRoot() + ], declarations: [ BulkAccessComponent ], providers: [ { provide: BulkAccessControlService, useValue: bulkAccessControlServiceMock }, + { provide: NotificationsService, useValue: NotificationsServiceStub }, { provide: SelectableListService, useValue: selectableListServiceMock } ], schemas: [NO_ERRORS_SCHEMA] @@ -73,43 +89,70 @@ fdescribe('BulkAccessComponent', () => { component = fixture.componentInstance; bulkAccessControlService = TestBed.inject(BulkAccessControlService); selectableListService = TestBed.inject(SelectableListService); - (component as any).selectableListService.getSelectableList.and.returnValue(of(selectableListState)); - fixture.detectChanges(); - component.settings = mockSettings; + }); afterEach(() => { fixture.destroy(); }); - it('should create', () => { - expect(component).toBeTruthy(); + describe('when there are no elements selected', () => { + + beforeEach(() => { + + (component as any).selectableListService.getSelectableList.and.returnValue(of(selectableListStateEmpty)); + fixture.detectChanges(); + component.settings = mockSettings; + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should generate the id list by selected elements', () => { + expect(component.objectsSelected$.value).toEqual([]); + }); + + it('should disable the execute button when there are no objects selected', () => { + expect(component.canExport()).toBe(false); + }); + }); - it('should generate the id list by selected elements', () => { - expect(component.objectsSelected$.value).toEqual(expectedIdList); - }); + describe('when there are elements selected', () => { - it('should disable the execute button when there are no objects selected', () => { - expect(component.canExport()).toBe(false); - }); + beforeEach(() => { - it('should enable the execute button when there are objects selected', () => { - component.objectsSelected$.next(['1234']); - expect(component.canExport()).toBe(true); - }); + (component as any).selectableListService.getSelectableList.and.returnValue(of(selectableListState)); + fixture.detectChanges(); + component.settings = mockSettings; + }); - it('should call the settings reset method when reset is called', () => { - spyOn(component.settings, 'reset'); - component.reset(); - expect(component.settings.reset).toHaveBeenCalled(); - }); + it('should create', () => { + expect(component).toBeTruthy(); + }); - it('should call the bulkAccessControlService executeScript method when submit is called', () => { - (component.settings as any).getValue.and.returnValue(mockFormState) - bulkAccessControlService.executeScript.and.returnValue(createSuccessfulRemoteDataObject$(new Process())); - component.objectsSelected$.next(['1234']); - component.submit(); - expect(bulkAccessControlService.executeScript).toHaveBeenCalled(); + it('should generate the id list by selected elements', () => { + expect(component.objectsSelected$.value).toEqual(expectedIdList); + }); + + it('should enable the execute button when there are objects selected', () => { + component.objectsSelected$.next(['1234']); + expect(component.canExport()).toBe(true); + }); + + it('should call the settings reset method when reset is called', () => { + component.reset(); + expect(component.settings.reset).toHaveBeenCalled(); + }); + + it('should call the bulkAccessControlService executeScript method when submit is called', () => { + (component.settings as any).getValue.and.returnValue(mockFormState); + bulkAccessControlService.createPayloadFile.and.returnValue(mockFile); + bulkAccessControlService.executeScript.and.returnValue(createSuccessfulRemoteDataObject$(new Process())); + component.objectsSelected$.next(['1234']); + component.submit(); + expect(bulkAccessControlService.executeScript).toHaveBeenCalled(); + }); }); }); diff --git a/src/app/access-control/bulk-access/bulk-access.component.ts b/src/app/access-control/bulk-access/bulk-access.component.ts index 8a82edb273..b928f3da4a 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.ts +++ b/src/app/access-control/bulk-access/bulk-access.component.ts @@ -1,36 +1,28 @@ import { Component, OnInit, ViewChild } from '@angular/core'; +import { Router } from '@angular/router'; + +import { BehaviorSubject, Subscription } from 'rxjs'; +import { distinctUntilChanged, map } from 'rxjs/operators'; +import { TranslateService } from '@ngx-translate/core'; import { BulkAccessSettingsComponent } from './settings/bulk-access-settings.component'; -import { distinctUntilChanged, map, take, tap } from 'rxjs/operators'; import { BulkAccessControlService } from '../../shared/access-control-form-container/bulk-access-control.service'; import { SelectableListState } from '../../shared/object-list/selectable-list/selectable-list.reducer'; -import { BehaviorSubject, Subscription } from 'rxjs'; import { SelectableListService } from '../../shared/object-list/selectable-list/selectable-list.service'; +import { getFirstCompletedRemoteData } from '../../core/shared/operators'; +import { RemoteData } from '../../core/data/remote-data'; +import { Process } from '../../process-page/processes/process.model'; +import { isNotEmpty } from '../../shared/empty.util'; +import { getProcessDetailRoute } from '../../process-page/process-page-routing.paths'; +import { NotificationsService } from '../../shared/notifications/notifications.service'; @Component({ selector: 'ds-bulk-access', - // templateUrl: './bulk-access.component.html', - template: `
    - -
    - - -
    - -
    - - -
    -
    `, + templateUrl: './bulk-access.component.html', styleUrls: ['./bulk-access.component.scss'] }) export class BulkAccessComponent implements OnInit { - /** * The selection list id */ @@ -53,16 +45,18 @@ export class BulkAccessComponent implements OnInit { constructor( private bulkAccessControlService: BulkAccessControlService, - private selectableListService: SelectableListService - ) { } + private notificationsService: NotificationsService, + private router: Router, + private selectableListService: SelectableListService, + private translationService: TranslateService + ) { + } ngOnInit(): void { this.subs.push( this.selectableListService.getSelectableList(this.listId).pipe( distinctUntilChanged(), - tap(console.log), - map((list: SelectableListState) => this.generateIdListBySelectedElements(list)), - tap(console.log) + map((list: SelectableListState) => this.generateIdListBySelectedElements(list)) ).subscribe(this.objectsSelected$) ) } @@ -97,9 +91,24 @@ export class BulkAccessComponent implements OnInit { this.bulkAccessControlService.executeScript( this.objectsSelected$.value || [], file - ).pipe(take(1)).subscribe((res) => { - console.log('success', res); - }); + ).pipe( + getFirstCompletedRemoteData(), + map((rd: RemoteData) => { + if (rd.hasSucceeded) { + const title = this.translationService.get('process.new.notification.success.title'); + const content = this.translationService.get('process.new.notification.success.content'); + this.notificationsService.success(title, content); + if (isNotEmpty(rd.payload)) { + this.router.navigateByUrl(getProcessDetailRoute(rd.payload.processId)); + } + return true; + } else { + const title = this.translationService.get('process.new.notification.error.title'); + const content = this.translationService.get('process.new.notification.error.content'); + this.notificationsService.error(title, content); + return false; + } + })).subscribe(); } /** From e8ff0fbf3638f419a0673ccd7ab6838a53ebe88c Mon Sep 17 00:00:00 2001 From: Alban Imami Date: Thu, 11 May 2023 12:53:18 +0200 Subject: [PATCH 071/425] [CST-5729] implemented functionality to add link tags in head html section when on item page --- server.ts | 12 ++-- .../data/signposting-data.service.spec.ts | 16 +++++ src/app/core/data/signposting-data.service.ts | 52 ++++++++++++++ src/app/core/data/signposting-data.ts | 5 ++ .../core/dspace-rest/dspace-rest.service.ts | 15 +++- .../metadata-item.service.spec.ts | 16 ----- .../metadata-item/metadata-item.service.ts | 70 ------------------- src/app/core/metadata/metadata.service.ts | 56 ++++++++++++--- src/app/init.service.ts | 4 +- src/modules/app/browser-init.service.ts | 3 - src/modules/app/server-init.service.ts | 3 - 11 files changed, 139 insertions(+), 113 deletions(-) create mode 100644 src/app/core/data/signposting-data.service.spec.ts create mode 100644 src/app/core/data/signposting-data.service.ts create mode 100644 src/app/core/data/signposting-data.ts delete mode 100644 src/app/core/metadata-item/metadata-item.service.spec.ts delete mode 100644 src/app/core/metadata-item/metadata-item.service.ts diff --git a/server.ts b/server.ts index 5a3660e4de..b8796eb05d 100644 --- a/server.ts +++ b/server.ts @@ -180,14 +180,14 @@ export function app() { changeOrigin: true })); - /** + /** * Proxy the linksets */ - router.use('/linksets**', createProxyMiddleware({ - target: `${environment.rest.baseUrl}/linksets`, - pathRewrite: path => path.replace(environment.ui.nameSpace, '/'), - changeOrigin: true - })); + router.use('/linkset**', createProxyMiddleware({ + target: `${environment.rest.baseUrl}/signposting/linksets`, + pathRewrite: path => path.replace(environment.ui.nameSpace, '/'), + changeOrigin: true + })); /** * Checks if the rateLimiter property is present diff --git a/src/app/core/data/signposting-data.service.spec.ts b/src/app/core/data/signposting-data.service.spec.ts new file mode 100644 index 0000000000..45c0abb29b --- /dev/null +++ b/src/app/core/data/signposting-data.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { SignpostingDataService } from './signposting-data.service'; + +describe('SignpostingDataService', () => { + let service: SignpostingDataService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(SignpostingDataService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/core/data/signposting-data.service.ts b/src/app/core/data/signposting-data.service.ts new file mode 100644 index 0000000000..25bac49f17 --- /dev/null +++ b/src/app/core/data/signposting-data.service.ts @@ -0,0 +1,52 @@ +import { Injectable } from '@angular/core'; +import { DspaceRestService } from '../dspace-rest/dspace-rest.service'; +// import { HttpHeaders, HttpResponse } from '@angular/common/http'; +import { catchError, map } from 'rxjs/operators'; +// import { throwError } from 'rxjs'; +import { Observable, of as observableOf } from 'rxjs'; +import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; +import { HttpHeaders } from '@angular/common/http'; + +@Injectable({ + providedIn: 'root' +}) +export class SignpostingDataService { + + constructor(private restService: DspaceRestService, protected halService: HALEndpointService) { } + + getLinks(uuid: string): Observable { + const url = this.halService.getRootHref().split('/'); + const baseUrl = `${url[0]}//${url[2]}/${url[3]}`; + + return this.restService.get(`${baseUrl}/signposting/links/${uuid}`).pipe( + catchError((err ) => { + console.error(err); + return observableOf(false); + }), + map((res: RawRestResponse) => res) + ); + } + + getLinksets(uuid: string): Observable { + const url = this.halService.getRootHref().split('/'); + const baseUrl = `${url[0]}//${url[2]}/${url[3]}`; + + const requestOptions = { + observe: 'response' as any, + headers: new HttpHeaders({ + 'accept': 'application/linkset', + 'Content-Type': 'application/linkset' + }), + responseType: 'text' + } as any; + + return this.restService.getWithHeaders(`${baseUrl}/signposting/linksets/${uuid}`, requestOptions).pipe( + catchError((err ) => { + console.error(err); + return observableOf(false); + }), + map((res: RawRestResponse) => res) + ); + } +} diff --git a/src/app/core/data/signposting-data.ts b/src/app/core/data/signposting-data.ts new file mode 100644 index 0000000000..5734d324ec --- /dev/null +++ b/src/app/core/data/signposting-data.ts @@ -0,0 +1,5 @@ +export interface SignpostingDataLink { + href: string, + rel: string, + type: string +} diff --git a/src/app/core/dspace-rest/dspace-rest.service.ts b/src/app/core/dspace-rest/dspace-rest.service.ts index ea4e8c2831..737714869d 100644 --- a/src/app/core/dspace-rest/dspace-rest.service.ts +++ b/src/app/core/dspace-rest/dspace-rest.service.ts @@ -1,4 +1,4 @@ -import { Observable, throwError as observableThrowError } from 'rxjs'; +import { Observable, throwError as observableThrowError, throwError } from 'rxjs'; import { catchError, map } from 'rxjs/operators'; import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http'; @@ -58,6 +58,19 @@ export class DspaceRestService { })); } + getWithHeaders(absoluteURL: string, reqOptions: any): Observable { + const requestOptions = reqOptions; + + return this.http.get(absoluteURL, requestOptions).pipe( + map((res) => ({ + payload: res + })), + catchError((err) => { + console.log('Error: ', err); + return throwError(() => new Error(err.error)); + })); + } + /** * Performs a request to the REST API. * diff --git a/src/app/core/metadata-item/metadata-item.service.spec.ts b/src/app/core/metadata-item/metadata-item.service.spec.ts deleted file mode 100644 index 89ca15658d..0000000000 --- a/src/app/core/metadata-item/metadata-item.service.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { MetadataItemService } from './metadata-item.service'; - -describe('MetadataItemService', () => { - let service: MetadataItemService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(MetadataItemService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/src/app/core/metadata-item/metadata-item.service.ts b/src/app/core/metadata-item/metadata-item.service.ts deleted file mode 100644 index a4fbcf587b..0000000000 --- a/src/app/core/metadata-item/metadata-item.service.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { Inject, Injectable } from '@angular/core'; -import { MetadataService } from '../metadata/metadata.service'; -import { ActivatedRoute, NavigationEnd, Event as NavigationEvent, NavigationStart, Router } from '@angular/router'; -import { TranslateService } from '@ngx-translate/core'; -import { Meta, Title } from '@angular/platform-browser'; -import { DSONameService } from '../breadcrumbs/dso-name.service'; -import { BundleDataService } from '../data/bundle-data.service'; -import { BitstreamDataService } from '../data/bitstream-data.service'; -import { BitstreamFormatDataService } from '../data/bitstream-format-data.service'; -import { RootDataService } from '../data/root-data.service'; -import { CoreState } from '../core-state.model'; -import { Store } from '@ngrx/store'; -import { HardRedirectService } from '../services/hard-redirect.service'; -import { APP_CONFIG, AppConfig } from 'src/config/app-config.interface'; -import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service'; -import { filter, map, switchMap, take, mergeMap } from 'rxjs/operators'; -import { DOCUMENT } from '@angular/common'; - -@Injectable({ - providedIn: 'root' -}) -export class MetadataItemService extends MetadataService { - - constructor( - private router1: ActivatedRoute, - router: Router, - translate: TranslateService, - meta: Meta, - title: Title, - dsoNameService: DSONameService, - bundleDataService: BundleDataService, - bitstreamDataService: BitstreamDataService, - bitstreamFormatDataService: BitstreamFormatDataService, - rootService: RootDataService, - store: Store, - hardRedirectService: HardRedirectService, - @Inject(APP_CONFIG) appConfig: AppConfig, - authorizationService: AuthorizationDataService, - @Inject(DOCUMENT) private document: Document - ) { - super(router, translate, meta, title, dsoNameService, bundleDataService, bitstreamDataService, bitstreamFormatDataService, rootService, store, hardRedirectService, appConfig, authorizationService); - } - - public checkCurrentRoute(){ - - console.log(this.router); - - this.router1.url.subscribe(url => { - console.log(url); - console.log(url[0].path); - }); - - // this.router.events.subscribe((event: NavigationEvent) => { - // if(event instanceof NavigationStart) { - // if(event.url.startsWith('/entities')){ - // console.log('We are on ENTITIES!'); - // } - // } - // }); - } - - setLinkTag(){ - this.clearMetaTags(); - - let link: HTMLLinkElement = this.document.createElement('link'); - link.setAttribute('rel', ''); - link.setAttribute('href', ''); - this.document.head.appendChild(link); - } -} diff --git a/src/app/core/metadata/metadata.service.ts b/src/app/core/metadata/metadata.service.ts index c46f8b1d6e..6d5ca91b8d 100644 --- a/src/app/core/metadata/metadata.service.ts +++ b/src/app/core/metadata/metadata.service.ts @@ -45,6 +45,7 @@ import { CoreState } from '../core-state.model'; import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service'; import { getDownloadableBitstream } from '../shared/bitstream.operators'; import { APP_CONFIG, AppConfig } from '../../../config/app-config.interface'; +import { SignpostingDataService } from '../data/signposting-data.service'; /** * The base selector function to select the metaTag section in the store @@ -96,7 +97,8 @@ export class MetadataService { private store: Store, private hardRedirectService: HardRedirectService, @Inject(APP_CONFIG) private appConfig: AppConfig, - private authorizationService: AuthorizationDataService + private authorizationService: AuthorizationDataService, + private signpostginDataService: SignpostingDataService ) { } @@ -138,7 +140,7 @@ export class MetadataService { } } - private getCurrentRoute(route: ActivatedRoute): ActivatedRoute { + public getCurrentRoute(route: ActivatedRoute): ActivatedRoute { while (route.firstChild) { route = route.firstChild; } @@ -162,6 +164,8 @@ export class MetadataService { this.setCitationAbstractUrlTag(); this.setCitationPdfUrlTag(); this.setCitationPublisherTag(); + this.setSignpostingLinks(); + this.setSignpostingLinksets(); if (this.isDissertation()) { this.setCitationDissertationNameTag(); @@ -184,6 +188,45 @@ export class MetadataService { } + /** + * Add to the + */ + private setSignpostingLinks() { + if (this.currentObject.value instanceof Item){ + const value = this.signpostginDataService.getLinks(this.currentObject.getValue().id); + value.subscribe(links => { + links.payload.forEach(link => { + this.setLinkTag(link.href, link.rel, link.type); + }); + }); + } + } + + setLinkTag(href: string, rel: string, type: string){ + let link: HTMLLinkElement = document.createElement('link'); + link.href = href; + link.rel = rel; + link.type = type; + document.head.appendChild(link); + console.log(link); + } + + private setSignpostingLinksets() { + if (this.currentObject.value instanceof Item){ + const value = this.signpostginDataService.getLinksets(this.currentObject.getValue().id); + value.subscribe(linksets => { + this.setLinkAttribute(linksets); + }); + } + } + + setLinkAttribute(linksets){ + console.log('ANDREA', linksets); + const linkAttribute = `Link: ${linksets.payload.body}`; + const textNode = document.createTextNode(linkAttribute); + document.head.appendChild(textNode); + } + /** * Add to the */ @@ -363,15 +406,6 @@ export class MetadataService { } } - /** - * Add to the - */ - // private setLinkTag(): void { - // const value = this.getMetaTagValue('dc.link'); - // this.meta.addTag({ name: 'Link', content: value }); - // this.addMetaTag('Link', value); - // } - getBitLinkIfDownloadable(bitstream: Bitstream, bitstreamRd: RemoteData>): Observable { return observableOf(bitstream).pipe( getDownloadableBitstream(this.authorizationService), diff --git a/src/app/init.service.ts b/src/app/init.service.ts index d5978d782d..2bbc589cc0 100644 --- a/src/app/init.service.ts +++ b/src/app/init.service.ts @@ -24,7 +24,6 @@ import { isAuthenticationBlocking } from './core/auth/selectors'; import { distinctUntilChanged, find } from 'rxjs/operators'; import { Observable } from 'rxjs'; import { MenuService } from './shared/menu/menu.service'; -import { MetadataItemService } from './core/metadata-item/metadata-item.service'; /** * Performs the initialization of the app. @@ -51,7 +50,6 @@ export abstract class InitService { protected localeService: LocaleService, protected angulartics2DSpace: Angulartics2DSpace, protected metadata: MetadataService, - protected metadataItem: MetadataItemService, protected breadcrumbsService: BreadcrumbsService, protected themeService: ThemeService, protected menuService: MenuService, @@ -190,7 +188,7 @@ export abstract class InitService { this.breadcrumbsService.listenForRouteChanges(); this.themeService.listenForRouteChanges(); this.menuService.listenForRouteChanges(); - this.metadataItem.checkCurrentRoute(); + // this.metadataItem.checkCurrentRoute(); } /** diff --git a/src/modules/app/browser-init.service.ts b/src/modules/app/browser-init.service.ts index f38883be1e..61d57f10f9 100644 --- a/src/modules/app/browser-init.service.ts +++ b/src/modules/app/browser-init.service.ts @@ -32,7 +32,6 @@ import { logStartupMessage } from '../../../startup-message'; import { MenuService } from '../../app/shared/menu/menu.service'; import { RootDataService } from '../../app/core/data/root-data.service'; import { firstValueFrom, Subscription } from 'rxjs'; -import { MetadataItemService } from 'src/app/core/metadata-item/metadata-item.service'; /** * Performs client-side initialization. @@ -52,7 +51,6 @@ export class BrowserInitService extends InitService { protected angulartics2DSpace: Angulartics2DSpace, protected googleAnalyticsService: GoogleAnalyticsService, protected metadata: MetadataService, - protected metadataItem: MetadataItemService, protected breadcrumbsService: BreadcrumbsService, protected klaroService: KlaroService, protected authService: AuthService, @@ -68,7 +66,6 @@ export class BrowserInitService extends InitService { localeService, angulartics2DSpace, metadata, - metadataItem, breadcrumbsService, themeService, menuService, diff --git a/src/modules/app/server-init.service.ts b/src/modules/app/server-init.service.ts index 074efc31e7..715f872cd9 100644 --- a/src/modules/app/server-init.service.ts +++ b/src/modules/app/server-init.service.ts @@ -21,7 +21,6 @@ import { BreadcrumbsService } from '../../app/breadcrumbs/breadcrumbs.service'; import { ThemeService } from '../../app/shared/theme-support/theme.service'; import { take } from 'rxjs/operators'; import { MenuService } from '../../app/shared/menu/menu.service'; -import { MetadataItemService } from 'src/app/core/metadata-item/metadata-item.service'; /** * Performs server-side initialization. @@ -37,7 +36,6 @@ export class ServerInitService extends InitService { protected localeService: LocaleService, protected angulartics2DSpace: Angulartics2DSpace, protected metadata: MetadataService, - protected metadataItem: MetadataItemService, protected breadcrumbsService: BreadcrumbsService, protected themeService: ThemeService, protected menuService: MenuService @@ -50,7 +48,6 @@ export class ServerInitService extends InitService { localeService, angulartics2DSpace, metadata, - metadataItem, breadcrumbsService, themeService, menuService, From a6897e9a6de8e2a1e1b7236453e83294ca03ccdb Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Thu, 11 May 2023 15:01:12 +0200 Subject: [PATCH 072/425] [CST-9639] Validation, translations and style fixes --- .../collection-access-control.component.html | 2 +- .../community-access-control.component.html | 2 +- .../item-access-control.component.html | 2 +- .../access-control-array-form.component.html | 2 +- .../access-control-array-form.component.ts | 7 +++++++ .../access-control-form-container.component.html | 14 +++++++++----- .../access-control-form-container.component.ts | 15 ++++++++++++--- .../bulk-access-control.service.ts | 13 ++++++++----- ...control-select-bitstreams-modal.component.html | 8 +++++--- src/assets/i18n/en.json5 | 9 +++++---- 10 files changed, 50 insertions(+), 24 deletions(-) diff --git a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.html b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.html index c53bf9c6ac..4e957cf867 100644 --- a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.html +++ b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.html @@ -1,7 +1,7 @@ -

    {{'collection-access-control-title' | translate}}

    diff --git a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html index 89999955eb..b4f2123b86 100644 --- a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html +++ b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html @@ -1,6 +1,6 @@ -

    {{'community-access-control-title' | translate }}

    diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html index 7bef310717..782e24fa2d 100644 --- a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html +++ b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html @@ -1,6 +1,6 @@ -

    {{ 'item-access-control-title' | translate }}

    diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html index 9b1f018ffb..71f327423f 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html @@ -1,5 +1,5 @@ -
    +
    {{'access-control-no-access-conditions-warning-message' | translate}}
    diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts index 1e978d9aa9..d4cd923128 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts @@ -34,6 +34,13 @@ export class AccessControlArrayFormComponent implements OnInit, OnDestroy { return this.form.get('accessControl') as FormArray; } + get allControlsAreEmpty() { + if (this.accessControl.length === 0) { + return true; + } + return this.accessControl.value.every(x => x.itemName === null || x.itemName === ''); + } + /** * Add a new access control item to the form. * Start and end date are disabled by default. diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.html b/src/app/shared/access-control-form-container/access-control-form-container.component.html index 5e5c8311c4..a5965839c1 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.html +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.html @@ -1,7 +1,11 @@
    -
    +
    - + +
    @@ -75,7 +79,7 @@
    - @@ -85,9 +89,9 @@ diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index 7e46a53ed5..f27fb4b5f0 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -16,6 +16,7 @@ import { import { BulkAccessConfigDataService } from '../../core/config/bulk-access-config-data.service'; import { getFirstCompletedRemoteData } from '../../core/shared/operators'; import { BulkAccessConditionOptions } from '../../core/config/models/bulk-access-condition-options.model'; +import { AlertType } from '../alert/aletr-type'; @Component({ selector: 'ds-access-control-form-container', @@ -30,6 +31,11 @@ export class AccessControlFormContainerComponent impleme */ @Input() showLimitToSpecificBitstreams = false; + /** + * The title message of the access control form (translate key) + */ + @Input() titleMessage = ''; + /** * The item to which the access control form applies */ @@ -45,6 +51,8 @@ export class AccessControlFormContainerComponent impleme @ViewChild('bitstreamAccessCmp', { static: true }) bitstreamAccessCmp: AccessControlArrayFormComponent; @ViewChild('itemAccessCmp', { static: true }) itemAccessCmp: AccessControlArrayFormComponent; + readonly AlertType = AlertType; + constructor( private bulkAccessConfigService: BulkAccessConfigDataService, private bulkAccessControlService: BulkAccessControlService, @@ -145,18 +153,19 @@ export class AccessControlFormContainerComponent impleme ngOnDestroy(): void { this.selectableListService.deselectAll(ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID); } + } const initialState: AccessControlFormState = { item: { toggleStatus: false, - accessMode: '', + accessMode: 'replace', }, bitstream: { toggleStatus: false, - accessMode: '', - changesLimit: '', // 'all' | 'selected' + accessMode: 'replace', + changesLimit: 'all', // 'all' | 'selected' selectedBitstreams: [] as ListableObject[], }, }; diff --git a/src/app/shared/access-control-form-container/bulk-access-control.service.ts b/src/app/shared/access-control-form-container/bulk-access-control.service.ts index 77fbcbffb2..057a64906f 100644 --- a/src/app/shared/access-control-form-container/bulk-access-control.service.ts +++ b/src/app/shared/access-control-form-container/bulk-access-control.service.ts @@ -43,22 +43,25 @@ export class BulkAccessControlService { } export const convertToBulkAccessControlFileModel = (payload: { state: AccessControlFormState, bitstreamAccess: AccessCondition[], itemAccess: AccessCondition[] }): BulkAccessControlFileModel => { + const itemEnabled = payload.state.item.toggleStatus; + const bitstreamEnabled = payload.state.bitstream.toggleStatus; + const constraints = { uuid: [] }; - if (payload.state.bitstream.changesLimit === 'selected') { + if (bitstreamEnabled && payload.state.bitstream.changesLimit === 'selected') { // @ts-ignore constraints.uuid = payload.state.bitstream.selectedBitstreams.map((x) => x.id); } return { item: { - mode: payload.state.item.accessMode, - accessConditions: payload.itemAccess + mode: itemEnabled ? payload.state.item.accessMode : '', + accessConditions: itemEnabled ? payload.itemAccess : [] }, bitstream: { constraints, - mode: payload.state.bitstream.accessMode, - accessConditions: payload.bitstreamAccess + mode: bitstreamEnabled ? payload.state.bitstream.accessMode : '', + accessConditions: bitstreamEnabled ? payload.bitstreamAccess : [] } }; }; diff --git a/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.html b/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.html index e4159f3505..8cf0ecea38 100644 --- a/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.html +++ b/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.html @@ -1,5 +1,7 @@ diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 00f2bd46b0..315b0e03fc 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -5326,7 +5326,7 @@ "admin.system-wide-alert.title": "System-wide Alerts", - "item-access-control-title": "This form allows you to perform changes to the access condition of all the items owned by collection under this community. Changes can be performed on the access condition for the metadata (item) or for the content (bitstream).", + "item-access-control-title": "This form allows you to perform changes to the access condition of all the item's metadata and all its bitstreams.", "collection-access-control-title": "This form allows you to perform changes to the access condition of all the items owned by collection under this community. Changes can be performed on the access condition for the metadata (item) or for the content (bitstream).", "community-access-control-title": "This form allows you to perform changes to the access condition of all the items owned by collection under this community. Changes can be performed on the access condition for the metadata (item) or for the content (bitstream).", "access-control-item-header-toggle": "Item's Metadata", @@ -5341,8 +5341,9 @@ "access-control-bitstreams-selected": "bitstreams selected", "access-control-reset": "Reset", "access-control-execute": "Execute", - "access-control-add-more": "Add more" - - + "access-control-add-more": "Add more", + "access-control-select-bitstreams-modal.title": "Select bitstreams", + "access-control-select-bitstreams-modal.no-items": "No items to show.", + "access-control-select-bitstreams-modal.close": "Close" } From fe8bbddac25a40be99193a98232c1bf8ba334968 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Thu, 11 May 2023 15:05:35 +0200 Subject: [PATCH 073/425] [CST-5729] Fix proxying for signposting --- server.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/server.ts b/server.ts index b8796eb05d..282b1ce29a 100644 --- a/server.ts +++ b/server.ts @@ -26,7 +26,6 @@ import * as ejs from 'ejs'; import * as compression from 'compression'; import * as expressStaticGzip from 'express-static-gzip'; /* eslint-enable import/no-namespace */ - import axios from 'axios'; import LRU from 'lru-cache'; import isbot from 'isbot'; @@ -34,7 +33,7 @@ import { createCertificate } from 'pem'; import { createServer } from 'https'; import { json } from 'body-parser'; -import { existsSync, readFileSync } from 'fs'; +import { readFileSync } from 'fs'; import { join } from 'path'; import { enableProdMode } from '@angular/core'; @@ -183,8 +182,8 @@ export function app() { /** * Proxy the linksets */ - router.use('/linkset**', createProxyMiddleware({ - target: `${environment.rest.baseUrl}/signposting/linksets`, + router.use('/links**', createProxyMiddleware({ + target: `${environment.rest.baseUrl}/signposting`, pathRewrite: path => path.replace(environment.ui.nameSpace, '/'), changeOrigin: true })); From 558f8f51fb8cd6a8a0d6547b1c660e5f1d8fc917 Mon Sep 17 00:00:00 2001 From: Alban Imami Date: Thu, 11 May 2023 18:47:01 +0200 Subject: [PATCH 074/425] [CST-5729] Implemented functionality to add Links in Response Headers on Item Page --- src/app/core/data/signposting-data.service.ts | 10 +++--- src/app/core/metadata/metadata.service.ts | 32 ++++++++++--------- .../services/server-hard-redirect.service.ts | 12 +++++++ .../core/services/server-response.service.ts | 6 ++++ .../full/full-item-page.component.ts | 8 +++-- .../item-page/simple/item-page.component.ts | 11 ++++++- 6 files changed, 55 insertions(+), 24 deletions(-) diff --git a/src/app/core/data/signposting-data.service.ts b/src/app/core/data/signposting-data.service.ts index 25bac49f17..0ef2b49f0f 100644 --- a/src/app/core/data/signposting-data.service.ts +++ b/src/app/core/data/signposting-data.service.ts @@ -16,8 +16,7 @@ export class SignpostingDataService { constructor(private restService: DspaceRestService, protected halService: HALEndpointService) { } getLinks(uuid: string): Observable { - const url = this.halService.getRootHref().split('/'); - const baseUrl = `${url[0]}//${url[2]}/${url[3]}`; + const baseUrl = this.halService.getRootHref().replace('/api', ''); return this.restService.get(`${baseUrl}/signposting/links/${uuid}`).pipe( catchError((err ) => { @@ -28,9 +27,8 @@ export class SignpostingDataService { ); } - getLinksets(uuid: string): Observable { - const url = this.halService.getRootHref().split('/'); - const baseUrl = `${url[0]}//${url[2]}/${url[3]}`; + getLinksets(uuid: string): Observable { + const baseUrl = this.halService.getRootHref().replace('/api', ''); const requestOptions = { observe: 'response' as any, @@ -46,7 +44,7 @@ export class SignpostingDataService { console.error(err); return observableOf(false); }), - map((res: RawRestResponse) => res) + map((res: RawRestResponse) => res.payload.body) ); } } diff --git a/src/app/core/metadata/metadata.service.ts b/src/app/core/metadata/metadata.service.ts index 6d5ca91b8d..3cc678fb15 100644 --- a/src/app/core/metadata/metadata.service.ts +++ b/src/app/core/metadata/metadata.service.ts @@ -165,7 +165,6 @@ export class MetadataService { this.setCitationPdfUrlTag(); this.setCitationPublisherTag(); this.setSignpostingLinks(); - this.setSignpostingLinksets(); if (this.isDissertation()) { this.setCitationDissertationNameTag(); @@ -211,21 +210,24 @@ export class MetadataService { console.log(link); } - private setSignpostingLinksets() { - if (this.currentObject.value instanceof Item){ - const value = this.signpostginDataService.getLinksets(this.currentObject.getValue().id); - value.subscribe(linksets => { - this.setLinkAttribute(linksets); - }); - } - } + // public setSignpostingLinksets(itemId: string) { + // let linkSet: string; - setLinkAttribute(linksets){ - console.log('ANDREA', linksets); - const linkAttribute = `Link: ${linksets.payload.body}`; - const textNode = document.createTextNode(linkAttribute); - document.head.appendChild(textNode); - } + // const value = this.signpostginDataService.getLinksets(itemId); + + // value.subscribe(linksets => { + // linkSet = linksets.payload.body; + // }); + + // return linkSet; + // } + + // setLinkAttribute(linksets){ + // console.log('ANDREA', linksets); + // const linkAttribute = `Link: ${linksets.payload.body}`; + // const textNode = document.createTextNode(linkAttribute); + // document.head.appendChild(textNode); + // } /** * Add to the diff --git a/src/app/core/services/server-hard-redirect.service.ts b/src/app/core/services/server-hard-redirect.service.ts index 94b9ed6198..a6c0e09aee 100644 --- a/src/app/core/services/server-hard-redirect.service.ts +++ b/src/app/core/services/server-hard-redirect.service.ts @@ -2,6 +2,9 @@ import { Inject, Injectable } from '@angular/core'; import { Request, Response } from 'express'; import { REQUEST, RESPONSE } from '@nguniversal/express-engine/tokens'; import { HardRedirectService } from './hard-redirect.service'; +import { SignpostingDataService } from '../data/signposting-data.service'; +import { ActivatedRoute } from '@angular/router'; +import { take } from 'rxjs'; /** * Service for performing hard redirects within the server app module @@ -12,6 +15,8 @@ export class ServerHardRedirectService extends HardRedirectService { constructor( @Inject(REQUEST) protected req: Request, @Inject(RESPONSE) protected res: Response, + private signpostginDataService: SignpostingDataService, + protected route: ActivatedRoute ) { super(); } @@ -46,6 +51,13 @@ export class ServerHardRedirectService extends HardRedirectService { } console.log(`Redirecting from ${this.req.url} to ${url} with ${status}`); + + this.route.params.subscribe(params => { + this.signpostginDataService.getLinksets(params.id).pipe(take(1)).subscribe(linksets => { + this.res.setHeader('Link', linksets); + }); + }); + this.res.redirect(status, url); this.res.end(); // I haven't found a way to correctly stop Angular rendering. diff --git a/src/app/core/services/server-response.service.ts b/src/app/core/services/server-response.service.ts index 02e00446bc..6dd50506e9 100644 --- a/src/app/core/services/server-response.service.ts +++ b/src/app/core/services/server-response.service.ts @@ -35,4 +35,10 @@ export class ServerResponseService { setInternalServerError(message = 'Internal Server Error'): this { return this.setStatus(500, message); } + + setLinksetsHeader(linksets: string){ + if (this.response) { + this.response.setHeader('Link', linksets); + } + } } diff --git a/src/app/item-page/full/full-item-page.component.ts b/src/app/item-page/full/full-item-page.component.ts index 118e436004..44766bac7b 100644 --- a/src/app/item-page/full/full-item-page.component.ts +++ b/src/app/item-page/full/full-item-page.component.ts @@ -16,6 +16,8 @@ import { hasValue } from '../../shared/empty.util'; import { AuthService } from '../../core/auth/auth.service'; import { Location } from '@angular/common'; import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; +import { ServerResponseService } from 'src/app/core/services/server-response.service'; +import { SignpostingDataService } from 'src/app/core/data/signposting-data.service'; /** @@ -48,8 +50,10 @@ export class FullItemPageComponent extends ItemPageComponent implements OnInit, items: ItemDataService, authService: AuthService, authorizationService: AuthorizationDataService, - private _location: Location) { - super(route, router, items, authService, authorizationService); + private _location: Location, + responseService: ServerResponseService, + signpostginDataService: SignpostingDataService) { + super(route, router, items, authService, authorizationService, responseService, signpostginDataService); } /*** AoT inheritance fix, will hopefully be resolved in the near future **/ diff --git a/src/app/item-page/simple/item-page.component.ts b/src/app/item-page/simple/item-page.component.ts index 6e0db386db..058cbc667a 100644 --- a/src/app/item-page/simple/item-page.component.ts +++ b/src/app/item-page/simple/item-page.component.ts @@ -15,6 +15,8 @@ import { getItemPageRoute } from '../item-page-routing-paths'; import { redirectOn4xx } from '../../core/shared/authorized.operators'; import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; +import { ServerResponseService } from '../../core/services/server-response.service'; +import { SignpostingDataService } from '../../core/data/signposting-data.service'; /** * This component renders a simple item page. @@ -62,8 +64,15 @@ export class ItemPageComponent implements OnInit { private router: Router, private items: ItemDataService, private authService: AuthService, - private authorizationService: AuthorizationDataService + private authorizationService: AuthorizationDataService, + private responseService: ServerResponseService, + private signpostginDataService: SignpostingDataService ) { + this.route.params.subscribe(params => { + this.signpostginDataService.getLinksets(params.id).subscribe(linksets => { + this.responseService.setLinksetsHeader(linksets); + }); + }); } /** From 8e5c4a73dc81069ccbcfbef0a58d3433cc05470e Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Thu, 11 May 2023 13:55:53 -0400 Subject: [PATCH 075/425] Make some request-copy components themeable. --- .../deny-request-copy.component.html | 2 +- .../themed-email-request-copy.component.ts | 45 +++++++++++++++++++ .../grant-request-copy.component.html | 4 +- .../themed-grant-request-copy.component.ts | 26 +++++++++++ .../request-copy-routing.module.ts | 4 +- src/app/request-copy/request-copy.module.ts | 4 ++ 6 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 src/app/request-copy/email-request-copy/themed-email-request-copy.component.ts create mode 100644 src/app/request-copy/grant-request-copy/themed-grant-request-copy.component.ts diff --git a/src/app/request-copy/deny-request-copy/deny-request-copy.component.html b/src/app/request-copy/deny-request-copy/deny-request-copy.component.html index c9e909ccf1..e513212f94 100644 --- a/src/app/request-copy/deny-request-copy/deny-request-copy.component.html +++ b/src/app/request-copy/deny-request-copy/deny-request-copy.component.html @@ -3,7 +3,7 @@

    {{'deny-request-copy.intro' | translate}}

    - +
    diff --git a/src/app/request-copy/email-request-copy/themed-email-request-copy.component.ts b/src/app/request-copy/email-request-copy/themed-email-request-copy.component.ts new file mode 100644 index 0000000000..6b808288ad --- /dev/null +++ b/src/app/request-copy/email-request-copy/themed-email-request-copy.component.ts @@ -0,0 +1,45 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { ThemedComponent } from 'src/app/shared/theme-support/themed.component'; + +import { EmailRequestCopyComponent } from './email-request-copy.component'; +import { RequestCopyEmail } from './request-copy-email.model'; + +/** + * Themed wrapper for email-request-copy.component + */ +@Component({ + selector: 'ds-themed-email-request-copy', + styleUrls: [], + templateUrl: './../../shared/theme-support/themed.component.html', +}) + +export class ThemedEmailRequestCopyComponent extends ThemedComponent { + /** + * Event emitter for sending the email + */ + @Output() send: EventEmitter = new EventEmitter(); + + /** + * The subject of the email + */ + @Input() subject: string; + + /** + * The contents of the email + */ + @Input() message: string; + + protected inAndOutputNames: (keyof EmailRequestCopyComponent & keyof this)[] = ['send', 'subject', 'message']; + + protected getComponentName(): string { + return 'EmailRequestCopyComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../themes/${themeName}/app/request-copy/email-request-copy/email-request-copy.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./email-request-copy.component'); + } +} diff --git a/src/app/request-copy/grant-request-copy/grant-request-copy.component.html b/src/app/request-copy/grant-request-copy/grant-request-copy.component.html index 5cb4dbac36..179206566e 100644 --- a/src/app/request-copy/grant-request-copy/grant-request-copy.component.html +++ b/src/app/request-copy/grant-request-copy/grant-request-copy.component.html @@ -3,7 +3,7 @@

    {{'grant-request-copy.intro' | translate}}

    - +

    {{ 'grant-deny-request-copy.email.permissions.info' | translate }}

    @@ -11,7 +11,7 @@
    -
    +
    diff --git a/src/app/request-copy/grant-request-copy/themed-grant-request-copy.component.ts b/src/app/request-copy/grant-request-copy/themed-grant-request-copy.component.ts new file mode 100644 index 0000000000..625dcef57a --- /dev/null +++ b/src/app/request-copy/grant-request-copy/themed-grant-request-copy.component.ts @@ -0,0 +1,26 @@ +import { Component } from '@angular/core'; +import { ThemedComponent } from 'src/app/shared/theme-support/themed.component'; +import { GrantRequestCopyComponent } from './grant-request-copy.component'; + +/** + * Themed wrapper for grant-request-copy.component + */ +@Component({ + selector: 'ds-themed-grant-request-copy', + styleUrls: [], + templateUrl: './../../shared/theme-support/themed.component.html', +}) + +export class ThemedGrantRequestCopyComponent extends ThemedComponent { + protected getComponentName(): string { + return 'GrantRequestCopyComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../themes/${themeName}/app/request-copy/grant-request-copy/grant-request-copy.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./grant-request-copy.component'); + } +} diff --git a/src/app/request-copy/request-copy-routing.module.ts b/src/app/request-copy/request-copy-routing.module.ts index e7a205d0aa..c3ac0be46a 100644 --- a/src/app/request-copy/request-copy-routing.module.ts +++ b/src/app/request-copy/request-copy-routing.module.ts @@ -4,7 +4,7 @@ import { RequestCopyResolver } from './request-copy.resolver'; import { GrantDenyRequestCopyComponent } from './grant-deny-request-copy/grant-deny-request-copy.component'; import { REQUEST_COPY_DENY_PATH, REQUEST_COPY_GRANT_PATH } from './request-copy-routing-paths'; import { DenyRequestCopyComponent } from './deny-request-copy/deny-request-copy.component'; -import { GrantRequestCopyComponent } from './grant-request-copy/grant-request-copy.component'; +import { ThemedGrantRequestCopyComponent } from './grant-request-copy/themed-grant-request-copy.component'; @NgModule({ imports: [ @@ -25,7 +25,7 @@ import { GrantRequestCopyComponent } from './grant-request-copy/grant-request-co }, { path: REQUEST_COPY_GRANT_PATH, - component: GrantRequestCopyComponent, + component: ThemedGrantRequestCopyComponent, }, ] } diff --git a/src/app/request-copy/request-copy.module.ts b/src/app/request-copy/request-copy.module.ts index d55d5ad83f..b5ea3da50c 100644 --- a/src/app/request-copy/request-copy.module.ts +++ b/src/app/request-copy/request-copy.module.ts @@ -5,7 +5,9 @@ import { GrantDenyRequestCopyComponent } from './grant-deny-request-copy/grant-d import { RequestCopyRoutingModule } from './request-copy-routing.module'; import { DenyRequestCopyComponent } from './deny-request-copy/deny-request-copy.component'; import { EmailRequestCopyComponent } from './email-request-copy/email-request-copy.component'; +import { ThemedEmailRequestCopyComponent } from './email-request-copy/themed-email-request-copy.component'; import { GrantRequestCopyComponent } from './grant-request-copy/grant-request-copy.component'; +import { ThemedGrantRequestCopyComponent } from './grant-request-copy/themed-grant-request-copy.component'; @NgModule({ imports: [ @@ -17,7 +19,9 @@ import { GrantRequestCopyComponent } from './grant-request-copy/grant-request-co GrantDenyRequestCopyComponent, DenyRequestCopyComponent, EmailRequestCopyComponent, + ThemedEmailRequestCopyComponent, GrantRequestCopyComponent, + ThemedGrantRequestCopyComponent, ], providers: [] }) From 67976299de7ab657ccbdb60b7f4efde2e112d63f Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Fri, 12 May 2023 08:12:04 +0200 Subject: [PATCH 076/425] 101623: Fixes for rendersBrowseBy, BrowseResponseParsingService, BrowseByRoutingModule --- src/app/browse-by/browse-by-routing.module.ts | 7 ------- .../browse-by/browse-by-switcher/browse-by-decorator.ts | 2 +- .../browse-by-switcher/browse-by-switcher.component.ts | 2 +- .../themed-browse-by-taxonomy-page.component.ts | 4 +++- src/app/core/data/browse-response-parsing.service.ts | 4 +++- 5 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/app/browse-by/browse-by-routing.module.ts b/src/app/browse-by/browse-by-routing.module.ts index b555390225..5d3697f391 100644 --- a/src/app/browse-by/browse-by-routing.module.ts +++ b/src/app/browse-by/browse-by-routing.module.ts @@ -14,13 +14,6 @@ import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.reso path: '', resolve: { breadcrumb: BrowseByDSOBreadcrumbResolver }, children: [ - { - path: 'srsc', - component: ThemedBrowseByTaxonomyPageComponent, - canActivate: [BrowseByGuard], - resolve: { breadcrumb: I18nBreadcrumbResolver }, - data: { title: 'browse.title.page', breadcrumbKey: 'browse.metadata.srsc' } - }, { path: ':id', component: ThemedBrowseBySwitcherComponent, diff --git a/src/app/browse-by/browse-by-switcher/browse-by-decorator.ts b/src/app/browse-by/browse-by-switcher/browse-by-decorator.ts index ceb4c6a6c6..b59a46cae1 100644 --- a/src/app/browse-by/browse-by-switcher/browse-by-decorator.ts +++ b/src/app/browse-by/browse-by-switcher/browse-by-decorator.ts @@ -26,7 +26,7 @@ const map = new Map(); * @param browseByType The type of page * @param theme The optional theme for the component */ -export function rendersBrowseBy(browseByType: BrowseByDataType, theme = DEFAULT_THEME) { +export function rendersBrowseBy(browseByType: string, theme = DEFAULT_THEME) { return function decorator(component: any) { if (hasNoValue(map.get(browseByType))) { map.set(browseByType, new Map()); diff --git a/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts b/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts index 3cfc735135..e4746129dc 100644 --- a/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts +++ b/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts @@ -31,7 +31,7 @@ export class BrowseBySwitcherComponent implements OnInit { */ ngOnInit(): void { this.browseByComponent = this.route.data.pipe( - map((data: { browseDefinition: FlatBrowseDefinition }) => this.getComponentByBrowseByType(data.browseDefinition.dataType, this.themeService.getThemeName())) + map((data: { browseDefinition: FlatBrowseDefinition }) => this.getComponentByBrowseByType(data.browseDefinition.getRenderType(), this.themeService.getThemeName())) ); } diff --git a/src/app/browse-by/browse-by-taxonomy-page/themed-browse-by-taxonomy-page.component.ts b/src/app/browse-by/browse-by-taxonomy-page/themed-browse-by-taxonomy-page.component.ts index 9e491aeaac..212044b853 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/themed-browse-by-taxonomy-page.component.ts +++ b/src/app/browse-by/browse-by-taxonomy-page/themed-browse-by-taxonomy-page.component.ts @@ -1,15 +1,17 @@ import { Component } from '@angular/core'; import { ThemedComponent } from '../../shared/theme-support/themed.component'; +import { rendersBrowseBy } from '../browse-by-switcher/browse-by-decorator'; import { BrowseByTaxonomyPageComponent } from './browse-by-taxonomy-page.component'; @Component({ selector: 'ds-themed-browse-by-taxonomy-page', - templateUrl: './browse-by-taxonomy-page.component.html', + templateUrl: '../../shared/theme-support/themed.component.html', styleUrls: [] }) /** * Themed wrapper for BrowseByTaxonomyPageComponent */ +@rendersBrowseBy('hierarchy') export class ThemedBrowseByTaxonomyPageComponent extends ThemedComponent{ protected getComponentName(): string { diff --git a/src/app/core/data/browse-response-parsing.service.ts b/src/app/core/data/browse-response-parsing.service.ts index aecba9cb50..9aa508ccf0 100644 --- a/src/app/core/data/browse-response-parsing.service.ts +++ b/src/app/core/data/browse-response-parsing.service.ts @@ -10,7 +10,9 @@ import { DSOResponseParsingService } from './dso-response-parsing.service'; /** * A ResponseParsingService used to parse RawRestResponse coming from the REST API to a BrowseDefinition object */ -@Injectable() +@Injectable({ + providedIn: 'root', + }) export class BrowseResponseParsingService extends DSOResponseParsingService { protected objectCache: ObjectCacheService; protected toCache: boolean; From 377e27b305bcc000ce28972775c9d60c14dd4567 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Fri, 12 May 2023 09:25:47 +0200 Subject: [PATCH 077/425] [CST-9636] Fix lint --- .../bulk-access-browse.component.spec.ts | 8 ++-- .../browse/bulk-access-browse.component.ts | 6 +-- .../bulk-access/bulk-access.component.spec.ts | 40 +++++++++---------- .../bulk-access/bulk-access.component.ts | 6 +-- .../bulk-access-settings.component.spec.ts | 36 ++++++++--------- .../bulk-access-settings.component.ts | 2 +- ...ntrol-select-bitstreams-modal.component.ts | 2 +- .../themed-object-list.component.ts | 18 ++++----- src/assets/i18n/en.json5 | 2 +- 9 files changed, 60 insertions(+), 60 deletions(-) diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts index c8379b06ee..87b2a8d568 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts @@ -69,10 +69,10 @@ describe('BulkAccessBrowseComponent', () => { it('should have an initial remote data with a paginated list as value', () => { const list = buildPaginatedList(new PageInfo({ - "elementsPerPage": 5, - "totalElements": 2, - "totalPages": 1, - "currentPage": 1 + 'elementsPerPage': 5, + 'totalElements': 2, + 'totalPages': 1, + 'currentPage': 1 }), [selected1, selected2]) ; const rd = createSuccessfulRemoteDataObject(list); diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts index eff5942d4e..e806e729c8 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts @@ -69,7 +69,7 @@ export class BulkAccessBrowseComponent implements OnInit, OnDestroy { distinctUntilChanged(), map((list: SelectableListState) => this.generatePaginatedListBySelectedElements(list)) ).subscribe(this.objectsSelected$) - ) + ); } pageNext() { @@ -87,7 +87,7 @@ export class BulkAccessBrowseComponent implements OnInit, OnDestroy { private calculatePageCount(pageSize, totalCount = 0) { // we suppose that if we have 0 items we want 1 empty page return totalCount < pageSize ? 1 : Math.ceil(totalCount / pageSize); - }; + } /** * Generate The RemoteData object containing the list of the selected elements @@ -114,6 +114,6 @@ export class BulkAccessBrowseComponent implements OnInit, OnDestroy { this.subs .filter((sub) => hasValue(sub)) .forEach((sub) => sub.unsubscribe()); - this.selectableListService.deselectAll(this.listId) + this.selectableListService.deselectAll(this.listId); } } diff --git a/src/app/access-control/bulk-access/bulk-access.component.spec.ts b/src/app/access-control/bulk-access/bulk-access.component.spec.ts index 8a64d01df4..ccbdabb7a6 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.spec.ts +++ b/src/app/access-control/bulk-access/bulk-access.component.spec.ts @@ -24,38 +24,38 @@ fdescribe('BulkAccessComponent', () => { const bulkAccessControlServiceMock = jasmine.createSpyObj('bulkAccessControlService', ['createPayloadFile', 'executeScript']); const mockFormState = { - "bitstream": [], - "item": [ + 'bitstream': [], + 'item': [ { - "name": "embargo", - "startDate": { - "year": 2026, - "month": 5, - "day": 31 + 'name': 'embargo', + 'startDate': { + 'year': 2026, + 'month': 5, + 'day': 31 }, - "endDate": null + 'endDate': null } ], - "state": { - "item": { - "toggleStatus": true, - "accessMode": "replace" + 'state': { + 'item': { + 'toggleStatus': true, + 'accessMode': 'replace' }, - "bitstream": { - "toggleStatus": false, - "accessMode": "", - "changesLimit": "", - "selectedBitstreams": [] + 'bitstream': { + 'toggleStatus': false, + 'accessMode': '', + 'changesLimit': '', + 'selectedBitstreams': [] } } }; const mockFile = { - "uuids": [ + 'uuids': [ '1234', '5678' ], - "file": { } - } + 'file': { } + }; const mockSettings: any = jasmine.createSpyObj('AccessControlFormContainerComponent', { getValue: jasmine.createSpy('getValue'), diff --git a/src/app/access-control/bulk-access/bulk-access.component.ts b/src/app/access-control/bulk-access/bulk-access.component.ts index b928f3da4a..074dbc7f55 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.ts +++ b/src/app/access-control/bulk-access/bulk-access.component.ts @@ -26,7 +26,7 @@ export class BulkAccessComponent implements OnInit { /** * The selection list id */ - listId: string = 'bulk-access-list'; + listId = 'bulk-access-list'; /** * The list of the objects already selected @@ -58,7 +58,7 @@ export class BulkAccessComponent implements OnInit { distinctUntilChanged(), map((list: SelectableListState) => this.generateIdListBySelectedElements(list)) ).subscribe(this.objectsSelected$) - ) + ); } canExport(): boolean { @@ -70,7 +70,7 @@ export class BulkAccessComponent implements OnInit { * This will also reset the state of the child components (bitstream and item access) */ reset(): void { - this.settings.reset() + this.settings.reset(); } /** diff --git a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.spec.ts b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.spec.ts index 306d4eebde..229f7eeb11 100644 --- a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.spec.ts +++ b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.spec.ts @@ -8,28 +8,28 @@ describe('BulkAccessSettingsComponent', () => { let component: BulkAccessSettingsComponent; let fixture: ComponentFixture; const mockFormState = { - "bitstream": [], - "item": [ + 'bitstream': [], + 'item': [ { - "name": "embargo", - "startDate": { - "year": 2026, - "month": 5, - "day": 31 + 'name': 'embargo', + 'startDate': { + 'year': 2026, + 'month': 5, + 'day': 31 }, - "endDate": null + 'endDate': null } ], - "state": { - "item": { - "toggleStatus": true, - "accessMode": "replace" + 'state': { + 'item': { + 'toggleStatus': true, + 'accessMode': 'replace' }, - "bitstream": { - "toggleStatus": false, - "accessMode": "", - "changesLimit": "", - "selectedBitstreams": [] + 'bitstream': { + 'toggleStatus': false, + 'accessMode': '', + 'changesLimit': '', + 'selectedBitstreams': [] } } }; @@ -68,7 +68,7 @@ describe('BulkAccessSettingsComponent', () => { it('should return the correct form value', () => { const expectedValue = mockFormState; - (component.controlForm as any).getFormValue.and.returnValue(mockFormState) + (component.controlForm as any).getFormValue.and.returnValue(mockFormState); const actualValue = component.getValue(); expect(actualValue).toEqual(expectedValue); }); diff --git a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts index 978fc41ed8..eecc016245 100644 --- a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts +++ b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts @@ -28,7 +28,7 @@ export class BulkAccessSettingsComponent { * This will also reset the state of the child components (bitstream and item access) */ reset() { - this.controlForm.reset() + this.controlForm.reset(); } } diff --git a/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.ts b/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.ts index 171b1d59c1..617803a0c4 100644 --- a/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.ts +++ b/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.ts @@ -13,7 +13,7 @@ import { TranslateService } from '@ngx-translate/core'; import { hasValue } from '../../empty.util'; import { getFirstCompletedRemoteData } from '../../../core/shared/operators'; -export const ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID = 'item-access-control-select-bitstreams' +export const ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID = 'item-access-control-select-bitstreams'; @Component({ selector: 'ds-item-access-control-select-bitstreams-modal', diff --git a/src/app/shared/object-list/themed-object-list.component.ts b/src/app/shared/object-list/themed-object-list.component.ts index 9448ed5939..04a95de1cb 100644 --- a/src/app/shared/object-list/themed-object-list.component.ts +++ b/src/app/shared/object-list/themed-object-list.component.ts @@ -1,13 +1,13 @@ -import {Component, EventEmitter, Input, Output} from '@angular/core'; +import { Component, EventEmitter, Input, Output } from '@angular/core'; import { ObjectListComponent } from './object-list.component'; import { ThemedComponent } from '../theme-support/themed.component'; -import {PaginationComponentOptions} from '../pagination/pagination-component-options.model'; -import {SortDirection, SortOptions} from '../../core/cache/models/sort-options.model'; -import {CollectionElementLinkType} from '../object-collection/collection-element-link.type'; -import {Context} from '../../core/shared/context.model'; -import {RemoteData} from '../../core/data/remote-data'; -import {PaginatedList} from '../../core/data/paginated-list.model'; -import {ListableObject} from '../object-collection/shared/listable-object.model'; +import { PaginationComponentOptions } from '../pagination/pagination-component-options.model'; +import { SortDirection, SortOptions } from '../../core/cache/models/sort-options.model'; +import { CollectionElementLinkType } from '../object-collection/collection-element-link.type'; +import { Context } from '../../core/shared/context.model'; +import { RemoteData } from '../../core/data/remote-data'; +import { PaginatedList } from '../../core/data/paginated-list.model'; +import { ListableObject } from '../object-collection/shared/listable-object.model'; /** * Themed wrapper for ObjectListComponent @@ -53,7 +53,7 @@ export class ThemedObjectListComponent extends ThemedComponent Date: Fri, 12 May 2023 10:06:03 +0200 Subject: [PATCH 078/425] 101623: Add BrowseDefinitionModels to CoreModule, Fix FlatBrowseDefinition --- src/app/core/core.module.ts | 2 ++ src/app/core/shared/flat-browse-definition.model.ts | 3 --- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts index 81b70e42c2..c00cfd6002 100644 --- a/src/app/core/core.module.ts +++ b/src/app/core/core.module.ts @@ -170,6 +170,7 @@ import { OrcidHistory } from './orcid/model/orcid-history.model'; import { OrcidAuthService } from './orcid/orcid-auth.service'; import { VocabularyDataService } from './submission/vocabularies/vocabulary.data.service'; import { VocabularyEntryDetailsDataService } from './submission/vocabularies/vocabulary-entry-details.data.service'; +import { HierarchicalBrowseDefinition } from './shared/hierarchical-browse-definition.model'; /** * When not in production, endpoint responses can be mocked for testing purposes @@ -325,6 +326,7 @@ export const models = AuthStatus, BrowseEntry, FlatBrowseDefinition, + HierarchicalBrowseDefinition, ClaimedTask, TaskObject, PoolTask, diff --git a/src/app/core/shared/flat-browse-definition.model.ts b/src/app/core/shared/flat-browse-definition.model.ts index 2002d6bbab..fa664c7747 100644 --- a/src/app/core/shared/flat-browse-definition.model.ts +++ b/src/app/core/shared/flat-browse-definition.model.ts @@ -22,9 +22,6 @@ export class FlatBrowseDefinition extends CacheableObject implements BrowseDefin @autoserialize id: string; - @autoserialize - metadataBrowse: boolean; - @autoserialize sortOptions: SortOption[]; From 6f4b0ad6b1b03af129f1f3c80c3e8b3c2a419d04 Mon Sep 17 00:00:00 2001 From: Alban Imami Date: Fri, 12 May 2023 12:10:57 +0200 Subject: [PATCH 079/425] [CST-5729] fixed the id on the bitstream api request --- .../bitstream-download-page.component.ts | 10 +++++++++- src/app/core/data/signposting-data.service.ts | 9 +++++---- src/app/core/data/signposting-data.ts | 5 ----- src/app/core/data/signposting-links.model.ts | 7 +++++++ src/app/core/services/server-hard-redirect.service.ts | 11 ----------- 5 files changed, 21 insertions(+), 21 deletions(-) delete mode 100644 src/app/core/data/signposting-data.ts create mode 100644 src/app/core/data/signposting-links.model.ts diff --git a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts index 51ec762ec3..38e4d01dd5 100644 --- a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts +++ b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts @@ -14,6 +14,8 @@ import { getForbiddenRoute } from '../../app-routing-paths'; import { RemoteData } from '../../core/data/remote-data'; import { redirectOn4xx } from '../../core/shared/authorized.operators'; import { Location } from '@angular/common'; +import { SignpostingDataService } from 'src/app/core/data/signposting-data.service'; +import { ServerResponseService } from 'src/app/core/services/server-response.service'; @Component({ selector: 'ds-bitstream-download-page', @@ -36,8 +38,14 @@ export class BitstreamDownloadPageComponent implements OnInit { private fileService: FileService, private hardRedirectService: HardRedirectService, private location: Location, + private signpostginDataService: SignpostingDataService, + private responseService: ServerResponseService ) { - + this.route.params.subscribe(params => { + this.signpostginDataService.getLinksets(params.id).pipe(take(1)).subscribe(linksets => { + this.responseService.setLinksetsHeader(linksets); + }); + }); } back(): void { diff --git a/src/app/core/data/signposting-data.service.ts b/src/app/core/data/signposting-data.service.ts index 0ef2b49f0f..5e965d1ab5 100644 --- a/src/app/core/data/signposting-data.service.ts +++ b/src/app/core/data/signposting-data.service.ts @@ -7,6 +7,7 @@ import { Observable, of as observableOf } from 'rxjs'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; import { HttpHeaders } from '@angular/common/http'; +import { SignpostingLinks } from './signposting-links.model'; @Injectable({ providedIn: 'root' @@ -15,15 +16,15 @@ export class SignpostingDataService { constructor(private restService: DspaceRestService, protected halService: HALEndpointService) { } - getLinks(uuid: string): Observable { + getLinks(uuid: string): Observable { const baseUrl = this.halService.getRootHref().replace('/api', ''); return this.restService.get(`${baseUrl}/signposting/links/${uuid}`).pipe( - catchError((err ) => { + catchError((err) => { console.error(err); return observableOf(false); }), - map((res: RawRestResponse) => res) + map((res: SignpostingLinks) => res) ); } @@ -40,7 +41,7 @@ export class SignpostingDataService { } as any; return this.restService.getWithHeaders(`${baseUrl}/signposting/linksets/${uuid}`, requestOptions).pipe( - catchError((err ) => { + catchError((err) => { console.error(err); return observableOf(false); }), diff --git a/src/app/core/data/signposting-data.ts b/src/app/core/data/signposting-data.ts deleted file mode 100644 index 5734d324ec..0000000000 --- a/src/app/core/data/signposting-data.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface SignpostingDataLink { - href: string, - rel: string, - type: string -} diff --git a/src/app/core/data/signposting-links.model.ts b/src/app/core/data/signposting-links.model.ts new file mode 100644 index 0000000000..19d8869ba1 --- /dev/null +++ b/src/app/core/data/signposting-links.model.ts @@ -0,0 +1,7 @@ +import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; + +export interface SignpostingLinks extends RawRestResponse { + href?: string, + rel?: string, + type?: string +} diff --git a/src/app/core/services/server-hard-redirect.service.ts b/src/app/core/services/server-hard-redirect.service.ts index a6c0e09aee..de8b45b0e5 100644 --- a/src/app/core/services/server-hard-redirect.service.ts +++ b/src/app/core/services/server-hard-redirect.service.ts @@ -2,9 +2,6 @@ import { Inject, Injectable } from '@angular/core'; import { Request, Response } from 'express'; import { REQUEST, RESPONSE } from '@nguniversal/express-engine/tokens'; import { HardRedirectService } from './hard-redirect.service'; -import { SignpostingDataService } from '../data/signposting-data.service'; -import { ActivatedRoute } from '@angular/router'; -import { take } from 'rxjs'; /** * Service for performing hard redirects within the server app module @@ -15,8 +12,6 @@ export class ServerHardRedirectService extends HardRedirectService { constructor( @Inject(REQUEST) protected req: Request, @Inject(RESPONSE) protected res: Response, - private signpostginDataService: SignpostingDataService, - protected route: ActivatedRoute ) { super(); } @@ -52,12 +47,6 @@ export class ServerHardRedirectService extends HardRedirectService { console.log(`Redirecting from ${this.req.url} to ${url} with ${status}`); - this.route.params.subscribe(params => { - this.signpostginDataService.getLinksets(params.id).pipe(take(1)).subscribe(linksets => { - this.res.setHeader('Link', linksets); - }); - }); - this.res.redirect(status, url); this.res.end(); // I haven't found a way to correctly stop Angular rendering. From 14fb3794196c7c3d28badedf340bb41f6520bdf4 Mon Sep 17 00:00:00 2001 From: samuel Date: Wed, 23 Nov 2022 15:40:00 +0100 Subject: [PATCH 080/425] 96598: Test feedback pt. 3: submission - repair auto-refresh --- src/app/submission/sections/form/section-form.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/submission/sections/form/section-form.component.ts b/src/app/submission/sections/form/section-form.component.ts index 9d9fe361de..000e8b0834 100644 --- a/src/app/submission/sections/form/section-form.component.ts +++ b/src/app/submission/sections/form/section-form.component.ts @@ -223,8 +223,8 @@ export class SubmissionSectionFormComponent extends SectionModelComponent { const sectionDataToCheck = {}; Object.keys(sectionData).forEach((key) => { - if (this.sectionMetadata && this.sectionMetadata.includes(key)) { - sectionDataToCheck[key] = sectionData[key]; + if (this.sectionData.data && hasValue(this.sectionData.data[key])) { + sectionDataToCheck[key] = this.sectionData.data[key]; } }); From dff343f62eb67f061a06a235487d8371074d322c Mon Sep 17 00:00:00 2001 From: samuel Date: Wed, 23 Nov 2022 16:16:12 +0100 Subject: [PATCH 081/425] 96598: Test feedback pt. 3: submission - repair auto-refresh - repair tests --- .../submission/sections/form/section-form.component.spec.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/submission/sections/form/section-form.component.spec.ts b/src/app/submission/sections/form/section-form.component.spec.ts index 592691e677..4a6bcf5b9a 100644 --- a/src/app/submission/sections/form/section-form.component.spec.ts +++ b/src/app/submission/sections/form/section-form.component.spec.ts @@ -295,7 +295,9 @@ describe('SubmissionSectionFormComponent test suite', () => { 'dc.title': [new FormFieldMetadataValueObject('test')] }; compAsAny.formData = {}; - compAsAny.sectionMetadata = ['dc.title']; + compAsAny.sectionData.data = { + 'dc.title': [new FormFieldMetadataValueObject('test')] + }; expect(comp.hasMetadataEnrichment(newSectionData)).toBeTruthy(); }); From 4abdea5f62e02dd2d30ae6d91930bbc3c1e983fe Mon Sep 17 00:00:00 2001 From: samuel Date: Thu, 9 Feb 2023 16:55:48 +0100 Subject: [PATCH 082/425] 99221: Fix minor issues with Relationships in submission - hide disabled buttons --- src/app/shared/form/form.component.html | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/app/shared/form/form.component.html b/src/app/shared/form/form.component.html index 16ced852b1..b48675b304 100644 --- a/src/app/shared/form/form.component.html +++ b/src/app/shared/form/form.component.html @@ -13,22 +13,20 @@ (ngbEvent)="onCustomEvent($event)"> -
    -
    +
    From 9a8dfc229f0940b2242c577dc5769e50f79aed62 Mon Sep 17 00:00:00 2001 From: Adam Doan Date: Fri, 12 May 2023 13:04:43 +0000 Subject: [PATCH 083/425] Add filter name to search filter button aria-label. --- .../search-filters/search-filter/search-filter.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/shared/search/search-filters/search-filter/search-filter.component.html b/src/app/shared/search/search-filters/search-filter/search-filter.component.html index 13457cc008..a6fb0021b7 100644 --- a/src/app/shared/search/search-filters/search-filter/search-filter.component.html +++ b/src/app/shared/search/search-filters/search-filter/search-filter.component.html @@ -3,7 +3,7 @@ -
    diff --git a/src/app/shared/access-control-form-container/bulk-access-control.service.ts b/src/app/shared/access-control-form-container/bulk-access-control.service.ts index 6401ed42eb..71e8115d6b 100644 --- a/src/app/shared/access-control-form-container/bulk-access-control.service.ts +++ b/src/app/shared/access-control-form-container/bulk-access-control.service.ts @@ -81,36 +81,43 @@ export class BulkAccessControlService { } export const convertToBulkAccessControlFileModel = (payload: { state: AccessControlFormState, bitstreamAccess: AccessCondition[], itemAccess: AccessCondition[] }): BulkAccessControlFileModel => { + let finalPayload: BulkAccessControlFileModel = {}; + const itemEnabled = payload.state.item.toggleStatus; const bitstreamEnabled = payload.state.bitstream.toggleStatus; - const constraints = { uuid: [] }; - - if (bitstreamEnabled && payload.state.bitstream.changesLimit === 'selected') { - // @ts-ignore - constraints.uuid = payload.state.bitstream.selectedBitstreams.map((x) => x.id); + if (itemEnabled) { + finalPayload.item = { + mode: payload.state.item.accessMode, + accessConditions: payload.itemAccess + } } - return { - item: { - mode: itemEnabled ? payload.state.item.accessMode : '', - accessConditions: itemEnabled ? payload.itemAccess : [] - }, - bitstream: { - constraints, - mode: bitstreamEnabled ? payload.state.bitstream.accessMode : '', - accessConditions: bitstreamEnabled ? payload.bitstreamAccess : [] + if (bitstreamEnabled) { + const constraints = { uuid: [] }; + + if (bitstreamEnabled && payload.state.bitstream.changesLimit === 'selected') { + // @ts-ignore + constraints.uuid = payload.state.bitstream.selectedBitstreams.map((x) => x.id); } - }; + + finalPayload.bitstream = { + constraints, + mode: payload.state.bitstream.accessMode, + accessConditions: payload.bitstreamAccess + } + } + + return finalPayload; }; export interface BulkAccessControlFileModel { - item: { + item?: { mode: string; accessConditions: AccessCondition[]; }, - bitstream: { + bitstream?: { constraints: { uuid: string[] }; mode: string; accessConditions: AccessCondition[]; From 2fc2897a3644f9f37d2dbd3c413a74442269b392 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Mon, 15 May 2023 13:10:10 +0200 Subject: [PATCH 091/425] [CST-9639] Show warning only when replace is selected --- .../access-control-array-form.component.html | 2 +- .../access-control-array-form.component.ts | 1 + .../access-control-form-container.component.html | 2 ++ .../access-control-form-container.component.ts | 4 ++-- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html index 71f327423f..2e6d9c2fc1 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html @@ -1,5 +1,5 @@
    -
    +
    {{'access-control-no-access-conditions-warning-message' | translate}}
    diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts index 14f7526cb7..519fc0ae3e 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts @@ -14,6 +14,7 @@ import { dateToISOFormat } from '../../date.util'; }) export class AccessControlArrayFormComponent implements OnInit, OnDestroy { @Input() dropdownOptions: AccessesConditionOption[] = []; + @Input() mode!: 'add' | 'replace'; private destroy$ = new Subject(); diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.html b/src/app/shared/access-control-form-container/access-control-form-container.component.html index 9551b5b736..ccb18b9100 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.html +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.html @@ -49,6 +49,7 @@ @@ -130,6 +131,7 @@ diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index f27fb4b5f0..9394b083b1 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -173,11 +173,11 @@ const initialState: AccessControlFormState = { export interface AccessControlFormState { item: { toggleStatus: boolean, - accessMode: string, + accessMode: 'add' | 'replace', }, bitstream: { toggleStatus: boolean, - accessMode: string, + accessMode: 'add' | 'replace', changesLimit: string, selectedBitstreams: ListableObject[], } From b4340e0b911cb03af23f87b8e52a9baf6d9a3d5c Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Mon, 15 May 2023 15:39:39 +0200 Subject: [PATCH 092/425] [CST-9639] Fix lint issues --- .../bulk-access-control.service.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/shared/access-control-form-container/bulk-access-control.service.ts b/src/app/shared/access-control-form-container/bulk-access-control.service.ts index 71e8115d6b..5302e3aa4a 100644 --- a/src/app/shared/access-control-form-container/bulk-access-control.service.ts +++ b/src/app/shared/access-control-form-container/bulk-access-control.service.ts @@ -55,7 +55,7 @@ export class BulkAccessControlService { { name: '-f', value: file.name } ]; uuids.forEach((uuid) => { - params.push({ name: '-u', value: uuid }) + params.push({ name: '-u', value: uuid }); }); return this.scriptService.invoke('bulk-access-control', params, [file]).pipe( @@ -90,7 +90,7 @@ export const convertToBulkAccessControlFileModel = (payload: { state: AccessCont finalPayload.item = { mode: payload.state.item.accessMode, accessConditions: payload.itemAccess - } + }; } if (bitstreamEnabled) { @@ -105,7 +105,7 @@ export const convertToBulkAccessControlFileModel = (payload: { state: AccessCont constraints, mode: payload.state.bitstream.accessMode, accessConditions: payload.bitstreamAccess - } + }; } return finalPayload; From 536cb62cc06f83374475e7e31d4b7e920f506304 Mon Sep 17 00:00:00 2001 From: damian Date: Mon, 15 May 2023 16:09:17 +0200 Subject: [PATCH 093/425] Displaying item counts at Communities and Collections list view. --- .../community-list/community-list.component.html | 1 + src/app/core/shared/collection.model.ts | 7 ++++++- src/app/core/shared/community.model.ts | 7 ++++++- .../collection-list-element.component.html | 2 ++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/app/community-list-page/community-list/community-list.component.html b/src/app/community-list-page/community-list/community-list.component.html index ea772bb891..efc1f086ae 100644 --- a/src/app/community-list-page/community-list/community-list.component.html +++ b/src/app/community-list-page/community-list/community-list.component.html @@ -37,6 +37,7 @@ {{node.name}} + [{{node.payload.archivedItems}}]
    diff --git a/src/app/core/shared/collection.model.ts b/src/app/core/shared/collection.model.ts index d1c49c8d4b..81efc33510 100644 --- a/src/app/core/shared/collection.model.ts +++ b/src/app/core/shared/collection.model.ts @@ -1,4 +1,4 @@ -import { deserialize, inheritSerialization } from 'cerialize'; +import {autoserialize, deserialize, inheritSerialization} from 'cerialize'; import { Observable } from 'rxjs'; import { link, typedObject } from '../cache/builders/build-decorators'; import { PaginatedList } from '../data/paginated-list.model'; @@ -16,12 +16,17 @@ import { COMMUNITY } from './community.resource-type'; import { Community } from './community.model'; import { ChildHALResource } from './child-hal-resource.model'; import { HandleObject } from './handle-object.model'; +import {excludeFromEquals} from '../utilities/equals.decorators'; @typedObject @inheritSerialization(DSpaceObject) export class Collection extends DSpaceObject implements ChildHALResource, HandleObject { static type = COLLECTION; + @excludeFromEquals + @autoserialize + archivedItems: number; + /** * The {@link HALLink}s for this Collection */ diff --git a/src/app/core/shared/community.model.ts b/src/app/core/shared/community.model.ts index f16aad9645..0bab8cfa22 100644 --- a/src/app/core/shared/community.model.ts +++ b/src/app/core/shared/community.model.ts @@ -1,4 +1,4 @@ -import { deserialize, inheritSerialization } from 'cerialize'; +import {autoserialize, deserialize, inheritSerialization} from 'cerialize'; import { Observable } from 'rxjs'; import { link, typedObject } from '../cache/builders/build-decorators'; import { PaginatedList } from '../data/paginated-list.model'; @@ -12,12 +12,17 @@ import { DSpaceObject } from './dspace-object.model'; import { HALLink } from './hal-link.model'; import { ChildHALResource } from './child-hal-resource.model'; import { HandleObject } from './handle-object.model'; +import {excludeFromEquals} from '../utilities/equals.decorators'; @typedObject @inheritSerialization(DSpaceObject) export class Community extends DSpaceObject implements ChildHALResource, HandleObject { static type = COMMUNITY; + @excludeFromEquals + @autoserialize + archivedItems: number; + /** * The {@link HALLink}s for this Community */ diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html index c61adf5dad..b45a9a03bc 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html @@ -3,7 +3,9 @@ {{object.name}} + [{{object.archivedItems}}] +
    {{object.shortDescription}}
    From 78cf3e1bfc52b43b64023d8a0d75b1354dbc28cf Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Mon, 15 May 2023 16:27:38 +0200 Subject: [PATCH 094/425] [CST-5729] Finalize signposting implementation --- .../bitstream-download-page.component.spec.ts | 19 +++++- .../bitstream-download-page.component.ts | 13 ++-- .../data/signposting-data.service.spec.ts | 43 ++++++++----- src/app/core/data/signposting-data.service.ts | 33 +++------- src/app/core/data/signposting-links.model.ts | 7 ++- .../core/metadata/metadata.service.spec.ts | 24 +++---- src/app/core/metadata/metadata.service.ts | 63 ++++--------------- .../core/services/server-response.service.ts | 5 +- .../full/full-item-page.component.spec.ts | 41 +++++++++++- .../full/full-item-page.component.ts | 26 ++++---- .../simple/item-page.component.spec.ts | 41 +++++++++++- .../item-page/simple/item-page.component.ts | 50 +++++++++++---- 12 files changed, 218 insertions(+), 147 deletions(-) diff --git a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.spec.ts b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.spec.ts index 71fd74a707..66024063cd 100644 --- a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.spec.ts +++ b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.spec.ts @@ -29,6 +29,18 @@ describe('BitstreamDownloadPageComponent', () => { let serverResponseService: jasmine.SpyObj; let signpostingDataService: jasmine.SpyObj; + const mocklink = { + href: 'http://test.org', + rel: 'test', + type: 'test' + }; + + const mocklink2 = { + href: 'http://test2.org', + rel: 'test', + type: 'test' + }; + function init() { authService = jasmine.createSpyObj('authService', { isAuthenticated: observableOf(true), @@ -67,11 +79,11 @@ describe('BitstreamDownloadPageComponent', () => { router = jasmine.createSpyObj('router', ['navigateByUrl']); serverResponseService = jasmine.createSpyObj('ServerResponseService', { - setLinksetsHeader: jasmine.createSpy('setLinksetsHeader'), + setHeader: jasmine.createSpy('setHeader'), }); signpostingDataService = jasmine.createSpyObj('SignpostingDataService', { - getLinksets: observableOf('test'), + getLinks: observableOf([mocklink, mocklink2]) }); } @@ -124,6 +136,9 @@ describe('BitstreamDownloadPageComponent', () => { it('should redirect to the content link', () => { expect(hardRedirectService.redirect).toHaveBeenCalledWith('bitstream-content-link'); }); + it('should add the signposting links', () => { + expect(serverResponseService.setHeader).toHaveBeenCalled(); + }); }); describe('when the user is authorized and logged in', () => { beforeEach(waitForAsync(() => { diff --git a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts index 4814a9385a..14245c4cd1 100644 --- a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts +++ b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts @@ -16,6 +16,7 @@ import { redirectOn4xx } from '../../core/shared/authorized.operators'; import { Location } from '@angular/common'; import { SignpostingDataService } from 'src/app/core/data/signposting-data.service'; import { ServerResponseService } from 'src/app/core/services/server-response.service'; +import { SignpostingLink } from '../../core/data/signposting-links.model'; @Component({ selector: 'ds-bitstream-download-page', @@ -37,14 +38,18 @@ export class BitstreamDownloadPageComponent implements OnInit { private fileService: FileService, private hardRedirectService: HardRedirectService, private location: Location, - private signpostginDataService: SignpostingDataService, + private signpostingDataService: SignpostingDataService, private responseService: ServerResponseService ) { this.route.params.subscribe(params => { - this.signpostginDataService.getLinks(params.id).pipe(take(1)).subscribe(linksets => { - linksets.forEach(link => { - this.responseService.setLinksetsHeader(link.href); + this.signpostingDataService.getLinks(params.id).pipe(take(1)).subscribe((signpostingLinks: SignpostingLink[]) => { + let links = ''; + + signpostingLinks.forEach((link: SignpostingLink) => { + links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}" ; type="${link.type}" `; }); + + this.responseService.setHeader('Link', links); }); }); } diff --git a/src/app/core/data/signposting-data.service.spec.ts b/src/app/core/data/signposting-data.service.spec.ts index 091f38de2a..c76899221e 100644 --- a/src/app/core/data/signposting-data.service.spec.ts +++ b/src/app/core/data/signposting-data.service.spec.ts @@ -3,13 +3,32 @@ import { SignpostingDataService } from './signposting-data.service'; import { DspaceRestService } from '../dspace-rest/dspace-rest.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { of } from 'rxjs'; -import { SignpostingLinks } from './signposting-links.model'; -import { map } from 'rxjs/operators'; +import { SignpostingLink } from './signposting-links.model'; describe('SignpostingDataService', () => { let service: SignpostingDataService; let restServiceSpy: jasmine.SpyObj; let halServiceSpy: jasmine.SpyObj; + const mocklink = { + href: 'http://test.org', + rel: 'test', + type: 'test' + }; + + const mocklink2 = { + href: 'http://test2.org', + rel: 'test', + type: 'test' + }; + + const mockResponse: any = { + statusCode: 200, + payload: [mocklink, mocklink2] + }; + + const mockErrResponse: any = { + statusCode: 500 + }; beforeEach(() => { const restSpy = jasmine.createSpyObj('DspaceRestService', ['get', 'getWithHeaders']); @@ -38,15 +57,11 @@ describe('SignpostingDataService', () => { halServiceSpy.getRootHref.and.returnValue(`${baseUrl}/api`); - const mockResponse: any = { - self: { - href: `${baseUrl}/signposting/links/${uuid}` - } - }; - restServiceSpy.get.and.returnValue(of(mockResponse)); - let result: SignpostingLinks; + let result: SignpostingLink[]; + + const expectedResult: SignpostingLink[] = [mocklink, mocklink2]; service.getLinks(uuid).subscribe((links) => { result = links; @@ -54,20 +69,18 @@ describe('SignpostingDataService', () => { tick(); - expect(result).toEqual(mockResponse); + expect(result).toEqual(expectedResult); expect(halServiceSpy.getRootHref).toHaveBeenCalled(); expect(restServiceSpy.get).toHaveBeenCalledWith(`${baseUrl}/signposting/links/${uuid}`); })); - it('should handle error and return false', fakeAsync(() => { + it('should handle error and return an empty array', fakeAsync(() => { const uuid = '123'; const baseUrl = 'http://localhost:8080'; halServiceSpy.getRootHref.and.returnValue(`${baseUrl}/api`); - restServiceSpy.get.and.returnValue(of(null).pipe(map(() => { - throw new Error('Error'); - }))); + restServiceSpy.get.and.returnValue(of(mockErrResponse)); let result: any; @@ -77,7 +90,7 @@ describe('SignpostingDataService', () => { tick(); - expect(result).toBeFalse(); + expect(result).toEqual([]); expect(halServiceSpy.getRootHref).toHaveBeenCalled(); expect(restServiceSpy.get).toHaveBeenCalledWith(`${baseUrl}/signposting/links/${uuid}`); })); diff --git a/src/app/core/data/signposting-data.service.ts b/src/app/core/data/signposting-data.service.ts index efdf80a381..e09d68974c 100644 --- a/src/app/core/data/signposting-data.service.ts +++ b/src/app/core/data/signposting-data.service.ts @@ -1,11 +1,12 @@ import { Injectable } from '@angular/core'; -import { DspaceRestService } from '../dspace-rest/dspace-rest.service'; + import { catchError, map } from 'rxjs/operators'; import { Observable, of as observableOf } from 'rxjs'; + +import { DspaceRestService } from '../dspace-rest/dspace-rest.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; -import { HttpHeaders } from '@angular/common/http'; -import { SignpostingLinks } from './signposting-links.model'; +import { SignpostingLink } from './signposting-links.model'; @Injectable({ providedIn: 'root' @@ -15,36 +16,16 @@ export class SignpostingDataService { constructor(private restService: DspaceRestService, protected halService: HALEndpointService) { } - getLinks(uuid: string): Observable { + getLinks(uuid: string): Observable { const baseUrl = this.halService.getRootHref().replace('/api', ''); return this.restService.get(`${baseUrl}/signposting/links/${uuid}`).pipe( catchError((err) => { console.error(err); - return observableOf(false); + return observableOf([]); }), - map((res: RawRestResponse) => res.payload as SignpostingLinks[]) + map((res: RawRestResponse) => res.statusCode === 200 ? res.payload as SignpostingLink[] : []) ); } - getLinksets(uuid: string): Observable { - const baseUrl = this.halService.getRootHref().replace('/api', ''); - - const requestOptions = { - observe: 'response' as any, - headers: new HttpHeaders({ - 'accept': 'application/linkset', - 'Content-Type': 'application/linkset' - }), - responseType: 'text' - } as any; - - return this.restService.getWithHeaders(`${baseUrl}/signposting/linksets/${uuid}`, requestOptions).pipe( - catchError((err) => { - console.error(err); - return observableOf(false); - }), - map((res: RawRestResponse) => res.payload.body) - ); - } } diff --git a/src/app/core/data/signposting-links.model.ts b/src/app/core/data/signposting-links.model.ts index 19d8869ba1..11d2cafe00 100644 --- a/src/app/core/data/signposting-links.model.ts +++ b/src/app/core/data/signposting-links.model.ts @@ -1,6 +1,7 @@ -import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; - -export interface SignpostingLinks extends RawRestResponse { +/** + * Represents the link object received by the signposting endpoint + */ +export interface SignpostingLink { href?: string, rel?: string, type?: string diff --git a/src/app/core/metadata/metadata.service.spec.ts b/src/app/core/metadata/metadata.service.spec.ts index 3c5b4adc0c..553b437d71 100644 --- a/src/app/core/metadata/metadata.service.spec.ts +++ b/src/app/core/metadata/metadata.service.spec.ts @@ -8,7 +8,12 @@ import { Observable, of as observableOf, of } from 'rxjs'; import { RemoteData } from '../data/remote-data'; import { Item } from '../shared/item.model'; -import { ItemMock, MockBitstream1, MockBitstream2, MockBitstream3 } from '../../shared/mocks/item.mock'; +import { + ItemMock, + MockBitstream1, + MockBitstream3, + MockBitstream2 +} from '../../shared/mocks/item.mock'; import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; import { PaginatedList } from '../data/paginated-list.model'; import { Bitstream } from '../shared/bitstream.model'; @@ -25,7 +30,6 @@ import { getMockStore } from '@ngrx/store/testing'; import { AddMetaTagAction, ClearMetaTagAction } from './meta-tag.actions'; import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service'; import { AppConfig } from '../../../config/app-config.interface'; -import { SignpostingDataService } from '../data/signposting-data.service'; describe('MetadataService', () => { let metadataService: MetadataService; @@ -42,7 +46,6 @@ describe('MetadataService', () => { let translateService: TranslateService; let hardRedirectService: HardRedirectService; let authorizationService: AuthorizationDataService; - let signpostingDataService: SignpostingDataService; let router: Router; let store; @@ -50,12 +53,7 @@ describe('MetadataService', () => { let appConfig: AppConfig; const initialState = { 'core': { metaTag: { tagsInUse: ['title', 'description'] }}}; - const mocklink = { - href: 'http://test.org', - rel: 'test', - type: 'test' - }; - const document: any = jasmine.createSpyObj('document', ['head', 'createElement']); + beforeEach(() => { rootService = jasmine.createSpyObj({ @@ -92,10 +90,6 @@ describe('MetadataService', () => { isAuthorized: observableOf(true) }); - signpostingDataService = jasmine.createSpyObj('SignpostingDataService', { - getLinks: observableOf([mocklink]) - }); - // @ts-ignore store = getMockStore({ initialState }); spyOn(store, 'dispatch'); @@ -121,9 +115,7 @@ describe('MetadataService', () => { store, hardRedirectService, appConfig, - document, - authorizationService, - signpostingDataService + authorizationService ); }); diff --git a/src/app/core/metadata/metadata.service.ts b/src/app/core/metadata/metadata.service.ts index c22f14b680..204c925e6b 100644 --- a/src/app/core/metadata/metadata.service.ts +++ b/src/app/core/metadata/metadata.service.ts @@ -1,4 +1,4 @@ -import { Inject, Injectable } from '@angular/core'; +import { Injectable, Inject } from '@angular/core'; import { Meta, MetaDefinition, Title } from '@angular/platform-browser'; import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; @@ -8,12 +8,12 @@ import { TranslateService } from '@ngx-translate/core'; import { BehaviorSubject, combineLatest, - concat as observableConcat, - EMPTY, Observable, - of as observableOf + of as observableOf, + concat as observableConcat, + EMPTY } from 'rxjs'; -import { filter, map, mergeMap, switchMap, take } from 'rxjs/operators'; +import { filter, map, switchMap, take, mergeMap } from 'rxjs/operators'; import { hasNoValue, hasValue, isNotEmpty } from '../../shared/empty.util'; import { DSONameService } from '../breadcrumbs/dso-name.service'; @@ -25,7 +25,10 @@ import { BitstreamFormat } from '../shared/bitstream-format.model'; import { Bitstream } from '../shared/bitstream.model'; import { DSpaceObject } from '../shared/dspace-object.model'; import { Item } from '../shared/item.model'; -import { getFirstCompletedRemoteData, getFirstSucceededRemoteDataPayload } from '../shared/operators'; +import { + getFirstCompletedRemoteData, + getFirstSucceededRemoteDataPayload +} from '../shared/operators'; import { RootDataService } from '../data/root-data.service'; import { getBitstreamDownloadRoute } from '../../app-routing-paths'; import { BundleDataService } from '../data/bundle-data.service'; @@ -42,8 +45,6 @@ import { CoreState } from '../core-state.model'; import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service'; import { getDownloadableBitstream } from '../shared/bitstream.operators'; import { APP_CONFIG, AppConfig } from '../../../config/app-config.interface'; -import { SignpostingDataService } from '../data/signposting-data.service'; -import { DOCUMENT } from '@angular/common'; /** * The base selector function to select the metaTag section in the store @@ -62,11 +63,6 @@ const tagsInUseSelector = (state: MetaTagState) => state.tagsInUse, ); -/** - * Link elements added on Item Page - */ -let linkTags = []; - @Injectable() export class MetadataService { @@ -88,7 +84,7 @@ export class MetadataService { ]; constructor( - protected router: Router, + private router: Router, private translate: TranslateService, private meta: Meta, private title: Title, @@ -100,9 +96,7 @@ export class MetadataService { private store: Store, private hardRedirectService: HardRedirectService, @Inject(APP_CONFIG) private appConfig: AppConfig, - @Inject(DOCUMENT) private _document: Document, - private authorizationService: AuthorizationDataService, - private signpostingDataService: SignpostingDataService + private authorizationService: AuthorizationDataService ) { } @@ -123,7 +117,6 @@ export class MetadataService { private processRouteChange(routeInfo: any): void { this.clearMetaTags(); - this.clearLinkTags(); if (hasValue(routeInfo.data.value.dso) && hasValue(routeInfo.data.value.dso.payload)) { this.currentObject.next(routeInfo.data.value.dso.payload); @@ -145,7 +138,7 @@ export class MetadataService { } } - public getCurrentRoute(route: ActivatedRoute): ActivatedRoute { + private getCurrentRoute(route: ActivatedRoute): ActivatedRoute { while (route.firstChild) { route = route.firstChild; } @@ -169,7 +162,6 @@ export class MetadataService { this.setCitationAbstractUrlTag(); this.setCitationPdfUrlTag(); this.setCitationPublisherTag(); - this.setSignpostingLinks(); if (this.isDissertation()) { this.setCitationDissertationNameTag(); @@ -192,37 +184,6 @@ export class MetadataService { } - /** - * Add to the - */ - private setSignpostingLinks() { - if (this.currentObject.value instanceof Item){ - const value = this.signpostingDataService.getLinks(this.currentObject.getValue().id); - value.subscribe(links => { - links.forEach(link => { - this.setLinkTag(link.href, link.rel, link.type); - }); - }); - } - } - - setLinkTag(href: string, rel: string, type: string){ - let link: HTMLLinkElement = this._document.createElement('link'); - if (link) { - link.href = href; - link.rel = rel; - link.type = type; - this._document.head?.appendChild(link); - linkTags.push(link); - } - } - - public clearLinkTags(){ - linkTags.forEach(link => { - link.parentNode?.removeChild(link); - }); - } - /** * Add to the */ diff --git a/src/app/core/services/server-response.service.ts b/src/app/core/services/server-response.service.ts index 6dd50506e9..ffb6a204c6 100644 --- a/src/app/core/services/server-response.service.ts +++ b/src/app/core/services/server-response.service.ts @@ -36,9 +36,10 @@ export class ServerResponseService { return this.setStatus(500, message); } - setLinksetsHeader(linksets: string){ + setHeader(header: string, content: string) { + console.log(this.response); if (this.response) { - this.response.setHeader('Link', linksets); + this.response.setHeader(header, content); } } } diff --git a/src/app/item-page/full/full-item-page.component.spec.ts b/src/app/item-page/full/full-item-page.component.spec.ts index 6c59ccbc67..ec4054d888 100644 --- a/src/app/item-page/full/full-item-page.component.spec.ts +++ b/src/app/item-page/full/full-item-page.component.spec.ts @@ -11,7 +11,7 @@ import { ActivatedRouteStub } from '../../shared/testing/active-router.stub'; import { VarDirective } from '../../shared/utils/var.directive'; import { RouterTestingModule } from '@angular/router/testing'; import { Item } from '../../core/shared/item.model'; -import { BehaviorSubject, of as observableOf, of } from 'rxjs'; +import { BehaviorSubject, of as observableOf } from 'rxjs'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { By } from '@angular/platform-browser'; import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; @@ -22,6 +22,7 @@ import { createRelationshipsObservable } from '../simple/item-types/shared/item. import { RemoteData } from '../../core/data/remote-data'; import { ServerResponseService } from '../../core/services/server-response.service'; import { SignpostingDataService } from '../../core/data/signposting-data.service'; +import { LinkHeadService } from '../../core/services/link-head.service'; const mockItem: Item = Object.assign(new Item(), { bundles: createSuccessfulRemoteDataObject$(createPaginatedList([])), @@ -59,6 +60,19 @@ describe('FullItemPageComponent', () => { let authorizationDataService: AuthorizationDataService; let serverResponseService: jasmine.SpyObj; let signpostingDataService: jasmine.SpyObj; + let linkHeadService: jasmine.SpyObj; + + const mocklink = { + href: 'http://test.org', + rel: 'test', + type: 'test' + }; + + const mocklink2 = { + href: 'http://test2.org', + rel: 'test', + type: 'test' + }; beforeEach(waitForAsync(() => { authService = jasmine.createSpyObj('authService', { @@ -79,11 +93,16 @@ describe('FullItemPageComponent', () => { }); serverResponseService = jasmine.createSpyObj('ServerResponseService', { - setLinksetsHeader: jasmine.createSpy('setLinksetsHeader'), + setHeader: jasmine.createSpy('setHeader'), }); signpostingDataService = jasmine.createSpyObj('SignpostingDataService', { - getLinksets: of('test'), + getLinks: observableOf([mocklink, mocklink2]), + }); + + linkHeadService = jasmine.createSpyObj('LinkHeadService', { + addTag: jasmine.createSpy('setHeader'), + removeTag: jasmine.createSpy('removeTag'), }); TestBed.configureTestingModule({ @@ -102,6 +121,7 @@ describe('FullItemPageComponent', () => { { provide: AuthorizationDataService, useValue: authorizationDataService }, { provide: ServerResponseService, useValue: serverResponseService }, { provide: SignpostingDataService, useValue: signpostingDataService }, + { provide: LinkHeadService, useValue: linkHeadService }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(FullItemPageComponent, { @@ -154,6 +174,11 @@ describe('FullItemPageComponent', () => { const objectLoader = fixture.debugElement.query(By.css('.full-item-info')); expect(objectLoader.nativeElement).not.toBeNull(); }); + + it('should add the signposting links', () => { + expect(serverResponseService.setHeader).toHaveBeenCalled(); + expect(linkHeadService.addTag).toHaveBeenCalledTimes(2); + }); }); describe('when the item is withdrawn and the user is not an admin', () => { beforeEach(() => { @@ -178,6 +203,11 @@ describe('FullItemPageComponent', () => { const objectLoader = fixture.debugElement.query(By.css('.full-item-info')); expect(objectLoader).not.toBeNull(); }); + + it('should add the signposting links', () => { + expect(serverResponseService.setHeader).toHaveBeenCalled(); + expect(linkHeadService.addTag).toHaveBeenCalledTimes(2); + }); }); describe('when the item is not withdrawn and the user is not an admin', () => { @@ -190,5 +220,10 @@ describe('FullItemPageComponent', () => { const objectLoader = fixture.debugElement.query(By.css('.full-item-info')); expect(objectLoader).not.toBeNull(); }); + + it('should add the signposting links', () => { + expect(serverResponseService.setHeader).toHaveBeenCalled(); + expect(linkHeadService.addTag).toHaveBeenCalledTimes(2); + }); }); }); diff --git a/src/app/item-page/full/full-item-page.component.ts b/src/app/item-page/full/full-item-page.component.ts index 2570bf70fe..f0100eed72 100644 --- a/src/app/item-page/full/full-item-page.component.ts +++ b/src/app/item-page/full/full-item-page.component.ts @@ -16,8 +16,9 @@ import { hasValue } from '../../shared/empty.util'; import { AuthService } from '../../core/auth/auth.service'; import { Location } from '@angular/common'; import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; -import { ServerResponseService } from 'src/app/core/services/server-response.service'; -import { SignpostingDataService } from 'src/app/core/data/signposting-data.service'; +import { ServerResponseService } from '../../core/services/server-response.service'; +import { SignpostingDataService } from '../../core/data/signposting-data.service'; +import { LinkHeadService } from '../../core/services/link-head.service'; /** * This component renders a full item page. @@ -44,15 +45,18 @@ export class FullItemPageComponent extends ItemPageComponent implements OnInit, subs = []; - constructor(protected route: ActivatedRoute, - router: Router, - items: ItemDataService, - authService: AuthService, - authorizationService: AuthorizationDataService, - private _location: Location, - responseService: ServerResponseService, - signpostingDataService: SignpostingDataService) { - super(route, router, items, authService, authorizationService, responseService, signpostingDataService); + constructor( + protected route: ActivatedRoute, + protected router: Router, + protected items: ItemDataService, + protected authService: AuthService, + protected authorizationService: AuthorizationDataService, + protected _location: Location, + protected responseService: ServerResponseService, + protected signpostingDataService: SignpostingDataService, + protected linkHeadService: LinkHeadService + ) { + super(route, router, items, authService, authorizationService, responseService, signpostingDataService, linkHeadService); } /*** AoT inheritance fix, will hopefully be resolved in the near future **/ diff --git a/src/app/item-page/simple/item-page.component.spec.ts b/src/app/item-page/simple/item-page.component.spec.ts index 042cac2724..005142e3f1 100644 --- a/src/app/item-page/simple/item-page.component.spec.ts +++ b/src/app/item-page/simple/item-page.component.spec.ts @@ -22,9 +22,9 @@ import { import { AuthService } from '../../core/auth/auth.service'; import { createPaginatedList } from '../../shared/testing/utils.test'; import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; -import { of } from 'rxjs/internal/observable/of'; import { ServerResponseService } from '../../core/services/server-response.service'; import { SignpostingDataService } from '../../core/data/signposting-data.service'; +import { LinkHeadService } from '../../core/services/link-head.service'; const mockItem: Item = Object.assign(new Item(), { bundles: createSuccessfulRemoteDataObject$(createPaginatedList([])), @@ -39,6 +39,18 @@ const mockWithdrawnItem: Item = Object.assign(new Item(), { isWithdrawn: true }); +const mocklink = { + href: 'http://test.org', + rel: 'test', + type: 'test' +}; + +const mocklink2 = { + href: 'http://test2.org', + rel: 'test', + type: 'test' +}; + describe('ItemPageComponent', () => { let comp: ItemPageComponent; let fixture: ComponentFixture; @@ -46,6 +58,7 @@ describe('ItemPageComponent', () => { let authorizationDataService: AuthorizationDataService; let serverResponseService: jasmine.SpyObj; let signpostingDataService: jasmine.SpyObj; + let linkHeadService: jasmine.SpyObj; const mockMetadataService = { /* eslint-disable no-empty,@typescript-eslint/no-empty-function */ @@ -66,11 +79,16 @@ describe('ItemPageComponent', () => { isAuthorized: observableOf(false), }); serverResponseService = jasmine.createSpyObj('ServerResponseService', { - setLinksetsHeader: jasmine.createSpy('setLinksetsHeader'), + setHeader: jasmine.createSpy('setHeader'), }); signpostingDataService = jasmine.createSpyObj('SignpostingDataService', { - getLinksets: of('test'), + getLinks: observableOf([mocklink, mocklink2]), + }); + + linkHeadService = jasmine.createSpyObj('LinkHeadService', { + addTag: jasmine.createSpy('setHeader'), + removeTag: jasmine.createSpy('removeTag'), }); TestBed.configureTestingModule({ @@ -90,6 +108,7 @@ describe('ItemPageComponent', () => { { provide: AuthorizationDataService, useValue: authorizationDataService }, { provide: ServerResponseService, useValue: serverResponseService }, { provide: SignpostingDataService, useValue: signpostingDataService }, + { provide: LinkHeadService, useValue: linkHeadService }, ], schemas: [NO_ERRORS_SCHEMA] @@ -140,6 +159,12 @@ describe('ItemPageComponent', () => { const objectLoader = fixture.debugElement.query(By.css('ds-listable-object-component-loader')); expect(objectLoader.nativeElement).toBeDefined(); }); + + it('should add the signposting links', () => { + expect(serverResponseService.setHeader).toHaveBeenCalled(); + expect(linkHeadService.addTag).toHaveBeenCalledTimes(2); + }); + }); describe('when the item is withdrawn and the user is not an admin', () => { beforeEach(() => { @@ -164,6 +189,11 @@ describe('ItemPageComponent', () => { const objectLoader = fixture.debugElement.query(By.css('ds-listable-object-component-loader')); expect(objectLoader.nativeElement).toBeDefined(); }); + + it('should add the signposting links', () => { + expect(serverResponseService.setHeader).toHaveBeenCalled(); + expect(linkHeadService.addTag).toHaveBeenCalledTimes(2); + }); }); describe('when the item is not withdrawn and the user is not an admin', () => { @@ -176,6 +206,11 @@ describe('ItemPageComponent', () => { const objectLoader = fixture.debugElement.query(By.css('ds-listable-object-component-loader')); expect(objectLoader.nativeElement).toBeDefined(); }); + + it('should add the signposting links', () => { + expect(serverResponseService.setHeader).toHaveBeenCalled(); + expect(linkHeadService.addTag).toHaveBeenCalledTimes(2); + }); }); }); diff --git a/src/app/item-page/simple/item-page.component.ts b/src/app/item-page/simple/item-page.component.ts index 6483769483..10d8b32886 100644 --- a/src/app/item-page/simple/item-page.component.ts +++ b/src/app/item-page/simple/item-page.component.ts @@ -1,8 +1,8 @@ -import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; +import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { Observable } from 'rxjs'; -import { map } from 'rxjs/operators'; +import { map, take } from 'rxjs/operators'; import { ItemDataService } from '../../core/data/item-data.service'; import { RemoteData } from '../../core/data/remote-data'; @@ -17,6 +17,9 @@ import { AuthorizationDataService } from '../../core/data/feature-authorization/ import { FeatureID } from '../../core/data/feature-authorization/feature-id'; import { ServerResponseService } from '../../core/services/server-response.service'; import { SignpostingDataService } from '../../core/data/signposting-data.service'; +import { SignpostingLink } from '../../core/data/signposting-links.model'; +import { isNotEmpty } from '../../shared/empty.util'; +import { LinkHeadService } from '../../core/services/link-head.service'; /** * This component renders a simple item page. @@ -30,7 +33,7 @@ import { SignpostingDataService } from '../../core/data/signposting-data.service changeDetection: ChangeDetectionStrategy.OnPush, animations: [fadeInOut] }) -export class ItemPageComponent implements OnInit { +export class ItemPageComponent implements OnInit, OnDestroy { /** * The item's id @@ -59,18 +62,36 @@ export class ItemPageComponent implements OnInit { itemUrl: string; + /** + * Contains a list of SignpostingLink related to the item + */ + signpostingLinks: SignpostingLink[]; + constructor( protected route: ActivatedRoute, - private router: Router, - private items: ItemDataService, - private authService: AuthService, - private authorizationService: AuthorizationDataService, - private responseService: ServerResponseService, - private signpostingDataService: SignpostingDataService + protected router: Router, + protected items: ItemDataService, + protected authService: AuthService, + protected authorizationService: AuthorizationDataService, + protected responseService: ServerResponseService, + protected signpostingDataService: SignpostingDataService, + protected linkHeadService: LinkHeadService ) { this.route.params.subscribe(params => { - this.signpostingDataService.getLinksets(params.id).subscribe(linksets => { - this.responseService.setLinksetsHeader(linksets); + this.signpostingDataService.getLinks(params.id).pipe(take(1)).subscribe((signpostingLinks: SignpostingLink[]) => { + let links = ''; + this.signpostingLinks = signpostingLinks; + + signpostingLinks.forEach((link: SignpostingLink) => { + links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}" ; type="${link.type}" `; + this.linkHeadService.addTag({ + href: link.href, + type: link.type, + rel: link.rel + }) + }); + + this.responseService.setHeader('Link', links); }); }); } @@ -91,4 +112,11 @@ export class ItemPageComponent implements OnInit { this.isAdmin$ = this.authorizationService.isAuthorized(FeatureID.AdministratorOf); } + + + ngOnDestroy(): void { + this.signpostingLinks.forEach((link: SignpostingLink) => { + this.linkHeadService.removeTag(`href='${link.href}'`); + }) + } } From a1b27a5fb361db209721bbc59e955782175699ec Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Mon, 15 May 2023 16:34:02 +0200 Subject: [PATCH 095/425] [CST-5729] Revert unused changes --- src/app/core/dspace-rest/dspace-rest.service.ts | 15 +-------------- src/app/core/services/server-response.service.ts | 1 - 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/src/app/core/dspace-rest/dspace-rest.service.ts b/src/app/core/dspace-rest/dspace-rest.service.ts index 737714869d..ea4e8c2831 100644 --- a/src/app/core/dspace-rest/dspace-rest.service.ts +++ b/src/app/core/dspace-rest/dspace-rest.service.ts @@ -1,4 +1,4 @@ -import { Observable, throwError as observableThrowError, throwError } from 'rxjs'; +import { Observable, throwError as observableThrowError } from 'rxjs'; import { catchError, map } from 'rxjs/operators'; import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http'; @@ -58,19 +58,6 @@ export class DspaceRestService { })); } - getWithHeaders(absoluteURL: string, reqOptions: any): Observable { - const requestOptions = reqOptions; - - return this.http.get(absoluteURL, requestOptions).pipe( - map((res) => ({ - payload: res - })), - catchError((err) => { - console.log('Error: ', err); - return throwError(() => new Error(err.error)); - })); - } - /** * Performs a request to the REST API. * diff --git a/src/app/core/services/server-response.service.ts b/src/app/core/services/server-response.service.ts index ffb6a204c6..2268e9eb03 100644 --- a/src/app/core/services/server-response.service.ts +++ b/src/app/core/services/server-response.service.ts @@ -37,7 +37,6 @@ export class ServerResponseService { } setHeader(header: string, content: string) { - console.log(this.response); if (this.response) { this.response.setHeader(header, content); } From 10c6b03c40af72e70a897d1fd460e8c39ea5ebdb Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Mon, 15 May 2023 16:58:20 +0200 Subject: [PATCH 096/425] [CST-5729] Fix lint --- src/app/item-page/simple/item-page.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/item-page/simple/item-page.component.ts b/src/app/item-page/simple/item-page.component.ts index 10d8b32886..c1c09e0eb4 100644 --- a/src/app/item-page/simple/item-page.component.ts +++ b/src/app/item-page/simple/item-page.component.ts @@ -88,7 +88,7 @@ export class ItemPageComponent implements OnInit, OnDestroy { href: link.href, type: link.type, rel: link.rel - }) + }); }); this.responseService.setHeader('Link', links); @@ -117,6 +117,6 @@ export class ItemPageComponent implements OnInit, OnDestroy { ngOnDestroy(): void { this.signpostingLinks.forEach((link: SignpostingLink) => { this.linkHeadService.removeTag(`href='${link.href}'`); - }) + }); } } From 43d78c695c7e6f763a8235361cdade0048a77e5e Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Mon, 15 May 2023 17:11:45 +0200 Subject: [PATCH 097/425] [CST-5729] Assign a default value --- src/app/item-page/simple/item-page.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/item-page/simple/item-page.component.ts b/src/app/item-page/simple/item-page.component.ts index c1c09e0eb4..f5ee9e1e78 100644 --- a/src/app/item-page/simple/item-page.component.ts +++ b/src/app/item-page/simple/item-page.component.ts @@ -65,7 +65,7 @@ export class ItemPageComponent implements OnInit, OnDestroy { /** * Contains a list of SignpostingLink related to the item */ - signpostingLinks: SignpostingLink[]; + signpostingLinks: SignpostingLink[] = []; constructor( protected route: ActivatedRoute, From da7cb11bcb5ba54290d8a04f3a30a20075a89f40 Mon Sep 17 00:00:00 2001 From: damian Date: Mon, 15 May 2023 20:34:46 +0200 Subject: [PATCH 098/425] Archived items moved outside initial span element(fix for tests) --- .../collection-list-element.component.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html index b45a9a03bc..b1900908a5 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html @@ -3,9 +3,10 @@ {{object.name}} - [{{object.archivedItems}}] +[{{object.archivedItems}}] +
    {{object.shortDescription}}
    From bd1881fc9a8778a3d4c047fcf06e9f8163a78fad Mon Sep 17 00:00:00 2001 From: Adam Doan Date: Tue, 16 May 2023 18:54:17 +0000 Subject: [PATCH 099/425] Add accessible button names for ORCID queue action buttons --- .../orcid-page/orcid-queue/orcid-queue.component.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/app/item-page/orcid-page/orcid-queue/orcid-queue.component.html b/src/app/item-page/orcid-page/orcid-queue/orcid-queue.component.html index 9358bcf835..6ba318f7fd 100644 --- a/src/app/item-page/orcid-page/orcid-queue/orcid-queue.component.html +++ b/src/app/item-page/orcid-page/orcid-queue/orcid-queue.component.html @@ -34,11 +34,13 @@
    From 388c08b9a13cf636eb0487e595a9e1017bad1d0f Mon Sep 17 00:00:00 2001 From: damian Date: Mon, 15 May 2023 20:34:46 +0200 Subject: [PATCH 100/425] Archived items moved outside initial span element(fix for tests). Tests added. --- .../community-list.component.html | 2 +- .../collection-list-element.component.html | 4 +- .../collection-list-element.component.spec.ts | 52 ++++++++++++++++++- 3 files changed, 52 insertions(+), 6 deletions(-) diff --git a/src/app/community-list-page/community-list/community-list.component.html b/src/app/community-list-page/community-list/community-list.component.html index efc1f086ae..5f940b4405 100644 --- a/src/app/community-list-page/community-list/community-list.component.html +++ b/src/app/community-list-page/community-list/community-list.component.html @@ -37,7 +37,7 @@ {{node.name}} - [{{node.payload.archivedItems}}] + [{{node.payload.archivedItems}}]
    diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html index b1900908a5..1fdb97f17b 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html @@ -4,9 +4,7 @@ {{object.name}} - -[{{object.archivedItems}}] - +[{{object.archivedItems}}]
    {{object.shortDescription}}
    diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts b/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts index c41d5a7314..c1d9665bc3 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts @@ -7,6 +7,29 @@ import { Collection } from '../../../core/shared/collection.model'; let collectionListElementComponent: CollectionListElementComponent; let fixture: ComponentFixture; +const mockCollectionWithArchivedItems: Collection = Object.assign(new Collection(), { + metadata: { + 'dc.title': [ + { + language: 'en_US', + value: 'Test title' + } + ] + }, archivedItems: 1 +}); + +const mockCollectionWithoutArchivedItems: Collection = Object.assign(new Collection(), { + metadata: { + 'dc.title': [ + { + language: 'en_US', + value: 'Test title' + } + ] + }, archivedItems: 0 +}); + + const mockCollectionWithAbstract: Collection = Object.assign(new Collection(), { metadata: { 'dc.description.abstract': [ @@ -15,7 +38,7 @@ const mockCollectionWithAbstract: Collection = Object.assign(new Collection(), { value: 'Short description' } ] - } + }, archivedItems: 1 }); const mockCollectionWithoutAbstract: Collection = Object.assign(new Collection(), { @@ -26,7 +49,7 @@ const mockCollectionWithoutAbstract: Collection = Object.assign(new Collection() value: 'Test title' } ] - } + }, archivedItems: 1 }); describe('CollectionListElementComponent', () => { @@ -71,4 +94,29 @@ describe('CollectionListElementComponent', () => { expect(collectionAbstractField).toBeNull(); }); }); + + + describe('When the collection has archived items', () => { + beforeEach(() => { + collectionListElementComponent.object = mockCollectionWithArchivedItems; + fixture.detectChanges(); + }); + + it('should show the archived items paragraph', () => { + const field = fixture.debugElement.query(By.css('span.archived-items-lead')); + expect(field).not.toBeNull(); + }); + }); + + describe('When the collection has no archived items', () => { + beforeEach(() => { + collectionListElementComponent.object = mockCollectionWithoutArchivedItems; + fixture.detectChanges(); + }); + + it('should not show the archived items paragraph', () => { + const field = fixture.debugElement.query(By.css('span.archived-items-lead')); + expect(field).toBeNull(); + }); + }); }); From 3d7e61f57f5ab5693b6a310b593ab335072f32d8 Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Wed, 17 May 2023 18:31:46 +0200 Subject: [PATCH 101/425] add a custom FindDataImpl for browsedefinitions --- src/app/browse-by/browse-by-guard.spec.ts | 4 +- src/app/browse-by/browse-by-guard.ts | 4 +- .../browse-by-switcher.component.spec.ts | 14 ++-- .../browse-by-switcher.component.ts | 4 +- .../browse/browse-definition-data.service.ts | 81 ++++++++++--------- src/app/core/browse/browse.service.spec.ts | 6 +- src/app/core/browse/browse.service.ts | 16 ++-- src/app/core/core.module.ts | 4 +- .../data/browse-response-parsing.service.ts | 33 +++++--- .../core/shared/browse-definition.model.ts | 16 ++++ src/app/core/shared/browse-definition.ts | 10 --- .../shared/flat-browse-definition.model.ts | 11 +-- .../hierarchical-browse-definition.model.ts | 11 +-- src/app/core/shared/operators.ts | 12 +-- src/app/menu.resolver.ts | 8 +- src/app/navbar/navbar.component.spec.ts | 10 +-- .../comcol-page-browse-by.component.ts | 8 +- 17 files changed, 134 insertions(+), 118 deletions(-) create mode 100644 src/app/core/shared/browse-definition.model.ts delete mode 100644 src/app/core/shared/browse-definition.ts diff --git a/src/app/browse-by/browse-by-guard.spec.ts b/src/app/browse-by/browse-by-guard.spec.ts index 8a9f9b8c50..933c95a3cb 100644 --- a/src/app/browse-by/browse-by-guard.spec.ts +++ b/src/app/browse-by/browse-by-guard.spec.ts @@ -2,7 +2,7 @@ import { first } from 'rxjs/operators'; import { BrowseByGuard } from './browse-by-guard'; import { of as observableOf } from 'rxjs'; import { createSuccessfulRemoteDataObject$ } from '../shared/remote-data.utils'; -import { FlatBrowseDefinition } from '../core/shared/flat-browse-definition.model'; +import { BrowseDefinition } from '../core/shared/browse-definition.model'; import { BrowseByDataType } from './browse-by-switcher/browse-by-decorator'; describe('BrowseByGuard', () => { @@ -18,7 +18,7 @@ describe('BrowseByGuard', () => { const id = 'author'; const scope = '1234-65487-12354-1235'; const value = 'Filter'; - const browseDefinition = Object.assign(new FlatBrowseDefinition(), { type: BrowseByDataType.Metadata, metadataKeys: ['dc.contributor'] }); + const browseDefinition = Object.assign(new BrowseDefinition(), { type: BrowseByDataType.Metadata, metadataKeys: ['dc.contributor'] }); beforeEach(() => { dsoService = { diff --git a/src/app/browse-by/browse-by-guard.ts b/src/app/browse-by/browse-by-guard.ts index f42359b56b..e4582cb77a 100644 --- a/src/app/browse-by/browse-by-guard.ts +++ b/src/app/browse-by/browse-by-guard.ts @@ -7,7 +7,7 @@ import { getFirstSucceededRemoteData, getFirstSucceededRemoteDataPayload } from import { TranslateService } from '@ngx-translate/core'; import { Observable, of as observableOf } from 'rxjs'; import { BrowseDefinitionDataService } from '../core/browse/browse-definition-data.service'; -import { FlatBrowseDefinition } from '../core/shared/flat-browse-definition.model'; +import { BrowseDefinition } from '../core/shared/browse-definition.model'; @Injectable() /** @@ -23,7 +23,7 @@ export class BrowseByGuard implements CanActivate { canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { const title = route.data.title; const id = route.params.id || route.queryParams.id || route.data.id; - let browseDefinition$: Observable; + let browseDefinition$: Observable; if (hasNoValue(route.data.browseDefinition) && hasValue(id)) { browseDefinition$ = this.browseDefinitionService.findById(id).pipe(getFirstSucceededRemoteDataPayload()); } else { diff --git a/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.spec.ts b/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.spec.ts index 91c6c29252..c2e1c9cb68 100644 --- a/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.spec.ts +++ b/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.spec.ts @@ -3,7 +3,7 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NO_ERRORS_SCHEMA } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { BROWSE_BY_COMPONENT_FACTORY, BrowseByDataType } from './browse-by-decorator'; -import { FlatBrowseDefinition } from '../../core/shared/flat-browse-definition.model'; +import { BrowseDefinition } from '../../core/shared/browse-definition.model'; import { BehaviorSubject } from 'rxjs'; import { ThemeService } from '../../shared/theme-support/theme.service'; @@ -13,33 +13,33 @@ describe('BrowseBySwitcherComponent', () => { const types = [ Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'title', dataType: BrowseByDataType.Title, } ), Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'dateissued', dataType: BrowseByDataType.Date, metadataKeys: ['dc.date.issued'] } ), Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'author', dataType: BrowseByDataType.Metadata, } ), Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'subject', dataType: BrowseByDataType.Metadata, } ), ]; - const data = new BehaviorSubject(createDataWithBrowseDefinition(new FlatBrowseDefinition())); + const data = new BehaviorSubject(createDataWithBrowseDefinition(new BrowseDefinition())); const activatedRouteStub = { data @@ -70,7 +70,7 @@ describe('BrowseBySwitcherComponent', () => { comp = fixture.componentInstance; })); - types.forEach((type: FlatBrowseDefinition) => { + types.forEach((type: BrowseDefinition) => { describe(`when switching to a browse-by page for "${type.id}"`, () => { beforeEach(() => { data.next(createDataWithBrowseDefinition(type)); diff --git a/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts b/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts index e4746129dc..35e4edf900 100644 --- a/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts +++ b/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts @@ -4,7 +4,7 @@ import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { BROWSE_BY_COMPONENT_FACTORY } from './browse-by-decorator'; import { GenericConstructor } from '../../core/shared/generic-constructor'; -import { FlatBrowseDefinition } from '../../core/shared/flat-browse-definition.model'; +import { BrowseDefinition } from '../../core/shared/browse-definition.model'; import { ThemeService } from '../../shared/theme-support/theme.service'; @Component({ @@ -31,7 +31,7 @@ export class BrowseBySwitcherComponent implements OnInit { */ ngOnInit(): void { this.browseByComponent = this.route.data.pipe( - map((data: { browseDefinition: FlatBrowseDefinition }) => this.getComponentByBrowseByType(data.browseDefinition.getRenderType(), this.themeService.getThemeName())) + map((data: { browseDefinition: BrowseDefinition }) => this.getComponentByBrowseByType(data.browseDefinition.getRenderType(), this.themeService.getThemeName())) ); } diff --git a/src/app/core/browse/browse-definition-data.service.ts b/src/app/core/browse/browse-definition-data.service.ts index 465c5b44b4..5380bb7ec4 100644 --- a/src/app/core/browse/browse-definition-data.service.ts +++ b/src/app/core/browse/browse-definition-data.service.ts @@ -1,6 +1,5 @@ import { Injectable } from '@angular/core'; import { BROWSE_DEFINITION } from '../shared/browse-definition.resource-type'; -import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model'; import { RequestService } from '../data/request.service'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; @@ -16,46 +15,10 @@ import { dataService } from '../data/base/data-service.decorator'; import { isNotEmpty, isNotEmptyOperator, hasValue } from '../../shared/empty.util'; import { take } from 'rxjs/operators'; import { BrowseDefinitionRestRequest } from '../data/request.models'; +import { BrowseDefinition } from '../shared/browse-definition.model'; -/** - * Data service responsible for retrieving browse definitions from the REST server - */ -@Injectable({ - providedIn: 'root', -}) -@dataService(BROWSE_DEFINITION) -export class BrowseDefinitionDataService extends IdentifiableDataService implements FindAllData { - private findAllData: FindAllDataImpl; - - constructor( - protected requestService: RequestService, - protected rdbService: RemoteDataBuildService, - protected objectCache: ObjectCacheService, - protected halService: HALEndpointService, - ) { - super('browses', requestService, rdbService, objectCache, halService); - - this.findAllData = new FindAllDataImpl(this.linkPath, requestService, rdbService, objectCache, halService, this.responseMsToLive); - } - - /** - * Returns {@link RemoteData} of all object with a list of {@link FollowLinkConfig}, to indicate which embedded - * info should be added to the objects - * - * @param options Find list options object - * @param useCachedVersionIfAvailable If this is true, the request will only be sent if there's - * no valid cached version. Defaults to true - * @param reRequestOnStale Whether or not the request should automatically be re- - * requested after the response becomes stale - * @param linksToFollow List of {@link FollowLinkConfig} that indicate which - * {@link HALLink}s should be automatically resolved - * @return {Observable>>} - * Return an observable that emits object list - */ - findAll(options: FindListOptions = {}, useCachedVersionIfAvailable = true, reRequestOnStale = true, ...linksToFollow: FollowLinkConfig[]): Observable>> { - return this.findAllData.findAll(options, useCachedVersionIfAvailable, reRequestOnStale, ...linksToFollow); - } +class BrowseDefinitionDataImpl extends FindAllDataImpl { /** * Create a GET request for the given href, and send it. * Use a GET request specific for BrowseDefinitions. @@ -86,3 +49,43 @@ export class BrowseDefinitionDataService extends IdentifiableDataService implements FindAllData { + private findAllData: BrowseDefinitionDataImpl; + + constructor( + protected requestService: RequestService, + protected rdbService: RemoteDataBuildService, + protected objectCache: ObjectCacheService, + protected halService: HALEndpointService, + ) { + super('browses', requestService, rdbService, objectCache, halService); + + this.findAllData = new BrowseDefinitionDataImpl(this.linkPath, requestService, rdbService, objectCache, halService, this.responseMsToLive); + } + + /** + * Returns {@link RemoteData} of all object with a list of {@link FollowLinkConfig}, to indicate which embedded + * info should be added to the objects + * + * @param options Find list options object + * @param useCachedVersionIfAvailable If this is true, the request will only be sent if there's + * no valid cached version. Defaults to true + * @param reRequestOnStale Whether or not the request should automatically be re- + * requested after the response becomes stale + * @param linksToFollow List of {@link FollowLinkConfig} that indicate which + * {@link HALLink}s should be automatically resolved + * @return {Observable>>} + * Return an observable that emits object list + */ + findAll(options: FindListOptions = {}, useCachedVersionIfAvailable = true, reRequestOnStale = true, ...linksToFollow: FollowLinkConfig[]): Observable>> { + return this.findAllData.findAll(options, useCachedVersionIfAvailable, reRequestOnStale, ...linksToFollow); + } +} + diff --git a/src/app/core/browse/browse.service.spec.ts b/src/app/core/browse/browse.service.spec.ts index 9e0615385b..46ac8c44f4 100644 --- a/src/app/core/browse/browse.service.spec.ts +++ b/src/app/core/browse/browse.service.spec.ts @@ -6,7 +6,7 @@ import { getMockRequestService } from '../../shared/mocks/request.service.mock'; import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestService } from '../data/request.service'; -import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model'; +import { BrowseDefinition } from '../shared/browse-definition.model'; import { BrowseEntrySearchOptions } from './browse-entry-search-options.model'; import { BrowseService } from './browse.service'; import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; @@ -23,7 +23,7 @@ describe('BrowseService', () => { const browsesEndpointURL = 'https://rest.api/browses'; const halService: any = new HALEndpointServiceStub(browsesEndpointURL); const browseDefinitions = [ - Object.assign(new FlatBrowseDefinition(), { + Object.assign(new BrowseDefinition(), { id: 'date', metadataBrowse: false, sortOptions: [ @@ -50,7 +50,7 @@ describe('BrowseService', () => { items: { href: 'https://rest.api/discover/browses/dateissued/items' } } }), - Object.assign(new FlatBrowseDefinition(), { + Object.assign(new BrowseDefinition(), { id: 'author', metadataBrowse: true, sortOptions: [ diff --git a/src/app/core/browse/browse.service.ts b/src/app/core/browse/browse.service.ts index 9e5589e3d8..a9a030bf57 100644 --- a/src/app/core/browse/browse.service.ts +++ b/src/app/core/browse/browse.service.ts @@ -6,6 +6,7 @@ import { RemoteDataBuildService } from '../cache/builders/remote-data-build.serv import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { RequestService } from '../data/request.service'; +import { BrowseDefinition } from '../shared/browse-definition.model'; import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model'; import { BrowseEntry } from '../shared/browse-entry.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; @@ -60,7 +61,7 @@ export class BrowseService { /** * Get all BrowseDefinitions */ - getBrowseDefinitions(): Observable>> { + getBrowseDefinitions(): Observable>> { // TODO properly support pagination return this.browseDefinitionDataService.findAll({ elementsPerPage: 9999 }).pipe( getFirstSucceededRemoteData(), @@ -233,13 +234,18 @@ export class BrowseService { return this.getBrowseDefinitions().pipe( getRemoteDataPayload(), getPaginatedListPayload(), - map((browseDefinitions: FlatBrowseDefinition[]) => browseDefinitions - .find((def: FlatBrowseDefinition) => { - const matchingKeys = def.metadataKeys.find((key: string) => searchKeyArray.indexOf(key) >= 0); + map((browseDefinitions: BrowseDefinition[]) => browseDefinitions + .find((def: BrowseDefinition) => { + let matchingKeys = ''; + + if (Array.isArray((def as FlatBrowseDefinition).metadataKeys)) { + matchingKeys = (def as FlatBrowseDefinition).metadataKeys.find((key: string) => searchKeyArray.indexOf(key) >= 0); + } + return isNotEmpty(matchingKeys); }) ), - map((def: FlatBrowseDefinition) => { + map((def: BrowseDefinition) => { if (isEmpty(def) || isEmpty(def._links) || isEmpty(def._links[linkPath])) { throw new Error(`A browse endpoint for ${linkPath} on ${metadataKey} isn't configured`); } else { diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts index c00cfd6002..5365de0c4b 100644 --- a/src/app/core/core.module.ts +++ b/src/app/core/core.module.ts @@ -73,7 +73,7 @@ import { ServerResponseService } from './services/server-response.service'; import { NativeWindowFactory, NativeWindowService } from './services/window.service'; import { BitstreamFormat } from './shared/bitstream-format.model'; import { Bitstream } from './shared/bitstream.model'; -import { FlatBrowseDefinition } from './shared/flat-browse-definition.model'; +import { BrowseDefinition } from './shared/browse-definition.model'; import { BrowseEntry } from './shared/browse-entry.model'; import { Bundle } from './shared/bundle.model'; import { Collection } from './shared/collection.model'; @@ -325,7 +325,7 @@ export const models = SubmissionUploadsModel, AuthStatus, BrowseEntry, - FlatBrowseDefinition, + BrowseDefinition, HierarchicalBrowseDefinition, ClaimedTask, TaskObject, diff --git a/src/app/core/data/browse-response-parsing.service.ts b/src/app/core/data/browse-response-parsing.service.ts index 9aa508ccf0..cc1a4a64a1 100644 --- a/src/app/core/data/browse-response-parsing.service.ts +++ b/src/app/core/data/browse-response-parsing.service.ts @@ -1,35 +1,42 @@ import { Injectable } from '@angular/core'; import { ObjectCacheService } from '../cache/object-cache.service'; import { hasValue } from '../../shared/empty.util'; -import { HIERARCHICAL_BROWSE_DEFINITION } from '../shared/hierarchical-browse-definition.resource-type'; +import { + HIERARCHICAL_BROWSE_DEFINITION +} from '../shared/hierarchical-browse-definition.resource-type'; import { FLAT_BROWSE_DEFINITION } from '../shared/flat-browse-definition.resource-type'; import { HierarchicalBrowseDefinition } from '../shared/hierarchical-browse-definition.model'; import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model'; import { DSOResponseParsingService } from './dso-response-parsing.service'; +import { Serializer } from '../serializer'; +import { BrowseDefinition } from '../shared/browse-definition.model'; +import { BROWSE_DEFINITION } from '../shared/browse-definition.resource-type'; /** * A ResponseParsingService used to parse RawRestResponse coming from the REST API to a BrowseDefinition object */ @Injectable({ - providedIn: 'root', - }) + providedIn: 'root', +}) export class BrowseResponseParsingService extends DSOResponseParsingService { - protected objectCache: ObjectCacheService; - protected toCache: boolean; + constructor( + protected objectCache: ObjectCacheService, + ) { + super(objectCache); + } protected deserialize(obj): any { const browseType: string = obj.browseType; - if (hasValue(browseType)) { + if (obj.type === BROWSE_DEFINITION.value && hasValue(browseType)) { + let serializer: Serializer; if (browseType === HIERARCHICAL_BROWSE_DEFINITION.value) { - const serializer = new this.serializerConstructor(HierarchicalBrowseDefinition); - return serializer.deserialize(obj); - } else if (browseType === FLAT_BROWSE_DEFINITION.value) { - const serializer = new this.serializerConstructor(FlatBrowseDefinition); - return serializer.deserialize(obj); + serializer = new this.serializerConstructor(HierarchicalBrowseDefinition); + } else { + serializer = new this.serializerConstructor(FlatBrowseDefinition); } + return serializer.deserialize(obj); } else { - console.warn('cannot deserialize type ' + browseType); - return null; + return super.deserialize(obj); } } } diff --git a/src/app/core/shared/browse-definition.model.ts b/src/app/core/shared/browse-definition.model.ts new file mode 100644 index 0000000000..a5bed53c9f --- /dev/null +++ b/src/app/core/shared/browse-definition.model.ts @@ -0,0 +1,16 @@ +import { autoserialize } from 'cerialize'; +import { CacheableObject } from '../cache/cacheable-object.model'; + +/** + * Base class for BrowseDefinition models + */ +export abstract class BrowseDefinition extends CacheableObject { + + @autoserialize + id: string; + + /** + * Get the render type of the BrowseDefinition model + */ + abstract getRenderType(): string; +} diff --git a/src/app/core/shared/browse-definition.ts b/src/app/core/shared/browse-definition.ts deleted file mode 100644 index 788ef65739..0000000000 --- a/src/app/core/shared/browse-definition.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Base class for BrowseDefinition models - */ -export abstract class BrowseDefinition { - - /** - * Get the render type of the BrowseDefinition model - */ - abstract getRenderType(): string; -} diff --git a/src/app/core/shared/flat-browse-definition.model.ts b/src/app/core/shared/flat-browse-definition.model.ts index fa664c7747..9660a3bac9 100644 --- a/src/app/core/shared/flat-browse-definition.model.ts +++ b/src/app/core/shared/flat-browse-definition.model.ts @@ -1,16 +1,16 @@ -import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; +import { autoserialize, autoserializeAs, deserialize, inheritSerialization } from 'cerialize'; import { typedObject } from '../cache/builders/build-decorators'; import { excludeFromEquals } from '../utilities/equals.decorators'; import { FLAT_BROWSE_DEFINITION } from './flat-browse-definition.resource-type'; import { HALLink } from './hal-link.model'; import { ResourceType } from './resource-type'; import { SortOption } from './sort-option.model'; -import { CacheableObject } from '../cache/cacheable-object.model'; import { BrowseByDataType } from '../../browse-by/browse-by-switcher/browse-by-decorator'; -import { BrowseDefinition } from './browse-definition'; +import { BrowseDefinition } from './browse-definition.model'; @typedObject -export class FlatBrowseDefinition extends CacheableObject implements BrowseDefinition { +@inheritSerialization(BrowseDefinition) +export class FlatBrowseDefinition extends BrowseDefinition { static type = FLAT_BROWSE_DEFINITION; /** @@ -19,9 +19,6 @@ export class FlatBrowseDefinition extends CacheableObject implements BrowseDefin @excludeFromEquals type: ResourceType = FLAT_BROWSE_DEFINITION; - @autoserialize - id: string; - @autoserialize sortOptions: SortOption[]; diff --git a/src/app/core/shared/hierarchical-browse-definition.model.ts b/src/app/core/shared/hierarchical-browse-definition.model.ts index a57550e1b3..427f5e1947 100644 --- a/src/app/core/shared/hierarchical-browse-definition.model.ts +++ b/src/app/core/shared/hierarchical-browse-definition.model.ts @@ -1,14 +1,14 @@ -import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; +import { autoserialize, autoserializeAs, deserialize, inheritSerialization } from 'cerialize'; import { typedObject } from '../cache/builders/build-decorators'; import { excludeFromEquals } from '../utilities/equals.decorators'; import { HIERARCHICAL_BROWSE_DEFINITION } from './hierarchical-browse-definition.resource-type'; import { HALLink } from './hal-link.model'; import { ResourceType } from './resource-type'; -import { CacheableObject } from '../cache/cacheable-object.model'; -import { BrowseDefinition } from './browse-definition'; +import { BrowseDefinition } from './browse-definition.model'; @typedObject -export class HierarchicalBrowseDefinition extends CacheableObject implements BrowseDefinition { +@inheritSerialization(BrowseDefinition) +export class HierarchicalBrowseDefinition extends BrowseDefinition { static type = HIERARCHICAL_BROWSE_DEFINITION; /** @@ -17,9 +17,6 @@ export class HierarchicalBrowseDefinition extends CacheableObject implements Bro @excludeFromEquals type: ResourceType = HIERARCHICAL_BROWSE_DEFINITION; - @autoserialize - id: string; - @autoserialize facetType: string; diff --git a/src/app/core/shared/operators.ts b/src/app/core/shared/operators.ts index dd0ade112a..32610c82fd 100644 --- a/src/app/core/shared/operators.ts +++ b/src/app/core/shared/operators.ts @@ -6,7 +6,7 @@ import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { MetadataField } from '../metadata/metadata-field.model'; import { MetadataSchema } from '../metadata/metadata-schema.model'; -import { FlatBrowseDefinition } from './flat-browse-definition.model'; +import { BrowseDefinition } from './browse-definition.model'; import { DSpaceObject } from './dspace-object.model'; import { InjectionToken } from '@angular/core'; import { MonoTypeOperatorFunction, SchedulerLike } from 'rxjs/internal/types'; @@ -171,17 +171,17 @@ export const toDSpaceObjectListRD = () => /** * Get the browse links from a definition by ID given an array of all definitions * @param {string} definitionID - * @returns {(source: Observable>) => Observable} + * @returns {(source: Observable>) => Observable} */ export const getBrowseDefinitionLinks = (definitionID: string) => - (source: Observable>>): Observable => + (source: Observable>>): Observable => source.pipe( getRemoteDataPayload(), getPaginatedListPayload(), - map((browseDefinitions: FlatBrowseDefinition[]) => browseDefinitions - .find((def: FlatBrowseDefinition) => def.id === definitionID) + map((browseDefinitions: BrowseDefinition[]) => browseDefinitions + .find((def: BrowseDefinition) => def.id === definitionID) ), - map((def: FlatBrowseDefinition) => { + map((def: BrowseDefinition) => { if (isNotEmpty(def)) { return def._links; } else { diff --git a/src/app/menu.resolver.ts b/src/app/menu.resolver.ts index d423d3bc33..f771ef8b27 100644 --- a/src/app/menu.resolver.ts +++ b/src/app/menu.resolver.ts @@ -7,7 +7,7 @@ import { MenuItemType } from './shared/menu/menu-item-type.model'; import { LinkMenuItemModel } from './shared/menu/menu-item/models/link.model'; import { getFirstCompletedRemoteData } from './core/shared/operators'; import { PaginatedList } from './core/data/paginated-list.model'; -import { FlatBrowseDefinition } from './core/shared/flat-browse-definition.model'; +import { BrowseDefinition } from './core/shared/browse-definition.model'; import { RemoteData } from './core/data/remote-data'; import { TextMenuItemModel } from './shared/menu/menu-item/models/text.model'; import { BrowseService } from './core/browse/browse.service'; @@ -108,10 +108,10 @@ export class MenuResolver implements Resolve { ]; // Read the different Browse-By types from config and add them to the browse menu this.browseService.getBrowseDefinitions() - .pipe(getFirstCompletedRemoteData>()) - .subscribe((browseDefListRD: RemoteData>) => { + .pipe(getFirstCompletedRemoteData>()) + .subscribe((browseDefListRD: RemoteData>) => { if (browseDefListRD.hasSucceeded) { - browseDefListRD.payload.page.forEach((browseDef: FlatBrowseDefinition) => { + browseDefListRD.payload.page.forEach((browseDef: BrowseDefinition) => { menuList.push({ id: `browse_global_by_${browseDef.id}`, parentID: 'browse_global', diff --git a/src/app/navbar/navbar.component.spec.ts b/src/app/navbar/navbar.component.spec.ts index 084047fc46..ada9be9d0b 100644 --- a/src/app/navbar/navbar.component.spec.ts +++ b/src/app/navbar/navbar.component.spec.ts @@ -16,7 +16,7 @@ import { RouterTestingModule } from '@angular/router/testing'; import { BrowseService } from '../core/browse/browse.service'; import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../shared/remote-data.utils'; import { buildPaginatedList } from '../core/data/paginated-list.model'; -import { FlatBrowseDefinition } from '../core/shared/flat-browse-definition.model'; +import { BrowseDefinition } from '../core/shared/browse-definition.model'; import { BrowseByDataType } from '../browse-by/browse-by-switcher/browse-by-decorator'; import { Item } from '../core/shared/item.model'; import { AuthorizationDataService } from '../core/data/feature-authorization/authorization-data.service'; @@ -66,26 +66,26 @@ describe('NavbarComponent', () => { beforeEach(waitForAsync(() => { browseDefinitions = [ Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'title', dataType: BrowseByDataType.Title, } ), Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'dateissued', dataType: BrowseByDataType.Date, metadataKeys: ['dc.date.issued'] } ), Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'author', dataType: BrowseByDataType.Metadata, } ), Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'subject', dataType: BrowseByDataType.Metadata, } diff --git a/src/app/shared/comcol/comcol-page-browse-by/comcol-page-browse-by.component.ts b/src/app/shared/comcol/comcol-page-browse-by/comcol-page-browse-by.component.ts index 668bd138c8..0527d283f0 100644 --- a/src/app/shared/comcol/comcol-page-browse-by/comcol-page-browse-by.component.ts +++ b/src/app/shared/comcol/comcol-page-browse-by/comcol-page-browse-by.component.ts @@ -6,7 +6,7 @@ import { getCommunityPageRoute } from '../../../community-page/community-page-ro import { getCollectionPageRoute } from '../../../collection-page/collection-page-routing-paths'; import { getFirstCompletedRemoteData } from '../../../core/shared/operators'; import { PaginatedList } from '../../../core/data/paginated-list.model'; -import { FlatBrowseDefinition } from '../../../core/shared/flat-browse-definition.model'; +import { BrowseDefinition } from '../../../core/shared/browse-definition.model'; import { RemoteData } from '../../../core/data/remote-data'; import { BrowseService } from '../../../core/browse/browse.service'; @@ -46,11 +46,11 @@ export class ComcolPageBrowseByComponent implements OnInit { ngOnInit(): void { this.browseService.getBrowseDefinitions() - .pipe(getFirstCompletedRemoteData>()) - .subscribe((browseDefListRD: RemoteData>) => { + .pipe(getFirstCompletedRemoteData>()) + .subscribe((browseDefListRD: RemoteData>) => { if (browseDefListRD.hasSucceeded) { this.allOptions = browseDefListRD.payload.page - .map((config: FlatBrowseDefinition) => ({ + .map((config: BrowseDefinition) => ({ id: config.id, label: `browse.comcol.by.${config.id}`, routerLink: `/browse/${config.id}`, From f1378b870ba8fd02f80496768f68f4a659f8e08e Mon Sep 17 00:00:00 2001 From: Adam Doan Date: Thu, 18 May 2023 13:40:48 +0000 Subject: [PATCH 102/425] Add label to starts-with-text input field --- src/app/shared/starts-with/text/starts-with-text.component.html | 2 +- src/assets/i18n/en.json5 | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/shared/starts-with/text/starts-with-text.component.html b/src/app/shared/starts-with/text/starts-with-text.component.html index 3314d9cc4a..926a2f932d 100644 --- a/src/app/shared/starts-with/text/starts-with-text.component.html +++ b/src/app/shared/starts-with/text/starts-with-text.component.html @@ -1,7 +1,7 @@
    - + diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 375fc3856a..9f0684fbf3 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -849,6 +849,8 @@ "browse.startsWith.type_text": "Filter results by typing the first few letters", + "browse.startsWith.input": "Filter", + "browse.title": "Browsing {{ collection }} by {{ field }}{{ startsWith }} {{ value }}", "browse.title.page": "Browsing {{ collection }} by {{ field }} {{ value }}", From bf31c76c885669d1215491dc2acbd5e3a052f663 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Fri, 19 May 2023 16:36:13 +0200 Subject: [PATCH 103/425] 101623: Add ValueListBrowseDefinition model + super NonHierarchicalBrowse class --- .../browse/browse-definition-data.service.ts | 6 ++-- src/app/core/core.module.ts | 6 ++++ .../data/browse-response-parsing.service.ts | 10 ++++-- .../shared/flat-browse-definition.model.ts | 30 +++-------------- .../non-hierarchical-browse-definition.ts | 32 +++++++++++++++++++ .../value-list-browse-definition.model.ts | 26 +++++++++++++++ ...ue-list-browse-definition.resource-type.ts | 9 ++++++ 7 files changed, 88 insertions(+), 31 deletions(-) create mode 100644 src/app/core/shared/non-hierarchical-browse-definition.ts create mode 100644 src/app/core/shared/value-list-browse-definition.model.ts create mode 100644 src/app/core/shared/value-list-browse-definition.resource-type.ts diff --git a/src/app/core/browse/browse-definition-data.service.ts b/src/app/core/browse/browse-definition-data.service.ts index 5380bb7ec4..a4c7bf1353 100644 --- a/src/app/core/browse/browse-definition-data.service.ts +++ b/src/app/core/browse/browse-definition-data.service.ts @@ -18,7 +18,7 @@ import { BrowseDefinitionRestRequest } from '../data/request.models'; import { BrowseDefinition } from '../shared/browse-definition.model'; -class BrowseDefinitionDataImpl extends FindAllDataImpl { +class BrowseDefinitionFindAllDataImpl extends FindAllDataImpl { /** * Create a GET request for the given href, and send it. * Use a GET request specific for BrowseDefinitions. @@ -57,7 +57,7 @@ class BrowseDefinitionDataImpl extends FindAllDataImpl { }) @dataService(BROWSE_DEFINITION) export class BrowseDefinitionDataService extends IdentifiableDataService implements FindAllData { - private findAllData: BrowseDefinitionDataImpl; + private findAllData: BrowseDefinitionFindAllDataImpl; constructor( protected requestService: RequestService, @@ -67,7 +67,7 @@ export class BrowseDefinitionDataService extends IdentifiableDataService; if (browseType === HIERARCHICAL_BROWSE_DEFINITION.value) { serializer = new this.serializerConstructor(HierarchicalBrowseDefinition); - } else { + } else if (browseType === FLAT_BROWSE_DEFINITION.value) { serializer = new this.serializerConstructor(FlatBrowseDefinition); + } else if (browseType === VALUE_LIST_BROWSE_DEFINITION.value) { + serializer = new this.serializerConstructor(ValueListBrowseDefinition); + } else { + throw new Error('An error occurred while retrieving the browse definitions.'); } return serializer.deserialize(obj); } else { - return super.deserialize(obj); + throw new Error('An error occurred while retrieving the browse definitions.'); } } } diff --git a/src/app/core/shared/flat-browse-definition.model.ts b/src/app/core/shared/flat-browse-definition.model.ts index 9660a3bac9..f94fa75b91 100644 --- a/src/app/core/shared/flat-browse-definition.model.ts +++ b/src/app/core/shared/flat-browse-definition.model.ts @@ -1,16 +1,13 @@ -import { autoserialize, autoserializeAs, deserialize, inheritSerialization } from 'cerialize'; +import { inheritSerialization } from 'cerialize'; import { typedObject } from '../cache/builders/build-decorators'; import { excludeFromEquals } from '../utilities/equals.decorators'; import { FLAT_BROWSE_DEFINITION } from './flat-browse-definition.resource-type'; -import { HALLink } from './hal-link.model'; import { ResourceType } from './resource-type'; -import { SortOption } from './sort-option.model'; -import { BrowseByDataType } from '../../browse-by/browse-by-switcher/browse-by-decorator'; -import { BrowseDefinition } from './browse-definition.model'; +import { NonHierarchicalBrowseDefinition } from './non-hierarchical-browse-definition'; @typedObject -@inheritSerialization(BrowseDefinition) -export class FlatBrowseDefinition extends BrowseDefinition { +@inheritSerialization(NonHierarchicalBrowseDefinition) +export class FlatBrowseDefinition extends NonHierarchicalBrowseDefinition { static type = FLAT_BROWSE_DEFINITION; /** @@ -19,29 +16,10 @@ export class FlatBrowseDefinition extends BrowseDefinition { @excludeFromEquals type: ResourceType = FLAT_BROWSE_DEFINITION; - @autoserialize - sortOptions: SortOption[]; - - @autoserializeAs('order') - defaultSortOrder: string; - - @autoserializeAs('metadata') - metadataKeys: string[]; - - @autoserialize - dataType: BrowseByDataType; - get self(): string { return this._links.self.href; } - @deserialize - _links: { - self: HALLink; - entries: HALLink; - items: HALLink; - }; - getRenderType(): string { return this.dataType; } diff --git a/src/app/core/shared/non-hierarchical-browse-definition.ts b/src/app/core/shared/non-hierarchical-browse-definition.ts new file mode 100644 index 0000000000..a4f6df43d9 --- /dev/null +++ b/src/app/core/shared/non-hierarchical-browse-definition.ts @@ -0,0 +1,32 @@ +import { autoserialize, autoserializeAs, deserialize, inheritSerialization } from 'cerialize'; +import { SortOption } from './sort-option.model'; +import { BrowseByDataType } from '../../browse-by/browse-by-switcher/browse-by-decorator'; +import { HALLink } from './hal-link.model'; +import { BrowseDefinition } from './browse-definition.model'; + +/** + * Super class for NonHierarchicalBrowseDefinition models, + * e.g. FlatBrowseDefinition and ValueListBrowseDefinition + */ +@inheritSerialization(BrowseDefinition) +export abstract class NonHierarchicalBrowseDefinition extends BrowseDefinition { + + @autoserialize + sortOptions: SortOption[]; + + @autoserializeAs('order') + defaultSortOrder: string; + + @autoserializeAs('metadata') + metadataKeys: string[]; + + @autoserialize + dataType: BrowseByDataType; + + @deserialize + _links: { + self: HALLink; + entries: HALLink; + items: HALLink; + }; +} diff --git a/src/app/core/shared/value-list-browse-definition.model.ts b/src/app/core/shared/value-list-browse-definition.model.ts new file mode 100644 index 0000000000..a42a702940 --- /dev/null +++ b/src/app/core/shared/value-list-browse-definition.model.ts @@ -0,0 +1,26 @@ +import { inheritSerialization } from 'cerialize'; +import { typedObject } from '../cache/builders/build-decorators'; +import { excludeFromEquals } from '../utilities/equals.decorators'; +import { VALUE_LIST_BROWSE_DEFINITION } from './value-list-browse-definition.resource-type'; +import { ResourceType } from './resource-type'; +import { NonHierarchicalBrowseDefinition } from './non-hierarchical-browse-definition'; + +@typedObject +@inheritSerialization(NonHierarchicalBrowseDefinition) +export class ValueListBrowseDefinition extends NonHierarchicalBrowseDefinition { + static type = VALUE_LIST_BROWSE_DEFINITION; + + /** + * The object type + */ + @excludeFromEquals + type: ResourceType = VALUE_LIST_BROWSE_DEFINITION; + + get self(): string { + return this._links.self.href; + } + + getRenderType(): string { + return this.dataType; + } +} diff --git a/src/app/core/shared/value-list-browse-definition.resource-type.ts b/src/app/core/shared/value-list-browse-definition.resource-type.ts new file mode 100644 index 0000000000..8904dc472f --- /dev/null +++ b/src/app/core/shared/value-list-browse-definition.resource-type.ts @@ -0,0 +1,9 @@ +import { ResourceType } from './resource-type'; + +/** + * The resource type for ValueListBrowseDefinition + * + * Needs to be in a separate file to prevent circular + * dependencies in webpack. + */ +export const VALUE_LIST_BROWSE_DEFINITION = new ResourceType('valueList'); From 9ca04b4b63f3fd50f3a3044d2fc77cd59f49a541 Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Tue, 9 May 2023 17:27:06 +0200 Subject: [PATCH 104/425] [DURACOM-145] Handled collection step on a submission form --- .../submission-form-collection.component.html | 2 +- ...bmission-form-collection.component.spec.ts | 6 +++ .../submission-form-collection.component.ts | 5 ++ .../form/submission-form.component.html | 3 ++ .../form/submission-form.component.spec.ts | 27 +++++++++++ .../form/submission-form.component.ts | 46 ++++++++++++++++++- src/app/submission/sections/sections-type.ts | 1 + .../submission/sections/visibility-type.ts | 4 ++ 8 files changed, 91 insertions(+), 3 deletions(-) create mode 100644 src/app/submission/sections/visibility-type.ts diff --git a/src/app/submission/form/collection/submission-form-collection.component.html b/src/app/submission/form/collection/submission-form-collection.component.html index c1227eeccc..a78d737640 100644 --- a/src/app/submission/form/collection/submission-form-collection.component.html +++ b/src/app/submission/form/collection/submission-form-collection.component.html @@ -25,7 +25,7 @@ class="btn btn-outline-primary" (blur)="onClose()" (click)="onClose()" - [disabled]="(processingChange$ | async) || collectionModifiable == false" + [disabled]="(processingChange$ | async) || collectionModifiable == false || isReadonly" ngbDropdownToggle> {{ selectedCollectionName$ | async }} diff --git a/src/app/submission/form/collection/submission-form-collection.component.spec.ts b/src/app/submission/form/collection/submission-form-collection.component.spec.ts index 5b9946e1a4..a277e50286 100644 --- a/src/app/submission/form/collection/submission-form-collection.component.spec.ts +++ b/src/app/submission/form/collection/submission-form-collection.component.spec.ts @@ -249,6 +249,12 @@ describe('SubmissionFormCollectionComponent Component', () => { expect(dropDown).toBeFalsy(); }); + it('the dropdown button should be disabled when isReadonly is true', () => { + comp.isReadonly = true; + fixture.detectChanges(); + expect(dropdowBtn.nativeNode.attributes.disabled).toBeDefined(); + }); + it('should be simulated when the drop-down menu is closed', () => { spyOn(comp, 'onClose'); comp.onClose(); diff --git a/src/app/submission/form/collection/submission-form-collection.component.ts b/src/app/submission/form/collection/submission-form-collection.component.ts index 4eac4c506a..70a4cebf45 100644 --- a/src/app/submission/form/collection/submission-form-collection.component.ts +++ b/src/app/submission/form/collection/submission-form-collection.component.ts @@ -64,6 +64,11 @@ export class SubmissionFormCollectionComponent implements OnChanges, OnInit { */ @Input() submissionId; + /** + * Flag to indicate if the submission dropdown is read only + */ + @Input() isReadonly = false; + /** * An event fired when a different collection is selected. * Event's payload equals to new SubmissionObject. diff --git a/src/app/submission/form/submission-form.component.html b/src/app/submission/form/submission-form.component.html index f75af08f8e..4a916cfe23 100644 --- a/src/app/submission/form/submission-form.component.html +++ b/src/app/submission/form/submission-form.component.html @@ -8,12 +8,15 @@
    + +
    { @@ -156,6 +157,32 @@ describe('SubmissionFormComponent Component', () => { done(); }); + it('should return the visibility object of the collection section', () => { + comp.submissionDefinition = submissionDefinition; + fixture.detectChanges(); + const result = compAsAny.getCollectionVisibility(); + expect(result).toEqual({ + main: VisibilityType.HIDDEN, + other: VisibilityType.HIDDEN, + }); + }); + + it('should return true if collection section visibility is hidden', () => { + comp.submissionDefinition = submissionDefinition; + fixture.detectChanges(); + expect(comp.isSectionHidden).toBe(true); + }); + + it('should return false for isSectionReadonly when collection section visibility is not READONLY', () => { + const visibility = { + main: VisibilityType.READONLY, + other: VisibilityType.READONLY, + }; + comp.submissionDefinition = Object.assign({}, submissionDefinition, { visibility: visibility }); + fixture.detectChanges(); + expect(comp.isSectionReadonly).toBe(false); + }); + it('should update properly on collection change', (done) => { comp.collectionId = collectionId; comp.submissionId = submissionId; diff --git a/src/app/submission/form/submission-form.component.ts b/src/app/submission/form/submission-form.component.ts index 0e17e128bc..216aefcfc3 100644 --- a/src/app/submission/form/submission-form.component.ts +++ b/src/app/submission/form/submission-form.component.ts @@ -9,7 +9,7 @@ import { HALEndpointService } from '../../core/shared/hal-endpoint.service'; import { SubmissionObject } from '../../core/submission/models/submission-object.model'; import { WorkspaceitemSectionsObject } from '../../core/submission/models/workspaceitem-sections.model'; -import { hasValue, isNotEmpty } from '../../shared/empty.util'; +import { hasValue, isNotEmpty, isNotUndefined } from '../../shared/empty.util'; import { UploaderOptions } from '../../shared/upload/uploader/uploader-options.model'; import { SubmissionObjectEntry } from '../objects/submission-objects.reducer'; import { SectionDataObject } from '../sections/models/section-data.model'; @@ -18,6 +18,10 @@ import { Item } from '../../core/shared/item.model'; import { SectionsType } from '../sections/sections-type'; import { SectionsService } from '../sections/sections.service'; import { SubmissionError } from '../objects/submission-error.model'; +import { SubmissionSectionVisibility } from './../../core/config/models/config-submission-section.model'; +import { SubmissionSectionModel } from './../../core/config/models/config-submission-section.model'; +import { VisibilityType } from '../sections/visibility-type'; +import isEqual from 'lodash/isEqual'; /** * This component represents the submission form. @@ -188,6 +192,42 @@ export class SubmissionFormComponent implements OnChanges, OnDestroy { } } + /** + * Returns the visibility object of the collection section + */ + private getCollectionVisibility(): SubmissionSectionVisibility { + const submissionSectionModel: SubmissionSectionModel = + this.submissionDefinition.sections.page.find( + (section) => isEqual(section.sectionType, SectionsType.Collection) + ); + + return isNotUndefined(submissionSectionModel.visibility) ? submissionSectionModel.visibility : null; + } + + /** + * Getter to see if the collection section visibility is hidden + */ + get isSectionHidden(): boolean { + const visibility = this.getCollectionVisibility(); + return ( + hasValue(visibility) && + isEqual(visibility.main, VisibilityType.HIDDEN) && + isEqual(visibility.other, VisibilityType.HIDDEN) + ); + } + + /** + * Getter to see if the collection section visibility is readonly + */ + get isSectionReadonly(): boolean { + const visibility = this.getCollectionVisibility(); + return ( + hasValue(visibility) && + isEqual(visibility.main, VisibilityType.READONLY) && + isEqual(visibility.other, VisibilityType.READONLY) + ); + } + /** * Unsubscribe from all subscriptions, destroy instance variables * and reset submission state @@ -239,6 +279,8 @@ export class SubmissionFormComponent implements OnChanges, OnDestroy { protected getSectionsList(): Observable { return this.submissionService.getSubmissionSections(this.submissionId).pipe( filter((sections: SectionDataObject[]) => isNotEmpty(sections)), - map((sections: SectionDataObject[]) => sections)); + map((sections: SectionDataObject[]) => + sections.filter((section: SectionDataObject) => !isEqual(section.sectionType,SectionsType.Collection))), + ); } } diff --git a/src/app/submission/sections/sections-type.ts b/src/app/submission/sections/sections-type.ts index 6fb7380822..6bca8a7252 100644 --- a/src/app/submission/sections/sections-type.ts +++ b/src/app/submission/sections/sections-type.ts @@ -8,4 +8,5 @@ export enum SectionsType { AccessesCondition = 'accessCondition', SherpaPolicies = 'sherpaPolicy', Identifiers = 'identifiers', + Collection = 'collection', } diff --git a/src/app/submission/sections/visibility-type.ts b/src/app/submission/sections/visibility-type.ts new file mode 100644 index 0000000000..b2e167285c --- /dev/null +++ b/src/app/submission/sections/visibility-type.ts @@ -0,0 +1,4 @@ +export enum VisibilityType { + HIDDEN = 'HIDDEN', + READONLY = 'READONLY', +} From 8e25a02fdea46782ae6079003aceb689136d1aad Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Fri, 12 May 2023 15:38:58 +0200 Subject: [PATCH 105/425] [DURACOM-145] Fixed e2e failing tests --- cypress/e2e/my-dspace.cy.ts | 13 +++++++++++-- cypress/e2e/submission.cy.ts | 13 +++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/cypress/e2e/my-dspace.cy.ts b/cypress/e2e/my-dspace.cy.ts index 79786c298a..277146fbc5 100644 --- a/cypress/e2e/my-dspace.cy.ts +++ b/cypress/e2e/my-dspace.cy.ts @@ -88,8 +88,17 @@ describe('My DSpace page', () => { // The Submission edit form tag should be visible cy.get('ds-submission-edit').should('be.visible'); - // A Collection menu button should exist & its value should be the selected collection - cy.get('#collectionControlsMenuButton span').should('have.text', TEST_SUBMIT_COLLECTION_NAME); + // A Collection menu button should exist(based on collection visibility) & its value should be the selected collection + cy.get('#collectionControlsMenuButton span') + .should(($span) => { + if ($span.length > 0) { + // If the element exists in the DOM (it's visible or read-only) + expect($span).to.have.text(TEST_SUBMIT_COLLECTION_NAME); + } else { + // If the element doesn't exist in the DOM, the length will be 0 + expect($span).to.have.length(0); + } + }); // Now that we've created a submission, we'll test that we can go back and Edit it. // Get our Submission URL, to parse out the ID of this new submission diff --git a/cypress/e2e/submission.cy.ts b/cypress/e2e/submission.cy.ts index ed10b2d13a..0a956c2614 100644 --- a/cypress/e2e/submission.cy.ts +++ b/cypress/e2e/submission.cy.ts @@ -16,8 +16,17 @@ describe('New Submission page', () => { // The Submission edit form tag should be visible cy.get('ds-submission-edit').should('be.visible'); - // A Collection menu button should exist & it's value should be the selected collection - cy.get('#collectionControlsMenuButton span').should('have.text', TEST_SUBMIT_COLLECTION_NAME); + // A Collection menu button should exist(if it's visible or read-only) & it's value should be the selected collection + cy.get('#collectionControlsMenuButton span') + .should(($span) => { + if ($span.length > 0) { + // If the element exists in the DOM (it's visible or read-only) + expect($span).to.have.text(TEST_SUBMIT_COLLECTION_NAME); + } else { + // If the element doesn't exist in the DOM, the length will be 0 + expect($span).to.have.length(0); + } + }); // 4 sections should be visible by default cy.get('div#section_traditionalpageone').should('be.visible'); From aee6060fef4864b42a0b882350a8d8e70e93f51d Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Mon, 15 May 2023 11:12:50 +0200 Subject: [PATCH 106/425] Revert "[DURACOM-145] Fixed e2e failing tests" This reverts commit b9c7391b1452e9a79d9c5615595b08cd7ac8b14c. --- cypress/e2e/my-dspace.cy.ts | 13 ++----------- cypress/e2e/submission.cy.ts | 13 ++----------- 2 files changed, 4 insertions(+), 22 deletions(-) diff --git a/cypress/e2e/my-dspace.cy.ts b/cypress/e2e/my-dspace.cy.ts index 277146fbc5..79786c298a 100644 --- a/cypress/e2e/my-dspace.cy.ts +++ b/cypress/e2e/my-dspace.cy.ts @@ -88,17 +88,8 @@ describe('My DSpace page', () => { // The Submission edit form tag should be visible cy.get('ds-submission-edit').should('be.visible'); - // A Collection menu button should exist(based on collection visibility) & its value should be the selected collection - cy.get('#collectionControlsMenuButton span') - .should(($span) => { - if ($span.length > 0) { - // If the element exists in the DOM (it's visible or read-only) - expect($span).to.have.text(TEST_SUBMIT_COLLECTION_NAME); - } else { - // If the element doesn't exist in the DOM, the length will be 0 - expect($span).to.have.length(0); - } - }); + // A Collection menu button should exist & its value should be the selected collection + cy.get('#collectionControlsMenuButton span').should('have.text', TEST_SUBMIT_COLLECTION_NAME); // Now that we've created a submission, we'll test that we can go back and Edit it. // Get our Submission URL, to parse out the ID of this new submission diff --git a/cypress/e2e/submission.cy.ts b/cypress/e2e/submission.cy.ts index 0a956c2614..ed10b2d13a 100644 --- a/cypress/e2e/submission.cy.ts +++ b/cypress/e2e/submission.cy.ts @@ -16,17 +16,8 @@ describe('New Submission page', () => { // The Submission edit form tag should be visible cy.get('ds-submission-edit').should('be.visible'); - // A Collection menu button should exist(if it's visible or read-only) & it's value should be the selected collection - cy.get('#collectionControlsMenuButton span') - .should(($span) => { - if ($span.length > 0) { - // If the element exists in the DOM (it's visible or read-only) - expect($span).to.have.text(TEST_SUBMIT_COLLECTION_NAME); - } else { - // If the element doesn't exist in the DOM, the length will be 0 - expect($span).to.have.length(0); - } - }); + // A Collection menu button should exist & it's value should be the selected collection + cy.get('#collectionControlsMenuButton span').should('have.text', TEST_SUBMIT_COLLECTION_NAME); // 4 sections should be visible by default cy.get('div#section_traditionalpageone').should('be.visible'); From d54754f78a5c352fb1fa7eb6b5b41f499cfc0a82 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Fri, 19 May 2023 13:36:04 -0400 Subject: [PATCH 107/425] Conform to expected ngOnChanges signature; tidy up. --- .../file/section-upload-file.component.ts | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/app/submission/sections/upload/file/section-upload-file.component.ts b/src/app/submission/sections/upload/file/section-upload-file.component.ts index fb6f499833..26fb9445cb 100644 --- a/src/app/submission/sections/upload/file/section-upload-file.component.ts +++ b/src/app/submission/sections/upload/file/section-upload-file.component.ts @@ -1,4 +1,13 @@ -import { ChangeDetectorRef, Component, Input, OnChanges, OnDestroy, OnInit, ViewChild } from '@angular/core'; +import { + ChangeDetectorRef, + Component, + Input, + OnChanges, + OnDestroy, + OnInit, + SimpleChanges, + ViewChild +} from '@angular/core'; import { BehaviorSubject, Subscription } from 'rxjs'; import { filter } from 'rxjs/operators'; @@ -168,13 +177,13 @@ export class SubmissionSectionUploadFileComponent implements OnChanges, OnInit, /** * Retrieve bitstream's metadata */ - ngOnChanges() { + ngOnChanges(changes: SimpleChanges): void { if (this.availableAccessConditionOptions) { // Retrieve file state this.subscriptions.push( this.uploadService - .getFileData(this.submissionId, this.sectionId, this.fileId).pipe( - filter((bitstream) => isNotUndefined(bitstream))) + .getFileData(this.submissionId, this.sectionId, this.fileId) + .pipe(filter((bitstream) => isNotUndefined(bitstream))) .subscribe((bitstream) => { this.fileData = bitstream; } From 055ed9ba6eb9db49ec3a6e7335936087f9cc2a4d Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Fri, 19 May 2023 14:00:21 -0400 Subject: [PATCH 108/425] Fix spec broken by signature change. --- .../sections/upload/file/section-upload-file.component.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/submission/sections/upload/file/section-upload-file.component.spec.ts b/src/app/submission/sections/upload/file/section-upload-file.component.spec.ts index 4fea8d3f25..4f62ceef6c 100644 --- a/src/app/submission/sections/upload/file/section-upload-file.component.spec.ts +++ b/src/app/submission/sections/upload/file/section-upload-file.component.spec.ts @@ -175,7 +175,7 @@ describe('SubmissionSectionUploadFileComponent test suite', () => { it('should init file data properly', () => { uploadService.getFileData.and.returnValue(observableOf(fileData)); - comp.ngOnChanges(); + comp.ngOnChanges({}); expect(comp.fileData).toEqual(fileData); }); From edeea00c75d7a26fcf300aafcb8d813e40cf76af Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Fri, 19 May 2023 16:02:30 -0500 Subject: [PATCH 109/425] Fix several "potentially unsafe external link" warnings --- .../context-help-wrapper/context-help-wrapper.component.html | 2 +- .../publication-information.component.html | 4 ++-- .../publisher-policy/publisher-policy.component.html | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/shared/context-help-wrapper/context-help-wrapper.component.html b/src/app/shared/context-help-wrapper/context-help-wrapper.component.html index b031d0f42d..083b8163ff 100644 --- a/src/app/shared/context-help-wrapper/context-help-wrapper.component.html +++ b/src/app/shared/context-help-wrapper/context-help-wrapper.component.html @@ -2,7 +2,7 @@
    - {{elem.text}} + {{elem.text}} {{ elem }} diff --git a/src/app/submission/sections/sherpa-policies/publication-information/publication-information.component.html b/src/app/submission/sections/sherpa-policies/publication-information/publication-information.component.html index 3c35da8f08..534b95397e 100644 --- a/src/app/submission/sections/sherpa-policies/publication-information/publication-information.component.html +++ b/src/app/submission/sections/sherpa-policies/publication-information/publication-information.component.html @@ -23,7 +23,7 @@

    - + {{journal.url}}

    @@ -35,7 +35,7 @@

    - + {{publisher.name}}

    diff --git a/src/app/submission/sections/sherpa-policies/publisher-policy/publisher-policy.component.html b/src/app/submission/sections/sherpa-policies/publisher-policy/publisher-policy.component.html index 87370cf7e3..96e42202b3 100644 --- a/src/app/submission/sections/sherpa-policies/publisher-policy/publisher-policy.component.html +++ b/src/app/submission/sections/sherpa-policies/publisher-policy/publisher-policy.component.html @@ -8,7 +8,7 @@

    From f01c58e84dd4a7a907cc90ce45a28ee50e3eef41 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Tue, 23 May 2023 14:13:05 +0200 Subject: [PATCH 110/425] 101623: Fix BrowseResponseParsingService + Add tests for it --- .../browse-response-parsing.service.spec.ts | 64 +++++++++++++++++++ .../data/browse-response-parsing.service.ts | 4 +- .../core/data/dso-response-parsing.service.ts | 4 ++ 3 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 src/app/core/data/browse-response-parsing.service.spec.ts diff --git a/src/app/core/data/browse-response-parsing.service.spec.ts b/src/app/core/data/browse-response-parsing.service.spec.ts new file mode 100644 index 0000000000..9fa7239ef7 --- /dev/null +++ b/src/app/core/data/browse-response-parsing.service.spec.ts @@ -0,0 +1,64 @@ +import { getMockObjectCacheService } from '../../shared/mocks/object-cache.service.mock'; +import { BrowseResponseParsingService } from './browse-response-parsing.service'; +import { ObjectCacheService } from '../cache/object-cache.service'; +import { HIERARCHICAL_BROWSE_DEFINITION } from '../shared/hierarchical-browse-definition.resource-type'; +import { FLAT_BROWSE_DEFINITION } from '../shared/flat-browse-definition.resource-type'; +import { VALUE_LIST_BROWSE_DEFINITION } from '../shared/value-list-browse-definition.resource-type'; + +class TestService extends BrowseResponseParsingService { + constructor(protected objectCache: ObjectCacheService) { + super(objectCache); + } + + // Overwrite method to make it public for testing + public deserialize(obj): any { + return super.deserialize(obj); + } +} + +describe('BrowseResponseParsingService', () => { + let service: TestService; + + + beforeEach(() => { + service = new TestService(getMockObjectCacheService()); + }); + + describe('', () => { + const mockFlatBrowse = { + id: 'title', + browseType: 'flatBrowse', + type: 'browse', + }; + + const mockValueList = { + id: 'author', + browseType: 'valueList', + type: 'browse', + }; + + const mockHierarchicalBrowse = { + id: 'srsc', + browseType: 'hierarchicalBrowse', + type: 'browse', + }; + + it('should deserialize flatBrowses correctly', () => { + let deserialized = service.deserialize(mockFlatBrowse); + expect(deserialized.type).toBe(FLAT_BROWSE_DEFINITION); + expect(deserialized.id).toBe(mockFlatBrowse.id); + }); + + it('should deserialize valueList browses correctly', () => { + let deserialized = service.deserialize(mockValueList); + expect(deserialized.type).toBe(VALUE_LIST_BROWSE_DEFINITION); + expect(deserialized.id).toBe(mockValueList.id); + }); + + it('should deserialize hierarchicalBrowses correctly', () => { + let deserialized = service.deserialize(mockHierarchicalBrowse); + expect(deserialized.type).toBe(HIERARCHICAL_BROWSE_DEFINITION); + expect(deserialized.id).toBe(mockHierarchicalBrowse.id); + }); + }); +}); diff --git a/src/app/core/data/browse-response-parsing.service.ts b/src/app/core/data/browse-response-parsing.service.ts index 57b76c72a4..3681198406 100644 --- a/src/app/core/data/browse-response-parsing.service.ts +++ b/src/app/core/data/browse-response-parsing.service.ts @@ -7,7 +7,7 @@ import { import { FLAT_BROWSE_DEFINITION } from '../shared/flat-browse-definition.resource-type'; import { HierarchicalBrowseDefinition } from '../shared/hierarchical-browse-definition.model'; import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model'; -import { DSOResponseParsingService } from './dso-response-parsing.service'; +import { DspaceRestResponseParsingService } from './dspace-rest-response-parsing.service'; import { Serializer } from '../serializer'; import { BrowseDefinition } from '../shared/browse-definition.model'; import { BROWSE_DEFINITION } from '../shared/browse-definition.resource-type'; @@ -20,7 +20,7 @@ import { VALUE_LIST_BROWSE_DEFINITION } from '../shared/value-list-browse-defini @Injectable({ providedIn: 'root', }) -export class BrowseResponseParsingService extends DSOResponseParsingService { +export class BrowseResponseParsingService extends DspaceRestResponseParsingService { constructor( protected objectCache: ObjectCacheService, ) { diff --git a/src/app/core/data/dso-response-parsing.service.ts b/src/app/core/data/dso-response-parsing.service.ts index fd5a22fae9..74117e79d3 100644 --- a/src/app/core/data/dso-response-parsing.service.ts +++ b/src/app/core/data/dso-response-parsing.service.ts @@ -10,6 +10,10 @@ import { hasNoValue, hasValue } from '../../shared/empty.util'; import { DSpaceObject } from '../shared/dspace-object.model'; import { RestRequest } from './rest-request.model'; +/** + * @deprecated use DspaceRestResponseParsingService for new code, this is only left to support a + * few legacy use cases, and should get removed eventually + */ @Injectable() export class DSOResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { protected toCache = true; From 7f450320b6dcbc94eff3980d3a0cc63044791eca Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Tue, 23 May 2023 16:05:38 +0200 Subject: [PATCH 111/425] Fix circular dependency --- .../access-control-array-form.component.ts | 2 +- ...ess-control-form-container-intial-state.ts | 27 ++++++++++++++++ ...access-control-form-container.component.ts | 32 ++----------------- .../bulk-access-control.service.ts | 2 +- 4 files changed, 32 insertions(+), 31 deletions(-) create mode 100644 src/app/shared/access-control-form-container/access-control-form-container-intial-state.ts diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts index 519fc0ae3e..ec9c5c9a41 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts @@ -70,7 +70,7 @@ export class AccessControlArrayFormComponent implements OnInit, OnDestroy { * @return The form value */ getValue() { - return this.form.value.accessControl + return (this.form.value.accessControl as any[]) .filter(x => x.itemName !== null && x.itemName !== '') .map(x => ({ name: x.itemName, diff --git a/src/app/shared/access-control-form-container/access-control-form-container-intial-state.ts b/src/app/shared/access-control-form-container/access-control-form-container-intial-state.ts new file mode 100644 index 0000000000..6e19e04d84 --- /dev/null +++ b/src/app/shared/access-control-form-container/access-control-form-container-intial-state.ts @@ -0,0 +1,27 @@ +import {ListableObject} from '../object-collection/shared/listable-object.model'; + +export const accessControlInitialFormState: AccessControlFormState = { + item: { + toggleStatus: false, + accessMode: 'replace', + }, + bitstream: { + toggleStatus: false, + accessMode: 'replace', + changesLimit: 'all', // 'all' | 'selected' + selectedBitstreams: [] as ListableObject[], + }, +}; + +export interface AccessControlFormState { + item: { + toggleStatus: boolean, + accessMode: 'add' | 'replace', + }, + bitstream: { + toggleStatus: boolean, + accessMode: 'add' | 'replace', + changesLimit: string, + selectedBitstreams: ListableObject[], + } +} diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index 9394b083b1..7ebcc73ed8 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -7,7 +7,6 @@ import { BulkAccessControlService } from './bulk-access-control.service'; import { SelectableListService } from '../object-list/selectable-list/selectable-list.service'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { map, take } from 'rxjs/operators'; -import { ListableObject } from '../object-collection/shared/listable-object.model'; import { DSpaceObject } from '../../core/shared/dspace-object.model'; import { ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID, @@ -17,6 +16,7 @@ import { BulkAccessConfigDataService } from '../../core/config/bulk-access-confi import { getFirstCompletedRemoteData } from '../../core/shared/operators'; import { BulkAccessConditionOptions } from '../../core/config/models/bulk-access-condition-options.model'; import { AlertType } from '../alert/aletr-type'; +import { accessControlInitialFormState } from './access-control-form-container-intial-state'; @Component({ selector: 'ds-access-control-form-container', @@ -61,7 +61,7 @@ export class AccessControlFormContainerComponent impleme private cdr: ChangeDetectorRef ) {} - state = initialState; + state = accessControlInitialFormState; dropdownData$: Observable = this.bulkAccessConfigService.findByName('default').pipe( getFirstCompletedRemoteData(), @@ -92,7 +92,7 @@ export class AccessControlFormContainerComponent impleme reset() { this.bitstreamAccessCmp.reset(); this.itemAccessCmp.reset(); - this.state = initialState; + this.state = accessControlInitialFormState; } /** @@ -156,29 +156,3 @@ export class AccessControlFormContainerComponent impleme } - -const initialState: AccessControlFormState = { - item: { - toggleStatus: false, - accessMode: 'replace', - }, - bitstream: { - toggleStatus: false, - accessMode: 'replace', - changesLimit: 'all', // 'all' | 'selected' - selectedBitstreams: [] as ListableObject[], - }, -}; - -export interface AccessControlFormState { - item: { - toggleStatus: boolean, - accessMode: 'add' | 'replace', - }, - bitstream: { - toggleStatus: boolean, - accessMode: 'add' | 'replace', - changesLimit: string, - selectedBitstreams: ListableObject[], - } -} diff --git a/src/app/shared/access-control-form-container/bulk-access-control.service.ts b/src/app/shared/access-control-form-container/bulk-access-control.service.ts index 5302e3aa4a..51eba4275d 100644 --- a/src/app/shared/access-control-form-container/bulk-access-control.service.ts +++ b/src/app/shared/access-control-form-container/bulk-access-control.service.ts @@ -7,7 +7,7 @@ import { TranslateService } from '@ngx-translate/core'; import { ScriptDataService } from '../../core/data/processes/script-data.service'; import { ProcessParameter } from '../../process-page/processes/process-parameter.model'; -import { AccessControlFormState } from './access-control-form-container.component'; +import { AccessControlFormState } from './access-control-form-container-intial-state'; import { getFirstCompletedRemoteData } from '../../core/shared/operators'; import { RemoteData } from '../../core/data/remote-data'; import { Process } from '../../process-page/processes/process.model'; From d1c91b8bc2bc21b7478a6c46ea700a9a86fdf7eb Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Tue, 23 May 2023 17:02:10 +0200 Subject: [PATCH 112/425] 101623: Override createAndSendGetRequest in BrowseDefinitionDataService --- src/app/browse-by/browse-by.module.ts | 5 +- .../browse/browse-definition-data.service.ts | 65 +++++++++++-------- 2 files changed, 39 insertions(+), 31 deletions(-) diff --git a/src/app/browse-by/browse-by.module.ts b/src/app/browse-by/browse-by.module.ts index 25a297eb14..826868f288 100644 --- a/src/app/browse-by/browse-by.module.ts +++ b/src/app/browse-by/browse-by.module.ts @@ -19,11 +19,12 @@ const ENTRY_COMPONENTS = [ BrowseByTitlePageComponent, BrowseByMetadataPageComponent, BrowseByDatePageComponent, + BrowseByTaxonomyPageComponent, ThemedBrowseByMetadataPageComponent, ThemedBrowseByDatePageComponent, ThemedBrowseByTitlePageComponent, - + ThemedBrowseByTaxonomyPageComponent, ]; @NgModule({ @@ -36,8 +37,6 @@ const ENTRY_COMPONENTS = [ declarations: [ BrowseBySwitcherComponent, ThemedBrowseBySwitcherComponent, - BrowseByTaxonomyPageComponent, - ThemedBrowseByTaxonomyPageComponent, ...ENTRY_COMPONENTS ], exports: [ diff --git a/src/app/core/browse/browse-definition-data.service.ts b/src/app/core/browse/browse-definition-data.service.ts index a4c7bf1353..f5e67cd297 100644 --- a/src/app/core/browse/browse-definition-data.service.ts +++ b/src/app/core/browse/browse-definition-data.service.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line max-classes-per-file import { Injectable } from '@angular/core'; import { BROWSE_DEFINITION } from '../shared/browse-definition.resource-type'; import { RequestService } from '../data/request.service'; @@ -17,35 +18,39 @@ import { take } from 'rxjs/operators'; import { BrowseDefinitionRestRequest } from '../data/request.models'; import { BrowseDefinition } from '../shared/browse-definition.model'; - -class BrowseDefinitionFindAllDataImpl extends FindAllDataImpl { - /** - * Create a GET request for the given href, and send it. - * Use a GET request specific for BrowseDefinitions. - * - * @param href$ The url of browse we want to retrieve. Can be a string or - * an Observable - * @param useCachedVersionIfAvailable If this is true, the request will only be sent if there's - * no valid cached version. Defaults to true - */ - createAndSendGetRequest(href$: string | Observable, useCachedVersionIfAvailable: boolean = true) { - if (isNotEmpty(href$)) { - if (typeof href$ === 'string') { - href$ = observableOf(href$); - } - - href$.pipe( - isNotEmptyOperator(), - take(1) - ).subscribe((href: string) => { - const requestId = this.requestService.generateRequestId(); - const request = new BrowseDefinitionRestRequest(requestId, href); - if (hasValue(this.responseMsToLive)) { - request.responseMsToLive = this.responseMsToLive; - } - this.requestService.send(request, useCachedVersionIfAvailable); - }); +/** + * Create a GET request for the given href, and send it. + * Use a GET request specific for BrowseDefinitions. + */ +export const createAndSendBrowseDefinitionGetRequest = (requestService: RequestService, + responseMsToLive: number, + href$: string | Observable, + useCachedVersionIfAvailable: boolean = true): void => { + if (isNotEmpty(href$)) { + if (typeof href$ === 'string') { + href$ = observableOf(href$); } + + href$.pipe( + isNotEmptyOperator(), + take(1) + ).subscribe((href: string) => { + const requestId = requestService.generateRequestId(); + const request = new BrowseDefinitionRestRequest(requestId, href); + if (hasValue(responseMsToLive)) { + request.responseMsToLive = responseMsToLive; + } + requestService.send(request, useCachedVersionIfAvailable); + }); + } +}; + +/** + * Custom extension of {@link FindAllDataImpl} to be able to send BrowseDefinitionRestRequests + */ +class BrowseDefinitionFindAllDataImpl extends FindAllDataImpl { + createAndSendGetRequest(href$: string | Observable, useCachedVersionIfAvailable: boolean = true) { + createAndSendBrowseDefinitionGetRequest(this.requestService, this.responseMsToLive, href$, useCachedVersionIfAvailable); } } @@ -87,5 +92,9 @@ export class BrowseDefinitionDataService extends IdentifiableDataService[]): Observable>> { return this.findAllData.findAll(options, useCachedVersionIfAvailable, reRequestOnStale, ...linksToFollow); } + + createAndSendGetRequest(href$: string | Observable, useCachedVersionIfAvailable: boolean = true) { + createAndSendBrowseDefinitionGetRequest(this.requestService, this.responseMsToLive, href$, useCachedVersionIfAvailable); + } } From aee76913aac0aaf812c019ca641f7e311b0bafbf Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Tue, 23 May 2023 17:05:00 +0200 Subject: [PATCH 113/425] 101623: Replace hardcoded vocabulary with BrowseDefinition in BrowseByTaxonomyPage --- .../browse-by-taxonomy-page.component.html | 2 +- .../browse-by-taxonomy-page.component.ts | 76 ++++++++++++++++++- 2 files changed, 73 insertions(+), 5 deletions(-) diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html index 149e1e6b33..87c7937b1b 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html @@ -6,5 +6,5 @@ (deselect)="onDeselect($event)">
    - {{ 'browse.taxonomy.button' | translate }} + {{ 'browse.taxonomy.button' | translate }}
    diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts index b132f299d6..d568a97fd7 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts @@ -1,6 +1,14 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, Inject, OnDestroy } from '@angular/core'; import { VocabularyOptions } from '../../core/submission/vocabularies/models/vocabulary-options.model'; import { VocabularyEntryDetail } from '../../core/submission/vocabularies/models/vocabulary-entry-detail.model'; +import { ActivatedRoute } from '@angular/router'; +import { Observable, Subscription } from 'rxjs'; +import { BrowseDefinition } from '../../core/shared/browse-definition.model'; +import { GenericConstructor } from '../../core/shared/generic-constructor'; +import { BROWSE_BY_COMPONENT_FACTORY } from '../browse-by-switcher/browse-by-decorator'; +import { map } from 'rxjs/operators'; +import { ThemeService } from 'src/app/shared/theme-support/theme.service'; +import { HierarchicalBrowseDefinition } from '../../core/shared/hierarchical-browse-definition.model'; @Component({ selector: 'ds-browse-by-taxonomy-page', @@ -10,7 +18,7 @@ import { VocabularyEntryDetail } from '../../core/submission/vocabularies/models /** * Component for browsing items by metadata in a hierarchical controlled vocabulary */ -export class BrowseByTaxonomyPageComponent implements OnInit { +export class BrowseByTaxonomyPageComponent implements OnInit, OnDestroy { /** * The {@link VocabularyOptions} object @@ -27,8 +35,48 @@ export class BrowseByTaxonomyPageComponent implements OnInit { */ filterValues: string[]; - ngOnInit() { - this.vocabularyOptions = { name: 'srsc', closed: true }; + /** + * The facet the use when filtering + */ + facetType: string; + + /** + * The used vocabulary + */ + vocabularyName: string; + + /** + * The parameters used in the URL + */ + queryParams: any; + + /** + * Resolved browse-by component + */ + browseByComponent: Observable; + + /** + * Subscriptions to track + */ + browseByComponentSubs: Subscription[] = []; + + public constructor( protected route: ActivatedRoute, + protected themeService: ThemeService, + @Inject(BROWSE_BY_COMPONENT_FACTORY) private getComponentByBrowseByType: (browseByType, theme) => GenericConstructor) { + } + + ngOnInit(): void { + this.browseByComponent = this.route.data.pipe( + map((data: { browseDefinition: BrowseDefinition }) => { + this.getComponentByBrowseByType(data.browseDefinition.getRenderType(), this.themeService.getThemeName()); + return data.browseDefinition; + }) + ); + this.browseByComponentSubs.push(this.browseByComponent.subscribe((browseDefinition: HierarchicalBrowseDefinition) => { + this.facetType = browseDefinition.facetType; + this.vocabularyName = browseDefinition.vocabulary; + this.vocabularyOptions = { name: this.vocabularyName, closed: true }; + })); } /** @@ -41,10 +89,30 @@ export class BrowseByTaxonomyPageComponent implements OnInit { this.selectedItems.push(detail); this.filterValues = this.selectedItems .map((item: VocabularyEntryDetail) => `${item.value},equals`); + this.updateQueryParams(); } + /** + * Removes detail from selectedItems and filterValues. + * + * @param detail VocabularyEntryDetail to be removed + */ onDeselect(detail: VocabularyEntryDetail): void { this.selectedItems = this.selectedItems.filter((entry: VocabularyEntryDetail) => { return entry !== detail; }); this.filterValues = this.filterValues.filter((value: string) => { return value !== `${detail.value},equals`; }); + this.updateQueryParams(); + } + + /** + * Updates queryParams based on the current facetType and filterValues. + */ + private updateQueryParams(): void { + this.queryParams = { + ['f.' + this.facetType]: this.filterValues + }; + } + + ngOnDestroy(): void { + this.browseByComponentSubs.forEach((sub: Subscription) => sub.unsubscribe()); } } From d9b0eebc18154aaddc827bfc38a80f09ca7d95ef Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Tue, 23 May 2023 17:08:00 +0200 Subject: [PATCH 114/425] 101623: Remove hardcoded 'browse by srsc' menu option in MenuResolver --- src/app/menu.resolver.ts | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/app/menu.resolver.ts b/src/app/menu.resolver.ts index f771ef8b27..8630150c58 100644 --- a/src/app/menu.resolver.ts +++ b/src/app/menu.resolver.ts @@ -137,20 +137,6 @@ export class MenuResolver implements Resolve { } as TextMenuItemModel, } ); - menuList.push( - { - id: 'browse_global_by_srsc', - parentID: 'browse_global', - active: false, - visible: true, - index: 99, - model: { - type: MenuItemType.LINK, - text: `menu.section.browse_global_by_srsc`, - link: `/browse/srsc` - } as LinkMenuItemModel - } - ); } menuList.forEach((menuSection) => this.menuService.addSection(MenuID.PUBLIC, Object.assign(menuSection, { shouldPersistOnRouteChange: true From 2f0f69710e32412084fd94ee5a034d940146c340 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Tue, 23 May 2023 17:40:07 +0200 Subject: [PATCH 115/425] 101623: Fix browse-related tests by replacing abstract class --- src/app/browse-by/browse-by-guard.spec.ts | 4 +-- .../browse-by-switcher.component.spec.ts | 16 +++++++----- .../browse-by-taxonomy-page.component.spec.ts | 19 ++++++++++++++ src/app/core/browse/browse.service.spec.ts | 26 ++++++++++++++++--- src/app/navbar/navbar.component.spec.ts | 17 ++++++++---- 5 files changed, 64 insertions(+), 18 deletions(-) diff --git a/src/app/browse-by/browse-by-guard.spec.ts b/src/app/browse-by/browse-by-guard.spec.ts index 933c95a3cb..7fca9b15c0 100644 --- a/src/app/browse-by/browse-by-guard.spec.ts +++ b/src/app/browse-by/browse-by-guard.spec.ts @@ -2,8 +2,8 @@ import { first } from 'rxjs/operators'; import { BrowseByGuard } from './browse-by-guard'; import { of as observableOf } from 'rxjs'; import { createSuccessfulRemoteDataObject$ } from '../shared/remote-data.utils'; -import { BrowseDefinition } from '../core/shared/browse-definition.model'; import { BrowseByDataType } from './browse-by-switcher/browse-by-decorator'; +import { ValueListBrowseDefinition } from '../core/shared/value-list-browse-definition.model'; describe('BrowseByGuard', () => { describe('canActivate', () => { @@ -18,7 +18,7 @@ describe('BrowseByGuard', () => { const id = 'author'; const scope = '1234-65487-12354-1235'; const value = 'Filter'; - const browseDefinition = Object.assign(new BrowseDefinition(), { type: BrowseByDataType.Metadata, metadataKeys: ['dc.contributor'] }); + const browseDefinition = Object.assign(new ValueListBrowseDefinition(), { type: BrowseByDataType.Metadata, metadataKeys: ['dc.contributor'] }); beforeEach(() => { dsoService = { diff --git a/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.spec.ts b/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.spec.ts index c2e1c9cb68..c13405dd4d 100644 --- a/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.spec.ts +++ b/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.spec.ts @@ -3,9 +3,11 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NO_ERRORS_SCHEMA } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { BROWSE_BY_COMPONENT_FACTORY, BrowseByDataType } from './browse-by-decorator'; -import { BrowseDefinition } from '../../core/shared/browse-definition.model'; import { BehaviorSubject } from 'rxjs'; import { ThemeService } from '../../shared/theme-support/theme.service'; +import { FlatBrowseDefinition } from '../../core/shared/flat-browse-definition.model'; +import { ValueListBrowseDefinition } from '../../core/shared/value-list-browse-definition.model'; +import { NonHierarchicalBrowseDefinition } from '../../core/shared/non-hierarchical-browse-definition'; describe('BrowseBySwitcherComponent', () => { let comp: BrowseBySwitcherComponent; @@ -13,33 +15,33 @@ describe('BrowseBySwitcherComponent', () => { const types = [ Object.assign( - new BrowseDefinition(), { + new FlatBrowseDefinition(), { id: 'title', dataType: BrowseByDataType.Title, } ), Object.assign( - new BrowseDefinition(), { + new FlatBrowseDefinition(), { id: 'dateissued', dataType: BrowseByDataType.Date, metadataKeys: ['dc.date.issued'] } ), Object.assign( - new BrowseDefinition(), { + new ValueListBrowseDefinition(), { id: 'author', dataType: BrowseByDataType.Metadata, } ), Object.assign( - new BrowseDefinition(), { + new ValueListBrowseDefinition(), { id: 'subject', dataType: BrowseByDataType.Metadata, } ), ]; - const data = new BehaviorSubject(createDataWithBrowseDefinition(new BrowseDefinition())); + const data = new BehaviorSubject(createDataWithBrowseDefinition(new FlatBrowseDefinition())); const activatedRouteStub = { data @@ -70,7 +72,7 @@ describe('BrowseBySwitcherComponent', () => { comp = fixture.componentInstance; })); - types.forEach((type: BrowseDefinition) => { + types.forEach((type: NonHierarchicalBrowseDefinition) => { describe(`when switching to a browse-by page for "${type.id}"`, () => { beforeEach(() => { data.next(createDataWithBrowseDefinition(type)); diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts index bc9380d7ad..484992afbf 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts @@ -4,17 +4,36 @@ import { BrowseByTaxonomyPageComponent } from './browse-by-taxonomy-page.compone import { VocabularyEntryDetail } from '../../core/submission/vocabularies/models/vocabulary-entry-detail.model'; import { TranslateModule } from '@ngx-translate/core'; import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { BehaviorSubject } from 'rxjs'; +import { createDataWithBrowseDefinition } from '../browse-by-switcher/browse-by-switcher.component.spec'; +import { HierarchicalBrowseDefinition } from '../../core/shared/hierarchical-browse-definition.model'; +import { ThemeService } from '../../shared/theme-support/theme.service'; describe('BrowseByTaxonomyPageComponent', () => { let component: BrowseByTaxonomyPageComponent; let fixture: ComponentFixture; + let themeService: ThemeService; let detail1: VocabularyEntryDetail; let detail2: VocabularyEntryDetail; + const data = new BehaviorSubject(createDataWithBrowseDefinition(new HierarchicalBrowseDefinition())); + const activatedRouteStub = { + data + }; + beforeEach(async () => { + themeService = jasmine.createSpyObj('themeService', { + getThemeName: 'dspace', + }); + await TestBed.configureTestingModule({ imports: [ TranslateModule.forRoot() ], declarations: [ BrowseByTaxonomyPageComponent ], + providers: [ + { provide: ActivatedRoute, useValue: activatedRouteStub }, + { provide: ThemeService, useValue: themeService }, + ], schemas: [NO_ERRORS_SCHEMA] }) .compileComponents(); diff --git a/src/app/core/browse/browse.service.spec.ts b/src/app/core/browse/browse.service.spec.ts index 46ac8c44f4..0e39e53e43 100644 --- a/src/app/core/browse/browse.service.spec.ts +++ b/src/app/core/browse/browse.service.spec.ts @@ -6,13 +6,15 @@ import { getMockRequestService } from '../../shared/mocks/request.service.mock'; import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestService } from '../data/request.service'; -import { BrowseDefinition } from '../shared/browse-definition.model'; import { BrowseEntrySearchOptions } from './browse-entry-search-options.model'; import { BrowseService } from './browse.service'; import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; import { createPaginatedList, getFirstUsedArgumentOfSpyMethod } from '../../shared/testing/utils.test'; import { getMockHrefOnlyDataService } from '../../shared/mocks/href-only-data.service.mock'; import { RequestEntry } from '../data/request-entry.model'; +import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model'; +import { ValueListBrowseDefinition } from '../shared/value-list-browse-definition.model'; +import { HierarchicalBrowseDefinition } from '../shared/hierarchical-browse-definition.model'; describe('BrowseService', () => { let scheduler: TestScheduler; @@ -23,7 +25,7 @@ describe('BrowseService', () => { const browsesEndpointURL = 'https://rest.api/browses'; const halService: any = new HALEndpointServiceStub(browsesEndpointURL); const browseDefinitions = [ - Object.assign(new BrowseDefinition(), { + Object.assign(new FlatBrowseDefinition(), { id: 'date', metadataBrowse: false, sortOptions: [ @@ -50,7 +52,7 @@ describe('BrowseService', () => { items: { href: 'https://rest.api/discover/browses/dateissued/items' } } }), - Object.assign(new BrowseDefinition(), { + Object.assign(new ValueListBrowseDefinition(), { id: 'author', metadataBrowse: true, sortOptions: [ @@ -78,7 +80,23 @@ describe('BrowseService', () => { entries: { href: 'https://rest.api/discover/browses/author/entries' }, items: { href: 'https://rest.api/discover/browses/author/items' } } - }) + }), + Object.assign(new HierarchicalBrowseDefinition(), { + id: 'srsc', + browseType: 'hierarchicalBrowse', + facetType: 'subject', + vocabulary: 'srsc', + type: 'browse', + metadata: [ + 'dc.subject' + ], + _links: { + vocabulary: { 'href': 'https://rest.api/submission/vocabularies/srsc/' }, + items: { 'href': 'https://rest.api/discover/browses/srsc/items' }, + entries: { 'href': 'https://rest.api/discover/browses/srsc/entries' }, + self: { 'href': 'https://rest.api/discover/browses/srsc' } + } + }), ]; let browseDefinitionDataService; diff --git a/src/app/navbar/navbar.component.spec.ts b/src/app/navbar/navbar.component.spec.ts index ada9be9d0b..983eace055 100644 --- a/src/app/navbar/navbar.component.spec.ts +++ b/src/app/navbar/navbar.component.spec.ts @@ -16,7 +16,6 @@ import { RouterTestingModule } from '@angular/router/testing'; import { BrowseService } from '../core/browse/browse.service'; import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../shared/remote-data.utils'; import { buildPaginatedList } from '../core/data/paginated-list.model'; -import { BrowseDefinition } from '../core/shared/browse-definition.model'; import { BrowseByDataType } from '../browse-by/browse-by-switcher/browse-by-decorator'; import { Item } from '../core/shared/item.model'; import { AuthorizationDataService } from '../core/data/feature-authorization/authorization-data.service'; @@ -28,6 +27,9 @@ import { authReducer } from '../core/auth/auth.reducer'; import { provideMockStore } from '@ngrx/store/testing'; import { AuthTokenInfo } from '../core/auth/models/auth-token-info.model'; import { EPersonMock } from '../shared/testing/eperson.mock'; +import { FlatBrowseDefinition } from '../core/shared/flat-browse-definition.model'; +import { ValueListBrowseDefinition } from '../core/shared/value-list-browse-definition.model'; +import { HierarchicalBrowseDefinition } from '../core/shared/hierarchical-browse-definition.model'; let comp: NavbarComponent; let fixture: ComponentFixture; @@ -66,30 +68,35 @@ describe('NavbarComponent', () => { beforeEach(waitForAsync(() => { browseDefinitions = [ Object.assign( - new BrowseDefinition(), { + new FlatBrowseDefinition(), { id: 'title', dataType: BrowseByDataType.Title, } ), Object.assign( - new BrowseDefinition(), { + new FlatBrowseDefinition(), { id: 'dateissued', dataType: BrowseByDataType.Date, metadataKeys: ['dc.date.issued'] } ), Object.assign( - new BrowseDefinition(), { + new ValueListBrowseDefinition(), { id: 'author', dataType: BrowseByDataType.Metadata, } ), Object.assign( - new BrowseDefinition(), { + new ValueListBrowseDefinition(), { id: 'subject', dataType: BrowseByDataType.Metadata, } ), + Object.assign( + new HierarchicalBrowseDefinition(), { + id: 'srsc', + } + ), ]; initialState = { core: { From 78d5116cdb7d1d6afaef8d8b9e35b792b551e03d Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Tue, 23 May 2023 17:54:33 +0200 Subject: [PATCH 116/425] 101623: Add missing docs + Fix lint issues --- src/app/browse-by/browse-by-routing.module.ts | 2 -- src/app/core/data/browse-response-parsing.service.ts | 2 +- src/app/core/data/request.models.ts | 3 +++ src/app/core/shared/flat-browse-definition.model.ts | 3 +++ src/app/core/shared/hierarchical-browse-definition.model.ts | 3 +++ src/app/core/shared/value-list-browse-definition.model.ts | 3 +++ .../form/vocabulary-treeview/vocabulary-treeview.component.ts | 2 +- 7 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/app/browse-by/browse-by-routing.module.ts b/src/app/browse-by/browse-by-routing.module.ts index 5d3697f391..5788d3cc70 100644 --- a/src/app/browse-by/browse-by-routing.module.ts +++ b/src/app/browse-by/browse-by-routing.module.ts @@ -4,8 +4,6 @@ import { BrowseByGuard } from './browse-by-guard'; import { BrowseByDSOBreadcrumbResolver } from './browse-by-dso-breadcrumb.resolver'; import { BrowseByI18nBreadcrumbResolver } from './browse-by-i18n-breadcrumb.resolver'; import { ThemedBrowseBySwitcherComponent } from './browse-by-switcher/themed-browse-by-switcher.component'; -import { ThemedBrowseByTaxonomyPageComponent } from './browse-by-taxonomy-page/themed-browse-by-taxonomy-page.component'; -import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver'; @NgModule({ imports: [ diff --git a/src/app/core/data/browse-response-parsing.service.ts b/src/app/core/data/browse-response-parsing.service.ts index 3681198406..a568cdb617 100644 --- a/src/app/core/data/browse-response-parsing.service.ts +++ b/src/app/core/data/browse-response-parsing.service.ts @@ -15,7 +15,7 @@ import { ValueListBrowseDefinition } from '../shared/value-list-browse-definitio import { VALUE_LIST_BROWSE_DEFINITION } from '../shared/value-list-browse-definition.resource-type'; /** - * A ResponseParsingService used to parse RawRestResponse coming from the REST API to a BrowseDefinition object + * A ResponseParsingService used to parse a REST API response to a BrowseDefinition object */ @Injectable({ providedIn: 'root', diff --git a/src/app/core/data/request.models.ts b/src/app/core/data/request.models.ts index 79505a3dee..9809bc0fde 100644 --- a/src/app/core/data/request.models.ts +++ b/src/app/core/data/request.models.ts @@ -119,6 +119,9 @@ export class PatchRequest extends DSpaceRestRequest { } } +/** + * Class representing a BrowseDefinition HTTP Rest request object + */ export class BrowseDefinitionRestRequest extends DSpaceRestRequest { getResponseParser(): GenericConstructor { return BrowseResponseParsingService; diff --git a/src/app/core/shared/flat-browse-definition.model.ts b/src/app/core/shared/flat-browse-definition.model.ts index f94fa75b91..308f0c7a5b 100644 --- a/src/app/core/shared/flat-browse-definition.model.ts +++ b/src/app/core/shared/flat-browse-definition.model.ts @@ -5,6 +5,9 @@ import { FLAT_BROWSE_DEFINITION } from './flat-browse-definition.resource-type'; import { ResourceType } from './resource-type'; import { NonHierarchicalBrowseDefinition } from './non-hierarchical-browse-definition'; +/** + * BrowseDefinition model for browses of type 'flatBrowse' + */ @typedObject @inheritSerialization(NonHierarchicalBrowseDefinition) export class FlatBrowseDefinition extends NonHierarchicalBrowseDefinition { diff --git a/src/app/core/shared/hierarchical-browse-definition.model.ts b/src/app/core/shared/hierarchical-browse-definition.model.ts index 427f5e1947..ca3ed7bff0 100644 --- a/src/app/core/shared/hierarchical-browse-definition.model.ts +++ b/src/app/core/shared/hierarchical-browse-definition.model.ts @@ -6,6 +6,9 @@ import { HALLink } from './hal-link.model'; import { ResourceType } from './resource-type'; import { BrowseDefinition } from './browse-definition.model'; +/** + * BrowseDefinition model for browses of type 'hierarchicalBrowse' + */ @typedObject @inheritSerialization(BrowseDefinition) export class HierarchicalBrowseDefinition extends BrowseDefinition { diff --git a/src/app/core/shared/value-list-browse-definition.model.ts b/src/app/core/shared/value-list-browse-definition.model.ts index a42a702940..33cce82cac 100644 --- a/src/app/core/shared/value-list-browse-definition.model.ts +++ b/src/app/core/shared/value-list-browse-definition.model.ts @@ -5,6 +5,9 @@ import { VALUE_LIST_BROWSE_DEFINITION } from './value-list-browse-definition.res import { ResourceType } from './resource-type'; import { NonHierarchicalBrowseDefinition } from './non-hierarchical-browse-definition'; +/** + * BrowseDefinition model for browses of type 'valueList' + */ @typedObject @inheritSerialization(NonHierarchicalBrowseDefinition) export class ValueListBrowseDefinition extends NonHierarchicalBrowseDefinition { diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts index 2199de920e..891a825745 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts @@ -248,7 +248,7 @@ export class VocabularyTreeviewComponent implements OnDestroy, OnInit { } /** - * Method called on entry select + * Method called on entry select/deselect */ onSelect(item: VocabularyEntryDetail) { if (!this.selectedItems.includes(item.id)) { From 8a93bef98c5db3ba35e00318b1beec2c1ccbec88 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Tue, 23 May 2023 13:06:12 -0400 Subject: [PATCH 117/425] Supply a customizable themed version. --- .../file/section-upload-file.component.html | 52 +++++++++++ .../file/section-upload-file.component.scss | 0 .../file/section-upload-file.component.ts | 89 +++++++++++++++++++ src/themes/custom/lazy-theme.module.ts | 2 + 4 files changed, 143 insertions(+) create mode 100644 src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.html create mode 100644 src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.scss create mode 100644 src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.ts diff --git a/src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.html b/src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.html new file mode 100644 index 0000000000..8999853d72 --- /dev/null +++ b/src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.html @@ -0,0 +1,52 @@ + +
    +
    + + +
    +
    +
    +

    {{fileName}} ({{fileData?.sizeBytes | dsFileSize}})

    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + + + + + + diff --git a/src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.scss b/src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.ts b/src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.ts new file mode 100644 index 0000000000..00431cbbe2 --- /dev/null +++ b/src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.ts @@ -0,0 +1,89 @@ +import { + Component, Input, ViewChild +} from '@angular/core'; + +import { + SubmissionFormsModel +} from 'src/app/core/config/models/config-submission-forms.model'; +import { + SubmissionSectionUploadFileEditComponent +} from 'src/app/submission/sections/upload/file/edit/section-upload-file-edit.component'; +import { + SubmissionSectionUploadFileComponent as BaseComponent +} from 'src/app/submission/sections/upload/file/section-upload-file.component'; + +/** + * This component represents a single bitstream contained in the submission + */ +@Component({ + selector: 'ds-submission-upload-section-file', + // styleUrls: ['./section-upload-file.component.scss'], + styleUrls: ['../../../../../../../app/submission/sections/upload/file/section-upload-file.component.scss'], + // templateUrl: './section-upload-file.component.html' + templateUrl: '../../../../../../../app/submission/sections/upload/file/section-upload-file.component.html' +}) +export class SubmissionSectionUploadFileComponent + extends BaseComponent { + + /** + * The list of available access condition + * @type {Array} + */ + @Input() availableAccessConditionOptions: any[]; + + /** + * The submission id + * @type {string} + */ + @Input() collectionId: string; + + /** + * Define if collection access conditions policy type : + * POLICY_DEFAULT_NO_LIST : is not possible to define additional access group/s for the single file + * POLICY_DEFAULT_WITH_LIST : is possible to define additional access group/s for the single file + * @type {number} + */ + @Input() collectionPolicyType: number; + + /** + * The configuration for the bitstream's metadata form + * @type {SubmissionFormsModel} + */ + @Input() configMetadataForm: SubmissionFormsModel; + + /** + * The bitstream id + * @type {string} + */ + @Input() fileId: string; + + /** + * The bitstream array key + * @type {string} + */ + @Input() fileIndex: string; + + /** + * The bitstream id + * @type {string} + */ + @Input() fileName: string; + + /** + * The section id + * @type {string} + */ + @Input() sectionId: string; + + /** + * The submission id + * @type {string} + */ + @Input() submissionId: string; + + /** + * The [[SubmissionSectionUploadFileEditComponent]] reference + * @type {SubmissionSectionUploadFileEditComponent} + */ + @ViewChild(SubmissionSectionUploadFileEditComponent) fileEditComp: SubmissionSectionUploadFileEditComponent; +} diff --git a/src/themes/custom/lazy-theme.module.ts b/src/themes/custom/lazy-theme.module.ts index adf3a888c1..6f442eafcc 100644 --- a/src/themes/custom/lazy-theme.module.ts +++ b/src/themes/custom/lazy-theme.module.ts @@ -141,6 +141,7 @@ import { import { NgxGalleryModule } from '@kolkov/ngx-gallery'; import { WorkspaceItemsDeletePageComponent } from './app/workspace-items-delete-page/workspace-items-delete/workspace-items-delete.component'; import { ThumbnailComponent } from './app/thumbnail/thumbnail.component'; +import { SubmissionSectionUploadFileComponent } from './app/submission/sections/upload/file/section-upload-file.component'; const DECLARATIONS = [ FileSectionComponent, @@ -217,6 +218,7 @@ const DECLARATIONS = [ MediaViewerVideoComponent, WorkspaceItemsDeletePageComponent, ThumbnailComponent, + SubmissionSectionUploadFileComponent, ]; @NgModule({ From e7b02778cfae025a9db5805e82e46b37c8cd9a32 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 May 2023 02:15:33 +0000 Subject: [PATCH 118/425] Bump socket.io-parser from 4.2.2 to 4.2.3 Bumps [socket.io-parser](https://github.com/socketio/socket.io-parser) from 4.2.2 to 4.2.3. - [Release notes](https://github.com/socketio/socket.io-parser/releases) - [Changelog](https://github.com/socketio/socket.io-parser/blob/main/CHANGELOG.md) - [Commits](https://github.com/socketio/socket.io-parser/compare/4.2.2...4.2.3) --- updated-dependencies: - dependency-name: socket.io-parser dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d1d0f56ab5..730966fcdb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10377,9 +10377,9 @@ socket.io-client@^4.4.1: socket.io-parser "~4.2.1" socket.io-parser@~4.2.1: - version "4.2.2" - resolved "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.2.tgz" - integrity sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw== + version "4.2.3" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.3.tgz#926bcc6658e2ae0883dc9dee69acbdc76e4e3667" + integrity sha512-JMafRntWVO2DCJimKsRTh/wnqVvO4hrfwOqtO7f+uzwsQMuxO6VwImtYxaQ+ieoyshWOTJyV0fA21lccEXRPpQ== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" From 1d0df844c3388d710572cbc9a04aeb07648e2c69 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Wed, 24 May 2023 16:51:52 +0200 Subject: [PATCH 119/425] 101623: Fixes after merge --- .../metadata-values/metadata-values.component.ts | 3 ++- .../browse-link-metadata-list-element.component.ts | 3 ++- .../plain-text-metadata-list-element.component.ts | 3 ++- .../testing/browse-definition-data-service.stub.ts | 10 ++++++---- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/app/item-page/field-components/metadata-values/metadata-values.component.ts b/src/app/item-page/field-components/metadata-values/metadata-values.component.ts index 49ce453fbe..cbbae9006d 100644 --- a/src/app/item-page/field-components/metadata-values/metadata-values.component.ts +++ b/src/app/item-page/field-components/metadata-values/metadata-values.component.ts @@ -3,6 +3,7 @@ import { MetadataValue } from '../../../core/shared/metadata.models'; import { APP_CONFIG, AppConfig } from '../../../../config/app-config.interface'; import { BrowseDefinition } from '../../../core/shared/browse-definition.model'; import { hasValue } from '../../../shared/empty.util'; +import { VALUE_LIST_BROWSE_DEFINITION } from '../../../core/shared/value-list-browse-definition.resource-type'; /** * This component renders the configured 'values' into the ds-metadata-field-wrapper component. @@ -84,7 +85,7 @@ export class MetadataValuesComponent implements OnChanges { */ getQueryParams(value) { let queryParams = {startsWith: value}; - if (this.browseDefinition.metadataBrowse) { + if (this.browseDefinition.getRenderType() === VALUE_LIST_BROWSE_DEFINITION.value) { return {value: value}; } return queryParams; diff --git a/src/app/shared/object-list/metadata-representation-list-element/browse-link/browse-link-metadata-list-element.component.ts b/src/app/shared/object-list/metadata-representation-list-element/browse-link/browse-link-metadata-list-element.component.ts index 0eb0ce05b0..072601d456 100644 --- a/src/app/shared/object-list/metadata-representation-list-element/browse-link/browse-link-metadata-list-element.component.ts +++ b/src/app/shared/object-list/metadata-representation-list-element/browse-link/browse-link-metadata-list-element.component.ts @@ -2,6 +2,7 @@ import { MetadataRepresentationType } from '../../../../core/shared/metadata-rep import { Component } from '@angular/core'; import { MetadataRepresentationListElementComponent } from '../metadata-representation-list-element.component'; import { metadataRepresentationComponent } from '../../../metadata-representation/metadata-representation.decorator'; +import { VALUE_LIST_BROWSE_DEFINITION } from '../../../../core/shared/value-list-browse-definition.resource-type'; //@metadataRepresentationComponent('Publication', MetadataRepresentationType.PlainText) // For now, authority controlled fields are rendered the same way as plain text fields //@metadataRepresentationComponent('Publication', MetadataRepresentationType.AuthorityControlled) @@ -21,7 +22,7 @@ export class BrowseLinkMetadataListElementComponent extends MetadataRepresentati */ getQueryParams() { let queryParams = {startsWith: this.metadataRepresentation.getValue()}; - if (this.metadataRepresentation.browseDefinition.metadataBrowse) { + if (this.metadataRepresentation.browseDefinition.getRenderType() === VALUE_LIST_BROWSE_DEFINITION.value) { return {value: this.metadataRepresentation.getValue()}; } return queryParams; diff --git a/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.ts b/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.ts index 2d21a7afe8..c4470ae974 100644 --- a/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.ts +++ b/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.ts @@ -2,6 +2,7 @@ import { MetadataRepresentationType } from '../../../../core/shared/metadata-rep import { Component } from '@angular/core'; import { MetadataRepresentationListElementComponent } from '../metadata-representation-list-element.component'; import { metadataRepresentationComponent } from '../../../metadata-representation/metadata-representation.decorator'; +import { VALUE_LIST_BROWSE_DEFINITION } from '../../../../core/shared/value-list-browse-definition.resource-type'; @metadataRepresentationComponent('Publication', MetadataRepresentationType.PlainText) // For now, authority controlled fields are rendered the same way as plain text fields @@ -21,7 +22,7 @@ export class PlainTextMetadataListElementComponent extends MetadataRepresentatio */ getQueryParams() { let queryParams = {startsWith: this.metadataRepresentation.getValue()}; - if (this.metadataRepresentation.browseDefinition.metadataBrowse) { + if (this.metadataRepresentation.browseDefinition.getRenderType() === VALUE_LIST_BROWSE_DEFINITION.value) { return {value: this.metadataRepresentation.getValue()}; } return queryParams; diff --git a/src/app/shared/testing/browse-definition-data-service.stub.ts b/src/app/shared/testing/browse-definition-data-service.stub.ts index ec1fc2f05e..8d46fcda00 100644 --- a/src/app/shared/testing/browse-definition-data-service.stub.ts +++ b/src/app/shared/testing/browse-definition-data-service.stub.ts @@ -5,12 +5,14 @@ import { BrowseDefinition } from '../../core/shared/browse-definition.model'; import { BrowseService } from '../../core/browse/browse.service'; import { createSuccessfulRemoteDataObject } from '../remote-data.utils'; import { PageInfo } from '../../core/shared/page-info.model'; +import { FlatBrowseDefinition } from '../../core/shared/flat-browse-definition.model'; +import { ValueListBrowseDefinition } from '../../core/shared/value-list-browse-definition.model'; // This data is in post-serialized form (metadata -> metadataKeys) export const mockData: BrowseDefinition[] = [ - Object.assign(new BrowseDefinition, { + Object.assign(new FlatBrowseDefinition(), { 'id' : 'dateissued', - 'metadataBrowse' : false, + 'browseType': 'flatBrowse', 'dataType' : 'date', 'sortOptions' : EMPTY, 'order' : 'ASC', @@ -18,9 +20,9 @@ export const mockData: BrowseDefinition[] = [ 'metadataKeys' : [ 'dc.date.issued' ], '_links' : EMPTY }), - Object.assign(new BrowseDefinition, { + Object.assign(new ValueListBrowseDefinition(), { 'id' : 'author', - 'metadataBrowse' : true, + 'browseType' : 'valueList', 'dataType' : 'text', 'sortOptions' : EMPTY, 'order' : 'ASC', From efaf1d47daf9ab4481f64f2b0c639fc306ca7bde Mon Sep 17 00:00:00 2001 From: Kim Shepherd Date: Thu, 25 May 2023 10:16:55 +1200 Subject: [PATCH 120/425] item-status comp should handle missing config gracefully if the "register identifier" config is missing, simply return enabled=false rather than break the rest of the page features from loading --- .../item-status/item-status.component.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/app/item-page/edit-item-page/item-status/item-status.component.ts b/src/app/item-page/edit-item-page/item-status/item-status.component.ts index c2db518415..ce84786304 100644 --- a/src/app/item-page/edit-item-page/item-status/item-status.component.ts +++ b/src/app/item-page/edit-item-page/item-status/item-status.component.ts @@ -9,9 +9,9 @@ import { RemoteData } from '../../../core/data/remote-data'; import { getItemEditRoute, getItemPageRoute } from '../../item-page-routing-paths'; import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; import { FeatureID } from '../../../core/data/feature-authorization/feature-id'; -import { hasValue } from '../../../shared/empty.util'; +import { hasValue, isNotEmpty } from '../../../shared/empty.util'; import { - getAllSucceededRemoteDataPayload, getFirstSucceededRemoteData, getRemoteDataPayload, + getAllSucceededRemoteDataPayload, getFirstCompletedRemoteData, getFirstSucceededRemoteData, getRemoteDataPayload, } from '../../../core/shared/operators'; import { IdentifierDataService } from '../../../core/data/identifier-data.service'; import { Identifier } from '../../../shared/object-list/identifier-data/identifier.model'; @@ -105,12 +105,13 @@ export class ItemStatusComponent implements OnInit { // Observable for configuration determining whether the Register DOI feature is enabled let registerConfigEnabled$: Observable = this.configurationService.findByPropertyName('identifiers.item-status.register-doi').pipe( - getFirstSucceededRemoteData(), - getRemoteDataPayload(), - map((enabled: ConfigurationProperty) => { - if (enabled !== undefined && enabled.values) { - return true; + getFirstCompletedRemoteData(), + map((rd: RemoteData) => { + // If the config property is exposed via rest and has a value set, return it + if (rd.hasSucceeded && hasValue(rd.payload) && isNotEmpty(rd.payload.values)) { + return rd.payload.values[0] === 'true'; } + // Otherwise, return false return false; }) ); From 85f95112b3542281858cfc9db1d97aec50647c4d Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Thu, 25 May 2023 12:10:28 +0200 Subject: [PATCH 121/425] 101127: Remove invalid links in BrowseDefinition models --- src/app/core/shared/flat-browse-definition.model.ts | 9 ++++++++- .../core/shared/hierarchical-browse-definition.model.ts | 2 -- .../core/shared/non-hierarchical-browse-definition.ts | 7 ------- .../core/shared/value-list-browse-definition.model.ts | 9 ++++++++- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/app/core/shared/flat-browse-definition.model.ts b/src/app/core/shared/flat-browse-definition.model.ts index 308f0c7a5b..f275db199c 100644 --- a/src/app/core/shared/flat-browse-definition.model.ts +++ b/src/app/core/shared/flat-browse-definition.model.ts @@ -1,9 +1,10 @@ -import { inheritSerialization } from 'cerialize'; +import { inheritSerialization, deserialize } from 'cerialize'; import { typedObject } from '../cache/builders/build-decorators'; import { excludeFromEquals } from '../utilities/equals.decorators'; import { FLAT_BROWSE_DEFINITION } from './flat-browse-definition.resource-type'; import { ResourceType } from './resource-type'; import { NonHierarchicalBrowseDefinition } from './non-hierarchical-browse-definition'; +import { HALLink } from './hal-link.model'; /** * BrowseDefinition model for browses of type 'flatBrowse' @@ -26,4 +27,10 @@ export class FlatBrowseDefinition extends NonHierarchicalBrowseDefinition { getRenderType(): string { return this.dataType; } + + @deserialize + _links: { + self: HALLink; + items: HALLink; + }; } diff --git a/src/app/core/shared/hierarchical-browse-definition.model.ts b/src/app/core/shared/hierarchical-browse-definition.model.ts index ca3ed7bff0..d561fff643 100644 --- a/src/app/core/shared/hierarchical-browse-definition.model.ts +++ b/src/app/core/shared/hierarchical-browse-definition.model.ts @@ -36,8 +36,6 @@ export class HierarchicalBrowseDefinition extends BrowseDefinition { @deserialize _links: { self: HALLink; - entries: HALLink; - items: HALLink; vocabulary: HALLink; }; diff --git a/src/app/core/shared/non-hierarchical-browse-definition.ts b/src/app/core/shared/non-hierarchical-browse-definition.ts index a4f6df43d9..12f2a06333 100644 --- a/src/app/core/shared/non-hierarchical-browse-definition.ts +++ b/src/app/core/shared/non-hierarchical-browse-definition.ts @@ -22,11 +22,4 @@ export abstract class NonHierarchicalBrowseDefinition extends BrowseDefinition { @autoserialize dataType: BrowseByDataType; - - @deserialize - _links: { - self: HALLink; - entries: HALLink; - items: HALLink; - }; } diff --git a/src/app/core/shared/value-list-browse-definition.model.ts b/src/app/core/shared/value-list-browse-definition.model.ts index 33cce82cac..9bcd8f2e43 100644 --- a/src/app/core/shared/value-list-browse-definition.model.ts +++ b/src/app/core/shared/value-list-browse-definition.model.ts @@ -1,9 +1,10 @@ -import { inheritSerialization } from 'cerialize'; +import { inheritSerialization, deserialize } from 'cerialize'; import { typedObject } from '../cache/builders/build-decorators'; import { excludeFromEquals } from '../utilities/equals.decorators'; import { VALUE_LIST_BROWSE_DEFINITION } from './value-list-browse-definition.resource-type'; import { ResourceType } from './resource-type'; import { NonHierarchicalBrowseDefinition } from './non-hierarchical-browse-definition'; +import { HALLink } from './hal-link.model'; /** * BrowseDefinition model for browses of type 'valueList' @@ -26,4 +27,10 @@ export class ValueListBrowseDefinition extends NonHierarchicalBrowseDefinition { getRenderType(): string { return this.dataType; } + + @deserialize + _links: { + self: HALLink; + entries: HALLink; + }; } From 220b30bea7661b1e7af58611bd3ff3531cdb0421 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Thu, 25 May 2023 23:15:57 +0200 Subject: [PATCH 122/425] [CST-5729] Address review feedback --- .../bitstream-download-page.component.spec.ts | 4 +- .../bitstream-download-page.component.ts | 40 +++++++++------ src/app/core/data/signposting-data.service.ts | 8 +++ .../core/services/server-response.service.ts | 36 +++++++++++++ src/app/init.service.ts | 1 - .../full/full-item-page.component.spec.ts | 3 +- .../full/full-item-page.component.ts | 7 +-- .../simple/item-page.component.spec.ts | 32 +++++++++--- .../item-page/simple/item-page.component.ts | 50 ++++++++++++------- 9 files changed, 136 insertions(+), 45 deletions(-) diff --git a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.spec.ts b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.spec.ts index 66024063cd..59261e56d2 100644 --- a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.spec.ts +++ b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.spec.ts @@ -13,6 +13,7 @@ import { TranslateModule } from '@ngx-translate/core'; import { CommonModule } from '@angular/common'; import { SignpostingDataService } from '../../core/data/signposting-data.service'; import { ServerResponseService } from '../../core/services/server-response.service'; +import { PLATFORM_ID } from '@angular/core'; describe('BitstreamDownloadPageComponent', () => { let component: BitstreamDownloadPageComponent; @@ -99,7 +100,8 @@ describe('BitstreamDownloadPageComponent', () => { { provide: FileService, useValue: fileService }, { provide: HardRedirectService, useValue: hardRedirectService }, { provide: ServerResponseService, useValue: serverResponseService }, - { provide: SignpostingDataService, useValue: signpostingDataService } + { provide: SignpostingDataService, useValue: signpostingDataService }, + { provide: PLATFORM_ID, useValue: 'server' } ] }) .compileComponents(); diff --git a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts index 14245c4cd1..0becfcf473 100644 --- a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts +++ b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, Inject, OnInit, PLATFORM_ID } from '@angular/core'; import { filter, map, switchMap, take } from 'rxjs/operators'; import { ActivatedRoute, Router } from '@angular/router'; import { hasValue, isNotEmpty } from '../../shared/empty.util'; @@ -13,7 +13,7 @@ import { HardRedirectService } from '../../core/services/hard-redirect.service'; import { getForbiddenRoute } from '../../app-routing-paths'; import { RemoteData } from '../../core/data/remote-data'; import { redirectOn4xx } from '../../core/shared/authorized.operators'; -import { Location } from '@angular/common'; +import { isPlatformServer, Location } from '@angular/common'; import { SignpostingDataService } from 'src/app/core/data/signposting-data.service'; import { ServerResponseService } from 'src/app/core/services/server-response.service'; import { SignpostingLink } from '../../core/data/signposting-links.model'; @@ -39,19 +39,10 @@ export class BitstreamDownloadPageComponent implements OnInit { private hardRedirectService: HardRedirectService, private location: Location, private signpostingDataService: SignpostingDataService, - private responseService: ServerResponseService + private responseService: ServerResponseService, + @Inject(PLATFORM_ID) protected platformId: string ) { - this.route.params.subscribe(params => { - this.signpostingDataService.getLinks(params.id).pipe(take(1)).subscribe((signpostingLinks: SignpostingLink[]) => { - let links = ''; - - signpostingLinks.forEach((link: SignpostingLink) => { - links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}" ; type="${link.type}" `; - }); - - this.responseService.setHeader('Link', links); - }); - }); + this.initPageLinks(); } back(): void { @@ -101,4 +92,25 @@ export class BitstreamDownloadPageComponent implements OnInit { } }); } + + /** + * Create page links if any are retrieved by signposting endpoint + * + * @private + */ + private initPageLinks(): void { + if (isPlatformServer(this.platformId)) { + this.route.params.subscribe(params => { + this.signpostingDataService.getLinks(params.id).pipe(take(1)).subscribe((signpostingLinks: SignpostingLink[]) => { + let links = ''; + + signpostingLinks.forEach((link: SignpostingLink) => { + links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}" ; type="${link.type}" `; + }); + + this.responseService.setHeader('Link', links); + }); + }); + } + } } diff --git a/src/app/core/data/signposting-data.service.ts b/src/app/core/data/signposting-data.service.ts index e09d68974c..fca22ec383 100644 --- a/src/app/core/data/signposting-data.service.ts +++ b/src/app/core/data/signposting-data.service.ts @@ -8,6 +8,9 @@ import { HALEndpointService } from '../shared/hal-endpoint.service'; import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; import { SignpostingLink } from './signposting-links.model'; +/** + * Service responsible for handling requests related to the Signposting endpoint + */ @Injectable({ providedIn: 'root' }) @@ -16,6 +19,11 @@ export class SignpostingDataService { constructor(private restService: DspaceRestService, protected halService: HALEndpointService) { } + /** + * Retrieve the list of signposting links related to the given resource's id + * + * @param uuid + */ getLinks(uuid: string): Observable { const baseUrl = this.halService.getRootHref().replace('/api', ''); diff --git a/src/app/core/services/server-response.service.ts b/src/app/core/services/server-response.service.ts index 2268e9eb03..0b193d536c 100644 --- a/src/app/core/services/server-response.service.ts +++ b/src/app/core/services/server-response.service.ts @@ -1,7 +1,11 @@ import { RESPONSE } from '@nguniversal/express-engine/tokens'; import { Inject, Injectable, Optional } from '@angular/core'; + import { Response } from 'express'; +/** + * Service responsible to provide method to manage the response object + */ @Injectable() export class ServerResponseService { private response: Response; @@ -10,6 +14,12 @@ export class ServerResponseService { this.response = response; } + /** + * Set a status code to response + * + * @param code + * @param message + */ setStatus(code: number, message?: string): this { if (this.response) { this.response.statusCode = code; @@ -20,22 +30,48 @@ export class ServerResponseService { return this; } + /** + * Set Unauthorized status + * + * @param message + */ setUnauthorized(message = 'Unauthorized'): this { return this.setStatus(401, message); } + /** + * Set Forbidden status + * + * @param message + */ setForbidden(message = 'Forbidden'): this { return this.setStatus(403, message); } + /** + * Set Not found status + * + * @param message + */ setNotFound(message = 'Not found'): this { return this.setStatus(404, message); } + /** + * Set Internal Server Error status + * + * @param message + */ setInternalServerError(message = 'Internal Server Error'): this { return this.setStatus(500, message); } + /** + * Set a response's header + * + * @param header + * @param content + */ setHeader(header: string, content: string) { if (this.response) { this.response.setHeader(header, content); diff --git a/src/app/init.service.ts b/src/app/init.service.ts index 2bbc589cc0..9fef2ca4ed 100644 --- a/src/app/init.service.ts +++ b/src/app/init.service.ts @@ -188,7 +188,6 @@ export abstract class InitService { this.breadcrumbsService.listenForRouteChanges(); this.themeService.listenForRouteChanges(); this.menuService.listenForRouteChanges(); - // this.metadataItem.checkCurrentRoute(); } /** diff --git a/src/app/item-page/full/full-item-page.component.spec.ts b/src/app/item-page/full/full-item-page.component.spec.ts index ec4054d888..9fc078c2cd 100644 --- a/src/app/item-page/full/full-item-page.component.spec.ts +++ b/src/app/item-page/full/full-item-page.component.spec.ts @@ -2,7 +2,7 @@ import { ComponentFixture, fakeAsync, TestBed, waitForAsync } from '@angular/cor import { ItemDataService } from '../../core/data/item-data.service'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; import { TranslateLoaderMock } from '../../shared/mocks/translate-loader.mock'; -import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; +import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA, PLATFORM_ID } from '@angular/core'; import { TruncatePipe } from '../../shared/utils/truncate.pipe'; import { FullItemPageComponent } from './full-item-page.component'; import { MetadataService } from '../../core/metadata/metadata.service'; @@ -122,6 +122,7 @@ describe('FullItemPageComponent', () => { { provide: ServerResponseService, useValue: serverResponseService }, { provide: SignpostingDataService, useValue: signpostingDataService }, { provide: LinkHeadService, useValue: linkHeadService }, + { provide: PLATFORM_ID, useValue: 'server' } ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(FullItemPageComponent, { diff --git a/src/app/item-page/full/full-item-page.component.ts b/src/app/item-page/full/full-item-page.component.ts index f0100eed72..31dd2c5fc2 100644 --- a/src/app/item-page/full/full-item-page.component.ts +++ b/src/app/item-page/full/full-item-page.component.ts @@ -1,5 +1,5 @@ import { filter, map } from 'rxjs/operators'; -import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core'; +import { ChangeDetectionStrategy, Component, Inject, OnDestroy, OnInit, PLATFORM_ID } from '@angular/core'; import { ActivatedRoute, Data, Router } from '@angular/router'; import { BehaviorSubject, Observable } from 'rxjs'; @@ -54,9 +54,10 @@ export class FullItemPageComponent extends ItemPageComponent implements OnInit, protected _location: Location, protected responseService: ServerResponseService, protected signpostingDataService: SignpostingDataService, - protected linkHeadService: LinkHeadService + protected linkHeadService: LinkHeadService, + @Inject(PLATFORM_ID) protected platformId: string, ) { - super(route, router, items, authService, authorizationService, responseService, signpostingDataService, linkHeadService); + super(route, router, items, authService, authorizationService, responseService, signpostingDataService, linkHeadService, platformId); } /*** AoT inheritance fix, will hopefully be resolved in the near future **/ diff --git a/src/app/item-page/simple/item-page.component.spec.ts b/src/app/item-page/simple/item-page.component.spec.ts index 005142e3f1..dfba4bd235 100644 --- a/src/app/item-page/simple/item-page.component.spec.ts +++ b/src/app/item-page/simple/item-page.component.spec.ts @@ -2,7 +2,7 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; import { TranslateLoaderMock } from '../../shared/mocks/translate-loader.mock'; import { ItemDataService } from '../../core/data/item-data.service'; -import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; +import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA, PLATFORM_ID } from '@angular/core'; import { ItemPageComponent } from './item-page.component'; import { ActivatedRoute, Router } from '@angular/router'; import { ActivatedRouteStub } from '../../shared/testing/active-router.stub'; @@ -24,7 +24,8 @@ import { createPaginatedList } from '../../shared/testing/utils.test'; import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; import { ServerResponseService } from '../../core/services/server-response.service'; import { SignpostingDataService } from '../../core/data/signposting-data.service'; -import { LinkHeadService } from '../../core/services/link-head.service'; +import { LinkDefinition, LinkHeadService } from '../../core/services/link-head.service'; +import { SignpostingLink } from '../../core/data/signposting-links.model'; const mockItem: Item = Object.assign(new Item(), { bundles: createSuccessfulRemoteDataObject$(createPaginatedList([])), @@ -41,16 +42,18 @@ const mockWithdrawnItem: Item = Object.assign(new Item(), { const mocklink = { href: 'http://test.org', - rel: 'test', - type: 'test' + rel: 'rel1', + type: 'type1' }; const mocklink2 = { href: 'http://test2.org', - rel: 'test', - type: 'test' + rel: 'rel2', + type: 'type2' }; +const mockSignpostingLinks: SignpostingLink[] = [mocklink, mocklink2]; + describe('ItemPageComponent', () => { let comp: ItemPageComponent; let fixture: ComponentFixture; @@ -109,6 +112,7 @@ describe('ItemPageComponent', () => { { provide: ServerResponseService, useValue: serverResponseService }, { provide: SignpostingDataService, useValue: signpostingDataService }, { provide: LinkHeadService, useValue: linkHeadService }, + { provide: PLATFORM_ID, useValue: 'server' }, ], schemas: [NO_ERRORS_SCHEMA] @@ -165,6 +169,22 @@ describe('ItemPageComponent', () => { expect(linkHeadService.addTag).toHaveBeenCalledTimes(2); }); + + it('should add link tags correctly', () => { + + expect(comp.signpostingLinks).toEqual([mocklink, mocklink2]); + + // Check if linkHeadService.addTag() was called with the correct arguments + expect(linkHeadService.addTag).toHaveBeenCalledTimes(mockSignpostingLinks.length); + expect(linkHeadService.addTag).toHaveBeenCalledWith(mockSignpostingLinks[0] as LinkDefinition); + expect(linkHeadService.addTag).toHaveBeenCalledWith(mockSignpostingLinks[1] as LinkDefinition); + }); + + it('should set Link header on the server', () => { + + expect(serverResponseService.setHeader).toHaveBeenCalledWith('Link', ' ; rel="rel1" ; type="type1" , ; rel="rel2" ; type="type2" '); + }); + }); describe('when the item is withdrawn and the user is not an admin', () => { beforeEach(() => { diff --git a/src/app/item-page/simple/item-page.component.ts b/src/app/item-page/simple/item-page.component.ts index f5ee9e1e78..a11cb22883 100644 --- a/src/app/item-page/simple/item-page.component.ts +++ b/src/app/item-page/simple/item-page.component.ts @@ -1,5 +1,6 @@ -import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core'; +import { ChangeDetectionStrategy, Component, Inject, OnDestroy, OnInit, PLATFORM_ID } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; +import { isPlatformServer } from '@angular/common'; import { Observable } from 'rxjs'; import { map, take } from 'rxjs/operators'; @@ -75,25 +76,10 @@ export class ItemPageComponent implements OnInit, OnDestroy { protected authorizationService: AuthorizationDataService, protected responseService: ServerResponseService, protected signpostingDataService: SignpostingDataService, - protected linkHeadService: LinkHeadService + protected linkHeadService: LinkHeadService, + @Inject(PLATFORM_ID) protected platformId: string ) { - this.route.params.subscribe(params => { - this.signpostingDataService.getLinks(params.id).pipe(take(1)).subscribe((signpostingLinks: SignpostingLink[]) => { - let links = ''; - this.signpostingLinks = signpostingLinks; - - signpostingLinks.forEach((link: SignpostingLink) => { - links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}" ; type="${link.type}" `; - this.linkHeadService.addTag({ - href: link.href, - type: link.type, - rel: link.rel - }); - }); - - this.responseService.setHeader('Link', links); - }); - }); + this.initPageLinks(); } /** @@ -113,6 +99,32 @@ export class ItemPageComponent implements OnInit, OnDestroy { } + /** + * Create page links if any are retrieved by signposting endpoint + * + * @private + */ + private initPageLinks(): void { + this.route.params.subscribe(params => { + this.signpostingDataService.getLinks(params.id).pipe(take(1)).subscribe((signpostingLinks: SignpostingLink[]) => { + let links = ''; + this.signpostingLinks = signpostingLinks; + + signpostingLinks.forEach((link: SignpostingLink) => { + links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}" ; type="${link.type}" `; + this.linkHeadService.addTag({ + href: link.href, + type: link.type, + rel: link.rel + }); + }); + + if (isPlatformServer(this.platformId)) { + this.responseService.setHeader('Link', links); + } + }); + }); + } ngOnDestroy(): void { this.signpostingLinks.forEach((link: SignpostingLink) => { From 74a08202715008d5060cca4f0b4f531d7551616b Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Fri, 26 May 2023 13:13:03 -0400 Subject: [PATCH 123/425] Correct test fixture to match unit-under-test requirements. --- src/app/shared/mocks/submission.mock.ts | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/src/app/shared/mocks/submission.mock.ts b/src/app/shared/mocks/submission.mock.ts index b90cababcb..268ae33ab3 100644 --- a/src/app/shared/mocks/submission.mock.ts +++ b/src/app/shared/mocks/submission.mock.ts @@ -1668,11 +1668,7 @@ export const mockFileFormData = { ], endDate: [ { - value: { - year: 2019, - month: 1, - day: 16 - }, + value: new Date('2019-01-16'), language: null, authority: null, display: { @@ -1694,7 +1690,7 @@ export const mockFileFormData = { value: 'embargo', language: null, authority: null, - display: 'lease', + display: 'embargo', confidence: -1, place: 0, otherInformation: null @@ -1702,11 +1698,7 @@ export const mockFileFormData = { ], startDate: [ { - value: { - year: 2019, - month: 1, - day: 16 - }, + value: new Date('2019-01-16'), language: null, authority: null, display: { From bd477765c0fbf43936f0acbc69d7c52466463953 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Mon, 29 May 2023 10:44:03 +0200 Subject: [PATCH 124/425] Added labels and hide dates if disabled --- .../access-control-array-form.component.html | 10 ++++++++-- .../access-control-form-container-intial-state.ts | 4 ++-- .../access-control-form-container.component.ts | 8 +++++--- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html index 2e6d9c2fc1..faa28a60e8 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html @@ -9,6 +9,7 @@ style="display: grid; grid-template-columns: 1fr 1fr 1fr 50px; grid-gap: 5px">
    +
    -
    +
    +
    -
    +
    +
    + -
    + {{'access-control-option-start-date-note' | translate}}
    -
    -
    - -
    +
    +
    + {{'access-control-option-end-date-note' | translate}}
    - +
    + + +
    diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 0618596e60..2b8c64ed13 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -5358,23 +5358,53 @@ "admin.system-wide-alert.title": "System-wide Alerts", "item-access-control-title": "This form allows you to perform changes to the access condition of all the item's metadata and all its bitstreams.", + "collection-access-control-title": "This form allows you to perform changes to the access condition of all the items owned by collection under this community. Changes can be performed on the access condition for the metadata (item) or for the content (bitstream).", + "community-access-control-title": "This form allows you to perform changes to the access condition of all the items owned by collection under this community. Changes can be performed on the access condition for the metadata (item) or for the content (bitstream).", + "access-control-item-header-toggle": "Item's Metadata", + "access-control-bitstream-header-toggle": "Bitstreams", + "access-control-mode": "Mode", + "access-control-access-conditions": "Access conditions", + "access-control-no-access-conditions-warning-message": "You have not specified any access conditions, the new items access conditions will be inherited from the owning collection.", + "access-control-replace-all": "Replace access conditions", + "access-control-add-to-existing": "Add to existing ones", + "access-control-limit-to-specific": "Limit the changes to specific bitstreams", + "access-control-process-all-bitstreams": "process all the bitstreams in the item", + "access-control-bitstreams-selected": "bitstreams selected", + "access-control-reset": "Reset", + "access-control-execute": "Execute", + "access-control-add-more": "Add more", + "access-control-select-bitstreams-modal.title": "Select bitstreams", + "access-control-select-bitstreams-modal.no-items": "No items to show.", + "access-control-select-bitstreams-modal.close": "Close", + "access-control-option-label": "Access condition type", + + "access-control-option-note": "Select an access condition to apply on the bitstream once the item is deposited", + + "access-control-option-start-date": "Grant access from", + + "access-control-option-start-date-note": "Select the date from which the relate access condition is applied", + + "access-control-option-end-date": "Grant access until", + + "access-control-option-end-date-note": "Select the date until which the relate access condition is applied", + } From fb66b5abd6b55b536e5a7b953fa6754d82c6dbbd Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 26 May 2023 18:15:58 +0200 Subject: [PATCH 128/425] 102039: Use patch to delete multiple bitstreams at once --- .../core/data/bitstream-data.service.spec.ts | 77 +++++++++++++++++-- src/app/core/data/bitstream-data.service.ts | 36 ++++++++- .../item-bitstreams.component.spec.ts | 17 ++-- .../item-bitstreams.component.ts | 16 ++-- .../testing/bitstream-data-service.stub.ts | 13 ++++ 5 files changed, 130 insertions(+), 29 deletions(-) create mode 100644 src/app/shared/testing/bitstream-data-service.stub.ts diff --git a/src/app/core/data/bitstream-data.service.spec.ts b/src/app/core/data/bitstream-data.service.spec.ts index c67eaa2d68..89178f8dd2 100644 --- a/src/app/core/data/bitstream-data.service.spec.ts +++ b/src/app/core/data/bitstream-data.service.spec.ts @@ -1,13 +1,14 @@ +import { TestBed } from '@angular/core/testing'; import { BitstreamDataService } from './bitstream-data.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { RequestService } from './request.service'; import { Bitstream } from '../shared/bitstream.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { BitstreamFormatDataService } from './bitstream-format-data.service'; -import { of as observableOf } from 'rxjs'; +import { Observable, of as observableOf } from 'rxjs'; import { BitstreamFormat } from '../shared/bitstream-format.model'; import { BitstreamFormatSupportLevel } from '../shared/bitstream-format-support-level'; -import { PutRequest } from './request.models'; +import { PatchRequest, PutRequest } from './request.models'; import { getMockRequestService } from '../../shared/mocks/request.service.mock'; import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; @@ -15,6 +16,11 @@ import { getMockRemoteDataBuildService } from '../../shared/mocks/remote-data-bu import { testSearchDataImplementation } from './base/search-data.spec'; import { testPatchDataImplementation } from './base/patch-data.spec'; import { testDeleteDataImplementation } from './base/delete-data.spec'; +import { DSOChangeAnalyzer } from './dso-change-analyzer.service'; +import { NotificationsService } from '../../shared/notifications/notifications.service'; +import objectContaining = jasmine.objectContaining; +import { RemoteData } from './remote-data'; +import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; describe('BitstreamDataService', () => { let service: BitstreamDataService; @@ -25,10 +31,18 @@ describe('BitstreamDataService', () => { let rdbService: RemoteDataBuildService; const bitstreamFormatHref = 'rest-api/bitstreamformats'; - const bitstream = Object.assign(new Bitstream(), { - uuid: 'fake-bitstream', + const bitstream1 = Object.assign(new Bitstream(), { + id: 'fake-bitstream1', + uuid: 'fake-bitstream1', _links: { - self: { href: 'fake-bitstream-self' } + self: { href: 'fake-bitstream1-self' } + } + }); + const bitstream2 = Object.assign(new Bitstream(), { + id: 'fake-bitstream2', + uuid: 'fake-bitstream2', + _links: { + self: { href: 'fake-bitstream2-self' } } }); const format = Object.assign(new BitstreamFormat(), { @@ -50,7 +64,18 @@ describe('BitstreamDataService', () => { }); rdbService = getMockRemoteDataBuildService(); - service = new BitstreamDataService(requestService, rdbService, objectCache, halService, null, bitstreamFormatService, null, null); + TestBed.configureTestingModule({ + providers: [ + { provide: ObjectCacheService, useValue: objectCache }, + { provide: RequestService, useValue: requestService }, + { provide: HALEndpointService, useValue: halService }, + { provide: BitstreamFormatDataService, useValue: bitstreamFormatService }, + { provide: RemoteDataBuildService, useValue: rdbService }, + { provide: DSOChangeAnalyzer, useValue: {} }, + { provide: NotificationsService, useValue: {} }, + ], + }); + service = TestBed.inject(BitstreamDataService); }); describe('composition', () => { @@ -62,11 +87,49 @@ describe('BitstreamDataService', () => { describe('when updating the bitstream\'s format', () => { beforeEach(() => { - service.updateFormat(bitstream, format); + service.updateFormat(bitstream1, format); }); it('should send a put request', () => { expect(requestService.send).toHaveBeenCalledWith(jasmine.any(PutRequest)); }); }); + + describe('removeMultiple', () => { + function mockBuildFromRequestUUIDAndAwait(requestUUID$: string | Observable, callback: (rd?: RemoteData) => Observable, ..._linksToFollow: FollowLinkConfig[]): Observable> { + callback(); + return; + } + + beforeEach(() => { + spyOn(service, 'invalidateByHref'); + spyOn(rdbService, 'buildFromRequestUUIDAndAwait').and.callFake((requestUUID$: string | Observable, callback: (rd?: RemoteData) => Observable, ...linksToFollow: FollowLinkConfig[]) => mockBuildFromRequestUUIDAndAwait(requestUUID$, callback, ...linksToFollow)); + }); + + it('should be able to 1 bitstream', () => { + service.removeMultiple([bitstream1]); + + expect(requestService.send).toHaveBeenCalledWith(objectContaining({ + href: `${url}/bitstreams`, + body: [ + { op: 'remove', path: '/bitstreams/fake-bitstream1' }, + ], + } as PatchRequest)); + expect(service.invalidateByHref).toHaveBeenCalledWith('fake-bitstream1-self'); + }); + + it('should be able to delete multiple bitstreams', () => { + service.removeMultiple([bitstream1, bitstream2]); + + expect(requestService.send).toHaveBeenCalledWith(objectContaining({ + href: `${url}/bitstreams`, + body: [ + { op: 'remove', path: '/bitstreams/fake-bitstream1' }, + { op: 'remove', path: '/bitstreams/fake-bitstream2' }, + ], + } as PatchRequest)); + expect(service.invalidateByHref).toHaveBeenCalledWith('fake-bitstream1-self'); + expect(service.invalidateByHref).toHaveBeenCalledWith('fake-bitstream2-self'); + }); + }); }); diff --git a/src/app/core/data/bitstream-data.service.ts b/src/app/core/data/bitstream-data.service.ts index 6bdcefe187..bb4ec28166 100644 --- a/src/app/core/data/bitstream-data.service.ts +++ b/src/app/core/data/bitstream-data.service.ts @@ -1,7 +1,7 @@ import { HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { combineLatest as observableCombineLatest, Observable } from 'rxjs'; -import { map, switchMap, take } from 'rxjs/operators'; +import { find, map, switchMap, take } from 'rxjs/operators'; import { hasValue } from '../../shared/empty.util'; import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; @@ -14,7 +14,7 @@ import { Item } from '../shared/item.model'; import { BundleDataService } from './bundle-data.service'; import { buildPaginatedList, PaginatedList } from './paginated-list.model'; import { RemoteData } from './remote-data'; -import { PutRequest } from './request.models'; +import { PatchRequest, PutRequest } from './request.models'; import { RequestService } from './request.service'; import { BitstreamFormatDataService } from './bitstream-format-data.service'; import { BitstreamFormat } from '../shared/bitstream-format.model'; @@ -33,7 +33,7 @@ import { NotificationsService } from '../../shared/notifications/notifications.s import { NoContent } from '../shared/NoContent.model'; import { IdentifiableDataService } from './base/identifiable-data.service'; import { dataService } from './base/data-service.decorator'; -import { Operation } from 'fast-json-patch'; +import { Operation, RemoveOperation } from 'fast-json-patch'; /** * A service to retrieve {@link Bitstream}s from the REST API @@ -277,4 +277,34 @@ export class BitstreamDataService extends IdentifiableDataService imp deleteByHref(href: string, copyVirtualMetadata?: string[]): Observable> { return this.deleteData.deleteByHref(href, copyVirtualMetadata); } + + /** + * Delete multiple {@link Bitstream}s at once by sending a PATCH request to the backend + * + * @param bitstreams The bitstreams that should be removed + */ + removeMultiple(bitstreams: Bitstream[]): Observable> { + const operations: RemoveOperation[] = bitstreams.map((bitstream: Bitstream) => { + return { + op: 'remove', + path: `/bitstreams/${bitstream.id}`, + }; + }); + const requestId: string = this.requestService.generateRequestId(); + + const hrefObs: Observable = this.halService.getEndpoint(this.linkPath); + + hrefObs.pipe( + find((href: string) => hasValue(href)), + ).subscribe((href: string) => { + const request = new PatchRequest(requestId, href, operations); + if (hasValue(this.responseMsToLive)) { + request.responseMsToLive = this.responseMsToLive; + } + this.requestService.send(request); + }); + + return this.rdbService.buildFromRequestUUIDAndAwait(requestId, () => observableCombineLatest(bitstreams.map((bitstream: Bitstream) => this.invalidateByHref(bitstream._links.self.href)))); + } + } diff --git a/src/app/item-page/edit-item-page/item-bitstreams/item-bitstreams.component.spec.ts b/src/app/item-page/edit-item-page/item-bitstreams/item-bitstreams.component.spec.ts index 67d047d776..10e1812131 100644 --- a/src/app/item-page/edit-item-page/item-bitstreams/item-bitstreams.component.spec.ts +++ b/src/app/item-page/edit-item-page/item-bitstreams/item-bitstreams.component.spec.ts @@ -25,6 +25,7 @@ import { getMockRequestService } from '../../../shared/mocks/request.service.moc import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils'; import { createPaginatedList } from '../../../shared/testing/utils.test'; import { FieldChangeType } from '../../../core/data/object-updates/field-change-type.model'; +import { BitstreamDataServiceStub } from '../../../shared/testing/bitstream-data-service.stub'; let comp: ItemBitstreamsComponent; let fixture: ComponentFixture; @@ -71,7 +72,7 @@ let objectUpdatesService: ObjectUpdatesService; let router: any; let route: ActivatedRoute; let notificationsService: NotificationsService; -let bitstreamService: BitstreamDataService; +let bitstreamService: BitstreamDataServiceStub; let objectCache: ObjectCacheService; let requestService: RequestService; let searchConfig: SearchConfigurationService; @@ -112,9 +113,7 @@ describe('ItemBitstreamsComponent', () => { success: successNotification } ); - bitstreamService = jasmine.createSpyObj('bitstreamService', { - delete: jasmine.createSpy('delete') - }); + bitstreamService = new BitstreamDataServiceStub(); objectCache = jasmine.createSpyObj('objectCache', { remove: jasmine.createSpy('remove') }); @@ -179,15 +178,16 @@ describe('ItemBitstreamsComponent', () => { describe('when submit is called', () => { beforeEach(() => { + spyOn(bitstreamService, 'removeMultiple').and.callThrough(); comp.submit(); }); - it('should call delete on the bitstreamService for the marked field', () => { - expect(bitstreamService.delete).toHaveBeenCalledWith(bitstream2.id); + it('should call removeMultiple on the bitstreamService for the marked field', () => { + expect(bitstreamService.removeMultiple).toHaveBeenCalledWith([bitstream2]); }); - it('should not call delete on the bitstreamService for the unmarked field', () => { - expect(bitstreamService.delete).not.toHaveBeenCalledWith(bitstream1.id); + it('should not call removeMultiple on the bitstreamService for the unmarked field', () => { + expect(bitstreamService.removeMultiple).not.toHaveBeenCalledWith([bitstream1]); }); }); @@ -210,7 +210,6 @@ describe('ItemBitstreamsComponent', () => { comp.dropBitstream(bundle, { fromIndex: 0, toIndex: 50, - // eslint-disable-next-line no-empty, @typescript-eslint/no-empty-function finish: () => { done(); } diff --git a/src/app/item-page/edit-item-page/item-bitstreams/item-bitstreams.component.ts b/src/app/item-page/edit-item-page/item-bitstreams/item-bitstreams.component.ts index 0c7dfb1e34..ee53bd919c 100644 --- a/src/app/item-page/edit-item-page/item-bitstreams/item-bitstreams.component.ts +++ b/src/app/item-page/edit-item-page/item-bitstreams/item-bitstreams.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectorRef, Component, NgZone, OnDestroy } from '@angular/core'; import { AbstractItemUpdateComponent } from '../abstract-item-update/abstract-item-update.component'; import { filter, map, switchMap, take } from 'rxjs/operators'; -import { Observable, of as observableOf, Subscription, zip as observableZip } from 'rxjs'; +import { Observable, Subscription, zip as observableZip } from 'rxjs'; import { ItemDataService } from '../../../core/data/item-data.service'; import { ObjectUpdatesService } from '../../../core/data/object-updates/object-updates.service'; import { ActivatedRoute, Router } from '@angular/router'; @@ -133,20 +133,16 @@ export class ItemBitstreamsComponent extends AbstractItemUpdateComponent impleme ); // Send out delete requests for all deleted bitstreams - const removedResponses$ = removedBitstreams$.pipe( + const removedResponses$: Observable> = removedBitstreams$.pipe( take(1), - switchMap((removedBistreams: Bitstream[]) => { - if (isNotEmpty(removedBistreams)) { - return observableZip(...removedBistreams.map((bitstream: Bitstream) => this.bitstreamService.delete(bitstream.id))); - } else { - return observableOf(undefined); - } + switchMap((removedBitstreams: Bitstream[]) => { + return this.bitstreamService.removeMultiple(removedBitstreams); }) ); // Perform the setup actions from above in order and display notifications - removedResponses$.pipe(take(1)).subscribe((responses: RemoteData[]) => { - this.displayNotifications('item.edit.bitstreams.notifications.remove', responses); + removedResponses$.subscribe((responses: RemoteData) => { + this.displayNotifications('item.edit.bitstreams.notifications.remove', [responses]); this.submitting = false; }); } diff --git a/src/app/shared/testing/bitstream-data-service.stub.ts b/src/app/shared/testing/bitstream-data-service.stub.ts new file mode 100644 index 0000000000..5b05109b98 --- /dev/null +++ b/src/app/shared/testing/bitstream-data-service.stub.ts @@ -0,0 +1,13 @@ +import { Bitstream } from '../../core/shared/bitstream.model'; +import { Observable, of as observableOf } from 'rxjs'; +import { RemoteData } from '../../core/data/remote-data'; +import { NoContent } from '../../core/shared/NoContent.model'; +import { RequestEntryState } from '../../core/data/request-entry-state.model'; + +export class BitstreamDataServiceStub { + + removeMultiple(_bitstreams: Bitstream[]): Observable> { + return observableOf(new RemoteData(0, 0, 0, RequestEntryState.Success)); + } + +} From d9ed91df05be56b32c693a793e675e0a19afd32d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Gra=C3=A7a?= Date: Tue, 30 May 2023 11:46:59 +0100 Subject: [PATCH 129/425] new project metadata representation component --- ...-item-metadata-list-element.component.html | 12 +++++ ...em-metadata-list-element.component.spec.ts | 46 +++++++++++++++++++ ...ct-item-metadata-list-element.component.ts | 15 ++++++ 3 files changed, 73 insertions(+) create mode 100644 src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.html create mode 100644 src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts create mode 100644 src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts diff --git a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.html b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.html new file mode 100644 index 0000000000..f8eca9da6a --- /dev/null +++ b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.html @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts new file mode 100644 index 0000000000..a20120b691 --- /dev/null +++ b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts @@ -0,0 +1,46 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; +import { By } from '@angular/platform-browser'; + +import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; + +import { ItemMetadataRepresentation } from '../../../../core/shared/metadata-representation/item/item-metadata-representation.model'; +import { Item } from '../../../../core/shared/item.model'; +import { ProjectItemMetadataListElementComponent } from './project-item-metadata-list-element.component'; +import { MetadataValue } from '../../../../core/shared/metadata.models'; + +const projectTitle = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.'; +const mockItem = Object.assign(new Item(), { metadata: { 'dc.title': [{ value: projectTitle }] } }); +const virtMD = Object.assign(new MetadataValue(), { value: projectTitle }); + +const mockItemMetadataRepresentation = Object.assign(new ItemMetadataRepresentation(virtMD), mockItem); + +describe('ProjectItemMetadataListElementComponent', () => { + let comp: ProjectItemMetadataListElementComponent; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports:[ + NgbModule + ], + declarations: [ProjectItemMetadataListElementComponent], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(ProjectItemMetadataListElementComponent, { + set: { changeDetection: ChangeDetectionStrategy.Default } + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ProjectItemMetadataListElementComponent); + comp = fixture.componentInstance; + comp.metadataRepresentation = mockItemMetadataRepresentation; + fixture.detectChanges(); + }); + + it('should show the project\'s name as a link', () => { + const linkText = fixture.debugElement.query(By.css('a')).nativeElement.textContent; + expect(linkText).toBe(projectTitle); + }); + +}); diff --git a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts new file mode 100644 index 0000000000..7f291b0996 --- /dev/null +++ b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { metadataRepresentationComponent } from '../../../../shared/metadata-representation/metadata-representation.decorator'; +import { MetadataRepresentationType } from '../../../../core/shared/metadata-representation/metadata-representation.model'; +import { ItemMetadataRepresentationListElementComponent } from '../../../../shared/object-list/metadata-representation-list-element/item/item-metadata-representation-list-element.component'; + +@metadataRepresentationComponent('Project', MetadataRepresentationType.Item) +@Component({ + selector: 'ds-project-item-metadata-list-element', + templateUrl: './project-item-metadata-list-element.component.html' +}) +/** + * The component for displaying an item of the type Project as a metadata field + */ +export class ProjectItemMetadataListElementComponent extends ItemMetadataRepresentationListElementComponent { +} From 138fccf711ae20330f68c46e969a0709f9f07228 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Tue, 30 May 2023 14:05:44 +0200 Subject: [PATCH 130/425] 101623: Fix lint/tests after removing invalid links, Make arrows on Treeview smaller --- src/app/core/browse/browse.service.spec.ts | 6 +++--- src/app/core/shared/flat-browse-definition.model.ts | 8 ++++---- src/app/core/shared/non-hierarchical-browse-definition.ts | 3 +-- src/app/core/shared/value-list-browse-definition.model.ts | 8 ++++---- .../vocabulary-treeview.component.html | 4 ++-- 5 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/app/core/browse/browse.service.spec.ts b/src/app/core/browse/browse.service.spec.ts index 0e39e53e43..9f166e3d19 100644 --- a/src/app/core/browse/browse.service.spec.ts +++ b/src/app/core/browse/browse.service.spec.ts @@ -27,7 +27,7 @@ describe('BrowseService', () => { const browseDefinitions = [ Object.assign(new FlatBrowseDefinition(), { id: 'date', - metadataBrowse: false, + browseType: 'flatBrowse', sortOptions: [ { name: 'title', @@ -54,7 +54,7 @@ describe('BrowseService', () => { }), Object.assign(new ValueListBrowseDefinition(), { id: 'author', - metadataBrowse: true, + browseType: 'valueList', sortOptions: [ { name: 'title', @@ -158,7 +158,7 @@ describe('BrowseService', () => { describe('when getBrowseEntriesFor is called with a valid browse definition id', () => { it('should call hrefOnlyDataService.findListByHref with the expected href', () => { - const expected = browseDefinitions[1]._links.entries.href; + const expected = (browseDefinitions[1] as ValueListBrowseDefinition)._links.entries.href; scheduler.schedule(() => service.getBrowseEntriesFor(new BrowseEntrySearchOptions(browseDefinitions[1].id)).subscribe()); scheduler.flush(); diff --git a/src/app/core/shared/flat-browse-definition.model.ts b/src/app/core/shared/flat-browse-definition.model.ts index f275db199c..086fca891b 100644 --- a/src/app/core/shared/flat-browse-definition.model.ts +++ b/src/app/core/shared/flat-browse-definition.model.ts @@ -24,13 +24,13 @@ export class FlatBrowseDefinition extends NonHierarchicalBrowseDefinition { return this._links.self.href; } - getRenderType(): string { - return this.dataType; - } - @deserialize _links: { self: HALLink; items: HALLink; }; + + getRenderType(): string { + return this.dataType; + } } diff --git a/src/app/core/shared/non-hierarchical-browse-definition.ts b/src/app/core/shared/non-hierarchical-browse-definition.ts index 12f2a06333..d5481fcc8d 100644 --- a/src/app/core/shared/non-hierarchical-browse-definition.ts +++ b/src/app/core/shared/non-hierarchical-browse-definition.ts @@ -1,7 +1,6 @@ -import { autoserialize, autoserializeAs, deserialize, inheritSerialization } from 'cerialize'; +import { autoserialize, autoserializeAs, inheritSerialization } from 'cerialize'; import { SortOption } from './sort-option.model'; import { BrowseByDataType } from '../../browse-by/browse-by-switcher/browse-by-decorator'; -import { HALLink } from './hal-link.model'; import { BrowseDefinition } from './browse-definition.model'; /** diff --git a/src/app/core/shared/value-list-browse-definition.model.ts b/src/app/core/shared/value-list-browse-definition.model.ts index 9bcd8f2e43..3378263962 100644 --- a/src/app/core/shared/value-list-browse-definition.model.ts +++ b/src/app/core/shared/value-list-browse-definition.model.ts @@ -24,13 +24,13 @@ export class ValueListBrowseDefinition extends NonHierarchicalBrowseDefinition { return this._links.self.href; } - getRenderType(): string { - return this.dataType; - } - @deserialize _links: { self: HALLink; entries: HALLink; }; + + getRenderType(): string { + return this.dataType; + } } diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html index 9f14795342..9cbc0146a1 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html @@ -23,7 +23,7 @@
    diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html index b7e1330c86..7993fca011 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html +++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html @@ -5,7 +5,7 @@
    diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html index e4c9ada3ca..51bd8e53d1 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html +++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html @@ -5,7 +5,7 @@
    diff --git a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html index 9d02a5d837..ee0c98347d 100644 --- a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html +++ b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html @@ -1,7 +1,7 @@
    @@ -15,7 +15,7 @@
    @@ -15,7 +15,7 @@
    - @@ -13,7 +13,7 @@
    - diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html index fe26fd7063..53fc335213 100644 --- a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html +++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html @@ -5,7 +5,7 @@
    diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html index cf47f947cc..a77bf549f9 100644 --- a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html +++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html @@ -5,7 +5,7 @@
    diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html index 9495577c01..f2416b5c90 100644 --- a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html +++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html @@ -1,7 +1,7 @@
    diff --git a/src/app/shared/object-grid/community-grid-element/community-grid-element.component.html b/src/app/shared/object-grid/community-grid-element/community-grid-element.component.html index c448c70991..f9afd76e4d 100644 --- a/src/app/shared/object-grid/community-grid-element/community-grid-element.component.html +++ b/src/app/shared/object-grid/community-grid-element/community-grid-element.component.html @@ -1,5 +1,5 @@
    - + @@ -11,7 +11,7 @@

    {{ dsoNameService.getName(object) }}

    {{object.shortDescription}}

    diff --git a/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html index 1e46f11144..3541a52060 100644 --- a/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html @@ -1,5 +1,5 @@
    - + @@ -12,7 +12,7 @@

    {{ dsoNameService.getName(dso) }}

    {{dso.shortDescription}}

    diff --git a/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html index 96e10156c3..d042c8f150 100644 --- a/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html @@ -1,5 +1,5 @@
    - + @@ -12,7 +12,7 @@

    {{ dsoNameService.getName(dso) }}

    {{dso.shortDescription}}

    diff --git a/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html index 3d6e251238..f93032c739 100644 --- a/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html @@ -2,7 +2,7 @@
    - diff --git a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html index dcbdd77bff..93d967ceb8 100644 --- a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html +++ b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html @@ -1,5 +1,5 @@
    - + {{object.value}} diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html index 6c2cff5215..41caa74fe8 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html @@ -1,4 +1,4 @@ - + {{ dsoNameService.getName(object) }} diff --git a/src/app/shared/object-list/community-list-element/community-list-element.component.html b/src/app/shared/object-list/community-list-element/community-list-element.component.html index 462db7be91..4c4dec8213 100644 --- a/src/app/shared/object-list/community-list-element/community-list-element.component.html +++ b/src/app/shared/object-list/community-list-element/community-list-element.component.html @@ -1,4 +1,4 @@ - + {{ dsoNameService.getName(object) }} diff --git a/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html index 6856c63cce..5e54823266 100644 --- a/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html @@ -2,7 +2,7 @@
    - +
    diff --git a/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html index 037b62e736..40592b0481 100644 --- a/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html @@ -2,7 +2,7 @@
    - +
    diff --git a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html index 88d6ab6e07..23c1e19f6c 100644 --- a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html @@ -1,6 +1,6 @@
    - {{ 'submission.sections.ccLicense.link' | translate }}
    - + {{ licenseLink }}
    From 3df0286ec8e6f4ff31927b56dbb90287f786ee9e Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Thu, 4 May 2023 17:41:47 +0200 Subject: [PATCH 136/425] fix an issue where the current page would be used instead of a third party referrer --- .../services/browser.referrer.service.spec.ts | 35 +++++++++++++------ .../core/services/browser.referrer.service.ts | 18 ++++++---- 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/src/app/core/services/browser.referrer.service.spec.ts b/src/app/core/services/browser.referrer.service.spec.ts index bff01bf913..9dc8f466b6 100644 --- a/src/app/core/services/browser.referrer.service.spec.ts +++ b/src/app/core/services/browser.referrer.service.spec.ts @@ -10,7 +10,7 @@ describe(`BrowserReferrerService`, () => { beforeEach(() => { routeService = { - getPreviousUrl: () => observableOf('') + getHistory: () => observableOf([]) } as any; service = new BrowserReferrerService( { referrer: documentReferrer }, @@ -20,12 +20,9 @@ describe(`BrowserReferrerService`, () => { }); describe(`getReferrer`, () => { - let prevUrl: string; - - describe(`when getPreviousUrl is an empty string`, () => { + describe(`when the history is an empty`, () => { beforeEach(() => { - prevUrl = ''; - spyOn(routeService, 'getPreviousUrl').and.returnValue(observableOf(prevUrl)); + spyOn(routeService, 'getHistory').and.returnValue(observableOf([])); }); it(`should return document.referrer`, (done: DoneFn) => { @@ -36,13 +33,31 @@ describe(`BrowserReferrerService`, () => { }); }); - describe(`when getPreviousUrl is not empty`, () => { + describe(`when the history only contains the current route`, () => { beforeEach(() => { - prevUrl = '/some/local/route'; - spyOn(routeService, 'getPreviousUrl').and.returnValue(observableOf(prevUrl)); + spyOn(routeService, 'getHistory').and.returnValue(observableOf(['/current/route'])); }); - it(`should return the value emitted by getPreviousUrl combined with the origin from HardRedirectService`, (done: DoneFn) => { + it(`should return document.referrer`, (done: DoneFn) => { + service.getReferrer().subscribe((emittedReferrer: string) => { + expect(emittedReferrer).toBe(documentReferrer); + done(); + }); + }); + }); + + describe(`when the history contains multiple routes`, () => { + const prevUrl = '/the/route/we/need'; + beforeEach(() => { + spyOn(routeService, 'getHistory').and.returnValue(observableOf([ + '/first/route', + '/second/route', + prevUrl, + '/current/route' + ])); + }); + + it(`should return the last route before the current one combined with the origin from HardRedirectService`, (done: DoneFn) => { service.getReferrer().subscribe((emittedReferrer: string) => { expect(emittedReferrer).toBe(origin + prevUrl); done(); diff --git a/src/app/core/services/browser.referrer.service.ts b/src/app/core/services/browser.referrer.service.ts index 1bf1cf2d4a..5aae750599 100644 --- a/src/app/core/services/browser.referrer.service.ts +++ b/src/app/core/services/browser.referrer.service.ts @@ -1,7 +1,7 @@ import { ReferrerService } from './referrer.service'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { isEmpty } from '../../shared/empty.util'; +import { isEmpty, hasNoValue } from '../../shared/empty.util'; import { URLCombiner } from '../url-combiner/url-combiner'; import { Inject, Injectable } from '@angular/core'; import { DOCUMENT } from '@angular/common'; @@ -33,13 +33,19 @@ export class BrowserReferrerService extends ReferrerService { * in the store yet, document.referrer will be used */ public getReferrer(): Observable { - return this.routeService.getPreviousUrl().pipe( - map((prevUrl: string) => { - // if we don't have anything in the history yet, return document.referrer - // (note that that may be empty too, e.g. if you've just opened a new browser tab) - if (isEmpty(prevUrl)) { + return this.routeService.getHistory().pipe( + map((history: string[]) => { + const currentURL = history[history.length - 1]; + // if the current URL isn't set yet, or the only URL in the history is the current one, + // return document.referrer (note that that may be empty too, e.g. if you've just opened a + // new browser tab) + if (hasNoValue(currentURL) || history.every((url: string) => url === currentURL)) { return this.document.referrer; } else { + // reverse the history + const reversedHistory = [...history].reverse(); + // and find the first URL that differs from the current one + const prevUrl = reversedHistory.find((url: string) => url !== currentURL); return new URLCombiner(this.hardRedirectService.getCurrentOrigin(), prevUrl).toString(); } }) From 5b37101bb9f99597c0b84a231ab0d91b2abd1656 Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Tue, 30 May 2023 17:17:54 +0200 Subject: [PATCH 137/425] add the rel="noreferrer" attribute when target="_blank" --- .../journal-issue-search-result-grid-element.component.html | 4 ++-- .../journal-volume-search-result-grid-element.component.html | 4 ++-- .../journal/journal-search-result-grid-element.component.html | 4 ++-- .../journal-issue-search-result-list-element.component.html | 2 +- .../journal-volume-search-result-list-element.component.html | 2 +- .../journal/journal-search-result-list-element.component.html | 2 +- .../org-unit-search-result-grid-element.component.html | 4 ++-- .../person/person-search-result-grid-element.component.html | 4 ++-- .../project/project-search-result-grid-element.component.html | 4 ++-- .../org-unit-search-result-list-element.component.html | 2 +- .../person/person-search-result-list-element.component.html | 2 +- .../project/project-search-result-list-element.component.html | 2 +- .../collection-grid-element.component.html | 4 ++-- .../community-grid-element.component.html | 4 ++-- .../collection-search-result-grid-element.component.html | 4 ++-- .../community-search-result-grid-element.component.html | 4 ++-- .../item/item-search-result-grid-element.component.html | 4 ++-- .../browse-entry-list-element.component.html | 2 +- .../collection-list-element.component.html | 2 +- .../community-list-element.component.html | 2 +- .../collection-search-result-list-element.component.html | 2 +- .../community-search-result-list-element.component.html | 2 +- .../item/item-search-result-list-element.component.html | 2 +- 23 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html index a54c78fb78..82f9a695a2 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html +++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html @@ -5,7 +5,7 @@
    diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html index 0ae775a9de..9a3cc4cfe8 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html +++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html @@ -5,7 +5,7 @@
    diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html index e71049bdbc..35dbe0b501 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html +++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html @@ -5,7 +5,7 @@
    diff --git a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html index a51f55f5a1..33f47edf5c 100644 --- a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html +++ b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html @@ -1,6 +1,6 @@ - - - diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html index 7dafbf0dc2..809a00d07c 100644 --- a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html +++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html @@ -5,7 +5,7 @@
    diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html index 54f7d73cdc..8323cb4f67 100644 --- a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html +++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html @@ -5,7 +5,7 @@
    diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html index 52273d18aa..b4a7a259ab 100644 --- a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html +++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html @@ -1,6 +1,6 @@ - - - - + @@ -11,7 +11,7 @@

    {{object.name}}

    {{object.shortDescription}}

    - View + View
    diff --git a/src/app/shared/object-grid/community-grid-element/community-grid-element.component.html b/src/app/shared/object-grid/community-grid-element/community-grid-element.component.html index 9049d8ad18..3b401d8b22 100644 --- a/src/app/shared/object-grid/community-grid-element/community-grid-element.component.html +++ b/src/app/shared/object-grid/community-grid-element/community-grid-element.component.html @@ -1,5 +1,5 @@
    - + @@ -11,7 +11,7 @@

    {{object.name}}

    {{object.shortDescription}}

    - View + View
    diff --git a/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html index e452353a95..8d6e6337b8 100644 --- a/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html @@ -1,5 +1,5 @@
    - + @@ -12,7 +12,7 @@

    {{dso.name}}

    {{dso.shortDescription}}

    - View + View
    diff --git a/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html index 4674d3d750..f987284204 100644 --- a/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html @@ -1,5 +1,5 @@
    - + @@ -12,7 +12,7 @@

    {{dso.name}}

    {{dso.shortDescription}}

    - View + View
    diff --git a/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html index 8d4421a15c..bc691e0295 100644 --- a/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html @@ -3,7 +3,7 @@
    - diff --git a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html index 99d79f3670..79575fd4d9 100644 --- a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html +++ b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html @@ -1,5 +1,5 @@
    - + {{object.value}} diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html index 3f2cff33c2..aeefcd6e65 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html @@ -1,4 +1,4 @@ - + {{object.name}} diff --git a/src/app/shared/object-list/community-list-element/community-list-element.component.html b/src/app/shared/object-list/community-list-element/community-list-element.component.html index fca6ff77c2..88aacb94db 100644 --- a/src/app/shared/object-list/community-list-element/community-list-element.component.html +++ b/src/app/shared/object-list/community-list-element/community-list-element.component.html @@ -1,4 +1,4 @@ - + {{object.name}} diff --git a/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html index e85667382c..7874d33d21 100644 --- a/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html @@ -1,4 +1,4 @@ - +
    diff --git a/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html index bba6bf2c5e..a28a0b6920 100644 --- a/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html @@ -1,4 +1,4 @@ - +
    diff --git a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html index a12989ada3..284885e760 100644 --- a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html @@ -1,7 +1,7 @@ - Date: Tue, 30 May 2023 22:09:59 +0100 Subject: [PATCH 138/425] Contribution to the Portuguese (pt-PT) translation of DSpace v7.5 Extended revision of the Portuguese (pt-PT) translation of DSpace v7.5. This version adds new message keys, reordered the message keys accordingly to the authoritative master (en.json5) and adds missing or not found translation keys (mentioned in the last section of the file). --- src/assets/i18n/pt-PT.json5 | 4704 ++++++++++++++++++++++++++--------- 1 file changed, 3526 insertions(+), 1178 deletions(-) diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index c0327c4b54..17477285af 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -1,271 +1,97 @@ { -// NOTE 1 - Doesn't exist on en_EN +// Dspace v7.5 > i18n pt-PT > reviewed 30-05-2023 -// "repository.title.prefixDSpace": "DSpace ::", -"repository.title.prefixDSpace": "DSpace ::", - -// "collection.edit.item-mapper-search-form.placeholder": "Search Item to Map...", -"collection.edit.item-mapper-search-form.placeholder": "Pesquisar Item a Mapear...", - -// "idle.modal.header":"Your Session is About to Expire!", -"idle.modal.header":"A sua sessão está prestes a expirar!", - -// "idle.modal.info":"Your session is about to expire, would you like to logout or continue the session?", -"idle.modal.info":"A sua sessão está prestes a expirar, pretende sair ou continuar a sessão?", - -// "idle.modal.log-out":"Logout", -"idle.modal.log-out":"Sair", - -// "idle.modal.extend-session":"Continue Session", -"idle.modal.extend-session":"Continuar a Sessão", - - - - - -// NOTE 2 - Add to other languages - needed for OpenAIRE compliance - relations between entities - -// "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "New Entity Added!", -"submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "Nova Entidade Adicionada!", - -// "item.preview.project.funder.name": "Funder", -"item.preview.project.funder.name": "Financiador", - -// "item.preview.project.funder.identifier": "Funder Identifier", -"item.preview.project.funder.identifier": "Identificador do Financiador", - -// "item.preview.oaire.awardNumber": "Funding ID", -"item.preview.oaire.awardNumber": "ID de Financiamento", - -// "item.preview.dc.title.alternative": "Acronym", -"item.preview.dc.title.alternative": "Acrónimo", - -// "item.preview.dc.coverage.spatial": "Jurisdiction", -"item.preview.dc.coverage.spatial": "Jurisdição", - -// "item.preview.oaire.fundingStream": "Funding Stream", -"item.preview.oaire.fundingStream": "Linha de Financiamento", - -// "submission.import-external.source.openAIREFunding": "Funding OpenAIRE API", -"submission.import-external.source.openAIREFunding": "Financiamento API OpenAIRE", - -// "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Project", -"submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Projeto", - -// "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Project", -"submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Projeto", - -// "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Funding OpenAIRE API", -"submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Financiamento API OpenAIRE", - -// "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Funding OpenAIRE API", -"submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Financiamento API OpenAIRE", - -// "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Funding OpenAIRE API", -"submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Financiamento API OpenAIRE", - -// "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Projeto", -"submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Projeto", - -// "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projects", -"submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projetos", - -// "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projects", -"submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projetos", - -// "relationships.isContributorOf.OrgUnit": "Contributor (Organizational Unit)", -"relationships.isContributorOf.OrgUnit": "Contribuidor (Unidade organizacional)", - -// "relationships.isContributorOf.Person": "Contributor", -"relationships.isContributorOf.Person": "Contribuidor", - -// "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Funder of the Project", -"submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Financiador de Projeto", - -// "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Funder of the Project", -"submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Financiador de Projeto", - -// "relationships.isFundingAgencyOf.OrgUnit": "Funder", -"relationships.isFundingAgencyOf.OrgUnit": "Financiador", - - - - - - - - -// Other strings - -//"submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Search...", -"submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Pesquisar...", - -// "submission.general.info.saved": "Saved", -"submission.general.info.saved": "Informação Guardada", - -// "bitstream.edit.authorizations.link": "Edit bitstream's Policies", -"bitstream.edit.authorizations.link": "Editar Polítcas de Ficheiros", - -// "bitstream.edit.return": "Back", -"bitstream.edit.return": "Voltar", - -// "submission.edit.breadcrumbs": "Edit Submission", -"submission.edit.breadcrumbs": "Editar Submissão", - -// "search.filters.filter.subject.label": "Search subject", -"search.filters.filter.subject.label": "Pesquisar Assunto", - -// "search.filters.filter.entityType.label": "Search item type", -"search.filters.filter.entityType.label": "Pesquisar Tipo", - -// "search.filters.filter.author.label": "Search author name", -"search.filters.filter.author.label": "Pesquisar Autor", - -// "sorting.dc.date.accessioned.ASC": "Accessioned Date Ascending", -"sorting.dc.date.accessioned.ASC": "Data de Disponibilização Ascendente", - -// "sorting.dc.date.accessioned.DESC": "Accessioned Date Descending", -"sorting.dc.date.accessioned.DESC": "Data de Disponibilização Descendente", - -// "search.search-form.placeholder": "Search the repository ...", -"search.search-form.placeholder": "Pesquisar ...", - -// "item.edit.item-mapper.search-form.placeholder": "Search collections...", -"item.edit.item-mapper.search-form.placeholder": "Pesquisar coleções...", - -// "item.edit.return": "Back", -"item.edit.return": "Voltar", - -// "repository.title.prefix": "DSpace Angular :: ", -"repository.title.prefix": "DSpace ::", - - -// "thumbnail.person.placeholder": "No Profile Picture Available", -"thumbnail.person.placeholder": "Sem Fotografia de Perfil", - -// "admin.access-control.groups.breadcrumbs": "Groups", -"admin.access-control.groups.breadcrumbs": "Grupos", - -// "admin.access-control.groups.search.placeholder": "Search groups...", -"admin.access-control.groups.search.placeholder": "Pesquisar Grupos...", - -// "admin.access-control.epeople.breadcrumbs": "EPeople", -"admin.access-control.epeople.breadcrumbs": "Utilizador", - -// "admin.access-control.epeople.search.placeholder": "Search people...", -"admin.access-control.epeople.search.placeholder": "Pesquisar Utilizadores...", - -// "admin.access-control.epeople.form.return": "Back", -"admin.access-control.epeople.form.return": "Voltar", - -// "submission.submit.breadcrumbs": "New submission", -"submission.submit.breadcrumbs": "Nova Submissão", - -// "search.filters.filter.namedresourcetype.label": "Search status", -"search.filters.filter.namedresourcetype.label": "Pesquisar Estado", - -// "sorting.dc.date.issued.ASC": "Date Issued Ascending", -"sorting.dc.date.issued.ASC": "Data de Publicação Ascendente", - -// "sorting.dc.date.issued.DESC": "Date Issued Descending", -"sorting.dc.date.issued.DESC": "Data de Publicação Descendente", - -// "sorting.score.ASC": "Least Relevant", -"sorting.score.ASC": "Menos Relevante", - -// "search.filters.filter.dateIssued.min.label": "Start", -"search.filters.filter.dateIssued.min.label": "Início", - -// "search.filters.filter.dateIssued.max.label": "End", -"search.filters.filter.dateIssued.max.label": "Fim", - -// "search.filters.search.submit": "Submit", -"search.filters.search.submit": "Enviar", - -// "default.search.results.head": "Search Results", -"default.search.results.head": "Resultados da Pesquisa", - -// "communityList.breadcrumbs": "Community List", -"communityList.breadcrumbs": "Lista de Comunidades", - -// "browse.previous.button": "Previous", -"browse.previous.button": "Anterior", - -// "browse.next.button": "Next", -"browse.next.button": "Próximo", - -// "pagination.options.description": "Pagination options", -"pagination.options.description": "Opções de Paginação", - -// "mydspace.breadcrumbs": "MyDSpace", -"mydspace.breadcrumbs": "Área Pessoal", - -// "thumbnail.default.placeholder": "No Thumbnail Available", -"thumbnail.default.placeholder": "Sem Miniatura", - -// "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Search...", -"submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Pesquisar ...", - -// "home.search-form.placeholder": "Search the repository ...", -"home.search-form.placeholder": "Pesquisar ...", - -// "mydspace.search-form.placeholder": "Search in mydspace...", -"mydspace.search-form.placeholder": "Pesquisar na Área Pessoal ...", - - -// OLD strings // "401.help": "You're not authorized to access this page. You can use the button below to get back to the home page.", - "401.help": "Não está autorizado a aceder a esta página. Use o botão abaixo para regressar à página inicial.", + "401.help": "Não está autorizado a aceder a esta página. Pode utilizar o botão em baixo para voltar à página de início.", // "401.link.home-page": "Take me to the home page", - "401.link.home-page": "Regresso à página inicial", - + "401.link.home-page": "Voltar à página de início", + // "401.unauthorized": "unauthorized", - "401.unauthorized": "Não Autorizado", - + "401.unauthorized": "Não autorizado", + // "403.help": "You don't have permission to access this page. You can use the button below to get back to the home page.", - "403.help": "Não está autorizado a aceder a esta página. Use o botão abaixo para regressar à página inicial.", - + "403.help": "Não possui permissões para aceder a esta página. Pode utilizar o botão em baixo para voltar à página de início.", + // "403.link.home-page": "Take me to the home page", - "403.link.home-page": "Regresso à página inicial", - + "403.link.home-page": "Voltar à página de início", + // "403.forbidden": "forbidden", - "403.forbidden": "Não Autorizado", + "403.forbidden": "Proibido", + + // "500.page-internal-server-error": "Service Unavailable", + "500.page-internal-server-error": "Serviço indisponível", + // "500.help": "The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.", + "500.help": "O servidor encontra-se temporariamete indisponível para responder ao seu pedido, devido a processos de manutenção em curso ou capacidade de resposta. Por favor tente mais tarde.", + + // "500.link.home-page": "Take me to the home page", + "500.link.home-page": "Voltar à página de início", + // "404.help": "We can't find the page you're looking for. The page may have been moved or deleted. You can use the button below to get back to the home page. ", - "404.help": "Não pudemos encontrar a página pela qual procura. A página pode ter sido movida ou apagada. Você pode utilizar o botão abaixo para voltar a página inicial. ", - + "404.help": "Não encontramos a página que procura. A página pode ter sido movida ou eliminada. Pode utilizar o botão em baixo para voltar à página de início. ", + // "404.link.home-page": "Take me to the home page", - "404.link.home-page": "Leve-me a página inicial", + "404.link.home-page": "Voltar à página de início", // "404.page-not-found": "page not found", - "404.page-not-found": "Página não encontrada", + "404.page-not-found": "página não encontrada", + + // "error-page.description.401": "unauthorized", + "error-page.description.401": "Não autorizado", + // "error-page.description.403": "forbidden", + "error-page.description.403": "Proibido", + + // "error-page.description.500": "Service Unavailable", + "error-page.description.500": "Serviço indisponível", + + // "error-page.description.404": "page not found", + "error-page.description.404": "página não encontrada", + + // "error-page.orcid.generic-error": "An error occurred during login via ORCID. Make sure you have shared your ORCID account email address with DSpace. If the error persists, contact the administrator", + "error-page.orcid.generic-error": "Ocorreu um erro com a sua autenticação via ORCID. Certifique-se que partilhou o seu endereço de email associado à sua conta ORCID com o repositório. Se o erro persistir, por favor contacte o administrador do sistema.", + + // "access-status.embargo.listelement.badge": "Embargo", + "access-status.embargo.listelement.badge": "Embargado", + + // "access-status.metadata.only.listelement.badge": "Metadata only", + "access-status.metadata.only.listelement.badge": "Apenas Metadados", + + // "access-status.open.access.listelement.badge": "Open Access", + "access-status.open.access.listelement.badge": "Acesso Aberto", + + // "access-status.restricted.listelement.badge": "Restricted", + "access-status.restricted.listelement.badge": "Acesso Restrito", + + // "access-status.unknown.listelement.badge": "Unknown", + "access-status.unknown.listelement.badge": "Desconhecido", + // "admin.curation-tasks.breadcrumbs": "System curation tasks", - "admin.curation-tasks.breadcrumbs": "Tarefas de Curadoria", + "admin.curation-tasks.breadcrumbs": "Tarefas de curadoria", // "admin.curation-tasks.title": "System curation tasks", - "admin.curation-tasks.title": "Tarefas de Curadoria", - + "admin.curation-tasks.title": "Tarefas de curadoria", + // "admin.curation-tasks.header": "System curation tasks", - "admin.curation-tasks.header": "Tarefas de Curadoria", - + "admin.curation-tasks.header": "Tarefas de curadoria", + // "admin.registries.bitstream-formats.breadcrumbs": "Format registry", - "admin.registries.bitstream-formats.breadcrumbs": "Registo de Formatos de Ficheiro", + "admin.registries.bitstream-formats.breadcrumbs": "Registo de formatos", // "admin.registries.bitstream-formats.create.breadcrumbs": "Bitstream format", - "admin.registries.bitstream-formats.create.breadcrumbs": "Registo de Formatos de Ficheiro", + "admin.registries.bitstream-formats.create.breadcrumbs": "Registo de formatos de ficheiro", // "admin.registries.bitstream-formats.create.failure.content": "An error occurred while creating the new bitstream format.", - "admin.registries.bitstream-formats.create.failure.content": "Um erro ocorreu durante a criação do novo formato de ficheiro.", + "admin.registries.bitstream-formats.create.failure.content": "Ocorreu um erro durante a criação do novo formato de ficheiro.", // "admin.registries.bitstream-formats.create.failure.head": "Failure", "admin.registries.bitstream-formats.create.failure.head": "Falha", // "admin.registries.bitstream-formats.create.head": "Create Bitstream format", - "admin.registries.bitstream-formats.create.head": "Criar formato de Ficheiro", + "admin.registries.bitstream-formats.create.head": "Criar formato de ficheiro", // "admin.registries.bitstream-formats.create.new": "Add a new bitstream format", "admin.registries.bitstream-formats.create.new": "Adicionar um novo formato de ficheiro", @@ -289,10 +115,10 @@ "admin.registries.bitstream-formats.delete.success.head": "Sucesso", // "admin.registries.bitstream-formats.description": "This list of bitstream formats provides information about known formats and their support level.", - "admin.registries.bitstream-formats.description": "Esta lista de formatos de ficheiro apresenta informações sobre formatos de ficheiros conhecidos e os seus níveis de suporte.", + "admin.registries.bitstream-formats.description": "Esta lista de formatos de ficheiro apresenta informações sobre formatos conhecidos e os seus níveis de suporte.", // "admin.registries.bitstream-formats.edit.breadcrumbs": "Bitstream format", - "admin.registries.bitstream-formats.edit.breadcrumbs": "Formatos de Ficheiro", + "admin.registries.bitstream-formats.edit.breadcrumbs": "Formatos de ficheiro", // "admin.registries.bitstream-formats.edit.description.hint": "", "admin.registries.bitstream-formats.edit.description.hint": "", @@ -319,7 +145,7 @@ "admin.registries.bitstream-formats.edit.head": "Formato de bitstream: {{ format }}", // "admin.registries.bitstream-formats.edit.internal.hint": "Formats marked as internal are hidden from the user, and used for administrative purposes.", - "admin.registries.bitstream-formats.edit.internal.hint": "Formatos marcados como internos são ocultos para o Utilizador, usados por motivos administrativos.", + "admin.registries.bitstream-formats.edit.internal.hint": "Formatos marcados como internos são ocultos para o utilizador, usados por motivos administrativos.", // "admin.registries.bitstream-formats.edit.internal.label": "Internal", "admin.registries.bitstream-formats.edit.internal.label": "Interno", @@ -349,7 +175,7 @@ "admin.registries.bitstream-formats.edit.supportLevel.label": "Nível de suporte", // "admin.registries.bitstream-formats.head": "Bitstream Format Registry", - "admin.registries.bitstream-formats.head": "Registo de Formato de Ficheiro", + "admin.registries.bitstream-formats.head": "Registo de formatos de ficheiros", // "admin.registries.bitstream-formats.no-items": "No bitstream formats to show.", "admin.registries.bitstream-formats.no-items": "Nenhum formato de bitstream para exibir.", @@ -368,35 +194,36 @@ // "admin.registries.bitstream-formats.table.name": "Name", "admin.registries.bitstream-formats.table.name": "Nome", - // TODO New key - Add a translation + + // "admin.registries.bitstream-formats.table.id" : "ID", "admin.registries.bitstream-formats.table.id" : "ID", - // "admin.registries.bitstream-formats.table.return": "Return", + // "admin.registries.bitstream-formats.table.return": "Back", "admin.registries.bitstream-formats.table.return": "Voltar", // "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Known", "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Conhecido", - + // "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Supported", - "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Com suporte", + "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Suportado", // "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Unknown", "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Desconhecido", // "admin.registries.bitstream-formats.table.supportLevel.head": "Support Level", - "admin.registries.bitstream-formats.table.supportLevel.head": "Nível de Suporte", - - // "admin.registries.bitstream-formats.title": "DSpace Angular :: Bitstream Format Registry", - "admin.registries.bitstream-formats.title": "DSpace :: Registo de Formato de Ficheiro", + "admin.registries.bitstream-formats.table.supportLevel.head": "Nível de suporte", + // "admin.registries.bitstream-formats.title": "Bitstream Format Registry", + "admin.registries.bitstream-formats.title": "Registo de formatos de ficheiro", + // "admin.registries.metadata.breadcrumbs": "Metadata registry", - "admin.registries.metadata.breadcrumbs": "Registo de Metadados", + "admin.registries.metadata.breadcrumbs": "Registo de metadados", // "admin.registries.metadata.description": "The metadata registry maintains a list of all metadata fields available in the repository. These fields may be divided amongst multiple schemas. However, DSpace requires the qualified Dublin Core schema.", "admin.registries.metadata.description": "O registo de metadados mantém a lista de todos os campos de metadados disponíveis no repositório. Estes campos podem ser divididos em multiplos esquemas. No entanto, o DSpace requer esquemas de Dublin Core qualificados.", // "admin.registries.metadata.form.create": "Create metadata schema", - "admin.registries.metadata.form.create": "Criar Esquema de Metadados", + "admin.registries.metadata.form.create": "Criar esquema de metadados", // "admin.registries.metadata.form.edit": "Edit metadata schema", "admin.registries.metadata.form.edit": "Editar esquema de metadados", @@ -408,7 +235,7 @@ "admin.registries.metadata.form.namespace": "Namespace", // "admin.registries.metadata.head": "Metadata Registry", - "admin.registries.metadata.head": "Registo de Metadados", + "admin.registries.metadata.head": "Registo de metadados", // "admin.registries.metadata.schemas.no-items": "No metadata schemas to show.", "admin.registries.metadata.schemas.no-items": "Nenhum esquema de metadados para mostrar.", @@ -425,37 +252,38 @@ // "admin.registries.metadata.schemas.table.namespace": "Namespace", "admin.registries.metadata.schemas.table.namespace": "Namespace", - // "admin.registries.metadata.title": "DSpace Angular :: Metadata Registry", - "admin.registries.metadata.title": "DSpace :: Registo de Metadados", - + // "admin.registries.metadata.title": "Metadata Registry", + "admin.registries.metadata.title": "Registo de metadados", + // "admin.registries.schema.breadcrumbs": "Metadata schema", - "admin.registries.schema.breadcrumbs": "Esquema de Metadados", + "admin.registries.schema.breadcrumbs": "Esquema de metadados", // "admin.registries.schema.description": "This is the metadata schema for \"{{namespace}}\".", "admin.registries.schema.description": "Este é o esquema de metadados para \"{{namespace}}\".", // "admin.registries.schema.fields.head": "Schema metadata fields", - "admin.registries.schema.fields.head": "Campos do Esquema de Metadados", + "admin.registries.schema.fields.head": "Campos do esquema de metadados", // "admin.registries.schema.fields.no-items": "No metadata fields to show.", "admin.registries.schema.fields.no-items": "Nenhum campo de metadado para exibir.", - + // "admin.registries.schema.fields.table.delete": "Delete selected", "admin.registries.schema.fields.table.delete": "Apagar selecionado(s)", // "admin.registries.schema.fields.table.field": "Field", "admin.registries.schema.fields.table.field": "Campo", - // TODO New key - Add a translation + + // "admin.registries.schema.fields.table.id" : "ID", "admin.registries.schema.fields.table.id" : "ID", // "admin.registries.schema.fields.table.scopenote": "Scope Note", "admin.registries.schema.fields.table.scopenote": "Descrição", // "admin.registries.schema.form.create": "Create metadata field", - "admin.registries.schema.form.create": "Criar Elemento de Metadado", + "admin.registries.schema.form.create": "Criar elemento de metadados", // "admin.registries.schema.form.edit": "Edit metadata field", - "admin.registries.schema.form.edit": "Editar Campo de Metadados", + "admin.registries.schema.form.edit": "Editar campo de metadados", // "admin.registries.schema.form.element": "Element", "admin.registries.schema.form.element": "Elemento", @@ -464,10 +292,10 @@ "admin.registries.schema.form.qualifier": "Qualificador", // "admin.registries.schema.form.scopenote": "Scope Note", - "admin.registries.schema.form.scopenote": "Nota de Âmbito", + "admin.registries.schema.form.scopenote": "Nota de âmbito", // "admin.registries.schema.head": "Metadata Schema", - "admin.registries.schema.head": "Esquema de Metadados", + "admin.registries.schema.head": "Esquema de metadados", // "admin.registries.schema.notification.created": "Successfully created metadata schema \"{{prefix}}\"", "admin.registries.schema.notification.created": "Criou o esquema de metadados \"{{prefix}}\" com sucesso", @@ -494,42 +322,43 @@ "admin.registries.schema.notification.field.deleted.success": "Apagou {{amount}} campo(s) de metadados com sucesso", // "admin.registries.schema.notification.field.edited": "Successfully edited metadata field \"{{field}}\"", - "admin.registries.schema.notification.field.edited": "Editou o campo de metadodo \"{{field}}\" com sucesso", + "admin.registries.schema.notification.field.edited": "Editou o campo de metadado \"{{field}}\" com sucesso", // "admin.registries.schema.notification.success": "Success", "admin.registries.schema.notification.success": "Sucesso", - // "admin.registries.schema.return": "Return", + // "admin.registries.schema.return": "Back", "admin.registries.schema.return": "Voltar", - // "admin.registries.schema.title": "DSpace Angular :: Metadata Schema Registry", - "admin.registries.schema.title": "DSpace :: Registo de Esquema de Metadados", - - + // "admin.registries.schema.title": "Metadata Schema Registry", + "admin.registries.schema.title": "Registo de esquemas de metadados", // "admin.access-control.epeople.actions.delete": "Delete EPerson", - "admin.access-control.epeople.actions.delete": "Apagar Utilizador", + "admin.access-control.epeople.actions.delete": "Apagar utilizador", // "admin.access-control.epeople.actions.impersonate": "Impersonate EPerson", "admin.access-control.epeople.actions.impersonate": "Assumir o papel do Utilizador", // "admin.access-control.epeople.actions.reset": "Reset password", - "admin.access-control.epeople.actions.reset": "Redefinir password", + "admin.access-control.epeople.actions.reset": "Redefinir password", // "admin.access-control.epeople.actions.stop-impersonating": "Stop impersonating EPerson", - "admin.access-control.epeople.actions.stop-impersonating": "Deixar de assumir o papel do Utilizador", + "admin.access-control.epeople.actions.stop-impersonating": "Deixar de assumir o papel do utilizador", - // "admin.access-control.epeople.title": "DSpace Angular :: EPeople", - "admin.access-control.epeople.title": "DSpace :: Utilizador", + // "admin.access-control.epeople.breadcrumbs": "EPeople", + "admin.access-control.epeople.breadcrumbs": "Utilizadores", + + // "admin.access-control.epeople.title": "EPeople", + "admin.access-control.epeople.title": "Utilizadores", // "admin.access-control.epeople.head": "EPeople", - "admin.access-control.epeople.head": "Utilizador", + "admin.access-control.epeople.head": "Utilizadores", // "admin.access-control.epeople.search.head": "Search", "admin.access-control.epeople.search.head": "Pesquisar", // "admin.access-control.epeople.button.see-all": "Browse All", - "admin.access-control.epeople.button.see-all": "Pesquisar Todos", + "admin.access-control.epeople.button.see-all": "Pesquisar tudo", // "admin.access-control.epeople.search.scope.metadata": "Metadata", "admin.access-control.epeople.search.scope.metadata": "Metadados", @@ -540,12 +369,15 @@ // "admin.access-control.epeople.search.button": "Search", "admin.access-control.epeople.search.button": "Pesquisar", - // "admin.access-control.epeople.button.add": "Add EPerson", - "admin.access-control.epeople.button.add": "Adicionar Utilizador", + // "admin.access-control.epeople.search.placeholder": "Search people...", + "admin.access-control.epeople.search.placeholder": "Pesquisar utilizadores...", + + // "admin.access-control.epeople.button.add": "Add EPerson", + "admin.access-control.epeople.button.add": "Adicionar utilizador", // "admin.access-control.epeople.table.id": "ID", - "admin.access-control.epeople.table.id": "ID", - + "admin.access-control.epeople.table.id": "ID", + // "admin.access-control.epeople.table.name": "Name", "admin.access-control.epeople.table.name": "Nome", @@ -558,17 +390,20 @@ // "admin.access-control.epeople.table.edit.buttons.edit": "Edit \"{{name}}\"", "admin.access-control.epeople.table.edit.buttons.edit": "Editar \"{{name}}\"", + // "admin.access-control.epeople.table.edit.buttons.edit-disabled": "You are not authorized to edit this group", + "admin.access-control.epeople.table.edit.buttons.edit-disabled": "Não possui autorização para editar este grupo", + // "admin.access-control.epeople.table.edit.buttons.remove": "Delete \"{{name}}\"", "admin.access-control.epeople.table.edit.buttons.remove": "Apagar \"{{name}}\"", // "admin.access-control.epeople.no-items": "No EPeople to show.", - "admin.access-control.epeople.no-items": "Sem Utilizadores para mostrar.", + "admin.access-control.epeople.no-items": "Sem utilizadores para mostrar.", // "admin.access-control.epeople.form.create": "Create EPerson", - "admin.access-control.epeople.form.create": "Criar Utilizador", + "admin.access-control.epeople.form.create": "Criar utilizador", // "admin.access-control.epeople.form.edit": "Edit EPerson", - "admin.access-control.epeople.form.edit": "Editar Utilizador", + "admin.access-control.epeople.form.edit": "Editar utilizador", // "admin.access-control.epeople.form.firstName": "First name", "admin.access-control.epeople.form.firstName": "Nome", @@ -584,9 +419,12 @@ // "admin.access-control.epeople.form.canLogIn": "Can log in", "admin.access-control.epeople.form.canLogIn": "Pode iniciar sessão", - + // "admin.access-control.epeople.form.requireCertificate": "Requires certificate", "admin.access-control.epeople.form.requireCertificate": "Requer certificado", + + // "admin.access-control.epeople.form.return": "Back", + "admin.access-control.epeople.form.return": "Voltar", // "admin.access-control.epeople.form.notification.created.success": "Successfully created EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.created.success": "Utilizador criado com sucesso \"{{name}}\"", @@ -607,10 +445,10 @@ "admin.access-control.epeople.form.notification.edited.failure": "Falha ao editor Utilizador \"{{name}}\"", // "admin.access-control.epeople.form.notification.deleted.success": "Successfully deleted EPerson \"{{name}}\"", - "admin.access-control.epeople.form.notification.deleted.success": "Utilizador apagado com sucesso \"{{name}}\"", + "admin.access-control.epeople.form.notification.deleted.success": "Utilizador removido com sucesso \"{{name}}\"", // "admin.access-control.epeople.form.notification.deleted.failure": "Failed to delete EPerson \"{{name}}\"", - "admin.access-control.epeople.form.notification.deleted.failure": "Falha ao apagar Utilizador \"{{name}}\"", + "admin.access-control.epeople.form.notification.deleted.failure": "Falha ao remover o utilizador \"{{name}}\"", // "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Member of these groups:", "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Membro dos grupos:", @@ -620,30 +458,40 @@ // "admin.access-control.epeople.form.table.name": "Name", "admin.access-control.epeople.form.table.name": "Nome", + + // "admin.access-control.epeople.form.table.collectionOrCommunity": "Collection/Community", + "admin.access-control.epeople.form.table.collectionOrCommunity": "Coleção/Comunidade", // "admin.access-control.epeople.form.memberOfNoGroups": "This EPerson is not a member of any groups", - "admin.access-control.epeople.form.memberOfNoGroups": "Este Utilizador não é membro de nenhum grupo", + "admin.access-control.epeople.form.memberOfNoGroups": "Este utilizador não é membro de nenhum grupo", // "admin.access-control.epeople.form.goToGroups": "Add to groups", "admin.access-control.epeople.form.goToGroups": "Adicionar a grupos", // "admin.access-control.epeople.notification.deleted.failure": "Failed to delete EPerson: \"{{name}}\"", - "admin.access-control.epeople.notification.deleted.failure": "Falha ao apagar Utilizador: \"{{name}}\"", + "admin.access-control.epeople.notification.deleted.failure": "Falha ao apagar utilizador: \"{{name}}\"", // "admin.access-control.epeople.notification.deleted.success": "Successfully deleted EPerson: \"{{name}}\"", - "admin.access-control.epeople.notification.deleted.success": "Utilizador apagado com sucesso: \"{{name}}\"", + "admin.access-control.epeople.notification.deleted.success": "Utilizador removido com sucesso: \"{{name}}\"", + // "admin.access-control.groups.title": "Groups", + "admin.access-control.groups.title": "Grupos", + // "admin.access-control.groups.breadcrumbs": "Groups", + "admin.access-control.groups.breadcrumbs": "Grupos", - // "admin.access-control.groups.title": "DSpace Angular :: Groups", - "admin.access-control.groups.title": "DSpace :: Grupos", + // "admin.access-control.groups.singleGroup.breadcrumbs": "Edit Group", + "admin.access-control.groups.singleGroup.breadcrumbs": "Editar grupo", + + // "admin.access-control.groups.title.singleGroup": "Edit Group", + "admin.access-control.groups.title.singleGroup": "Editar grupo", - // "admin.access-control.groups.title.singleGroup": "DSpace Angular :: Edit Group", - "admin.access-control.groups.title.singleGroup": "DSpace :: Editar Grupo", - - // "admin.access-control.groups.title.addGroup": "DSpace Angular :: New Group", - "admin.access-control.groups.title.addGroup": "DSpace :: Novo Grupo", + // "admin.access-control.groups.title.addGroup": "New Group", + "admin.access-control.groups.title.addGroup": "Novo grupo", + // "admin.access-control.groups.addGroup.breadcrumbs": "New Group", + "admin.access-control.groups.addGroup.breadcrumbs": "Novo grupo", + // "admin.access-control.groups.head": "Groups", "admin.access-control.groups.head": "Grupos", @@ -659,11 +507,17 @@ // "admin.access-control.groups.search.button": "Search", "admin.access-control.groups.search.button": "Pesquisar", + // "admin.access-control.groups.search.placeholder": "Search groups...", + "admin.access-control.groups.search.placeholder": "Pesquisar grupos...", + // "admin.access-control.groups.table.id": "ID", "admin.access-control.groups.table.id": "ID", // "admin.access-control.groups.table.name": "Name", "admin.access-control.groups.table.name": "Nome", + + // "admin.access-control.groups.table.collectionOrCommunity": "Collection/Community", + "admin.access-control.groups.table.collectionOrCommunity": "Coleção/Comunidade", // "admin.access-control.groups.table.members": "Members", "admin.access-control.groups.table.members": "Membros", @@ -679,23 +533,21 @@ // "admin.access-control.groups.no-items": "No groups found with this in their name or this as UUID", "admin.access-control.groups.no-items": "Não foram encontrados grupos através do nome ou o UUID", - + // "admin.access-control.groups.notification.deleted.success": "Successfully deleted group \"{{name}}\"", - "admin.access-control.groups.notification.deleted.success": "Grupo apagado com sucesso \"{{name}}\"", + "admin.access-control.groups.notification.deleted.success": "Grupo removido com sucesso \"{{name}}\"", // "admin.access-control.groups.notification.deleted.failure.title": "Failed to delete group \"{{name}}\"", - "admin.access-control.groups.notification.deleted.failure.title": "Falha ao apagar grupo \"{{name}}\"", + "admin.access-control.groups.notification.deleted.failure.title": "Falha ao remover grupo \"{{name}}\"", // "admin.access-control.groups.notification.deleted.failure.content": "Cause: \"{{cause}}\"", "admin.access-control.groups.notification.deleted.failure.content": "Causa: \"{{cause}}\"", - - // "admin.access-control.groups.form.alert.permanent": "This group is permanent, so it can't be edited or deleted. You can still add and remove group members using this page.", - "admin.access-control.groups.form.alert.permanent": "Este grupo é permanente, não pode ser editado ou apagado. Pode adicionar ou remover membros do grupo nesta página.", + "admin.access-control.groups.form.alert.permanent": "Este grupo é permanente, não pode ser editado ou apagado. Pode adicionar ou remover membros deste grupo nesta página.", // "admin.access-control.groups.form.alert.workflowGroup": "This group can’t be modified or deleted because it corresponds to a role in the submission and workflow process in the \"{{name}}\" {{comcol}}. You can delete it from the \"assign roles\" tab on the edit {{comcol}} page. You can still add and remove group members using this page.", - "admin.access-control.groups.form.alert.workflowGroup": "Este grupo não pode ser editado ou apagado porque corresponde a um papel no workflow de submissão em \"{{name}}\" {{comcol}}. Pode apagá-lo na aba \"Atribuir Papéis\" na edição da página {{comcol}}. Pode adicionar ou remover membros nesta página.", + "admin.access-control.groups.form.alert.workflowGroup": "Este grupo não pode ser editado ou apagado porque corresponde a um papel no 'workflow' de depósito em \"{{name}}\" {{comcol}}. Pode apagá-lo na aba \"Atribuir Papéis\" na edição da página {{comcol}}. Pode adicionar ou remover membros nesta página.", // "admin.access-control.groups.form.head.create": "Create group", "admin.access-control.groups.form.head.create": "Criar grupo", @@ -706,6 +558,9 @@ // "admin.access-control.groups.form.groupName": "Group name", "admin.access-control.groups.form.groupName": "Nome do grupo", + // "admin.access-control.groups.form.groupCommunity": "Community or Collection", + "admin.access-control.groups.form.groupCommunity": "Comunidade ou Coleção", + // "admin.access-control.groups.form.groupDescription": "Description", "admin.access-control.groups.form.groupDescription": "Descrição", @@ -732,7 +587,7 @@ // "admin.access-control.groups.form.delete-group.modal.header": "Delete Group \"{{ dsoName }}\"", "admin.access-control.groups.form.delete-group.modal.header": "Apagar grupo \"{{ dsoName }}\"", - + // "admin.access-control.groups.form.delete-group.modal.info": "Are you sure you want to delete Group \"{{ dsoName }}\"", "admin.access-control.groups.form.delete-group.modal.info": "Pretende mesmo apagar o grupo \"{{ dsoName }}\"", @@ -755,10 +610,10 @@ "admin.access-control.groups.form.members-list.head": "Utilizador", // "admin.access-control.groups.form.members-list.search.head": "Add EPeople", - "admin.access-control.groups.form.members-list.search.head": "Adicionar Utilizador", + "admin.access-control.groups.form.members-list.search.head": "Adicionar utilizador", // "admin.access-control.groups.form.members-list.button.see-all": "Browse All", - "admin.access-control.groups.form.members-list.button.see-all": "Percorrer TODOS", + "admin.access-control.groups.form.members-list.button.see-all": "Percorrer todos", // "admin.access-control.groups.form.members-list.headMembers": "Current Members", "admin.access-control.groups.form.members-list.headMembers": "Membros atuais", @@ -767,7 +622,7 @@ "admin.access-control.groups.form.members-list.search.scope.metadata": "Metadados", // "admin.access-control.groups.form.members-list.search.scope.email": "E-mail (exact)", - "admin.access-control.groups.form.members-list.search.scope.email": "Email (exato)", + "admin.access-control.groups.form.members-list.search.scope.email": "E-mail (completo)", // "admin.access-control.groups.form.members-list.search.button": "Search", "admin.access-control.groups.form.members-list.search.button": "Pesquisar", @@ -777,6 +632,15 @@ // "admin.access-control.groups.form.members-list.table.name": "Name", "admin.access-control.groups.form.members-list.table.name": "Nome", + + // "admin.access-control.groups.form.members-list.table.identity": "Identity", + "admin.access-control.groups.form.members-list.table.identity": "Identidade", + + // "admin.access-control.groups.form.members-list.table.email": "Email", + "admin.access-control.groups.form.members-list.table.email": "E-mail", + + // "admin.access-control.groups.form.members-list.table.netid": "NetID", + "admin.access-control.groups.form.members-list.table.netid": "NetID", // "admin.access-control.groups.form.members-list.table.edit": "Remove / Add", "admin.access-control.groups.form.members-list.table.edit": "Remover / Adicionar", @@ -791,17 +655,17 @@ "admin.access-control.groups.form.members-list.notification.failure.addMember": "Falha ao adicionar membro: \"{{name}}\"", // "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Successfully deleted member: \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Membro apagado com sucesso: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Membro removido com sucesso: \"{{name}}\"", // "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Failed to delete member: \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Falha ao apagar membro: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Falha ao remover o membro: \"{{name}}\"", // "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Add member with name \"{{name}}\"", "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Adicionar membro com o nome \"{{name}}\"", // "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup": "Sem grupos ativos, indique um nome primeiro.", - + // "admin.access-control.groups.form.members-list.no-members-yet": "No members in group yet, search and add.", "admin.access-control.groups.form.members-list.no-members-yet": "Grupo sem membros, pesquise e adicione novos membros.", @@ -818,7 +682,7 @@ "admin.access-control.groups.form.subgroups-list.search.head": "Adicionar um subgrupo", // "admin.access-control.groups.form.subgroups-list.button.see-all": "Browse All", - "admin.access-control.groups.form.subgroups-list.button.see-all": "Percorrer Todos", + "admin.access-control.groups.form.subgroups-list.button.see-all": "Percorrer todos", // "admin.access-control.groups.form.subgroups-list.headSubgroups": "Current Subgroups", "admin.access-control.groups.form.subgroups-list.headSubgroups": "Subgrupos atuais", @@ -832,6 +696,9 @@ // "admin.access-control.groups.form.subgroups-list.table.name": "Name", "admin.access-control.groups.form.subgroups-list.table.name": "Nome", + // "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Collection/Community", + "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Coleção/Comunidade", + // "admin.access-control.groups.form.subgroups-list.table.edit": "Remove / Add", "admin.access-control.groups.form.subgroups-list.table.edit": "Remover / Adicionar", @@ -851,10 +718,10 @@ "admin.access-control.groups.form.subgroups-list.notification.failure.addSubgroup": "Falha ao adicionar subgrupo: \"{{name}}\"", // "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Successfully deleted subgroup: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Subgrupo apagado com sucesso: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Subgrupo removido com sucesso: \"{{name}}\"", // "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Failed to delete subgroup: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Falha ao apagar subgrupo: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Falha ao remover o subgrupo: \"{{name}}\"", // "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "Sem grupo ativo, indique um nome primeiro.", @@ -866,14 +733,21 @@ "admin.access-control.groups.form.subgroups-list.no-items": "Não foram encontrados grupos com este nome ou UUID", // "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "No subgroups in group yet.", - "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "Este grupo não tem ainda subgrupos.", + "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "Este grupo ainda não tem subgrupos.", - // "admin.access-control.groups.form.return": "Return to groups", - "admin.access-control.groups.form.return": "Retornar aos grupos", + // "admin.access-control.groups.form.return": "Back", + "admin.access-control.groups.form.return": "Voltar", + // "admin.access-control.groups.form.tooltip.editGroupPage": "On this page, you can modify the properties and members of a group. In the top section, you can edit the group name and description, unless this is an admin group for a collection or community, in which case the group name and description are auto-generated and cannot be edited. In the following sections, you can edit group membership. See [the wiki](https://wiki.lyrasis.org/display/DSDOC7x/Create+or+manage+a+user+group) for more details.", + "admin.access-control.groups.form.tooltip.editGroupPage": "Nesta página, pode modificar as propriedades e os membros de um grupo. Na secção superior, pode editar o nome e a descrição do grupo, a menos que se trate de um grupo administrativo para uma coleção ou comunidade, em que o nome e a descrição do grupo são auto-gerados e não podem ser editados. Nas seções seguintes, pode editar o nome e a descrição do grupo. Ver [wiki](https://wiki.lyrasis.org/display/DSDOC7x/Create+ou+gerir+a+utilizador+grupo) para mais detalhes.", + + // "admin.access-control.groups.form.tooltip.editGroup.addEpeople": "To add or remove an EPerson to/from this group, either click the 'Browse All' button or use the search bar below to search for users (use the dropdown to the left of the search bar to choose whether to search by metadata or by email). Then click the plus icon for each user you wish to add in the list below, or the trash can icon for each user you wish to remove. The list below may have several pages: use the page controls below the list to navigate to the next pages. Once you are ready, save your changes by clicking the 'Save' button in the top section.", + "admin.access-control.groups.form.tooltip.editGroup.addEpeople": "Para adicionar ou remover um utilizador de/para este grupo, clique no botão 'Procurar tudo' ou use a barra de pesquisa em baixo para procurar utilizadores (use o menu suspenso, à esquerda da barra de pesquisa, para escolher se pretende pesquisar por metadados ou por e-mail). Depois clique no ícone 'mais' para cada utilizador que deseja adicionar na lista em baixo, ou no ícone 'lixo' para cada utilizador que deseja remover. A lista pode conter várias páginas: utilize os controlos no final da lista para navegar para as páginas seguintes. Quando estiver pronto, guarde as suas alterações clicando no botão 'Guardar' na seção superior.", - - // "admin.search.breadcrumbs": "Administrative Search", + // "admin.access-control.groups.form.tooltip.editGroup.addSubgroups": "To add or remove a Subgroup to/from this group, either click the 'Browse All' button or use the search bar below to search for users. Then click the plus icon for each user you wish to add in the list below, or the trash can icon for each user you wish to remove. The list below may have several pages: use the page controls below the list to navigate to the next pages. Once you are ready, save your changes by clicking the 'Save' button in the top section.", + "admin.access-control.groups.form.tooltip.editGroup.addSubgroups": "Para adicionar ou remover um sub-grupo de/para grupo, clique no botão 'Procurar Tudo' ou use a barra de pesquisa em baixo para procurar utilizadores. Depois clique no ícone 'mais' para cada utilizador que deseja adicionar lista em baixo, ou no ícone 'lixo' para cada utilizador que deseja remover. A lista pode conter várias páginas: utilize os controlos de página no final da lista para navegar para as páginas seguintes. Quando estiver pronto, guarde as suas alterações clicando no botão 'Guardar' na seção superior.", + + // "admin.search.breadcrumbs": "Administrative Search", "admin.search.breadcrumbs": "Pesquisa administrativa", // "admin.search.collection.edit": "Edit", @@ -888,11 +762,11 @@ // "admin.search.item.edit": "Edit", "admin.search.item.edit": "Editar", - // "admin.search.item.make-private": "Make Private", - "admin.search.item.make-private": "Tornar Privado", + // "admin.search.item.make-private": "Make non-discoverable", + "admin.search.item.make-private": "Tornar privado", - // "admin.search.item.make-public": "Make Public", - "admin.search.item.make-public": "Tornar Público", + // "admin.search.item.make-public": "Make discoverable", + "admin.search.item.make-public": "Tornar público", // "admin.search.item.move": "Move", "admin.search.item.move": "Mover", @@ -904,69 +778,215 @@ "admin.search.item.withdraw": "Retirar", // "admin.search.title": "Administrative Search", - "admin.search.title": "Pesquisa Administrativa", - + "admin.search.title": "Pesquisa administrativa", + // "administrativeView.search.results.head": "Administrative Search", - "administrativeView.search.results.head": "Pesquisa Administrativa", - - - + "administrativeView.search.results.head": "Pesquisa administrativa", // "admin.workflow.breadcrumbs": "Administer Workflow", - "admin.workflow.breadcrumbs": "Gestão do Workflow", + "admin.workflow.breadcrumbs": "Gestão do workflow", // "admin.workflow.title": "Administer Workflow", - "admin.workflow.title": "Gestão do Workflow", + "admin.workflow.title": "Gestão do workflow", // "admin.workflow.item.workflow": "Workflow", "admin.workflow.item.workflow": "Workflow", + // "admin.workflow.item.workspace": "Workspace", + "admin.workflow.item.workspace": "Área de trabalho", + // "admin.workflow.item.delete": "Delete", - "admin.workflow.item.delete": "Apagar", + "admin.workflow.item.delete": "Apagar", // "admin.workflow.item.send-back": "Send back", "admin.workflow.item.send-back": "Devolver", + // "admin.workflow.item.policies": "Policies", + "admin.workflow.item.policies": "Políticas", - + // "admin.workflow.item.supervision": "Supervision", + "admin.workflow.item.supervision": "Supervisão", + // "admin.metadata-import.breadcrumbs": "Import Metadata", - "admin.metadata-import.breadcrumbs": "Importação de Metadados", + "admin.metadata-import.breadcrumbs": "Importação de metadados", + + // "admin.batch-import.breadcrumbs": "Import Batch", + "admin.batch-import.breadcrumbs": "Importação em lote (batch)", // "admin.metadata-import.title": "Import Metadata", - "admin.metadata-import.title": "Importação de Metadados", + "admin.metadata-import.title": "Importação de metadados", + + // "admin.batch-import.title": "Import Batch", + "admin.batch-import.title": "Importação em lote (batch)", // "admin.metadata-import.page.header": "Import Metadata", - "admin.metadata-import.page.header": "Importação de Metadados", + "admin.metadata-import.page.header": "Importação de metadados", + + // "admin.batch-import.page.header": "Import Batch", + "admin.batch-import.page.header": "Importação em lote (batch)", // "admin.metadata-import.page.help": "You can drop or browse CSV files that contain batch metadata operations on files here", "admin.metadata-import.page.help": "Pode arrastar ou procurar ficheiros CSV que contenham operações em lote de metadados", + + // "admin.batch-import.page.help": "Select the Collection to import into. Then, drop or browse to a Simple Archive Format (SAF) zip file that includes the Items to import", + "admin.batch-import.page.help": "Selecione a coleção para a qual pretende importar. Em seguida, largue ou selecione ficheiro .zip em formato Simple Archive Format (SAF) que inclua os itens a importar.", // "admin.metadata-import.page.dropMsg": "Drop a metadata CSV to import", - "admin.metadata-import.page.dropMsg": "Arraste um ficheiro CSV com metadados para importar", + "admin.metadata-import.page.dropMsg": "Arraste ficheiro .csv para importar metadados", + + // "admin.batch-import.page.dropMsg": "Drop a batch ZIP to import", + "admin.batch-import.page.dropMsg": "Arraste ficheiro .zip para importação em lote", // "admin.metadata-import.page.dropMsgReplace": "Drop to replace the metadata CSV to import", - "admin.metadata-import.page.dropMsgReplace": "Arraste um ficheiro CSV para substituir o atual", + "admin.metadata-import.page.dropMsgReplace": "Arraste ficheiro .csv para substituir metadados a importar", - // "admin.metadata-import.page.button.return": "Return", + // "admin.batch-import.page.dropMsgReplace": "Drop to replace the batch ZIP to import", + "admin.batch-import.page.dropMsgReplace": "Arraste ficheiro .zip para substituir importação em lote", + + // "admin.metadata-import.page.button.return": "Back", "admin.metadata-import.page.button.return": "Voltar", // "admin.metadata-import.page.button.proceed": "Proceed", "admin.metadata-import.page.button.proceed": "Continuar", + // "admin.metadata-import.page.button.select-collection": "Select Collection", + "admin.metadata-import.page.button.select-collection": "Selecione a coleção", + // "admin.metadata-import.page.error.addFile": "Select file first!", "admin.metadata-import.page.error.addFile": "Selecione um ficheiro!", + // "admin.batch-import.page.error.addFile": "Select Zip file first!", + "admin.batch-import.page.error.addFile": "Selecione primeiro o ficheiro .zip!", + + // "admin.metadata-import.page.validateOnly": "Validate Only", + "admin.metadata-import.page.validateOnly": "Validar", + + // "admin.metadata-import.page.validateOnly.hint": "When selected, the uploaded CSV will be validated. You will receive a report of detected changes, but no changes will be saved.", + "admin.metadata-import.page.validateOnly.hint": "Quando selecionado, o ficheiro .csv carregado será validado. Irá receber um relatório com as alterações detetadas, porém nenhuma será guardada.", + + // "advanced-workflow-action.rating.form.rating.label": "Rating", + "advanced-workflow-action.rating.form.rating.label": "Classificação", + + // "advanced-workflow-action.rating.form.rating.error": "You must rate the item", + "advanced-workflow-action.rating.form.rating.error": "Deve classificar o item", + + // "advanced-workflow-action.rating.form.review.label": "Review", + "advanced-workflow-action.rating.form.review.label": "Rever", + + // "advanced-workflow-action.rating.form.review.error": "You must enter a review to submit this rating", + "advanced-workflow-action.rating.form.review.error": "Deve introduzir uma revisão para submeter esta classificação", + + // "advanced-workflow-action.rating.description": "Please select a rating below", + "advanced-workflow-action.rating.description": "Por favor selecione uma classificação em baixo", + + // "advanced-workflow-action.rating.description-requiredDescription": "Please select a rating below and also add a review", + "advanced-workflow-action.rating.description-requiredDescription": "Por favor, selecione em baixo uma classificação e acrescente também uma revisão", + + // "advanced-workflow-action.select-reviewer.description-single": "Please select a single reviewer below before submitting", + "advanced-workflow-action.select-reviewer.description-single": "Por favor, selecione um revisor único antes de submeter", + + // "advanced-workflow-action.select-reviewer.description-multiple": "Please select one or more reviewers below before submitting", + "advanced-workflow-action.select-reviewer.description-multiple": "Por favor, selecione um ou mais revisores antes de submeter", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.head": "EPeople", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.head": "EPeople", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.head": "Add EPeople", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.head": "Adicionar utilizadores", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.button.see-all": "Browse All", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.button.see-all": "Procurar tudo", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.headMembers": "Current Members", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.headMembers": "Membros atuais", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.metadata": "Metadata", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.metadata": "Metadados", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.email": "E-mail (exact)", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.email": "E-mail (completo)", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.button": "Search", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.button": "Pesquisar", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.id": "ID", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.id": "ID", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.name": "Name", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.name": "Nome", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity": "Identity", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity": "Identidade", + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "Email", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "Email", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.netid": "NetID", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.netid": "NetID", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit": "Remove / Add", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit": "Remover / Adicionar", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove": "Remove member with name \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove": "Remover membro com o nome \"{{name}}\"", - + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember": "Successfully added member: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember": "Membro adicionado com sucessso: \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.addMember": "Failed to add member: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.addMember": "Falha ao adicionar o membro: \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.deleteMember": "Successfully deleted member: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.deleteMember": "Membro removido com sucesso: \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.deleteMember": "Failed to delete member: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.deleteMember": "Falha ao remover o membro: \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Add member with name \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Adicionar membro com nome \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "Atualmente sem grupo ativo, submeter um nome primeiro.", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-members-yet": "No members in group yet, search and add.", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-members-yet": "Ainda não existem membros no grupo, pesquisar e acrescentar.", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-items": "No EPeople found in that search", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-items": "Não foi encontrado nenhuma utilizador na pesquisa", + + // "advanced-workflow-action.select-reviewer.no-reviewer-selected.error": "No reviewer selected.", + "advanced-workflow-action.select-reviewer.no-reviewer-selected.error": "Sem revisor selecionado.", + + // "admin.batch-import.page.validateOnly.hint": "When selected, the uploaded ZIP will be validated. You will receive a report of detected changes, but no changes will be saved.", + "admin.batch-import.page.validateOnly.hint": "Quando selecionado, o ficheiro .zip carregado será validado. Irá receber um relatório com as alterações detetadas, porém nenhuma será guardada.", + + // "admin.batch-import.page.remove": "remove", + "admin.batch-import.page.remove": "Remover", + // "auth.errors.invalid-user": "Invalid email address or password.", "auth.errors.invalid-user": "Endereço de email ou palavra-chave inválidos.", // "auth.messages.expired": "Your session has expired. Please log in again.", - "auth.messages.expired": "Sua sessão expirou. Por favor entre novamente.", - + "auth.messages.expired": "A sua sessão expirou. Por favor, autentique-se novamente.", + // "auth.messages.token-refresh-failed": "Refreshing your session token failed. Please log in again.", + "auth.messages.token-refresh-failed": "A atualização do token da sua sessão falhou. Por favor, autentique-se novamente.", + + // "bitstream.download.page": "Now downloading {{bitstream}}...", + "bitstream.download.page": "A descarregar {{bitstream}}...", + + // "bitstream.download.page.back": "Back", + "bitstream.download.page.back": "Voltar", + // "bitstream.edit.authorizations.link": "Edit bitstream's Policies", + "bitstream.edit.authorizations.link": "Editar políticas dos bitstreams", + + // "bitstream.edit.authorizations.title": "Edit bitstream's Policies", + "bitstream.edit.authorizations.title": "Editar políticas dos bitstreams", + + // "bitstream.edit.return": "Back", + "bitstream.edit.return": "Voltar", + // "bitstream.edit.bitstream": "Bitstream: ", "bitstream.edit.bitstream": "Ficheiros: ", @@ -998,39 +1018,121 @@ "bitstream.edit.form.primaryBitstream.label": "Ficheiro primário", // "bitstream.edit.form.selectedFormat.hint": "If the format is not in the above list, select \"format not in list\" above and describe it under \"Describe new format\".", - "bitstream.edit.form.selectedFormat.hint": "Se o formato não está na lista abaixo, escolha \"Formato não está na lista\" e desreva-o em \"Descreva o novo formato\".", + "bitstream.edit.form.selectedFormat.hint": "Se o formato não se encontrar listado, selecione por favor a opção \"Formato não está na lista\" e faculte detalhes em \"Descreva o novo formato\".", // "bitstream.edit.form.selectedFormat.label": "Selected Format", - "bitstream.edit.form.selectedFormat.label": "Formato Selecionado", + "bitstream.edit.form.selectedFormat.label": "Formato selecionado", // "bitstream.edit.form.selectedFormat.unknown": "Format not in list", - "bitstream.edit.form.selectedFormat.unknown": "Formato não está na lista", + "bitstream.edit.form.selectedFormat.unknown": "O formato não está na lista", // "bitstream.edit.notifications.error.format.title": "An error occurred saving the bitstream's format", - "bitstream.edit.notifications.error.format.title": "Ocorreu um erro ao guardar o formto do ficheiro", + "bitstream.edit.notifications.error.format.title": "Ocorreu um erro ao guardar o formato do ficheiro", + + // "bitstream.edit.form.iiifLabel.label": "IIIF Label", + "bitstream.edit.form.iiifLabel.label": "IIIF Label", + // "bitstream.edit.form.iiifLabel.hint": "Canvas label for this image. If not provided default label will be used.", + "bitstream.edit.form.iiifLabel.hint": "Etiqueta canvas para esta imagem. Se não for fornecida será utilizada uma etiqueta padrão.", + + // "bitstream.edit.form.iiifToc.label": "IIIF Table of Contents", + "bitstream.edit.form.iiifToc.label": "Tabela de conteúdos IIIF", + + // "bitstream.edit.form.iiifToc.hint": "Adding text here makes this the start of a new table of contents range.", + "bitstream.edit.form.iiifToc.hint": "Ao acrescentar texto aqui dá início a uma tabela de conteúdos.", + + // "bitstream.edit.form.iiifWidth.label": "IIIF Canvas Width", + "bitstream.edit.form.iiifWidth.label": "Largura do canvas IIIF", + + // "bitstream.edit.form.iiifWidth.hint": "The canvas width should usually match the image width.", + "bitstream.edit.form.iiifWidth.hint": "A largura do canvas normalmente deve corresponder à largura da imagem.", + + // "bitstream.edit.form.iiifHeight.label": "IIIF Canvas Height", + "bitstream.edit.form.iiifHeight.label": "Altura do canvas IIIF", + + // "bitstream.edit.form.iiifHeight.hint": "The canvas height should usually match the image height.", + "bitstream.edit.form.iiifHeight.hint": "A altura do canvas normalmente deve corresponder à altura da imagem.", + // "bitstream.edit.notifications.saved.content": "Your changes to this bitstream were saved.", "bitstream.edit.notifications.saved.content": "As alterações aos ficheiro foram guardadas.", // "bitstream.edit.notifications.saved.title": "Bitstream saved", "bitstream.edit.notifications.saved.title": "Ficheiro guardado", - + // "bitstream.edit.title": "Edit bitstream", "bitstream.edit.title": "Editar ficheiro", + // "bitstream-request-a-copy.alert.canDownload1": "You already have access to this file. If you want to download the file, click ", + "bitstream-request-a-copy.alert.canDownload1": "Já tem acesso a este ficheiro. Se quiser descarregar o ficheiro, clique ", + + // "bitstream-request-a-copy.alert.canDownload2": "here", + "bitstream-request-a-copy.alert.canDownload2": "aqui", + + // "bitstream-request-a-copy.header": "Request a copy of the file", + "bitstream-request-a-copy.header": "Solicitar cópia ao autor", + + // "bitstream-request-a-copy.intro": "Enter the following information to request a copy for the following item: ", + "bitstream-request-a-copy.intro": "Preencha a seguinte informação para solicitar uma cópia do ficheiro: ", + + // "bitstream-request-a-copy.intro.bitstream.one": "Requesting the following file: ", + "bitstream-request-a-copy.intro.bitstream.one": "Solicitar o seguinte ficheiro: ", + + // "bitstream-request-a-copy.intro.bitstream.all": "Requesting all files. ", + "bitstream-request-a-copy.intro.bitstream.all": "Solicitar todos os ficheiros. ", + + // "bitstream-request-a-copy.name.label": "Name *", + "bitstream-request-a-copy.name.label": "O seu nome *", + + // "bitstream-request-a-copy.name.error": "The name is required", + "bitstream-request-a-copy.name.error": "O preenchimento do nome é um elemento obrigatório!", + + // "bitstream-request-a-copy.email.label": "Your e-mail address *", + "bitstream-request-a-copy.email.label": "O seu endereço de correio eletrónico *", + + // "bitstream-request-a-copy.email.hint": "This email address is used for sending the file.", + "bitstream-request-a-copy.email.hint": "Este endereço de correio eletrónico será utilizado para eventualmente proceder ao envio do ficheiro.", + + // "bitstream-request-a-copy.email.error": "Please enter a valid email address.", + "bitstream-request-a-copy.email.error": "O preenchimento de um endereço de correio electrónico válido é um elemento obrigatório!", + + // "bitstream-request-a-copy.allfiles.label": "Files", + "bitstream-request-a-copy.allfiles.label": "Ficheiro(s) pretendido(s):", + // "bitstream-request-a-copy.files-all-false.label": "Only the requested file", + "bitstream-request-a-copy.files-all-false.label": "Apenas o ficheiro solicitado", + + // "bitstream-request-a-copy.files-all-true.label": "All files (of this item) in restricted access", + "bitstream-request-a-copy.files-all-true.label": "Todos os ficheiros (deste registo) em acesso restrito", + + // "bitstream-request-a-copy.message.label": "Message", + "bitstream-request-a-copy.message.label": "Mensagem a enviar ao autor:", + + // "bitstream-request-a-copy.return": "Back", + "bitstream-request-a-copy.return": "Voltar", + + // "bitstream-request-a-copy.submit": "Request copy", + "bitstream-request-a-copy.submit": "Solicitar cópia ao autor", + + // "bitstream-request-a-copy.submit.success": "The item request was submitted successfully.", + "bitstream-request-a-copy.submit.success": "O seu pedido de cópia foi enviado com sucesso!", + + // "bitstream-request-a-copy.submit.error": "Something went wrong with submitting the item request.", + "bitstream-request-a-copy.submit.error": "Ocorreu algum erro no envio do pedido de cópia!", + + // "browse.back.all-results": "All browse results", + "browse.back.all-results": "Todos os resultados", // "browse.comcol.by.author": "By Author", - "browse.comcol.by.author": "Por Autor", + "browse.comcol.by.author": "Por autor", // "browse.comcol.by.dateissued": "By Issue Date", - "browse.comcol.by.dateissued": "Por Data de Publicação", + "browse.comcol.by.dateissued": "Por data de publicação", // "browse.comcol.by.subject": "By Subject", - "browse.comcol.by.subject": "Por Assunto", + "browse.comcol.by.subject": "Por assunto", // "browse.comcol.by.title": "By Title", - "browse.comcol.by.title": "Por Título", + "browse.comcol.by.title": "Por título", // "browse.comcol.head": "Browse", "browse.comcol.head": "Navegar", @@ -1039,103 +1141,136 @@ "browse.empty": "Sem itens a exibir.", // "browse.metadata.author": "Author", - "browse.metadata.author": "Autor", + "browse.metadata.author": "autor", // "browse.metadata.dateissued": "Issue Date", - "browse.metadata.dateissued": "Data de Publicação", + "browse.metadata.dateissued": "data de Publicação", // "browse.metadata.subject": "Subject", - "browse.metadata.subject": "Assunto", + "browse.metadata.subject": "assunto", // "browse.metadata.title": "Title", - "browse.metadata.title": "Título", - + "browse.metadata.title": "título", + // "browse.metadata.author.breadcrumbs": "Browse by Author", - "browse.metadata.author.breadcrumbs": "Pesquisar por Autor", + "browse.metadata.author.breadcrumbs": "Percorrer por autor", // "browse.metadata.dateissued.breadcrumbs": "Browse by Date", - "browse.metadata.dateissued.breadcrumbs": "Pesquisar por Data", + "browse.metadata.dateissued.breadcrumbs": "Percorrer por data", // "browse.metadata.subject.breadcrumbs": "Browse by Subject", - "browse.metadata.subject.breadcrumbs": "Pesquisar por Assunto", + "browse.metadata.subject.breadcrumbs": "Percorrer por assunto", // "browse.metadata.title.breadcrumbs": "Browse by Title", - "browse.metadata.title.breadcrumbs": "Pesquisar por Título", + "browse.metadata.title.breadcrumbs": "Percorrer por título", + + // "pagination.next.button": "Next", + "pagination.next.button": "Próximo", + + // "pagination.previous.button": "Previous", + "pagination.previous.button": "Anterior", + + // "pagination.next.button.disabled.tooltip": "No more pages of results", + "pagination.next.button.disabled.tooltip": "Sem mais páginas de resultados", + + // "browse.startsWith": ", starting with {{ startsWith }}", + "browse.startsWith": ", começado por {{ startsWith }}", // "browse.startsWith.choose_start": "(Choose start)", "browse.startsWith.choose_start": "(Escolha o início)", // "browse.startsWith.choose_year": "(Choose year)", "browse.startsWith.choose_year": "(Escolha o ano)", - - // "browse.startsWith.jump": "Jump to a point in the index:", - "browse.startsWith.jump": "Pular para um ponto do índice:", + + // "browse.startsWith.choose_year.label": "Choose the issue year", + "browse.startsWith.choose_year.label": "Escolha o ano", + + // "browse.startsWith.jump": "Filter results by year or month", + "browse.startsWith.jump": "Filtrar resultados por ano ou mês", // "browse.startsWith.months.april": "April", - "browse.startsWith.months.april": "Abril", + "browse.startsWith.months.april": "abril", // "browse.startsWith.months.august": "August", - "browse.startsWith.months.august": "Agosto", + "browse.startsWith.months.august": "agosto", // "browse.startsWith.months.december": "December", - "browse.startsWith.months.december": "Dezembro", + "browse.startsWith.months.december": "dezembro", // "browse.startsWith.months.february": "February", - "browse.startsWith.months.february": "Fevereiro", + "browse.startsWith.months.february": "fevereiro", // "browse.startsWith.months.january": "January", - "browse.startsWith.months.january": "Janeiro", + "browse.startsWith.months.january": "janeiro", // "browse.startsWith.months.july": "July", - "browse.startsWith.months.july": "Julho", + "browse.startsWith.months.july": "julho", // "browse.startsWith.months.june": "June", - "browse.startsWith.months.june": "Junho", + "browse.startsWith.months.june": "junho", // "browse.startsWith.months.march": "March", - "browse.startsWith.months.march": "Março", + "browse.startsWith.months.march": "março", // "browse.startsWith.months.may": "May", - "browse.startsWith.months.may": "Maio", + "browse.startsWith.months.may": "maio", // "browse.startsWith.months.none": "(Choose month)", - "browse.startsWith.months.none": "(escolha o mês)", + "browse.startsWith.months.none": "(Escolha o mês)", + + // "browse.startsWith.months.none.label": "Choose the issue month", + "browse.startsWith.months.none.label": "Escolha o mês", // "browse.startsWith.months.november": "November", - "browse.startsWith.months.november": "Novembro", + "browse.startsWith.months.november": "novembro", // "browse.startsWith.months.october": "October", - "browse.startsWith.months.october": "Outubro", + "browse.startsWith.months.october": "outubro", // "browse.startsWith.months.september": "September", - "browse.startsWith.months.september": "Setembro", + "browse.startsWith.months.september": "setembro", - // "browse.startsWith.submit": "Go", + // "browse.startsWith.submit": "Browse", "browse.startsWith.submit": "Pesquisar", - // "browse.startsWith.type_date": "Or type in a date (year-month):", - "browse.startsWith.type_date": "Ou indique uma data (ano-mês):", + // "browse.startsWith.type_date": "Filter results by date", + "browse.startsWith.type_date": "Filtrar resultados por data", - // "browse.startsWith.type_text": "Or enter first few letters:", - "browse.startsWith.type_text": "Ou indique as primeiras letras:", + // "browse.startsWith.type_date.label": "Or type in a date (year-month) and click on the Browse button", + "browse.startsWith.type_date.label": "ou indique uma data (ano-mês):", - // "browse.title": "Browsing {{ collection }} by {{ field }} {{ value }}", - "browse.title": "Percorrer {{ collection }} por {{ field }} {{ value }}", + // "browse.startsWith.type_text": "Filter results by typing the first few letters", + "browse.startsWith.type_text": "Filtrar resultados inserindo as primeiras letras", + // "browse.title": "Browsing {{ collection }} by {{ field }}{{ startsWith }} {{ value }}", + "browse.title": "Percorrer {{ collection }} por {{ field }}{{ startsWith }} {{ value }}", + + // "browse.title.page": "Browsing {{ collection }} by {{ field }} {{ value }}", + "browse.title.page": "Percorrer {{ collection }} por {{ field }} {{ value }}", + + // "search.browse.item-back": "Back to Results", + "search.browse.item-back": "Voltar aos resultados", // "chips.remove": "Remove chip", "chips.remove": "Remover chip", - + // "claimed-approved-search-result-list-element.title": "Approved", + "claimed-approved-search-result-list-element.title": "Aprovado", + + // "claimed-declined-search-result-list-element.title": "Rejected, sent back to submitter", + "claimed-declined-search-result-list-element.title": "Rejeitado, reenviado para o depositante", + + // "claimed-declined-task-search-result-list-element.title": "Declined, sent back to Review Manager's workflow", + "claimed-declined-task-search-result-list-element.title": "Declinado, reenviado para a área de trabalho do gestor de revisão", // "collection.create.head": "Create a Collection", "collection.create.head": "Criar uma coleção", // "collection.create.notifications.success": "Successfully created the Collection", - "collection.create.notifications.success": "Coleção criado com sucesso", + "collection.create.notifications.success": "Coleção criada com sucesso", // "collection.create.sub-head": "Create a Collection for Community {{ parent }}", - "collection.create.sub-head": "Criar uma Coleção na Comunidade {{ parent }}", + "collection.create.sub-head": "Criar uma coleção na comunidade {{ parent }}", // "collection.curate.header": "Curate Collection: {{collection}}", "collection.curate.header": "Curadoria da coleção: {{collection}}", @@ -1146,60 +1281,59 @@ // "collection.delete.confirm": "Confirm", "collection.delete.confirm": "Confirmar", - // "collection.delete.head": "Delete Collection", - "collection.delete.head": "Apagar Coleção", + // "collection.delete.processing": "Deleting", + "collection.delete.processing": "A apagar", - // "collection.delete.notification.fail": "Collection could not be deleted", - "collection.delete.notification.fail": "Coleção não pôde ser apagada", + // "collection.delete.head": "Delete Collection", + "collection.delete.head": "Apagar coleção", + + // "collection.delete.notification.fail": "collection could not be deleted", + "collection.delete.notification.fail": "Coleção não pode ser apagada", // "collection.delete.notification.success": "Successfully deleted collection", "collection.delete.notification.success": "Apagou a coleção com sucesso", // "collection.delete.text": "Are you sure you want to delete collection \"{{ dso }}\"", - "collection.delete.text": "Você tem certeza que deseja apagar a coleção \"{{ dso }}?\"", - - - + "collection.delete.text": "Tem certeza que deseja apagar a coleção \"{{ dso }}?\"", + // "collection.edit.delete": "Delete this collection", "collection.edit.delete": "Apagar esta coleção", // "collection.edit.head": "Edit Collection", - "collection.edit.head": "Editar Coleção", + "collection.edit.head": "Editar coleção", // "collection.edit.breadcrumbs": "Edit Collection", - "collection.edit.breadcrumbs": "Editar Coleção", - - + "collection.edit.breadcrumbs": "Editar coleção", // "collection.edit.tabs.mapper.head": "Item Mapper", "collection.edit.tabs.mapper.head": "Mapeamentos", - // "collection.edit.tabs.item-mapper.title": "Collection Edit - Item Mapper", - "collection.edit.tabs.item-mapper.title": "Editar Coleção - Mapeamentos", + // "collection.edit.tabs.item-mapper.title": "collection Edit - Item Mapper", + "collection.edit.tabs.item-mapper.title": "Editar coleção - mapeamentos", // "collection.edit.item-mapper.cancel": "Cancel", "collection.edit.item-mapper.cancel": "Cancelar", - // "collection.edit.item-mapper.collection": "Collection: \"{{name}}\"", + // "collection.edit.item-mapper.collection": "collection: \"{{name}}\"", "collection.edit.item-mapper.collection": "Coleção: \"{{name}}\"", // "collection.edit.item-mapper.confirm": "Map selected items", "collection.edit.item-mapper.confirm": "Mapear itens selecionados", - + // "collection.edit.item-mapper.description": "This is the item mapper tool that allows collection administrators to map items from other collections into this collection. You can search for items from other collections and map them, or browse the list of currently mapped items.", - "collection.edit.item-mapper.description": "Esta é a ferramenta de mapeamento de itens que permite aos administradores de coleções mapear itens de outras coleções nesta. Pode pesquisá-los noutras coleções para mapeá-los, ou navegar na lista dos itens atualmente mapeados.", + "collection.edit.item-mapper.description": "Esta é a ferramenta de mapeamento de itens que permite aos administradores de coleções mapear itens de outras coleções para esta. Pode pesquisá-los noutras coleções para os mapear ou navegar na lista dos itens atualmente mapeados.", // "collection.edit.item-mapper.head": "Item Mapper - Map Items from Other Collections", - "collection.edit.item-mapper.head": "Mapeador de Itens - Mapear itens noutras Coleções", + "collection.edit.item-mapper.head": "Mapeador de Itens - Mapear itens noutras coleções", // "collection.edit.item-mapper.no-search": "Please enter a query to search", - "collection.edit.item-mapper.no-search": "Por favor introduza um termo para pesquisar", + "collection.edit.item-mapper.no-search": "Por favor introduza um termo para pesquisar!", // "collection.edit.item-mapper.notifications.map.error.content": "Errors occurred for mapping of {{amount}} items.", "collection.edit.item-mapper.notifications.map.error.content": "Ocorreu erros ao mapear {{amount}} itens.", // "collection.edit.item-mapper.notifications.map.error.head": "Mapping errors", - "collection.edit.item-mapper.notifications.map.error.head": "Erros de mapeamento", + "collection.edit.item-mapper.notifications.map.error.head": "Erros de mapeamento!", // "collection.edit.item-mapper.notifications.map.success.content": "Successfully mapped {{amount}} items.", "collection.edit.item-mapper.notifications.map.success.content": "Mapeou {{amount}} itens com sucesso.", @@ -1214,7 +1348,7 @@ "collection.edit.item-mapper.notifications.unmap.error.head": "Erros de remoção de mapeamento", // "collection.edit.item-mapper.notifications.unmap.success.content": "Successfully removed the mappings of {{amount}} items.", - "collection.edit.item-mapper.notifications.unmap.success.content": "Removeu os mapeamentps de {{amount}} item(ns) com sucesso.", + "collection.edit.item-mapper.notifications.unmap.success.content": "Removeu os mapeamentos de {{amount}} item(ns) com sucesso.", // "collection.edit.item-mapper.notifications.unmap.success.head": "Remove mapping completed", "collection.edit.item-mapper.notifications.unmap.success.head": "Remoção de mapeamentos completa", @@ -1222,16 +1356,23 @@ // "collection.edit.item-mapper.remove": "Remove selected item mappings", "collection.edit.item-mapper.remove": "Remover mapeamentos selecionados", + // "collection.edit.item-mapper.search-form.placeholder": "Search items...", + "collection.edit.item-mapper.search-form.placeholder": "Pesquisar items...", + // "collection.edit.item-mapper.tabs.browse": "Browse mapped items", "collection.edit.item-mapper.tabs.browse": "Navegar por itens mapeados", // "collection.edit.item-mapper.tabs.map": "Map new items", "collection.edit.item-mapper.tabs.map": "Mapear novos itens", + // "collection.edit.logo.delete.title": "Delete logo", + "collection.edit.logo.delete.title": "Apagar logótipo", - + // "collection.edit.logo.delete-undo.title": "Undo delete", + "collection.edit.logo.delete-undo.title": "Não apagar", + // "collection.edit.logo.label": "Collection logo", - "collection.edit.logo.label": "Logotipo da Coleção", + "collection.edit.logo.label": "Logótipo da coleção", // "collection.edit.logo.notifications.add.error": "Uploading Collection logo failed. Please verify the content before retrying.", "collection.edit.logo.notifications.add.error": "Falha ao carregar o logotipo da coleção. Verifique o ficheiro antes de tentar de novo.", @@ -1240,7 +1381,7 @@ "collection.edit.logo.notifications.add.success": "O logotipo da coleção foi carregado com sucesso.", // "collection.edit.logo.notifications.delete.success.title": "Logo deleted", - "collection.edit.logo.notifications.delete.success.title": "Logo removido", + "collection.edit.logo.notifications.delete.success.title": "Logótipo apagado", // "collection.edit.logo.notifications.delete.success.content": "Successfully deleted the collection's logo", "collection.edit.logo.notifications.delete.success.content": "O logotipo da coleção foi apagado com sucesso", @@ -1249,41 +1390,46 @@ "collection.edit.logo.notifications.delete.error.title": "Erro ao apagar o logotipo", // "collection.edit.logo.upload": "Drop a Collection Logo to upload", - "collection.edit.logo.upload": "Arraste um logotipo da coleção para carregar", - - + "collection.edit.logo.upload": "Arraste um logótipo da coleção para carregar", // "collection.edit.notifications.success": "Successfully edited the Collection", "collection.edit.notifications.success": "Coleção editada com sucesso", - // "collection.edit.return": "Return", + // "collection.edit.return": "Back", "collection.edit.return": "Voltar", - - // "collection.edit.tabs.curate.head": "Curate", "collection.edit.tabs.curate.head": "Curadoria", - // "collection.edit.tabs.curate.title": "Collection Edit - Curate", - "collection.edit.tabs.curate.title": "Editar Coleção - Curadoria", + // "collection.edit.tabs.curate.title": "Collection Edit - Curate", + "collection.edit.tabs.curate.title": "Editar coleção - Curadoria", // "collection.edit.tabs.authorizations.head": "Authorizations", "collection.edit.tabs.authorizations.head": "Autorizações", // "collection.edit.tabs.authorizations.title": "Collection Edit - Authorizations", - "collection.edit.tabs.authorizations.title": "Editar Coleção - Autorizações", + "collection.edit.tabs.authorizations.title": "Editar coleção - autorizações", + + // "collection.edit.item.authorizations.load-bundle-button": "Load more bundles", + "collection.edit.item.authorizations.load-bundle-button": "Carregar mais pacotes", + + // "collection.edit.item.authorizations.load-more-button": "Load more", + "collection.edit.item.authorizations.load-more-button": "Carregar mais", + + // "collection.edit.item.authorizations.show-bitstreams-button": "Show bitstream policies for bundle", + "collection.edit.item.authorizations.show-bitstreams-button": "Mostrar as políticas do bitstream para o pacote", // "collection.edit.tabs.metadata.head": "Edit Metadata", - "collection.edit.tabs.metadata.head": "Editar Metadados", + "collection.edit.tabs.metadata.head": "Editar metadados", // "collection.edit.tabs.metadata.title": "Collection Edit - Metadata", - "collection.edit.tabs.metadata.title": "Editar Coleção - Metadados", + "collection.edit.tabs.metadata.title": "Editar coleção - metadados", // "collection.edit.tabs.roles.head": "Assign Roles", - "collection.edit.tabs.roles.head": "Atribuir Papéis", + "collection.edit.tabs.roles.head": "Atribuir perfis", // "collection.edit.tabs.roles.title": "Collection Edit - Roles", - "collection.edit.tabs.roles.title": "Editar Coleção - Papéis", + "collection.edit.tabs.roles.title": "Editar coleção - perfis", // "collection.edit.tabs.source.external": "This collection harvests its content from an external source", "collection.edit.tabs.source.external": "Esta coleção agrega conteúdo de uma fonte externa", @@ -1298,7 +1444,7 @@ "collection.edit.tabs.source.form.head": "Configure uma fonte externa", // "collection.edit.tabs.source.form.metadataConfigId": "Metadata Format", - "collection.edit.tabs.source.form.metadataConfigId": "Formato de Metadados", + "collection.edit.tabs.source.form.metadataConfigId": "Formato de metadados", // "collection.edit.tabs.source.form.oaiSetId": "OAI specific set id", "collection.edit.tabs.source.form.oaiSetId": "ID do set OAI-PMH", @@ -1316,12 +1462,12 @@ "collection.edit.tabs.source.form.options.harvestType.METADATA_ONLY": "Agregar apenas metadados", // "collection.edit.tabs.source.head": "Content Source", - "collection.edit.tabs.source.head": "Conteúdo fonte", + "collection.edit.tabs.source.head": "Fonte externa", // "collection.edit.tabs.source.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", "collection.edit.tabs.source.notifications.discarded.content": "As alterações foram ignoradas. Para regravar as alterações clique no botão ´Voltar'", - // "collection.edit.tabs.source.notifications.discarded.title": "Changed discarded", + // "collection.edit.tabs.source.notifications.discarded.title": "Changes discarded", "collection.edit.tabs.source.notifications.discarded.title": "Alterações descartadas", // "collection.edit.tabs.source.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", @@ -1337,16 +1483,14 @@ "collection.edit.tabs.source.notifications.saved.title": "Conteúdo fonte guardado", // "collection.edit.tabs.source.title": "Collection Edit - Content Source", - "collection.edit.tabs.source.title": "Editar Coleção - Conteúdo fonte", - - + "collection.edit.tabs.source.title": "Editar coleção - conteúdo fonte", // "collection.edit.template.add-button": "Add", "collection.edit.template.add-button": "Adicionar", // "collection.edit.template.breadcrumbs": "Item template", - "collection.edit.template.breadcrumbs": "Template do Item", - + "collection.edit.template.breadcrumbs": "Template do item", + // "collection.edit.template.cancel": "Cancel", "collection.edit.template.cancel": "Cancelar", @@ -1356,22 +1500,26 @@ // "collection.edit.template.edit-button": "Edit", "collection.edit.template.edit-button": "Editar", + // "collection.edit.template.error": "An error occurred retrieving the template item", + "collection.edit.template.error": "Ocorreu um erro na recuperação do template do item", + // "collection.edit.template.head": "Edit Template Item for Collection \"{{ collection }}\"", - "collection.edit.template.head": "Editar Modelo do Item para a Coleção \"{{ collection }}\"", + "collection.edit.template.head": "Editar template do item para a coleção \"{{ collection }}\"", // "collection.edit.template.label": "Template item", - "collection.edit.template.label": "Modelo do item", + "collection.edit.template.label": "Template do item", + + // "collection.edit.template.loading": "Loading template item...", + "collection.edit.template.loading": "A carregar o template do item...", // "collection.edit.template.notifications.delete.error": "Failed to delete the item template", "collection.edit.template.notifications.delete.error": "Erro ao apagar o template do item", // "collection.edit.template.notifications.delete.success": "Successfully deleted the item template", - "collection.edit.template.notifications.delete.success": "Template do Item apagado com sucesso", + "collection.edit.template.notifications.delete.success": "Template do item apagado com sucesso", // "collection.edit.template.title": "Edit Template Item", - "collection.edit.template.title": "Editar Modelo do Item", - - + "collection.edit.template.title": "Editar template do item", // "collection.form.abstract": "Short Description", "collection.form.abstract": "Descrição curta", @@ -1397,15 +1545,14 @@ // "collection.form.title": "Name", "collection.form.title": "Nome", - - - // "collection.listelement.badge": "Collection", - "collection.listelement.badge": "Coleção", - - - + // "collection.form.entityType": "Entity Type", + "collection.form.entityType": "Tipo de entidade", + + // "collection.listelement.badge": "collection", + "collection.listelement.badge": "coleção", + // "collection.page.browse.recent.head": "Recent Submissions", - "collection.page.browse.recent.head": "Submissões Recentes", + "collection.page.browse.recent.head": "Entradas recentes", // "collection.page.browse.recent.empty": "No items to show", "collection.page.browse.recent.empty": "Nenhum item a exibir", @@ -1413,8 +1560,8 @@ // "collection.page.edit": "Edit this collection", "collection.page.edit": "Editar esta coleção", - // "collection.page.handle": "Permanent URI for this collection", - "collection.page.handle": "URI Permanente para esta coleção", + // "collection.page.handle": "Permanent URI for this collection:", + "collection.page.handle": "URI permanente para esta coleção:", // "collection.page.license": "License", "collection.page.license": "Licença", @@ -1422,8 +1569,6 @@ // "collection.page.news": "News", "collection.page.news": "Notícias", - - // "collection.select.confirm": "Confirm selected", "collection.select.confirm": "Confirmar seleção", @@ -1433,26 +1578,92 @@ // "collection.select.table.title": "Title", "collection.select.table.title": "Título", + // "collection.source.controls.head": "Harvest Controls", + "collection.source.controls.head": "Controlos de importação", + // "collection.source.controls.test.submit.error": "Something went wrong with initiating the testing of the settings", + "collection.source.controls.test.submit.error": "Algo correu mal ao inicar os testes das configurações", + + // "collection.source.controls.test.failed": "The script to test the settings has failed", + "collection.source.controls.test.failed": "O script para testar as configurações falhou!", + + // "collection.source.controls.test.completed": "The script to test the settings has successfully finished", + "collection.source.controls.test.completed": "O script para testar as configurações terminou com sucesso!", + + // "collection.source.controls.test.submit": "Test configuration", + "collection.source.controls.test.submit": "Configuração de teste", + + // "collection.source.controls.test.running": "Testing configuration...", + "collection.source.controls.test.running": "A testar as configurações...", + + // "collection.source.controls.import.submit.success": "The import has been successfully initiated", + "collection.source.controls.import.submit.success": "A importação iniciou com sucesso.", + + // "collection.source.controls.import.submit.error": "Something went wrong with initiating the import", + "collection.source.controls.import.submit.error": "Algo correu mal ao iniciar a importação", + + // "collection.source.controls.import.submit": "Import now", + "collection.source.controls.import.submit": "Importar agora", + + // "collection.source.controls.import.running": "Importing...", + "collection.source.controls.import.running": "Importar...", + + // "collection.source.controls.import.failed": "An error occurred during the import", + "collection.source.controls.import.failed": "Ocorreu um erro durante a importação", + + // "collection.source.controls.import.completed": "The import completed", + "collection.source.controls.import.completed": "A importação encontra-se completa", + + // "collection.source.controls.reset.submit.success": "The reset and reimport has been successfully initiated", + "collection.source.controls.reset.submit.success": "A reposição e re-importação iniciou-se com sucesso", + + // "collection.source.controls.reset.submit.error": "Something went wrong with initiating the reset and reimport", + "collection.source.controls.reset.submit.error": "Algo correu mal com a reposição e re-importação", + + // "collection.source.controls.reset.failed": "An error occurred during the reset and reimport", + "collection.source.controls.reset.failed": "Ocorreu um erro durante a reposição e a re-importação", + + // "collection.source.controls.reset.completed": "The reset and reimport completed", + "collection.source.controls.reset.completed": "A reposição e a re-importação encontram-se completas", + + // "collection.source.controls.reset.submit": "Reset and reimport", + "collection.source.controls.reset.submit": "Repor e re-importar", + + // "collection.source.controls.reset.running": "Resetting and reimporting...", + "collection.source.controls.reset.running": "Repor e re-importar...", + + // "collection.source.controls.harvest.status": "Harvest status:", + "collection.source.controls.harvest.status": "Estado da importação:", + + // "collection.source.controls.harvest.start": "Harvest start time:", + "collection.source.controls.harvest.start": "Hora de início da importação:", + + // "collection.source.controls.harvest.last": "Last time harvested:", + "collection.source.controls.harvest.start": "Hora de fim da importação:", + + // "collection.source.controls.harvest.message": "Harvest info:", + "collection.source.controls.harvest.message": "Informação sobre a importação:", + + // "collection.source.controls.harvest.no-information": "N/A", + "collection.source.controls.harvest.no-information": "N/A", // "collection.source.update.notifications.error.content": "The provided settings have been tested and didn't work.", "collection.source.update.notifications.error.content": "As configurações providenciadas foram testadas mas não funcionam.", // "collection.source.update.notifications.error.title": "Server Error", - "collection.source.update.notifications.error.title": "Erro no Servidor", + "collection.source.update.notifications.error.title": "Erro no servidor", - - - // "communityList.tabTitle": "DSpace - Community List", - "communityList.tabTitle": "DSpace - Lista de Comunidades", + // "communityList.breadcrumbs": "Community List", + "communityList.breadcrumbs": "Lista de comunidades", + + // "communityList.tabTitle": "Community List", + "communityList.tabTitle": "Lista de comunidades", // "communityList.title": "List of Communities", - "communityList.title": "Lista de Comunidades", + "communityList.title": "Lista de comunidades", // "communityList.showMore": "Show More", - "communityList.showMore": "Mostrar Mais", - - + "communityList.showMore": "Mostrar mais", // "community.create.head": "Create a Community", "community.create.head": "Criar uma comunidade", @@ -1464,7 +1675,7 @@ "community.create.sub-head": "Criar uma Sub-Comunidade para Comunidade {{ parent }}", // "community.curate.header": "Curate Community: {{community}}", - "community.curate.header": "Curar Comunidade: {{community}}", + "community.curate.header": "Curar comunidade: {{community}}", // "community.delete.cancel": "Cancel", "community.delete.cancel": "Cancelar", @@ -1472,11 +1683,14 @@ // "community.delete.confirm": "Confirm", "community.delete.confirm": "Confirmar", + // "community.delete.processing": "Deleting...", + "community.delete.processing": "A apagar...", + // "community.delete.head": "Delete Community", - "community.delete.head": "Apagar Comunidade", + "community.delete.head": "Apagar comunidade", // "community.delete.notification.fail": "Community could not be deleted", - "community.delete.notification.fail": "Não foi possível apagar a Comunidade", + "community.delete.notification.fail": "Não foi possível apagar a comunidade", // "community.delete.notification.success": "Successfully deleted community", "community.delete.notification.success": "Comunidade apagada com sucesso", @@ -1488,34 +1702,37 @@ "community.edit.delete": "Apagar esta comunidade", // "community.edit.head": "Edit Community", - "community.edit.head": "Editar Comunidade", + "community.edit.head": "Editar comunidade", // "community.edit.breadcrumbs": "Edit Community", "community.edit.breadcrumbs": "Editar Comunidade", - + // "community.edit.logo.delete.title": "Delete logo", + "community.edit.logo.delete.title": "Apagar logótipo", + + // "community.edit.logo.delete-undo.title": "Undo delete", + "community.edit.logo.delete-undo.title": "Não apagar logótipo", + // "community.edit.logo.label": "Community logo", - "community.edit.logo.label": "Logo da Comunidade", + "community.edit.logo.label": "Logótipo da comunidade", // "community.edit.logo.notifications.add.error": "Uploading Community logo failed. Please verify the content before retrying.", - "community.edit.logo.notifications.add.error": "Falha ao carregar o logotipo da comunidade. Verifique o conteúdo antes de tentar de novo.", + "community.edit.logo.notifications.add.error": "Falha ao carregar o logótipo da comunidade. Verifique o conteúdo antes de tentar de novo.", // "community.edit.logo.notifications.add.success": "Upload Community logo successful.", - "community.edit.logo.notifications.add.success": "Logotipo da comunindade carregado com sucesso.", + "community.edit.logo.notifications.add.success": "Logótipo da comunindade carregado com sucesso.", // "community.edit.logo.notifications.delete.success.title": "Logo deleted", - "community.edit.logo.notifications.delete.success.title": "Logotipo apagado", + "community.edit.logo.notifications.delete.success.title": "Logótipo apagado", // "community.edit.logo.notifications.delete.success.content": "Successfully deleted the community's logo", - "community.edit.logo.notifications.delete.success.content": "O logotipo da comuindade foi apagado com sucesso", + "community.edit.logo.notifications.delete.success.content": "O logótipo da comuindade foi apagado com sucesso", // "community.edit.logo.notifications.delete.error.title": "Error deleting logo", - "community.edit.logo.notifications.delete.error.title": "Erro ao apagar o logotipo", + "community.edit.logo.notifications.delete.error.title": "Erro ao apagar o logótipo", // "community.edit.logo.upload": "Drop a Community Logo to upload", - "community.edit.logo.upload": "Arraste um logotipo da comunidade para carregar", - - + "community.edit.logo.upload": "Arraste um logótipo da comunidade para carregar", // "community.edit.notifications.success": "Successfully edited the Community", "community.edit.notifications.success": "Comunidade editada com sucesso", @@ -1526,54 +1743,53 @@ // "community.edit.notifications.error": "An error occured while editing the Community", "community.edit.notifications.error": "Ocorreu um erro ao editar a comunidade", - // "community.edit.return": "Return", + // "community.edit.return": "Back", "community.edit.return": "Voltar", - - // "community.edit.tabs.curate.head": "Curate", "community.edit.tabs.curate.head": "Curadoria", // "community.edit.tabs.curate.title": "Community Edit - Curate", - "community.edit.tabs.curate.title": "Editar Comunidade - Curadoria", + "community.edit.tabs.curate.title": "Editar comunidade - curadoria", // "community.edit.tabs.metadata.head": "Edit Metadata", - "community.edit.tabs.metadata.head": "Editar Metadados", + "community.edit.tabs.metadata.head": "Editar metadados", // "community.edit.tabs.metadata.title": "Community Edit - Metadata", - "community.edit.tabs.metadata.title": "Editar Comunidade - Metadados", + "community.edit.tabs.metadata.title": "Editar comunidade - metadados", // "community.edit.tabs.roles.head": "Assign Roles", - "community.edit.tabs.roles.head": "Atribuir Papéis", + "community.edit.tabs.roles.head": "Atribuir perfis", // "community.edit.tabs.roles.title": "Community Edit - Roles", - "community.edit.tabs.roles.title": "Editar Comunidade - Papéis", + "community.edit.tabs.roles.title": "Editar comunidade - perfis", // "community.edit.tabs.authorizations.head": "Authorizations", "community.edit.tabs.authorizations.head": "Autorizações", - + // "community.edit.tabs.authorizations.title": "Community Edit - Authorizations", - "community.edit.tabs.authorizations.title": "Editar Comunidade - Autorizações", - - + "community.edit.tabs.authorizations.title": "Editar comunidade - autorizações", // "community.listelement.badge": "Community", "community.listelement.badge": "Comunidade", - - // "comcol-role.edit.no-group": "None", "comcol-role.edit.no-group": "Nenhum", // "comcol-role.edit.create": "Create", "comcol-role.edit.create": "Criar", + // "comcol-role.edit.create.error.title": "Failed to create a group for the '{{ role }}' role", + "comcol-role.edit.create.error.title": "Falha na criação de um grupo para o perfil '{{ role }}'", + // "comcol-role.edit.restrict": "Restrict", "comcol-role.edit.restrict": "Restrito", // "comcol-role.edit.delete": "Delete", "comcol-role.edit.delete": "Apagar", + // "comcol-role.edit.delete.error.title": "Failed to delete the '{{ role }}' role's group", + "comcol-role.edit.delete.error.title": "Falha na remoção do '{{ role }}' nos perfis do grupo", // "comcol-role.edit.community-admin.name": "Administrators", "comcol-role.edit.community-admin.name": "Administradores", @@ -1581,63 +1797,60 @@ // "comcol-role.edit.collection-admin.name": "Administrators", "comcol-role.edit.collection-admin.name": "Administradores", - // "comcol-role.edit.community-admin.description": "Community administrators can create sub-communities or collections, and manage or assign management for those sub-communities or collections. In addition, they decide who can submit items to any sub-collections, edit item metadata (after submission), and add (map) existing items from other collections (subject to authorization).", - "comcol-role.edit.community-admin.description": "Os administradores de Comunidade podem criar sub-comunidades e coleções, assim como gerir ou delegar a gestão dessas sub-comunidade ou coleções. Além disso, decidem quem pode submeter itens em qualquer coleção, editar metadados (após submissão), e mapear itens de outras coleções (sujeito a autorização).", + "comcol-role.edit.community-admin.description": "Os 'Administradores de comunidades' podem criar 'sub-comunidades' e/ou 'coleções', podem também gerir ou delegar a gestão dessas 'sub-comunidade' ou 'coleções'. Adicionalmente, decidem quem pode depositar itens em coleções, editar metadados (após o depósito) e mapear itens de outras coleções (sujeito a autorização).", // "comcol-role.edit.collection-admin.description": "Collection administrators decide who can submit items to the collection, edit item metadata (after submission), and add (map) existing items from other collections to this collection (subject to authorization for that collection).", - "comcol-role.edit.collection-admin.description": "Os administradores de coleção decidem quem pode submeter itens a uma coleção, editar metadados (após submissão), e mapear itens de outras coleções (sujeito a autorização para essa coleção).", - + "comcol-role.edit.collection-admin.description": "Os 'Administradores de coleção' decidem quem pode depositar itens a uma coleção, editar metadados (após o depósito), e mapear itens de outras coleções (sujeito a autorização para essa coleção).", // "comcol-role.edit.submitters.name": "Submitters", "comcol-role.edit.submitters.name": "Depositantes", // "comcol-role.edit.submitters.description": "The E-People and Groups that have permission to submit new items to this collection.", - "comcol-role.edit.submitters.description": "Os Utilizadores e Grupos que possuem permissões de depósito nesta coleção.", - + "comcol-role.edit.submitters.description": "Os 'Utilizadores' e 'Grupos' que possuem permissões de depósito nesta coleção.", // "comcol-role.edit.item_read.name": "Default item read access", - "comcol-role.edit.item_read.name": "acesso de Leitura Padrão ao item", + "comcol-role.edit.item_read.name": "Acesso de leitura ao item predefinido (DEFAULT_ITEM_READ)", // "comcol-role.edit.item_read.description": "E-People and Groups that can read new items submitted to this collection. Changes to this role are not retroactive. Existing items in the system will still be viewable by those who had read access at the time of their addition.", - "comcol-role.edit.item_read.description": "Utilizadores e Grupos que podem ver itens submetidos nesta coleção. As alterações a este papel não são retroativas. Os itens existentes no sistema ainda poderão ser vistos por aqueles que tiveram acesso de leitura no momento de sua adição.", + "comcol-role.edit.item_read.description": "'Utilizadores' e 'Grupos' que podem ver itens depositados nesta coleção. As alterações feitas a este papel não são retroativas. Os itens existentes no sistema ainda poderão ser vistos por aqueles que tiveram acesso de leitura no momento da sua adição.", // "comcol-role.edit.item_read.anonymous-group": "Default read for incoming items is currently set to Anonymous.", - "comcol-role.edit.item_read.anonymous-group": "A definição de Leitura padrão de novos itens está definida para Utilizadores Anónimos.", - + "comcol-role.edit.item_read.anonymous-group": "A leitura de novos itens (Item Read) está predefinida para utilizadores anónimos.", // "comcol-role.edit.bitstream_read.name": "Default bitstream read access", - "comcol-role.edit.bitstream_read.name": "Leitura padrão de ficheiros", + "comcol-role.edit.bitstream_read.name": "Leitura predefinida de ficheiros (DEFAULT_BITSTREAM_READ)", // "comcol-role.edit.bitstream_read.description": "Community administrators can create sub-communities or collections, and manage or assign management for those sub-communities or collections. In addition, they decide who can submit items to any sub-collections, edit item metadata (after submission), and add (map) existing items from other collections (subject to authorization).", - "comcol-role.edit.bitstream_read.description": "Os administradores de Comunidade podem criar sub-comunidades e coleções, assim como gerir ou delegar a gestão dessas sub-comunidade ou coleções. Além disso, decidem quem pode submeter itens em qualquer coleção, editar metadados (após submissão), e mapear itens de outras coleções (sujeito a autorização).", + "comcol-role.edit.bitstream_read.description": "Os 'Administradores de comunidades' podem criar sub-comunidades e coleções, bem como gerir ou delegar a gestão dessas sub-comunidade ou coleções. Adicionalmente, decidem quem pode depositar itens em qualquer coleção, editar metadados (após depósito) e mapear itens de outras coleções (sujeito a autorização).", // "comcol-role.edit.bitstream_read.anonymous-group": "Default read for incoming bitstreams is currently set to Anonymous.", - "comcol-role.edit.bitstream_read.anonymous-group": "A definição de Leitura padrão de novos ficheiros está definida para Utilizadores Anónimos.", - + "comcol-role.edit.bitstream_read.anonymous-group": "A leitura de novos ficheiros (Bitstream Read) está predefinida para utilizadores anónimos.", // "comcol-role.edit.editor.name": "Editors", "comcol-role.edit.editor.name": "Editores", // "comcol-role.edit.editor.description": "Editors are able to edit the metadata of incoming submissions, and then accept or reject them.", - "comcol-role.edit.editor.description": "Os Editores podem editar os metadados, e depois aceitar ou rejeitar as submissões.", - - + "comcol-role.edit.editor.description": "Os 'Editores' podem aceitar ou rejeitar os depósitos e podem editar os seus metadados.", + // "comcol-role.edit.finaleditor.name": "Final editors", - "comcol-role.edit.finaleditor.name": "Editores Finais", + "comcol-role.edit.finaleditor.name": "Validadores finais", // "comcol-role.edit.finaleditor.description": "Final editors are able to edit the metadata of incoming submissions, but will not be able to reject them.", - "comcol-role.edit.finaleditor.description": "Os Editores Finais podem editar os metadados de uma submissão, mas não os podem rejeitar.", - + "comcol-role.edit.finaleditor.description": "Os 'Validadores finais' podem editar os metadados de um depósito, mas não os podem rejeitar.", // "comcol-role.edit.reviewer.name": "Reviewers", "comcol-role.edit.reviewer.name": "Revisores", // "comcol-role.edit.reviewer.description": "Reviewers are able to accept or reject incoming submissions. However, they are not able to edit the submission's metadata.", - "comcol-role.edit.reviewer.description": "Os Revisores podem aceitar ou rejeitar as submissões enviadas. Contudo, não podem editar os metadados das submissões.", - - + "comcol-role.edit.reviewer.description": "Os 'Revisores' podem aceitar ou rejeitar os depósitos, mas não podem editar os seus metadados.", + // "comcol-role.edit.scorereviewers.name": "Score Reviewers", + "comcol-role.edit.scorereviewers.name": "Pontuar revisores", + + // "comcol-role.edit.scorereviewers.description": "Reviewers are able to give a score to incoming submissions, this will define whether the submission will be rejected or not.", + "comcol-role.edit.scorereviewers.description": "Os 'Revisores' podem dar uma pontuação aos depósitos recebidos, isto irá determinar se o depósito será rejeitado ou não.", + // "community.form.abstract": "Short Description", "community.form.abstract": "Descrição curta", @@ -1648,7 +1861,7 @@ "community.form.errors.title.required": "Por favor indique um nome para a comunidade", // "community.form.rights": "Copyright text (HTML)", - "community.form.rights": "Texto de direito de cópia (HTML)", + "community.form.rights": "Texto de Copyright (HTML)", // "community.form.tableofcontents": "News (HTML)", "community.form.tableofcontents": "Notícias (HTML)", @@ -1660,7 +1873,7 @@ "community.page.edit": "Editar esta comunidade", // "community.page.handle": "Permanent URI for this community", - "community.page.handle": "URI Permanente desta comunidade", + "community.page.handle": "URI permanente desta comunidade:", // "community.page.license": "License", "community.page.license": "Licença", @@ -1669,15 +1882,13 @@ "community.page.news": "Notícias", // "community.all-lists.head": "Subcommunities and Collections", - "community.all-lists.head": "Sub-Comunidade e Coleções", + "community.all-lists.head": "Sub-comunidade e coleções", // "community.sub-collection-list.head": "Collections of this Community", - "community.sub-collection-list.head": "Coleções desta Comunidade", + "community.sub-collection-list.head": "Coleções desta comunidade", // "community.sub-community-list.head": "Communities of this Community", - "community.sub-community-list.head": "Comunidades desta Comunidade", - - + "community.sub-community-list.head": "Comunidades desta comunidade", // "cookies.consent.accept-all": "Accept all", "cookies.consent.accept-all": "Aceitar todos", @@ -1700,6 +1911,12 @@ // "cookies.consent.app.required.title": "(always required)", "cookies.consent.app.required.title": "(sempre necessária)", + // "cookies.consent.app.disable-all.description": "Use this switch to enable or disable all services.", + "cookies.consent.app.disable-all.description": "Utilize este interruptor para ativar ou desativar todos os serviços.", + + // "cookies.consent.app.disable-all.title": "Enable or disable all services", + "cookies.consent.app.disable-all.title": "Ativar ou desativar todos os serviços", + // "cookies.consent.update": "There were changes since your last visit, please update your consent.", "cookies.consent.update": "Existem alterações desde a sua última visita, atualize o seu consentimento.", @@ -1708,26 +1925,42 @@ // "cookies.consent.decline": "Decline", "cookies.consent.decline": "Rejeitar", + + // "cookies.consent.ok": "That's ok", + "cookies.consent.ok": "Concordo", + + // "cookies.consent.save": "Save", + "cookies.consent.save": "Guardar", + + // "cookies.consent.content-notice.title": "Cookie Consent", + "cookies.consent.content-notice.title": "Consentir cookies", // "cookies.consent.content-notice.description": "We collect and process your personal information for the following purposes: Authentication, Preferences, Acknowledgement and Statistics.
    To learn more, please read our {privacyPolicy}.", - "cookies.consent.content-notice.description": "Coletamos e processamos informação pessoal para os seguintes propósitos: Autenticação, Guardar Preferências, Termos de Uso e Estatísticas.
    To learn more, please read our {privacyPolicy}.", + "cookies.consent.content-notice.description": "Recolhemos e processamos informação pessoal para os seguintes propósitos: Autenticação, Guardar Preferências, Termos de Uso e Estatísticas.
    Para saber mais, por favor leia a nossa {privacyPolicy}.", + + // "cookies.consent.content-notice.description.no-privacy": "We collect and process your personal information for the following purposes: Authentication, Preferences, Acknowledgement and Statistics.", + "cookies.consent.content-notice.description.no-privacy": "Recolhemos e processamos as suas informações pessoais para os seguintes fins: Autenticação, Preferências, Reconhecimento e Estatísticas.", // "cookies.consent.content-notice.learnMore": "Customize", "cookies.consent.content-notice.learnMore": "Pesonalizar", // "cookies.consent.content-modal.description": "Here you can see and customize the information that we collect about you.", - "cookies.consent.content-modal.description": "Aqui pode ver e personalizar a informação pessoal que coletamos sobre si.", + "cookies.consent.content-modal.description": "Aqui pode ver e personalizar a informação pessoal que recolhemos sobre si.", // "cookies.consent.content-modal.privacy-policy.name": "privacy policy", "cookies.consent.content-modal.privacy-policy.name": "política de privacidade", // "cookies.consent.content-modal.privacy-policy.text": "To learn more, please read our {privacyPolicy}.", "cookies.consent.content-modal.privacy-policy.text": "Para saber mais, leia a {privacyPolicy}.", - + // "cookies.consent.content-modal.title": "Information that we collect", - "cookies.consent.content-modal.title": "Informação que coletamos", - + "cookies.consent.content-modal.title": "Informação que recolhemos", + // "cookies.consent.content-modal.services": "Services", + "cookies.consent.content-modal.services": "Serviços", + + // "cookies.consent.content-modal.service": "Service", + "cookies.consent.content-modal.service": "Serviço", // "cookies.consent.app.title.authentication": "Authentication", "cookies.consent.app.title.authentication": "Autenticação", @@ -1735,22 +1968,17 @@ // "cookies.consent.app.description.authentication": "Required for signing you in", "cookies.consent.app.description.authentication": "Obrigatório para iniciar sessão", - // "cookies.consent.app.title.preferences": "Preferences", "cookies.consent.app.title.preferences": "Preferências", // "cookies.consent.app.description.preferences": "Required for saving your preferences", "cookies.consent.app.description.preferences": "Obrigatório para guardar as suas preferências", - - // "cookies.consent.app.title.acknowledgement": "Acknowledgement", "cookies.consent.app.title.acknowledgement": "Termos de Uso", // "cookies.consent.app.description.acknowledgement": "Required for saving your acknowledgements and consents", - "cookies.consent.app.description.acknowledgement": "Requerido para guardar os Termos de uso e Consentimento", - - + "cookies.consent.app.description.acknowledgement": "Obrigatório para guardar os nossos 'Termos de Uso' e 'Consentimentos'", // "cookies.consent.app.title.google-analytics": "Google Analytics", "cookies.consent.app.title.google-analytics": "Google Analytics", @@ -1758,7 +1986,11 @@ // "cookies.consent.app.description.google-analytics": "Allows us to track statistical data", "cookies.consent.app.description.google-analytics": "Permite-nos rastrear dados estatísticos", - + // "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", + "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", + + // "cookies.consent.app.description.google-recaptcha": "We use google reCAPTCHA service during registration and password recovery", + "cookies.consent.app.description.google-recaptcha": "Utilizamos o serviço Google reCAPTCHA durante o registo e recuperação de palavra-passe", // "cookies.consent.purpose.functional": "Functional", "cookies.consent.purpose.functional": "Funcional", @@ -1766,15 +1998,23 @@ // "cookies.consent.purpose.statistical": "Statistical", "cookies.consent.purpose.statistical": "Estatísticos", + // "cookies.consent.purpose.registration-password-recovery": "Registration and Password recovery", + "cookies.consent.purpose.registration-password-recovery": "Registo e recuperação de senha", - // "curation-task.task.checklinks.label": "Check Links in Metadata", - "curation-task.task.checklinks.label": "Verifica ligações nos metadados", + // "cookies.consent.purpose.sharing": "Sharing", + "cookies.consent.purpose.sharing": "Partilha", + + // "curation-task.task.citationpage.label": "Generate Citation Page", + "curation-task.task.citationpage.label": "Gerar página de citações", + + // "curation-task.task.checklinks.label": "Check Links in Metadata", + "curation-task.task.checklinks.label": "Verifica ligações nos metadados", // "curation-task.task.noop.label": "NOOP", "curation-task.task.noop.label": "NOOP", // "curation-task.task.profileformats.label": "Profile Bitstream Formats", - "curation-task.task.profileformats.label": "Perfil dos Formatos de Ficheiro", + "curation-task.task.profileformats.label": "Perfil dos formatos de ficheiro", // "curation-task.task.requiredmetadata.label": "Check for Required Metadata", "curation-task.task.requiredmetadata.label": "Verifica metadados obrigatórios", @@ -1783,15 +2023,16 @@ "curation-task.task.translate.label": "Tradutor Microsoft", // "curation-task.task.vscan.label": "Virus Scan", - "curation-task.task.vscan.label": "Scan de Vírus", - - + "curation-task.task.vscan.label": "Scan de vírus", + + // "curation-task.task.register-doi.label": "Register DOI", + "curation-task.task.register-doi.label": "Registo DOI", // "curation.form.task-select.label": "Task:", "curation.form.task-select.label": "Tarefa:", // "curation.form.submit": "Start", - "curation.form.submit": "Início", + "curation.form.submit": "Iniciar", // "curation.form.submit.success.head": "The curation task has been started successfully", "curation.form.submit.success.head": "A tarefa de curadoria iniciou com sucesso", @@ -1805,13 +2046,35 @@ // "curation.form.submit.error.content": "An error occured when trying to start the curation task.", "curation.form.submit.error.content": "Ocorreu um erro ao tentar iniciar a tarefa de curadoria.", + // "curation.form.submit.error.invalid-handle": "Couldn't determine the handle for this object", + "curation.form.submit.error.invalid-handle": "Não foi possível determinar o handle para este objecto", + // "curation.form.handle.label": "Handle:", "curation.form.handle.label": "Handle:", // "curation.form.handle.hint": "Hint: Enter [your-handle-prefix]/0 to run a task across entire site (not all tasks may support this capability)", "curation.form.handle.hint": "Dica: Introduza [o-seu-prefixo-handle]/0 para executar a tarefa em todo o repositório (nem todas as tarefas são compatíveis com esta opção)", + // "deny-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I regret to inform you that it's not possible to send you a copy of the file(s) you have requested, concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", + "deny-request-copy.email.message": "Caro {{ recipientName }},\ em resposta ao seu pedido, lamento informá-lo que não me é possível enviar-lhe uma cópia do(s) Ficheiro(s) que solicitou, relativamente ao documento: \"{{ itemUrl }}\" ({{ itemName }}), do qual sou autor.\n\n Com os melhores cumprimentos,\n {{ authorName }} <{{ authorEmail }}>", + + // "deny-request-copy.email.subject": "Request copy of document", + "deny-request-copy.email.subject": "Solicitar cópia ao autor", + + // "deny-request-copy.error": "An error occurred", + "deny-request-copy.error": "Ocorreu um erro!", + // "deny-request-copy.header": "Deny document copy request", + "deny-request-copy.header": "Declinar o pedido de cópia", + + // "deny-request-copy.intro": "This message will be sent to the applicant of the request", + "deny-request-copy.intro": "Esta será a mensagem enviada ao requerente do pediodo de cópia:", + + // "deny-request-copy.success": "Successfully denied item request", + "deny-request-copy.success": "Pedido de cópia recusado com sucesso!", + + // "dso.name.untitled": "Untitled", + "dso.name.untitled": "Sem título", // "dso-selector.create.collection.head": "New collection", "dso-selector.create.collection.head": "Nova coleção", @@ -1822,6 +2085,9 @@ // "dso-selector.create.community.head": "New community", "dso-selector.create.community.head": "Nova comunidade", + // "dso-selector.create.community.or-divider": "or", + "dso-selector.create.community.or-divider": "ou", + // "dso-selector.create.community.sub-level": "Create a new community in", "dso-selector.create.community.sub-level": "Criar uma nova coleção em", @@ -1835,7 +2101,7 @@ "dso-selector.create.item.sub-level": "Criar um novo item em", // "dso-selector.create.submission.head": "New submission", - "dso-selector.create.submission.head": "Nova submissão", + "dso-selector.create.submission.head": "Novo depósito", // "dso-selector.edit.collection.head": "Edit collection", "dso-selector.edit.collection.head": "Editar coleção", @@ -1846,8 +2112,17 @@ // "dso-selector.edit.item.head": "Edit item", "dso-selector.edit.item.head": "Editar item", + // "dso-selector.error.title": "An error occurred searching for a {{ type }}", + "dso-selector.error.title": "Ocorreu um erro ao procurar por um(a) {{ type }}", + // "dso-selector.export-metadata.dspaceobject.head": "Export metadata from", - "dso-selector.export-metadata.dspaceobject.head": "Exportar metadados de ", + "dso-selector.export-metadata.dspaceobject.head": "Exportar metadados de", + + // "dso-selector.export-batch.dspaceobject.head": "Export Batch (ZIP) from", + "dso-selector.export-batch.dspaceobject.head": "Exportar lote (ZIP) de", + + // "dso-selector.import-batch.dspaceobject.head": "Import batch from", + "dso-selector.import-batch.dspaceobject.head": "Importar lote de", // "dso-selector.no-results": "No {{ type }} found", "dso-selector.no-results": "Nenhum(a) {{ type }} encontrado(a)", @@ -1855,8 +2130,75 @@ // "dso-selector.placeholder": "Search for a {{ type }}", "dso-selector.placeholder": "Pesquisar por um(a) {{ type }}", + // "dso-selector.select.collection.head": "Select a collection", + "dso-selector.select.collection.head": "Selecione uma coleção", + + // "dso-selector.set-scope.community.head": "Select a search scope", + "dso-selector.set-scope.community.head": "Selecione uma pesquisa", + + // "dso-selector.set-scope.community.button": "Search all of DSpace", + "dso-selector.set-scope.community.button": "Pesquisar todo o repositório", + + // "dso-selector.set-scope.community.or-divider": "or", + "dso-selector.set-scope.community.or-divider": "ou", + + // "dso-selector.set-scope.community.input-header": "Search for a community or collection", + "dso-selector.set-scope.community.input-header": "Pesquisar por uma comunidade ou coleção", + // "dso-selector.claim.item.head": "Profile tips", + "dso-selector.claim.item.head": "Dicas de Perfil", + + // "dso-selector.claim.item.body": "These are existing profiles that may be related to you. If you recognize yourself in one of these profiles, select it and on the detail page, among the options, choose to claim it. Otherwise you can create a new profile from scratch using the button below.", + "dso-selector.claim.item.body": "Estes são os perfis existentes que poderão estar relacionados consigo. Se se identificar num destes perfis, selecione-o e na página de detalhes, entre as opções, pode reivindicá-lo. Caso contrário, pode criar um novo perfil de raiz, selecionando o botão em baixo.", + + // "dso-selector.claim.item.not-mine-label": "None of these are mine", + "dso-selector.claim.item.not-mine-label": "Nenhum destes é meu", + + // "dso-selector.claim.item.create-from-scratch": "Create a new one", + "dso-selector.claim.item.create-from-scratch": "Criar novo", + // "dso-selector.results-could-not-be-retrieved": "Something went wrong, please refresh again", + "dso-selector.results-could-not-be-retrieved": "Algo correu mal, por favor repita", + + // "supervision-group-selector.header": "supervision Group Selector", + "supervision-group-selector.header": "Seletor de grupos de supervisão", + + // "supervision-group-selector.select.type-of-order.label": "Select a type of Order", + "supervision-group-selector.select.type-of-order.label": "Selecione um tipo de ordem", + + // "supervision-group-selector.select.type-of-order.option.none": "NONE", + "supervision-group-selector.select.type-of-order.option.none": "NENHUM", + + // "supervision-group-selector.select.type-of-order.option.editor": "EDITOR", + "supervision-group-selector.select.type-of-order.option.editor": "EDITOR", + + // "supervision-group-selector.select.type-of-order.option.observer": "OBSERVER", + "supervision-group-selector.select.type-of-order.option.observer": "OBSERVADOR", + + // "supervision-group-selector.select.group.label": "Select a Group", + "supervision-group-selector.select.group.label": "Selecionar um grupo", + + // "supervision-group-selector.button.cancel": "Cancel", + "supervision-group-selector.button.cancel": "Cancelar", + + // "supervision-group-selector.button.save": "Save", + "supervision-group-selector.button.save": "Guardar", + + // "supervision-group-selector.select.type-of-order.error": "Please select a type of order", + "supervision-group-selector.select.type-of-order.error": "Por favor, selecione um tipo de ordem", + + // "supervision-group-selector.select.group.error": "Please select a group", + "supervision-group-selector.select.group.error": "Por favor selecione um grupo", + + // "supervision-group-selector.notification.create.success.title": "Successfully created supervision order for group {{ name }}", + "supervision-group-selector.notification.create.success.title": "Criada com sucesso ordem de supervisão para o grupo {{ name }}", + + // "supervision-group-selector.notification.create.failure.title": "error", + "supervision-group-selector.notification.create.failure.title": "erro", + + // "supervision-group-selector.notification.create.already-existing" : "A supervision order already exists on this item for selected group", + "supervision-group-selector.notification.create.already-existing" : "Já existe uma ordem de supervisão sobre este item para grupo selecionado", + // "confirmation-modal.export-metadata.header": "Export metadata for {{ dsoName }}", "confirmation-modal.export-metadata.header": "Exportar metadados para {{ dsoName }}", @@ -1869,6 +2211,18 @@ // "confirmation-modal.export-metadata.confirm": "Export", "confirmation-modal.export-metadata.confirm": "Exportar", + // "confirmation-modal.export-batch.header": "Export batch (ZIP) for {{ dsoName }}", + "confirmation-modal.export-batch.header": "Exportar lote (ZIP) para {{ dsoName }}", + + // "confirmation-modal.export-batch.info": "Are you sure you want to export batch (ZIP) for {{ dsoName }}", + "confirmation-modal.export-batch.info": "Tem a certeza que quer exportar lote (ZIP) para {{ dsoName }}", + + // "confirmation-modal.export-batch.cancel": "Cancel", + "confirmation-modal.export-batch.cancel": "Cancelar", + + // "confirmation-modal.export-batch.confirm": "Export", + "confirmation-modal.export-batch.confirm": "Exportar", + // "confirmation-modal.delete-eperson.header": "Delete EPerson \"{{ dsoName }}\"", "confirmation-modal.delete-eperson.header": "Apagar Utilizador \"{{ dsoName }}\"", @@ -1881,79 +2235,116 @@ // "confirmation-modal.delete-eperson.confirm": "Delete", "confirmation-modal.delete-eperson.confirm": "Apagar", + // "confirmation-modal.delete-profile.header": "Delete Profile", + "confirmation-modal.delete-profile.header": "Apagar perfil", + + // "confirmation-modal.delete-profile.info": "Are you sure you want to delete your profile", + "confirmation-modal.delete-profile.info": "Tem certeza que pretende apagar o seu perfil", + + // "confirmation-modal.delete-profile.cancel": "Cancel", + "confirmation-modal.delete-profile.cancel": "Cancelar", + + // "confirmation-modal.delete-profile.confirm": "Delete", + "confirmation-modal.delete-profile.confirm": "Apagar", + + // "confirmation-modal.delete-subscription.header": "Delete Subscription", + "confirmation-modal.delete-subscription.header": "Apagar subscrição", + // "confirmation-modal.delete-subscription.info": "Are you sure you want to delete subscription for \"{{ dsoName }}\"", + "confirmation-modal.delete-subscription.info": "Tem a certeza de que pretende apagar a subscrição de \"{{ dsoName }}\"", + + // "confirmation-modal.delete-subscription.cancel": "Cancel", + "confirmation-modal.delete-subscription.cancel": "Cancelar", + + // "confirmation-modal.delete-subscription.confirm": "Delete", + "confirmation-modal.delete-subscription.confirm": "Apagar", + // "error.bitstream": "Error fetching bitstream", - "error.bitstream": "Erro ao aceder ao ficheiro", + "error.bitstream": "Erro ao aceder ao ficheiro!", // "error.browse-by": "Error fetching items", - "error.browse-by": "Erro ao carregar itens", + "error.browse-by": "Erro ao carregar itens!", // "error.collection": "Error fetching collection", - "error.collection": "Erro ao carregar coleção", + "error.collection": "Erro ao carregar coleção!", // "error.collections": "Error fetching collections", - "error.collections": "Erro ao carregar coleções", + "error.collections": "Erro ao carregar coleções!", // "error.community": "Error fetching community", - "error.community": "Erro ao carregar comunidade", + "error.community": "Erro ao carregar comunidade!", // "error.identifier": "No item found for the identifier", - "error.identifier": "Nenhum item encontrado para o identificador", + "error.identifier": "Nenhum item encontrado para o identificador!", // "error.default": "Error", - "error.default": "Erro", + "error.default": "Erro!", // "error.item": "Error fetching item", - "error.item": "Erro ao carregar item", + "error.item": "Erro ao carregar item!", // "error.items": "Error fetching items", - "error.items": "Erro ao carregar itens", + "error.items": "Erro ao carregar itens!", // "error.objects": "Error fetching objects", - "error.objects": "Erro ao carregar objetos", + "error.objects": "Erro ao carregar objetos!", // "error.recent-submissions": "Error fetching recent submissions", - "error.recent-submissions": "Erro ao carregar as submissões recentes", + "error.recent-submissions": "Erro ao carregar depósitos recentes!", // "error.search-results": "Error fetching search results", - "error.search-results": "Erro ao carregar os resultados da pesquisa", + "error.search-results": "Erro ao carregar os resultados da pesquisa!", + + // "error.invalid-search-query": "Search query is not valid. Please check Solr query syntax best practices for further information about this error.", + "error.invalid-search-query": "A query da pesquisa não é válida! Por favor verifique Solr query syntax best practices for further information about this error.", // "error.sub-collections": "Error fetching sub-collections", - "error.sub-collections": "Erro ao carregar sub-coleções", + "error.sub-collections": "Erro ao carregar sub-coleções!", // "error.sub-communities": "Error fetching sub-communities", - "error.sub-communities": "Erro ao carregar sub-comunidade", + "error.sub-communities": "Erro ao carregar sub-comunidade!", // "error.submission.sections.init-form-error": "An error occurred during section initialize, please check your input-form configuration. Details are below :

    ", - "error.submission.sections.init-form-error": "Ocorreu um erro durante a Secção de inicialização, por favor verifique sua configuração de input-form. Detalhes estão abaixo :

    ", + "error.submission.sections.init-form-error": "Ocorreu um erro durante a seção de inicialização, por favor verifique sua configuração de 'input-form'. Detalhes estão abaixo :

    ", // "error.top-level-communities": "Error fetching top-level communities", - "error.top-level-communities": "Erro ao carregar as comunidade de nível superior", + "error.top-level-communities": "Erro ao carregar as comunidade de nível superior!", // "error.validation.license.notgranted": "You must grant this license to complete your submission. If you are unable to grant this license at this time you may save your work and return later or remove the submission.", - "error.validation.license.notgranted": "Você deve concordar com esta licença para completar sua submissão. Se vocẽ não estiver de acordo com esta licença neste momento você pode salvar seu trabalho para continuar depois ou remover a submissão.", + "error.validation.license.notgranted": "Deve concordar com esta licença para completar o depósito. Se não estiver de acordo com a licença ou pretende ponderar, pode guardar este trabalho e retomar posteriormente, ou remover definitivamente este depósito.", // "error.validation.pattern": "This input is restricted by the current pattern: {{ pattern }}.", "error.validation.pattern": "Este campo está restrito ao seguinte padrão: {{ pattern }}.", // "error.validation.filerequired": "The file upload is mandatory", - "error.validation.filerequired": "O carregamento de ficheiros é obrigatório", + "error.validation.filerequired": "O carregamento de ficheiros é obrigatório!", + // "error.validation.required": "This field is required", + "error.validation.required": "Este campo é de preenchimento obrigatório!", + + // "error.validation.NotValidEmail": "This E-mail is not a valid email", + "error.validation.NotValidEmail": "Este endereço de correio electrónico não é válido!", + + // "error.validation.emailTaken": "This E-mail is already taken", + "error.validation.emailTaken": "Este endereço de correio electrónico já se encontra atribuido!", + + // "error.validation.groupExists": "This group already exists", + "error.validation.groupExists": "Este grupo já existe!", + // "feed.description": "Syndication feed", + "feed.description": "Feed", // "file-section.error.header": "Error obtaining files for this item", - "file-section.error.header": "Erro ao obter ficheiros para este item", - - + "file-section.error.header": "Erro na obteção de ficheiros para este item!", // "footer.copyright": "copyright © 2002-{{ year }}", - "footer.copyright": "copyright © 2002-{{ year }}", + "footer.copyright": "Copyright © 2003-{{ year }}", // "footer.link.dspace": "DSpace software", "footer.link.dspace": "Software DSpace", // "footer.link.lyrasis": "LYRASIS", - "footer.link.lyrasis": "LYRASIS", + "footer.link.lyrasis": "LYRASIS", // "footer.link.cookies": "Cookie settings", "footer.link.cookies": "Configurações de Cookies", @@ -1962,94 +2353,88 @@ "footer.link.privacy-policy": "Política de Privacidade", // "footer.link.end-user-agreement":"End User Agreement", - "footer.link.end-user-agreement":"Termos de uso", - + "footer.link.end-user-agreement":"Termos de Uso", + // "footer.link.feedback":"Send Feedback", + "footer.link.feedback":"Contacte-nos", // "forgot-email.form.header": "Forgot Password", - "forgot-email.form.header": "Esqueci a palavra-chave", - - // "forgot-email.form.info": "Enter Register an account to subscribe to collections for email updates, and submit new items to DSpace.", - "forgot-email.form.info": "Registe-se para subscrever notificações de novos itens nas coleções por email assim como submeter itens no repositório.", + "forgot-email.form.header": "Esqueci a senha", + + // "forgot-email.form.info": "Enter the email address associated with the account.", + "forgot-email.form.info": "Caso tenha esquecido a sua senha de acesso poderá recuperá-la, para o efeito basta introduzir em baixo o seu endereço de correio electrónico associado.", // "forgot-email.form.email": "Email Address *", - "forgot-email.form.email": "Endereço Eletrónico *", + "forgot-email.form.email": "Endereço de correio eletrónico *", // "forgot-email.form.email.error.required": "Please fill in an email address", "forgot-email.form.email.error.required": "Indique um endereço de correio eletrónico", - // "forgot-email.form.email.error.pattern": "Please fill in a valid email address", - "forgot-email.form.email.error.pattern": "Indique um endereço de correio eletrónico válido", + // "forgot-email.form.email.error.not-email-form": "Please fill in a valid email address", + "forgot-email.form.email.error.not-email-form": "Indique um endereço de correio eletrónico válido", - // "forgot-email.form.email.hint": "This address will be verified and used as your login name.", - "forgot-email.form.email.hint": "Este endereço de correio eletrónico será validado e usado como o seu nome de Utilizador para autenticação.", + // "forgot-email.form.email.hint": "An email will be sent to this address with a further instructions.", + "forgot-email.form.email.hint": "Será enviada uma mensagem para este endereço de correio electrónico com mais instruções", - // "forgot-email.form.submit": "Submit", - "forgot-email.form.submit": "Guardar", - - // "forgot-email.form.success.head": "Verification email sent", - "forgot-email.form.success.head": "Email de Confirmação enviado", + // "forgot-email.form.submit": "Reset password", + "forgot-email.form.submit": "Repor senha de acesso", + // "forgot-email.form.success.head": "Password reset email sent", + "forgot-email.form.success.head": "Foi enviada mensagem para redefinição da senha de acesso", + // "forgot-email.form.success.content": "An email has been sent to {{ email }} containing a special URL and further instructions.", - "forgot-email.form.success.content": "Foi enviado uma mensagem para {{ email }} com instruções e um endereço de validação da sua conta de Utilizador.", - - // "forgot-email.form.error.head": "Error when trying to register email", - "forgot-email.form.error.head": "Erro ao tentar registar este email", - - // "forgot-email.form.error.content": "An error occured when registering the following email address: {{ email }}", - "forgot-email.form.error.content": "Ocorreu um erro ao tentar registar o seguinte endereço de correio eletrónico: {{ email }}", - - + "forgot-email.form.success.content": "Foi enviado uma mensagem para {{ email }} com instruções e um endereço para validação da sua conta de utilizador.", + // "forgot-email.form.error.head": "Error when trying to reset password", + "forgot-email.form.error.head": "Ocorreu um erro ao tentar redefinir a senha de acesso", + + // "forgot-email.form.error.content": "An error occured when attempting to reset the password for the account associated with the following email address: {{ email }}", + "forgot-email.form.error.content": "Ocorreu um erro ao tentar redefinir a senha de acesso da conta associada com o seguinte endereço de email: {{ email }}", + // "forgot-password.title": "Forgot Password", - "forgot-password.title": "Esqueci a palavra-chave", + "forgot-password.title": "Esqueci a senha de acesso", // "forgot-password.form.head": "Forgot Password", - "forgot-password.form.head": "Esqueci a palavra-chave", + "forgot-password.form.head": "Esqueci a Senha de acesso", - // "forgot-password.form.info": "Enter a new password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", - "forgot-password.form.info": "Introduza uma nova palavra-chave na caixa abaixo, e depois confirme introduzindo de novo na segunda caixa. Deverá ter pelo menos 6 caracteres.", + // "forgot-password.form.info": "Enter a new password in the box below, and confirm it by typing it again into the second box.", + "forgot-password.form.info": "Introduza uma nova senha na caixa em baixo, e depois confirme introduzindo de novo na segunda caixa. Deverá ter pelo menos 6 caracteres.", // "forgot-password.form.card.security": "Security", - "forgot-password.form.card.security": "Segurança", + "forgot-password.form.card.security": "Senha de acesso", // "forgot-password.form.identification.header": "Identify", "forgot-password.form.identification.header": "Identificação", // "forgot-password.form.identification.email": "Email address: ", - "forgot-password.form.identification.email": "Endereço eletrónico: ", + "forgot-password.form.identification.email": "Endereço de correio eletrónico: ", // "forgot-password.form.label.password": "Password", "forgot-password.form.label.password": "Palavra-chave", // "forgot-password.form.label.passwordrepeat": "Retype to confirm", - "forgot-password.form.label.passwordrepeat": "Digite novamente para confirmar", + "forgot-password.form.label.passwordrepeat": "Insira a senha novamente para confirmar", // "forgot-password.form.error.empty-password": "Please enter a password in the box below.", - "forgot-password.form.error.empty-password": "Indique uma palavra-chave na caixa abaixo.", + "forgot-password.form.error.empty-password": "Indique uma senha na caixa abaixo.", // "forgot-password.form.error.matching-passwords": "The passwords do not match.", - "forgot-password.form.error.matching-passwords": "As palavras-chave não coincidem.", - - // "forgot-password.form.error.password-length": "The password should be at least 6 characters long.", - "forgot-password.form.error.password-length": "A palavra-chave deve ter pelo menos 6 caracteres.", + "forgot-password.form.error.matching-passwords": "As palavras de acesso não coincidem.", // "forgot-password.form.notification.error.title": "Error when trying to submit new password", - "forgot-password.form.notification.error.title": "Erro ao submeter nova palavra-chave", + "forgot-password.form.notification.error.title": "Erro ao submeter nova senha de acesso", // "forgot-password.form.notification.success.content": "The password reset was successful. You have been logged in as the created user.", - "forgot-password.form.notification.success.content": "A recuperação da palavra-chave foi efetuada com sucesso. Foi iniciada sessão com o Utilizador criado.", + "forgot-password.form.notification.success.content": "A recuperação da senha foi efetuada com sucesso. Foi iniciada sessão com o utilizador criado.", // "forgot-password.form.notification.success.title": "Password reset completed", - "forgot-password.form.notification.success.title": "recuperação da palavra-chave efetuada com sucesso", + "forgot-password.form.notification.success.title": "Recuperação da senha efetuada com sucesso", // "forgot-password.form.submit": "Submit password", - "forgot-password.form.submit": "Enviar palavra-chave", + "forgot-password.form.submit": "Enviar senha", - - - // "form.add": "Add", - "form.add": "Adicionar", + // "form.add": "Add more", + "form.add": "Adicionar mais", // "form.add-help": "Click here to add the current entry and to add another one", "form.add-help": "Clique aqui para submeter esta entrada e adicionar uma nova", @@ -2063,6 +2448,12 @@ // "form.clear-help": "Click here to remove the selected value", "form.clear-help": "Clique aqui para apagar o valor selecionado", + // "form.discard": "Discard", + "form.discard": "Cancelar", + + // "form.drag": "Drag", + "form.drag": "Arrastar", + // "form.edit": "Edit", "form.edit": "Editar", @@ -2088,13 +2479,13 @@ "form.last-name": "Último nome", // "form.loading": "Loading...", - "form.loading": "Carregando...", + "form.loading": "carregando...", // "form.lookup": "Lookup", "form.lookup": "Consulta", // "form.lookup-help": "Click here to look up an existing relation", - "form.lookup-help": "Clique para consultar as relações existentes", + "form.lookup-help": "Clique para consultar relações existentes", // "form.no-results": "No results found", "form.no-results": "Nenhum resultado encontrado", @@ -2109,45 +2500,172 @@ "form.remove": "Apagar", // "form.save": "Save", - "form.save": "Salvar", + "form.save": "Guardar", // "form.save-help": "Save changes", - "form.save-help": "Salvar alterações", + "form.save-help": "Guardar alterações", // "form.search": "Search", "form.search": "Pesquisar", // "form.search-help": "Click here to look for an existing correspondence", "form.search-help": "Clique aqui para procurar por uma correspondência", + + // "form.submit": "Save", + // "form.submit": "Guardar", + + // "form.repeatable.sort.tip": "Drop the item in the new position", + "form.repeatable.sort.tip": "Largue o item na nova posição", + + // "grant-deny-request-copy.deny": "Don't send copy", + "grant-deny-request-copy.deny": "Não enviar cópia", + + // "grant-deny-request-copy.email.back": "Back", + "grant-deny-request-copy.email.back": "Voltar", + + // "grant-deny-request-copy.email.message": "Message", + "grant-deny-request-copy.email.message": "Mensagem", + + // "grant-deny-request-copy.email.message.empty": "Please enter a message", + "grant-deny-request-copy.email.message.empty": "Por favor insira uma mensagem", + + // "grant-deny-request-copy.email.permissions.info": "You may use this occasion to reconsider the access restrictions on the document, to avoid having to respond to these requests. If you’d like to ask the repository administrators to remove these restrictions, please check the box below.", + "grant-deny-request-copy.email.permissions.info": "Pode aproveitar esta ocasião para reconsiderar o tipo acesso atualmente associado ao documento, para evitar ter que responder a este tipo de pedidos. Se quiser retirar a restrição de acesso/embargo do documento, por favor preencha a seguinte caixa.", + + // "grant-deny-request-copy.email.permissions.label": "Change to open access", + "grant-deny-request-copy.email.permissions.label": "Mudar para acesso aberto", + + // "grant-deny-request-copy.email.send": "Send", + "grant-deny-request-copy.email.send": "Enviar", + + // "grant-deny-request-copy.email.subject": "Subject", + "grant-deny-request-copy.email.subject": "Assunto:", + + // "grant-deny-request-copy.email.subject.empty": "Please enter a subject", + "grant-deny-request-copy.email.subject.empty": "Por favor, introduza o assunto", + + // "grant-deny-request-copy.grant": "Send copy", + "grant-deny-request-copy.grant": "Enviar cópia", + + // "grant-deny-request-copy.header": "Document copy request", + "grant-deny-request-copy.header": "Pedido de cópia", + + // "grant-deny-request-copy.home-page": "Take me to the home page", + "grant-deny-request-copy.home-page": "Voltar para página inicial", + + // "grant-deny-request-copy.intro1": "If you are one of the authors of the document {{ name }}, then please use one of the options below to respond to the user's request.", + "grant-deny-request-copy.intro1": "Se não é um dos autores do documento {{ name }}, por favor use uma seguintes opções para responder ao pedido do utilizador.", + + // "grant-deny-request-copy.intro2": "After choosing an option, you will be presented with a suggested email reply which you may edit.", + "grant-deny-request-copy.intro2": "Depois de escolher uma opção, ser-lhe-á apresentado um um texto de resposta padrão que poderá editar.", + + // "grant-deny-request-copy.processed": "This request has already been processed. You can use the button below to get back to the home page.", + "grant-deny-request-copy.processed": "Este pedido já foi processado. Pode utilizar o botão em baixo para voltar para a página principal.", + + // "grant-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I have the pleasure to send you in attachment a copy of the file(s) concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", + "grant-request-copy.email.message": "Caro {{ recipientName }},\nEm resposta ao seu pedido de cópia, tenho o prazer de lhe enviar em anexo uma cópia do(s) ficheiro(s) relativo(s) ao documento: \"{{ itemUrl }}\" ({{ itemName }}), do qual sou autor.\n\nCom os melhores cumprimentos,\n{{ authorName }} <{{ authorEmail }}>", + + // "grant-request-copy.email.subject": "Request copy of document", + "grant-request-copy.email.subject": "Pedido de cópia de documento", + + // "grant-request-copy.error": "An error occurred", + "grant-request-copy.error": "Ocorreu um erro", + + // "grant-request-copy.header": "Grant document copy request", + "grant-request-copy.header": "Conceder cópia de documento", + + // "grant-request-copy.intro": "This message will be sent to the applicant of the request. The requested document(s) will be attached.", + "grant-request-copy.intro": "Esta mensagem será enviada ao requerente do pedido de cópia. Os ficheiros solicitado(s) serão anexado(s) à mensagem.", + + // "grant-request-copy.success": "Successfully granted item request", + "grant-request-copy.success": "Pedido de cópia concedido com sucesso!", - // "form.submit": "Submit", - "form.submit": "Guardar", - + // "health.breadcrumbs": "Health", + "health.breadcrumbs": "Diagnóstico do sistema", + + // "health-page.heading": "Health", + "health-page.heading": "Diagnóstico do sistema", + + // "health-page.info-tab": "Info", + "health-page.info-tab": "Info", + + // "health-page.status-tab": "Status", + "health-page.status-tab": "Estado", + + // "health-page.error.msg": "The health check service is temporarily unavailable", + "health-page.error.msg": "O serviço de diagnóstico está temporariamente indisponível", + // "health-page.property.status": "Status code", + "health-page.property.status": "Código Estado", + + // "health-page.section.db.title": "Database", + "health-page.section.db.title": "Base Dados", + + // "health-page.section.geoIp.title": "GeoIp", + "health-page.section.geoIp.title": "GeoIp", + + // "health-page.section.solrAuthorityCore.title": "Solr: authority core", + "health-page.section.solrAuthorityCore.title": "Solr: authority core", + + // "health-page.section.solrOaiCore.title": "Solr: oai core", + "health-page.section.solrOaiCore.title": "Solr: OAI core", + + // "health-page.section.solrSearchCore.title": "Solr: search core", + "health-page.section.solrSearchCore.title": "Solr: Search core", + + // "health-page.section.solrStatisticsCore.title": "Solr: statistics core", + "health-page.section.solrStatisticsCore.title": "Solr: statistics core", + + // "health-page.section-info.app.title": "Application Backend", + "health-page.section-info.app.title": "Aplicação Backend", + + // "health-page.section-info.java.title": "Java", + "health-page.section-info.java.title": "Java", + + // "health-page.status": "Status", + "health-page.status": "Estado", + + // "health-page.status.ok.info": "Operational", + "health-page.status.ok.info": "Operacional", + + // "health-page.status.error.info": "Problems detected", + "health-page.status.error.info": "Problemas detetados", + + // "health-page.status.warning.info": "Possible issues detected", + "health-page.status.warning.info": "Possíveis problemas detetados", + + // "health-page.title": "Health", + "health-page.title": "Diagnóstico do sistema", + + // "health-page.section.no-issues": "No issues detected", + "health-page.section.no-issues": "Nenhum problema detetado", // "home.description": "", "home.description": "", // "home.breadcrumbs": "Home", - "home.breadcrumbs": "Principal", + "home.breadcrumbs": "Página inicial", - // "home.title": "DSpace Angular :: Home", - "home.title": "DSpace :: Início", + //"home.search-form.placeholder": "Search the repository...", + "home.search-form.placeholder": "pesquisar no repositório...", + + // "home.title": "Home", + "home.title": "Página inicial", - // "home.top-level-communities.head": "Communities in DSpace", + // "home.top-level-communities.head": "Communities in DSpace", "home.top-level-communities.head": "Comunidades", // "home.top-level-communities.help": "Select a community to browse its collections.", "home.top-level-communities.help": "Selecione uma comunidade para navegar nas suas coleções", // "info.end-user-agreement.accept": "I have read and I agree to the End User Agreement", - "info.end-user-agreement.accept": "Li e aceito os Termos de Uso", + "info.end-user-agreement.accept": "Li e aceito os 'Termos de Uso'", // "info.end-user-agreement.accept.error": "An error occurred accepting the End User Agreement", - "info.end-user-agreement.accept.error": "Ocorreu um erro ao aceitar os Termos de Uso", + "info.end-user-agreement.accept.error": "Ocorreu um erro ao aceitar os 'Termos de Uso'", // "info.end-user-agreement.accept.success": "Successfully updated the End User Agreement", - "info.end-user-agreement.accept.success": "Termos de Uso atualizados com sucesso", + "info.end-user-agreement.accept.success": "'Termos de Uso' atualizados com sucesso", // "info.end-user-agreement.breadcrumbs": "End User Agreement", "info.end-user-agreement.breadcrumbs": "Termos de Uso", @@ -2159,7 +2677,7 @@ "info.end-user-agreement.buttons.save": "Guardar", // "info.end-user-agreement.head": "End User Agreement", - "info.end-user-agreement.head": "Termos de Uso", + "info.end-user-agreement.head": "Termos de Uso", // "info.end-user-agreement.title": "End User Agreement", "info.end-user-agreement.title": "Termos de Uso", @@ -2173,36 +2691,67 @@ // "info.privacy.title": "Privacy Statement", "info.privacy.title": "Política de Privacidade", - - - // "item.alerts.private": "This item is private", + // "info.feedback.breadcrumbs": "Feedback", + "info.feedback.breadcrumbs": "Contacte-nos", + + // "info.feedback.head": "Feedback", + "info.feedback.head": "Contacte-nos", + + // "info.feedback.title": "Feedback", + "info.feedback.title": "Contacte-nos", + + // "info.feedback.info": "Thanks for sharing your feedback about the DSpace system. Your comments are appreciated!", + "info.feedback.info": "Agradecemos de antemão pelo seu contacto e interesse, as suas mensagens, comentários ou sugestões são sempre bem-vindas!", + + // "info.feedback.email_help": "This address will be used to follow up on your feedback.", + "info.feedback.email_help": "Este endereço de correio eletrónico será utilizado para dar seguimento à sua mensagem.", + + // "info.feedback.send": "Send Feedback", + "info.feedback.send": "Enviar mensagem", + + // "info.feedback.comments": "Comments", + "info.feedback.comments": "A sua mensagem", + + // "info.feedback.email-label": "Your Email", + "info.feedback.email-label": "O seu endereço de correio electrónico:", + + // "info.feedback.create.success" : "Feedback Sent Successfully!", + "info.feedback.create.success" : "Mensagem enviada com sucesso!", + + // "info.feedback.error.email.required" : "A valid email address is required", + "info.feedback.error.email.required" : "Deve inserir um endereço de correio electrónico válido", + + // "info.feedback.error.message.required" : "A comment is required", + "info.feedback.error.message.required" : "Deve inserir uma mensagem", + + // "info.feedback.page-label" : "Page", + "info.feedback.page-label" : "Página/URL de contexo:", + + // "info.feedback.page_help" : "The page related to your feedback", + "info.feedback.page_help" : "Esta é a página/URL que contextualiza o seu contacto.", + + // "item.alerts.private": "This item is non-discoverable", "item.alerts.private": "Este item é privado", // "item.alerts.withdrawn": "This item has been withdrawn", "item.alerts.withdrawn": "Este item foi retirado", - - // "item.edit.authorizations.heading": "With this editor you can view and alter the policies of an item, plus alter policies of individual item components: bundles and bitstreams. Briefly, an item is a container of bundles, and bundles are containers of bitstreams. Containers usually have ADD/REMOVE/READ/WRITE policies, while bitstreams only have READ/WRITE policies.", - "item.edit.authorizations.heading": "Com este editor pode ver e alterar as políticas de um item, assim como alterar políticas de componentes individuais do item: pacotes e ficheiros. Em resumo, um item contém pacotes, e os pacotes contêm de ficheiros. Os pacotes possuem usualmente políticas de ADICIONAR/REMOVER/LER/ESCREVER enquanto que os ficheiros apenas políticas de LER/ESCREVER.", + "item.edit.authorizations.heading": "Com este editor pode ver e alterar as políticas de um item, bem como alterar políticas de componentes individuais do item: 'pacotes' (bundles) e 'ficheiros' (bitstreams). Em resumo, um item contém 'pacotes' e os pacotes contêm 'ficheiros'. Os pacotes usualmente possuem políticas de ADICIONAR/REMOVER/LER/ESCREVER, por outro lado, os ficheiros apenas possuem políticas de LER/ESCREVER.", // "item.edit.authorizations.title": "Edit item's Policies", "item.edit.authorizations.title": "Editar políticas dos itens", - - - // "item.badge.private": "Private", + // "item.badge.private": "Non-discoverable", "item.badge.private": "Privado", // "item.badge.withdrawn": "Withdrawn", - "item.badge.withdrawn": "Retirado", - - - + "item.badge.withdrawn": "Retirado", + // "item.bitstreams.upload.bundle": "Bundle", "item.bitstreams.upload.bundle": "Pacote", - // "item.bitstreams.upload.bundle.placeholder": "Select a bundle", + // "item.bitstreams.upload.bundle.placeholder": "Select a bundle or input new bundle name", "item.bitstreams.upload.bundle.placeholder": "Selecione um pacote", // "item.bitstreams.upload.bundle.new": "Create bundle", @@ -2225,20 +2774,18 @@ // "item.bitstreams.upload.notifications.bundle.created.title": "Created bundle", "item.bitstreams.upload.notifications.bundle.created.title": "Pacote criado", - + // "item.bitstreams.upload.notifications.upload.failed": "Upload failed. Please verify the content before retrying.", - "item.bitstreams.upload.notifications.upload.failed": "O carregamento falhou. Verifique o ficheiro antes de tentar carregar de novo.", + "item.bitstreams.upload.notifications.upload.failed": "O carregamento falhou. Verifique os ficheiro antes de tentar carregar de novo.", // "item.bitstreams.upload.title": "Upload bitstream", - "item.bitstreams.upload.title": "Carregar ficheiro", - - + "item.bitstreams.upload.title": "Carregar ficheiro(s)", // "item.edit.bitstreams.bundle.edit.buttons.upload": "Upload", "item.edit.bitstreams.bundle.edit.buttons.upload": "Carregar", // "item.edit.bitstreams.bundle.displaying": "Currently displaying {{ amount }} bitstreams of {{ total }}.", - "item.edit.bitstreams.bundle.displaying": "A apresentar atualmente {{ amount }} ficheiros de {{ total }}.", + "item.edit.bitstreams.bundle.displaying": "Atualmente a mostrar {{ amount }} ficheiros de {{ total }}.", // "item.edit.bitstreams.bundle.load.all": "Load all ({{ total }})", "item.edit.bitstreams.bundle.load.all": "Carregar todos ({{ total }})", @@ -2250,7 +2797,7 @@ "item.edit.bitstreams.bundle.name": "PACOTE: {{ name }}", // "item.edit.bitstreams.discard-button": "Discard", - "item.edit.bitstreams.discard-button": "Descartar", + "item.edit.bitstreams.discard-button": "Cancelar", // "item.edit.bitstreams.edit.buttons.download": "Download", "item.edit.bitstreams.edit.buttons.download": "Descarregar", @@ -2265,7 +2812,7 @@ "item.edit.bitstreams.edit.buttons.remove": "Remover", // "item.edit.bitstreams.edit.buttons.undo": "Undo changes", - "item.edit.bitstreams.edit.buttons.undo": "Descartar alterações", + "item.edit.bitstreams.edit.buttons.undo": "Cancelar alterações", // "item.edit.bitstreams.empty": "This item doesn't contain any bitstreams. Click the upload button to create one.", "item.edit.bitstreams.empty": "Este item não possui ficheiros. Carregue um novo ficheiro.", @@ -2316,7 +2863,7 @@ "item.edit.bitstreams.notifications.remove.saved.title": "Alterações de remoção guardadas", // "item.edit.bitstreams.reinstate-button": "Undo", - "item.edit.bitstreams.reinstate-button": "Descartar", + "item.edit.bitstreams.reinstate-button": "Cancelar", // "item.edit.bitstreams.save-button": "Save", "item.edit.bitstreams.save-button": "Guardar", @@ -2324,8 +2871,6 @@ // "item.edit.bitstreams.upload-button": "Upload", "item.edit.bitstreams.upload-button": "Carregar", - - // "item.edit.delete.cancel": "Cancel", "item.edit.delete.cancel": "Cancelar", @@ -2345,32 +2890,97 @@ "item.edit.delete.success": "O item foi apagado", // "item.edit.head": "Edit Item", - "item.edit.head": "Editar Item", + "item.edit.head": "Editar item", // "item.edit.breadcrumbs": "Edit Item", - "item.edit.breadcrumbs": "Editar Item", + "item.edit.breadcrumbs": "Editar item", + // "item.edit.tabs.disabled.tooltip": "You're not authorized to access this tab", + "item.edit.tabs.disabled.tooltip": "Não está autorizado a aceder a esta área!", // "item.edit.tabs.mapper.head": "Collection Mapper", - "item.edit.tabs.mapper.head": "Mapeamento de Coleção", + "item.edit.tabs.mapper.head": "Mapeamento de coleção", // "item.edit.tabs.item-mapper.title": "Item Edit - Collection Mapper", - "item.edit.tabs.item-mapper.title": "Editar Item - Mapeamento de Coleção", + "item.edit.tabs.item-mapper.title": "Editar item - Mapeamento de coleção", + // "item.edit.identifiers.doi.status.UNKNOWN": "Unknown", + "item.edit.identifiers.doi.status.UNKNOWN": "Desconhecido", + + // "item.edit.identifiers.doi.status.TO_BE_REGISTERED": "Queued for registration", + "item.edit.identifiers.doi.status.TO_BE_REGISTERED": "Em fila de espera para registo", + + // "item.edit.identifiers.doi.status.TO_BE_RESERVED": "Queued for reservation", + "item.edit.identifiers.doi.status.TO_BE_RESERVED": "Em fila de espera para reserva", + + // "item.edit.identifiers.doi.status.IS_REGISTERED": "Registered", + "item.edit.identifiers.doi.status.IS_REGISTERED": "Registado", + + // "item.edit.identifiers.doi.status.IS_RESERVED": "Reserved", + "item.edit.identifiers.doi.status.IS_RESERVED": "Reservado", + + // "item.edit.identifiers.doi.status.UPDATE_RESERVED": "Reserved (update queued)", + "item.edit.identifiers.doi.status.UPDATE_RESERVED": "Reservado (fila de espera atualizada)", + + // "item.edit.identifiers.doi.status.UPDATE_REGISTERED": "Registered (update queued)", + "item.edit.identifiers.doi.status.UPDATE_REGISTERED": "Registado (fila de espera atualizada)", + + // "item.edit.identifiers.doi.status.UPDATE_BEFORE_REGISTRATION": "Queued for update and registration", + "item.edit.identifiers.doi.status.UPDATE_BEFORE_REGISTRATION": "Em fila de espera para atualização e registo", + + // "item.edit.identifiers.doi.status.TO_BE_DELETED": "Queued for deletion", + "item.edit.identifiers.doi.status.TO_BE_DELETED": "Em fila de espera para remoção", + + // "item.edit.identifiers.doi.status.DELETED": "Deleted", + "item.edit.identifiers.doi.status.DELETED": "Removido", + + // "item.edit.identifiers.doi.status.PENDING": "Pending (not registered)", + "item.edit.identifiers.doi.status.PENDING": "Pendente (não registado)", + + // "item.edit.identifiers.doi.status.MINTED": "Minted (not registered)", + "item.edit.identifiers.doi.status.MINTED": "Criado (não registado)", + + // "item.edit.tabs.status.buttons.register-doi.label": "Register a new or pending DOI", + "item.edit.tabs.status.buttons.register-doi.label": "Registar um novo DOI ou pendente", + + // "item.edit.tabs.status.buttons.register-doi.button": "Register DOI...", + "item.edit.tabs.status.buttons.register-doi.button": "Registar DOI...", + + // "item.edit.register-doi.header": "Register a new or pending DOI", + "item.edit.register-doi.header": "Registar um DOI novo ou pendente", + + // "item.edit.register-doi.description": "Review any pending identifiers and item metadata below and click Confirm to proceed with DOI registration, or Cancel to back out", + "item.edit.register-doi.description": "Rever em baixo quaisquer identificadores e metadados pendentes e clicar em 'Confirmar' para prosseguir com o registo DOI ou 'Cancelar' para retroceder", + + // "item.edit.register-doi.confirm": "Confirm", + "item.edit.register-doi.confirm": "Confirmar", + + // "item.edit.register-doi.cancel": "Cancel", + "item.edit.register-doi.cancel": "Cancelar", + + // "item.edit.register-doi.success": "DOI queued for registration successfully.", + "item.edit.register-doi.success": "DOI colocado em fila de espera para o registo com sucesso.", + + // "item.edit.register-doi.error": "error registering DOI", + "item.edit.register-doi.error": "erro ao registar DOI", + + // "item.edit.register-doi.to-update": "The following DOI has already been minted and will be queued for registration online", + "item.edit.register-doi.to-update": "O seguinte DOI já foi criado e será colocado em fila de espera para registo online", + // "item.edit.item-mapper.buttons.add": "Map item to selected collections", - "item.edit.item-mapper.buttons.add": "Mapear item na(s) coleção(ões) seleciona(s)", + "item.edit.item-mapper.buttons.add": "Mapear item para coleção(ões) selecionada(s)", // "item.edit.item-mapper.buttons.remove": "Remove item's mapping for selected collections", - "item.edit.item-mapper.buttons.remove": "Remover mapeamento(s) do item da(s) coleção(ões) seleciona(s)", + "item.edit.item-mapper.buttons.remove": "Remover mapeamento(s) na(s) coleção(ões) selecionada(s)", // "item.edit.item-mapper.cancel": "Cancel", "item.edit.item-mapper.cancel": "Cancelar", // "item.edit.item-mapper.description": "This is the item mapper tool that allows administrators to map this item to other collections. You can search for collections and map them, or browse the list of collections the item is currently mapped to.", - "item.edit.item-mapper.description": "Essa é a ferramenta de mapeamento de itens que permite que os administradores mapeiem esse item para outras coleções. Você pode procurar coleções e mapeá-las ou navegar na lista de coleções para as quais o item está atualmente mapeado.", + "item.edit.item-mapper.description": "Esta ferramenta permite mapear itens para outras coleções. Pode procurar coleções e mapeá-las ou navegar na lista de coleções nas quais o item está atualmente mapeado.", // "item.edit.item-mapper.head": "Item Mapper - Map Item to Collections", - "item.edit.item-mapper.head": "Mapeador de Item - Mapear Itens em Coleções", + "item.edit.item-mapper.head": "Mapeador de item - Mapear itens em coleções", // "item.edit.item-mapper.item": "Item: \"{{name}}\"", "item.edit.item-mapper.item": "Item: \"{{name}}\"", @@ -2402,19 +3012,26 @@ // "item.edit.item-mapper.notifications.remove.success.head": "Removal of mapping completed", "item.edit.item-mapper.notifications.remove.success.head": "Completou a remoção de mapeamento", + // "item.edit.item-mapper.search-form.placeholder": "Search collections...", + "item.edit.item-mapper.search-form.placeholder": "Pesquisar coleções...", + // "item.edit.item-mapper.tabs.browse": "Browse mapped collections", "item.edit.item-mapper.tabs.browse": "Navegar nas coleções mapeadas", // "item.edit.item-mapper.tabs.map": "Map new collections", "item.edit.item-mapper.tabs.map": "Mapear novas coleções", - - // "item.edit.metadata.add-button": "Add", "item.edit.metadata.add-button": "Adicionar", // "item.edit.metadata.discard-button": "Discard", - "item.edit.metadata.discard-button": "Descartar", + "item.edit.metadata.discard-button": "Cancelar", + + // "item.edit.metadata.edit.buttons.confirm": "Confirm", + "item.edit.metadata.edit.buttons.confirm": "Confirmar", + + // "item.edit.metadata.edit.buttons.drag": "Drag to reorder", + "item.edit.metadata.edit.buttons.drag": "Arrastar para reordenar", // "item.edit.metadata.edit.buttons.edit": "Edit", "item.edit.metadata.edit.buttons.edit": "Editar", @@ -2428,6 +3045,9 @@ // "item.edit.metadata.edit.buttons.unedit": "Stop editing", "item.edit.metadata.edit.buttons.unedit": "Parar edição", + // "item.edit.metadata.edit.buttons.virtual": "This is a virtual metadata value, i.e. a value inherited from a related entity. It can’t be modified directly. Add or remove the corresponding relationship in the \"Relationships\" tab", + "item.edit.metadata.edit.buttons.virtual": "Este é um valor de metadados virtual, ou seja, um valor herdado de uma entidade relacionada. Não pode ser modificado diretamente. Adicionar ou remover a relação correspondente no separador 'Relacionamentos'", + // "item.edit.metadata.empty": "The item currently doesn't contain any metadata. Click Add to start adding a metadata value.", "item.edit.metadata.empty": "O item não possui metadados. Clique 'Adicionar' para adicionar metadados.", @@ -2435,7 +3055,7 @@ "item.edit.metadata.headers.edit": "Editar", // "item.edit.metadata.headers.field": "Field", - "item.edit.metadata.headers.field": "Campo", + "item.edit.metadata.headers.field": "Campo (metadado)", // "item.edit.metadata.headers.language": "Lang", "item.edit.metadata.headers.language": "Idioma", @@ -2443,32 +3063,35 @@ // "item.edit.metadata.headers.value": "Value", "item.edit.metadata.headers.value": "Valor", + // "item.edit.metadata.metadatafield.error": "An error occurred validating the metadata field", + "item.edit.metadata.metadatafield.error": "Ocorreu um erro ao validar o campo de metadados", + // "item.edit.metadata.metadatafield.invalid": "Please choose a valid metadata field", "item.edit.metadata.metadatafield.invalid": "Por favor escolha um campo de metadados válido", // "item.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", - "item.edit.metadata.notifications.discarded.content": "Suas alterações foram descartadas. Para restabelecer suas alterações, clique no botão 'Desfazer'", + "item.edit.metadata.notifications.discarded.content": "As suas alterações foram descartadas. Para restabelecer suas alterações, clique no botão 'Desfazer'", - // "item.edit.metadata.notifications.discarded.title": "Changed discarded", + // "item.edit.metadata.notifications.discarded.title": "Changes discarded", "item.edit.metadata.notifications.discarded.title": "Mudança descartada", - + // "item.edit.metadata.notifications.error.title": "An error occurred", - "item.edit.metadata.notifications.error.title": "Ocorreu um erro", + "item.edit.metadata.notifications.error.title": "Ocorreu um erro!", // "item.edit.metadata.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", - "item.edit.metadata.notifications.invalid.content": "Suas alterações não foram salvas. Verifique se todos os campos são válidos antes de salvar.", + "item.edit.metadata.notifications.invalid.content": "As suas alterações não foram guardadas! Verifique se todos os campos são válidos antes de guardar.", // "item.edit.metadata.notifications.invalid.title": "Metadata invalid", "item.edit.metadata.notifications.invalid.title": "Metadado inválido", // "item.edit.metadata.notifications.outdated.content": "The item you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", - "item.edit.metadata.notifications.outdated.content": "O item em que você está trabalhando foi alterado por outro usuário. Suas alterações atuais são descartadas para evitar conflitos", + "item.edit.metadata.notifications.outdated.content": "O registo em que está a trabalhar foi alterado por outro utilizador. As suas alterações serão descartadas para evitar conflitos", - // "item.edit.metadata.notifications.outdated.title": "Changed outdated", + // "item.edit.metadata.notifications.outdated.title": "Changes outdated", "item.edit.metadata.notifications.outdated.title": "Alteração desatualizada", // "item.edit.metadata.notifications.saved.content": "Your changes to this item's metadata were saved.", - "item.edit.metadata.notifications.saved.content": "Suas alterações nos metadados deste item foram salvas.", + "item.edit.metadata.notifications.saved.content": "As alterações que realizou nos metadados deste registo foram salvas.", // "item.edit.metadata.notifications.saved.title": "Metadata saved", "item.edit.metadata.notifications.saved.title": "Metadados salvos", @@ -2476,10 +3099,11 @@ // "item.edit.metadata.reinstate-button": "Undo", "item.edit.metadata.reinstate-button": "Desfazer", + // "item.edit.metadata.reset-order-button": "Undo reorder", + "item.edit.metadata.reset-order-button": "Desfazer reordenamento", + // "item.edit.metadata.save-button": "Save", - "item.edit.metadata.save-button": "Salvar", - - + "item.edit.metadata.save-button": "Guardar", // "item.edit.modify.overview.field": "Field", "item.edit.modify.overview.field": "Campo", @@ -2490,11 +3114,15 @@ // "item.edit.modify.overview.value": "Value", "item.edit.modify.overview.value": "Valor", - - - // "item.edit.move.cancel": "Cancel", + // "item.edit.move.cancel": "Back", "item.edit.move.cancel": "Cancelar", + // "item.edit.move.save-button": "Save", + "item.edit.move.save-button": "Guardar", + + // "item.edit.move.discard-button": "Discard", + "item.edit.move.discard-button": "Cancelar", + // "item.edit.move.description": "Select the collection you wish to move this item to. To narrow down the list of displayed collections, you can enter a search query in the box.", "item.edit.move.description": "Selecione a coleção para a qual você deseja mover este item. Para restringir a lista de coleções exibidas, você pode inserir uma consulta de pesquisa na caixa.", @@ -2525,47 +3153,41 @@ // "item.edit.move.title": "Move item", "item.edit.move.title": "Mover item", - - // "item.edit.private.cancel": "Cancel", "item.edit.private.cancel": "Cancelar", - // "item.edit.private.confirm": "Make it Private", + // "item.edit.private.confirm": "Make it non-discoverable", "item.edit.private.confirm": "Tornar Privado", - // "item.edit.private.description": "Are you sure this item should be made private in the archive?", + // "item.edit.private.description": "Are you sure this item should be made non-discoverable in the archive?", "item.edit.private.description": "Tem certeza de que este item deve ser tornado privado?", - // "item.edit.private.error": "An error occurred while making the item private", + // "item.edit.private.error": "An error occurred while making the item non-discoverable", "item.edit.private.error": "Ocorreu um erro ao tornar o item privado", - // "item.edit.private.header": "Make item private: {{ id }}", + // "item.edit.private.header": "Make item non-discoverable: {{ id }}", "item.edit.private.header": "Tornar privado o item: {{ id }}", - // "item.edit.private.success": "The item is now private", + // "item.edit.private.success": "The item is now non-discoverable", "item.edit.private.success": "O item agora é privado", - - // "item.edit.public.cancel": "Cancel", "item.edit.public.cancel": "Cancelar", - // "item.edit.public.confirm": "Make it Public", + // "item.edit.public.confirm": "Make it discoverable", "item.edit.public.confirm": "Tornar público", - // "item.edit.public.description": "Are you sure this item should be made public in the archive?", + // "item.edit.public.description": "Are you sure this item should be made discoverable in the archive?", "item.edit.public.description": "Você tem certeza que deseja tornar este item público?", - // "item.edit.public.error": "An error occurred while making the item public", + // "item.edit.public.error": "An error occurred while making the item discoverable", "item.edit.public.error": "Ocorreu um erro ao tornar o item público", - // "item.edit.public.header": "Make item public: {{ id }}", + // "item.edit.public.header": "Make item discoverable: {{ id }}", "item.edit.public.header": "Tornar público o item: {{ id }}", - // "item.edit.public.success": "The item is now public", - "item.edit.public.success": "O item agora é público", - - + // "item.edit.public.success": "The item is now discoverable", + "item.edit.public.success": "O item agora é público!", // "item.edit.reinstate.cancel": "Cancel", "item.edit.reinstate.cancel": "Cancelar", @@ -2585,10 +3207,8 @@ // "item.edit.reinstate.success": "The item was reinstated successfully", "item.edit.reinstate.success": "O item foi restabelecido com sucesso", - - // "item.edit.relationships.discard-button": "Discard", - "item.edit.relationships.discard-button": "Descartar", + "item.edit.relationships.discard-button": "Cancelar", // "item.edit.relationships.edit.buttons.add": "Add", "item.edit.relationships.edit.buttons.add": "Adicionar", @@ -2597,16 +3217,16 @@ "item.edit.relationships.edit.buttons.remove": "Apagar", // "item.edit.relationships.edit.buttons.undo": "Undo changes", - "item.edit.relationships.edit.buttons.undo": "Desfazer alterações", + "item.edit.relationships.edit.buttons.undo": "Cancelar alterações", // "item.edit.relationships.no-relationships": "No relationships", "item.edit.relationships.no-relationships": "Sem relações", // "item.edit.relationships.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", - "item.edit.relationships.notifications.discarded.content": "Suas alterações foram descartadas. Para restabelecer suas alterações, clique no botão 'Desfazer'", + "item.edit.relationships.notifications.discarded.content": "Suas alterações foram canceladas. Para restabelecer suas alterações, clique no botão 'Cancelar'", // "item.edit.relationships.notifications.discarded.title": "Changes discarded", - "item.edit.relationships.notifications.discarded.title": "Alterações descartadas", + "item.edit.relationships.notifications.discarded.title": "Alterações canceladas", // "item.edit.relationships.notifications.failed.title": "Error editing relationships", "item.edit.relationships.notifications.failed.title": "Erro ao apagar relação", @@ -2627,15 +3247,16 @@ "item.edit.relationships.reinstate-button": "Desfazer", // "item.edit.relationships.save-button": "Save", - "item.edit.relationships.save-button": "Salvar", + "item.edit.relationships.save-button": "Guardar", // "item.edit.relationships.no-entity-type": "Add 'dspace.entity.type' metadata to enable relationships for this item", - "item.edit.relationships.no-entity-type": "Adicione o metadado 'dspace.entity.type' para ativar relações neste item", - + "item.edit.relationships.no-entity-type": "Adicione o metadado 'dspace.entity.type' para ativar relações neste item!", + // "item.edit.return": "Back", + "item.edit.return": "Voltar", // "item.edit.tabs.bitstreams.head": "Bitstreams", - "item.edit.tabs.bitstreams.head": "Ficheiros do Item", + "item.edit.tabs.bitstreams.head": "Ficheiros do item", // "item.edit.tabs.bitstreams.title": "Item Edit - Bitstreams", "item.edit.tabs.bitstreams.title": "Editar Item - Ficheiros", @@ -2644,28 +3265,28 @@ "item.edit.tabs.curate.head": "Curadoria", // "item.edit.tabs.curate.title": "Item Edit - Curate", - "item.edit.tabs.curate.title": "Editar Item - Curadoria", + "item.edit.tabs.curate.title": "Editar item - Curadoria", // "item.edit.tabs.metadata.head": "Metadata", - "item.edit.tabs.metadata.head": "Metadados do Item", + "item.edit.tabs.metadata.head": "Metadados do item", // "item.edit.tabs.metadata.title": "Item Edit - Metadata", "item.edit.tabs.metadata.title": "Editar Item - Metadados", // "item.edit.tabs.relationships.head": "Relationships", - "item.edit.tabs.relationships.head": "Relações do Item", + "item.edit.tabs.relationships.head": "Relações do item", // "item.edit.tabs.relationships.title": "Item Edit - Relationships", "item.edit.tabs.relationships.title": "Editar Item - Relacionamentos", // "item.edit.tabs.status.buttons.authorizations.button": "Authorizations...", - "item.edit.tabs.status.buttons.authorizations.button": "Autorizações...", + "item.edit.tabs.status.buttons.authorizations.button": "Permissões...", // "item.edit.tabs.status.buttons.authorizations.label": "Edit item's authorization policies", - "item.edit.tabs.status.buttons.authorizations.label": "Editar politicas de autorizações de item", + "item.edit.tabs.status.buttons.authorizations.label": "Editar políticas de permissões de item", // "item.edit.tabs.status.buttons.delete.button": "Permanently delete", - "item.edit.tabs.status.buttons.delete.button": "Apagar permanentemente", + "item.edit.tabs.status.buttons.delete.button": "Apagar definitivamente", // "item.edit.tabs.status.buttons.delete.label": "Completely expunge item", "item.edit.tabs.status.buttons.delete.label": "Eliminar completamente o item", @@ -2674,24 +3295,24 @@ "item.edit.tabs.status.buttons.mappedCollections.button": "Coleções mapeadas", // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", - "item.edit.tabs.status.buttons.mappedCollections.label": "Gerenciar coleções mapeadas", + "item.edit.tabs.status.buttons.mappedCollections.label": "Gerir coleções mapeadas", - // "item.edit.tabs.status.buttons.move.button": "Move...", - "item.edit.tabs.status.buttons.move.button": "Mover...", + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", + "item.edit.tabs.status.buttons.move.button": "Mover este item para outra coleção", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", "item.edit.tabs.status.buttons.move.label": "Mover item para outra coleção", - // "item.edit.tabs.status.buttons.private.button": "Make it private...", - "item.edit.tabs.status.buttons.private.button": "Tornar o item privado ...", + // "item.edit.tabs.status.buttons.private.button": "Make it non-discoverable...", + "item.edit.tabs.status.buttons.private.button": "Tornar o item privado...", - // "item.edit.tabs.status.buttons.private.label": "Make item private", + // "item.edit.tabs.status.buttons.private.label": "Make item non-discoverable", "item.edit.tabs.status.buttons.private.label": "Tornar o item privado", - // "item.edit.tabs.status.buttons.public.button": "Make it public...", + // "item.edit.tabs.status.buttons.public.button": "Make it discoverable...", "item.edit.tabs.status.buttons.public.button": "Tornar público o item...", - // "item.edit.tabs.status.buttons.public.label": "Make item public", + // "item.edit.tabs.status.buttons.public.label": "Make item discoverable", "item.edit.tabs.status.buttons.public.label": "Tornar público o item", // "item.edit.tabs.status.buttons.reinstate.button": "Reinstate...", @@ -2700,26 +3321,29 @@ // "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", "item.edit.tabs.status.buttons.reinstate.label": "Restabelecer item no repositório", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", - "item.edit.tabs.status.buttons.withdraw.button": "Retirar...", + // "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", + "item.edit.tabs.status.buttons.unauthorized": "Não possui autorizações para realizar esta ação!", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", + "item.edit.tabs.status.buttons.withdraw.button": "Retirar este item", + // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", - "item.edit.tabs.status.buttons.withdraw.label": "Retirar item do repositório", + "item.edit.tabs.status.buttons.withdraw.label": "Retirar item da vista pública do repositório", // "item.edit.tabs.status.description": "Welcome to the item management page. From here you can withdraw, reinstate, move or delete the item. You may also update or add new metadata / bitstreams on the other tabs.", - "item.edit.tabs.status.description": "Bem-vindo à página de gerenciamento de itens. A partir daqui, você pode retirar, restabelecer, mover ou apagar o item. Você também pode atualizar ou adicionar novos metadados / bitstream nas outras guias.", + "item.edit.tabs.status.description": "Bem-vindo à página de gestão de itens. Nesta área, pode retirar, restabelecer, mover ou apagar definitivamente o item. Adicionalmente, também pode atualizar ou adicionar novos metadados / bitstreams percorrendo pelas outras abas.", // "item.edit.tabs.status.head": "Status", - "item.edit.tabs.status.head": "Estado do Item", + "item.edit.tabs.status.head": "Estado do item", // "item.edit.tabs.status.labels.handle": "Handle", "item.edit.tabs.status.labels.handle": "Handle", // "item.edit.tabs.status.labels.id": "Item Internal ID", - "item.edit.tabs.status.labels.id": "ID Interno do Item", + "item.edit.tabs.status.labels.id": "ID Interno do item", // "item.edit.tabs.status.labels.itemPage": "Item Page", - "item.edit.tabs.status.labels.itemPage": "Página do Item", + "item.edit.tabs.status.labels.itemPage": "Página do item", // "item.edit.tabs.status.labels.lastModified": "Last Modified", "item.edit.tabs.status.labels.lastModified": "Ultima alteração", @@ -2728,13 +3352,13 @@ "item.edit.tabs.status.title": "Editar Item - Estado", // "item.edit.tabs.versionhistory.head": "Version History", - "item.edit.tabs.versionhistory.head": "Histórico de Versões", + "item.edit.tabs.versionhistory.head": "Histórico de versões", // "item.edit.tabs.versionhistory.title": "Item Edit - Version History", - "item.edit.tabs.versionhistory.title": "Edições do Item - Histórico de Versões", + "item.edit.tabs.versionhistory.title": "Edições do Item - Histórico de versões", // "item.edit.tabs.versionhistory.under-construction": "Editing or adding new versions is not yet possible in this user interface.", - "item.edit.tabs.versionhistory.under-construction": "Editar ou adicionar novas versões ainda não é possível neste interface de Utilizador.", + "item.edit.tabs.versionhistory.under-construction": "Editar ou adicionar novas versões ainda não é possível neste interface de utilizador.", // "item.edit.tabs.view.head": "View Item", "item.edit.tabs.view.head": "Visualizar Item", @@ -2742,8 +3366,6 @@ // "item.edit.tabs.view.title": "Item Edit - View", "item.edit.tabs.view.title": "Editar Item - Visualizar", - - // "item.edit.withdraw.cancel": "Cancel", "item.edit.withdraw.cancel": "Cancelar", @@ -2760,24 +3382,22 @@ "item.edit.withdraw.header": "Retirar item: {{ id }}", // "item.edit.withdraw.success": "The item was withdrawn successfully", - "item.edit.withdraw.success": "O item foi retirado com sucesso", - + "item.edit.withdraw.success": "O item foi retirado com sucesso!", + // "item.orcid.return": "Back", + "item.orcid.return": "Voltar", // "item.listelement.badge": "Item", "item.listelement.badge": "Item", // "item.page.description": "Description", "item.page.description": "Descrição", - - // "item.page.edit": "Edit this item", - "item.page.edit": "Editar este item", - + // "item.page.journal-issn": "Journal ISSN", - "item.page.journal-issn": "ISSN da Revista", + "item.page.journal-issn": "ISSN da revista", // "item.page.journal-title": "Journal Title", - "item.page.journal-title": "Título da Revista", + "item.page.journal-title": "Título da revista", // "item.page.publisher": "Publisher", "item.page.publisher": "Editora", @@ -2789,13 +3409,41 @@ "item.page.volume-title": "Título do Volume", // "item.search.results.head": "Item Search Results", - "item.search.results.head": "Resultados da Pesquisa de Item", + "item.search.results.head": "Resultados da pesquisa de item", - // "item.search.title": "DSpace Angular :: Item Search", - "item.search.title": "DSpace :: Pesquisa de Item", + // "item.search.title": "Item Search", + "item.search.title": "Pesquisa de item", + // "item.truncatable-part.show-more": "Show more", + "item.truncatable-part.show-more": "Mostrar mais", + + // "item.truncatable-part.show-less": "Collapse", + "item.truncatable-part.show-less": "Colapsar", + // "workflow-item.search.result.delete-supervision.modal.header": "Delete Supervision Order", + "workflow-item.search.result.delete-supervision.modal.header": "Eliminar ordem de supervisão", + // "workflow-item.search.result.delete-supervision.modal.info": "Are you sure you want to delete Supervision Order", + "workflow-item.search.result.delete-supervision.modal.info": "Tem a certeza de que quer remover a ordem de supervisão", + + // "workflow-item.search.result.delete-supervision.modal.cancel": "Cancel", + "workflow-item.search.result.delete-supervision.modal.cancel": "Cancelar", + + // "workflow-item.search.result.delete-supervision.modal.confirm": "Delete", + "workflow-item.search.result.delete-supervision.modal.confirm": "Remover", + + // "workflow-item.search.result.notification.deleted.success": "Successfully deleted supervision order \"{{name}}\"", + "workflow-item.search.result.notification.deleted.success": "Ordem de supervisão removida com sucesso \"{{name}}\"", + + // "workflow-item.search.result.notification.deleted.failure": "Failed to delete supervision order \"{{name}}\"", + "workflow-item.search.result.notification.deleted.failure": "Falha ao remover ordem de supervisão \"{{name}}\"", + + // "workflow-item.search.result.list.element.supervised-by": "Supervised by:", + "workflow-item.search.result.list.element.supervised-by": "Supervisionado por:", + + // "workflow-item.search.result.list.element.supervised.remove-tooltip": "Remove supervision group", + "workflow-item.search.result.list.element.supervised.remove-tooltip": "Remover grupo de supervisão", + // "item.page.abstract": "Abstract", "item.page.abstract": "Resumo", @@ -2808,6 +3456,12 @@ // "item.page.collections": "Collections", "item.page.collections": "Coleções", + // "item.page.collections.loading": "Loading...", + "item.page.collections.loading": "A carregar...", + + // "item.page.collections.load-more": "Load more", + "item.page.collections.load-more": "Carregar mais", + // "item.page.date": "Date", "item.page.date": "Data", @@ -2821,7 +3475,7 @@ "item.page.filesection.description": "Descrição:", // "item.page.filesection.download": "Download", - "item.page.filesection.download": "Baixar", + "item.page.filesection.download": "Ver/Abrir", // "item.page.filesection.format": "Format:", "item.page.filesection.format": "Formato:", @@ -2841,6 +3495,12 @@ // "item.page.link.simple": "Simple item page", "item.page.link.simple": "Ver registo simples", + // "item.page.orcid.title": "ORCID", + "item.page.orcid.title": "ORCID", + + // "item.page.orcid.tooltip": "Open ORCID setting page", + "item.page.orcid.tooltip": "Abrir página de configuração do ORCID", + // "item.page.person.search.title": "Articles by this author", "item.page.person.search.title": "Artigos deste autor", @@ -2858,9 +3518,9 @@ // "item.page.relationships.isOrgUnitOfPerson": "Authors", "item.page.relationships.isOrgUnitOfPerson": "Autores", - + // "item.page.relationships.isOrgUnitOfProject": "Research Projects", - "item.page.relationships.isOrgUnitOfProject": "Projetos", + "item.page.relationships.isOrgUnitOfProject": "Projetos de investigação", // "item.page.subject": "Keywords", "item.page.subject": "Palavras-chave", @@ -2873,13 +3533,28 @@ // "item.page.bitstreams.collapse": "Collapse", "item.page.bitstreams.collapse": "Fechar", - + // "item.page.filesection.original.bundle" : "Original bundle", "item.page.filesection.original.bundle" : "Principais", // "item.page.filesection.license.bundle" : "License bundle", "item.page.filesection.license.bundle" : "Licença", + // "item.page.return": "Back", + "item.page.return": "Voltar", + + // "item.page.version.create": "Create new version", + "item.page.version.create": "Criar nova versão", + + // "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + "item.page.version.hasDraft": "Um nova versão não pode ser criada porque já se encontra uma submisão em curso no histórico de versões.", + + // "item.page.claim.button": "Claim", + "item.page.claim.button": "Reivindicar", + + // "item.page.claim.tooltip": "Claim this item as profile", + "item.page.claim.tooltip": "Reivindicar este item como perfil", + // "item.preview.dc.identifier.uri": "Identifier:", "item.preview.dc.identifier.uri": "Identificador:", @@ -2904,6 +3579,39 @@ // "item.preview.dc.title": "Title:", "item.preview.dc.title": "Título:", + // "item.preview.dc.type": "Type:", + "item.preview.dc.type": "Tipo:", + + // "item.preview.oaire.citation.issue" : "Issue", + "item.preview.oaire.citation.issue" : "Issue", + + // "item.preview.oaire.citation.volume" : "Volume", + "item.preview.oaire.citation.volume" : "Volume", + + // "item.preview.dc.relation.issn" : "ISSN", + "item.preview.dc.relation.issn" : "ISSN", + + // "item.preview.dc.relation.eissn" : "EISSN", + "item.preview.dc.relation.eissn" : "EISSN", + + // "item.preview.dc.identifier.isbn" : "ISBN", + "item.preview.dc.identifier.isbn" : "ISBN", + + // "item.preview.dc.identifier.eisbn" : "EISBN", + "item.preview.dc.identifier.eisbn" : "EISBN", + + // "item.preview.dc.identifier.tid" : "TID", + "item.preview.dc.identifier.tid" : "TID", + + // "item.preview.dc.identifier": "Identifier:", + "itemm.preview.dc.identifier": "Identificador:", + + // "item.preview.dc.relation.ispartof" : "Journal or Serie", + "item.preview.dc.relation.ispartof" : "Revista ou Série", + + // "item.preview.dc.identifier.doi" : "DOI", + "item.preview.dc.identifier.doi" : "DOI", + // "item.preview.person.familyName": "Surname:", "item.preview.person.familyName": "Apelido:", @@ -2913,11 +3621,29 @@ // "item.preview.person.identifier.orcid": "ORCID:", "item.preview.person.identifier.orcid": "ORCID:", + // "item.preview.project.funder.name": "Funder:", + "item.preview.project.funder.name": "Financiador:", + + // "item.preview.project.funder.identifier": "Funder Identifier:", + "item.preview.project.funder.identifier": "Identificação do financiador:", + + // "item.preview.oaire.awardNumber": "Funding ID:", + "item.preview.oaire.awardNumber": "ID do financiamento:", + + // "item.preview.dc.title.alternative": "Acronym:", + "item.preview.dc.title.alternative": "Acrónimo:", + + // "item.preview.dc.coverage.spatial": "Jurisdiction:", + "item.preview.dc.coverage.spatial": "Jurisdição:", + + // "item.preview.oaire.fundingStream": "Funding Stream:", + "item.preview.oaire.fundingStream": "Linha de financiamento:", + // "item.select.confirm": "Confirm selected", "item.select.confirm": "Confirmar seleção", // "item.select.empty": "No items to show", - "item.select.empty": "Nenhum item para mostrar", + "item.select.empty": "Nenhum item para mostrar.", // "item.select.table.author": "Author", "item.select.table.author": "Autor", @@ -2928,19 +3654,21 @@ // "item.select.table.title": "Title", "item.select.table.title": "Título", - // "item.version.history.empty": "There are no other versions for this item yet.", - "item.version.history.empty": "Não existem ainda outras versões deste item.", + "item.version.history.empty": "Ainda não existem outras versões deste item.", // "item.version.history.head": "Version History", - "item.version.history.head": "Histórico de Versões", + "item.version.history.head": "Histórico de versões", - // "item.version.history.return": "Return", + // "item.version.history.return": "Back", "item.version.history.return": "Voltar", // "item.version.history.selected": "Selected version", "item.version.history.selected": "Versão selecionada", + // "item.version.history.selected.alert": "You are currently viewing version {{version}} of the item.", + "item.version.history.selected.alert": "Está a ver a versão {{version}} do item.", + // "item.version.history.table.version": "Version", "item.version.history.table.version": "Versão", @@ -2955,13 +3683,192 @@ // "item.version.history.table.summary": "Summary", "item.version.history.table.summary": "Sumário", - - + + // "item.version.history.table.workspaceItem": "Workspace item", + "item.version.history.table.workspaceItem": "Área de trabalho do item", + + // "item.version.history.table.workflowItem": "Workflow item", + "item.version.history.table.workflowItem": "Área de trabalho do item", + + // "item.version.history.table.actions": "Action", + "item.version.history.table.actions": "Ação", + + // "item.version.history.table.action.editWorkspaceItem": "Edit workspace item", + "item.version.history.table.action.editWorkspaceItem": "Editar área de trabalho do item", + + // "item.version.history.table.action.editSummary": "Edit summary", + "item.version.history.table.action.editSummary": "Editar sumário", + + // "item.version.history.table.action.saveSummary": "Save summary edits", + "item.version.history.table.action.saveSummary": "Guardar alterações ao sumário", + + // "item.version.history.table.action.discardSummary": "Discard summary edits", + "item.version.history.table.action.discardSummary": "Cancelar alterações ao sumário", + + // "item.version.history.table.action.newVersion": "Create new version from this one", + "item.version.history.table.action.newVersion": "Criar uma nova versão deste", + + // "item.version.history.table.action.deleteVersion": "Delete version", + "item.version.history.table.action.deleteVersion": "Remover versão", + + // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + "item.version.history.table.action.hasDraft": "Uma nova versão não pode ser criada porque se encontra um depósito em curso no histórico de versões", // "item.version.notice": "This is not the latest version of this item. The latest version can be found here.", "item.version.notice": "Esta não é a última versão deste item. A última versão pode ser encontrada aqui.", + // "item.version.create.modal.header": "New version", + "item.version.create.modal.header": "Nova versão", + + // "item.version.create.modal.text": "Create a new version for this item", + "item.version.create.modal.text": "Criar uma nova versão para este item", + // "item.version.create.modal.text.startingFrom": "starting from version {{version}}", + "item.version.create.modal.text.startingFrom": "Iniciar a partir da versão {{version}}", + + // "item.version.create.modal.button.confirm": "Create", + "item.version.create.modal.button.confirm": "Criar", + + // "item.version.create.modal.button.confirm.tooltip": "Create new version", + "item.version.create.modal.button.confirm.tooltip": "Criar uma nova versão", + + // "item.version.create.modal.button.cancel": "Cancel", + "item.version.create.modal.button.cancel": "Cancelar", + + // "item.version.create.modal.button.cancel.tooltip": "Do not create new version", + "item.version.create.modal.button.cancel.tooltip": "Não criar uma nova versão", + + // "item.version.create.modal.form.summary.label": "Summary", + "item.version.create.modal.form.summary.label": "Sumário", + + // "item.version.create.modal.form.summary.placeholder": "Insert the summary for the new version", + "item.version.create.modal.form.summary.placeholder": "Inserir o sumário para a nova versão", + + // "item.version.create.modal.submitted.header": "Creating new version...", + "item.version.create.modal.submitted.header": "Criar uma nova versão...", + + // "item.version.create.modal.submitted.text": "The new version is being created. This may take some time if the item has a lot of relationships.", + "item.version.create.modal.submitted.text": "A nova versão está a ser criada. Isto pode demorar algum tempo se o item tiver muitas relações.", + + // "item.version.create.notification.success": "New version has been created with version number {{version}}", + "item.version.create.notification.success": "Nova versão foi criada com o número {{version}}", + + // "item.version.create.notification.failure": "New version has not been created", + "item.version.create.notification.failure": "Nova versão não foi criada", + + // "item.version.create.notification.inProgress": "A new version cannot be created because there is an inprogress submission in the version history", + "item.version.create.notification.inProgress": "Uma nova versão não pode ser criada porque se encontra um depósito em curso no histórico de versões", + + // "item.version.delete.modal.header": "Delete version", + "item.version.delete.modal.header": "Remover versão", + + // "item.version.delete.modal.text": "Do you want to delete version {{version}}?", + "item.version.delete.modal.text": "Pretende remover a versão {{version}}?", + + // "item.version.delete.modal.button.confirm": "Delete", + "item.version.delete.modal.button.confirm": "Remover", + + // "item.version.delete.modal.button.confirm.tooltip": "Delete this version", + "item.version.delete.modal.button.confirm.tooltip": "Remover esta versão", + + // "item.version.delete.modal.button.cancel": "Cancel", + "item.version.delete.modal.button.cancel": "Cancelar", + + // "item.version.delete.modal.button.cancel.tooltip": "Do not delete this version", + "item.version.delete.modal.button.cancel.tooltip": "Não remover esta versão", + + // "item.version.delete.notification.success": "Version number {{version}} has been deleted", + "item.version.delete.notification.success": "A versão número {{version}} foi removida", + + // "item.version.delete.notification.failure": "Version number {{version}} has not been deleted", + "item.version.delete.notification.failure": "A versão número {{version}} não foi removida", + + // "item.version.edit.notification.success": "The summary of version number {{version}} has been changed", + "item.version.edit.notification.success": "O sumário da versão número {{version}} foi alterado", + + // "item.version.edit.notification.failure": "The summary of version number {{version}} has not been changed", + "item.version.edit.notification.failure": "O sumário da versão número {{version}} não foi alterado", + + // "itemtemplate.edit.metadata.add-button": "Add", + "itemtemplate.edit.metadata.add-button": "Adicionar", + + // "itemtemplate.edit.metadata.discard-button": "Discard", + "itemtemplate.edit.metadata.discard-button": 'Rejeitar', + + // "itemtemplate.edit.metadata.edit.buttons.confirm": "Confirm", + "itemtemplate.edit.metadata.edit.buttons.confirm": "Confirmar", + + // "itemtemplate.edit.metadata.edit.buttons.drag": "Drag to reorder", + "itemtemplate.edit.metadata.edit.buttons.drag": "Arrastar para reordenar", + + // "itemtemplate.edit.metadata.edit.buttons.edit": "Edit", + "itemtemplate.edit.metadata.edit.buttons.edit": "Editar", + + // "itemtemplate.edit.metadata.edit.buttons.remove": "Remove", + "itemtemplate.edit.metadata.edit.buttons.remove": "Remover", + + // "itemtemplate.edit.metadata.edit.buttons.undo": "Undo changes", + "itemtemplate.edit.metadata.edit.buttons.undo": "Desfazer alterações", + + // "itemtemplate.edit.metadata.edit.buttons.unedit": "Stop editing", + "itemtemplate.edit.metadata.edit.buttons.unedit": "Parar edição", + + // "itemtemplate.edit.metadata.empty": "The item template currently doesn't contain any metadata. Click Add to start adding a metadata value.", + "itemtemplate.edit.metadata.empty": "Atualmente o modelo do item não contém quaisquer metadados. Clique em 'Adicionar' para começar a adicionar um valor de metadados.", + + // "itemtemplate.edit.metadata.headers.edit": "Edit", + "itemtemplate.edit.metadata.headers.edit": "Editar", + + // "itemtemplate.edit.metadata.headers.field": "Field", + "itemtemplate.edit.metadata.headers.field": "Campo", + + // "itemtemplate.edit.metadata.headers.language": "Lang", + "itemtemplate.edit.metadata.headers.language": "Idioma", + + // "itemtemplate.edit.metadata.headers.value": "Value", + "itemtemplate.edit.metadata.headers.value": "Valor", + + // "itemtemplate.edit.metadata.metadatafield.error": "An error occurred validating the metadata field", + "itemtemplate.edit.metadata.metadatafield.error": "ocorreu um erro ao validar o campo de metadados", + + // "itemtemplate.edit.metadata.metadatafield.invalid": "Please choose a valid metadata field", + "itemtemplate.edit.metadata.metadatafield.invalid": "Por favor, selecione um campo de metadados válido", + + // "itemtemplate.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", + "itemtemplate.edit.metadata.notifications.discarded.content": "As sua alterações foram descartadas. Para repor as suas alterações clique no botão 'Desfazer'", + + // "itemtemplate.edit.metadata.notifications.discarded.title": "Changed discarded", + "itemtemplate.edit.metadata.notifications.discarded.title": "Alterações descartadas", + + // "itemtemplate.edit.metadata.notifications.error.title": "An error occurred", + "itemtemplate.edit.metadata.notifications.error.title": "Ocorreu um erro", + + // "itemtemplate.edit.metadata.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", + "itemtemplate.edit.metadata.notifications.invalid.content": "As suas alterações não foram guardadas. Por favor, certifique-se de que todos os campos são válidos antes de os guardar.", + + // "itemtemplate.edit.metadata.notifications.invalid.title": "Metadata invalid", + "itemtemplate.edit.metadata.notifications.invalid.title": "Metadados inválidos", + + // "itemtemplate.edit.metadata.notifications.outdated.content": "The item template you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", + "itemtemplate.edit.metadata.notifications.outdated.content": "O modelo do item que está atualmente a trabalhar foi alterado por outro utilizador. As suas alterações serão descartadas para evitar conflitos", + + // "itemtemplate.edit.metadata.notifications.outdated.title": "Changed outdated", + "itemtemplate.edit.metadata.notifications.outdated.title": "Alterações desatualizadas", + + // "itemtemplate.edit.metadata.notifications.saved.content": "Your changes to this item template's metadata were saved.", + "itemtemplate.edit.metadata.notifications.saved.content": "As suas alterações aos metadados deste modelo de item foram guardadas.", + + // "itemtemplate.edit.metadata.notifications.saved.title": "Metadata saved", + "itemtemplate.edit.metadata.notifications.saved.title": "Metadados guardados", + + // "itemtemplate.edit.metadata.reinstate-button": "Undo", + "itemtemplate.edit.metadata.reinstate-button": "Desfazer", + + // "itemtemplate.edit.metadata.reset-order-button": "Undo reorder", + "itemtemplate.edit.metadata.reset-order-button": "Desfazer reordenamento", + + // "itemtemplate.edit.metadata.save-button": "Save", + "itemtemplate.edit.metadata.save-button": "Guardar", // "journal.listelement.badge": "Journal", "journal.listelement.badge": "Revista", @@ -2983,17 +3890,18 @@ // "journal.page.titleprefix": "Journal: ", "journal.page.titleprefix": "Revista: ", - + // "journal.search.results.head": "Journal Search Results", - "journal.search.results.head": "Resultado da Pesquisa de Revistas", - - // "journal.search.title": "DSpace Angular :: Journal Search", - "journal.search.title": "DSpace :: Pesquisa de Revistas", + "journal.search.results.head": "Resultado da pesquisa de revistas", + // "journal-relationships.search.results.head": "Journal Search Results", + "journal-relationships.search.results.head": "Resultado da pesquisa de revistas", + // "journal.search.title": "Journal Search", + "journal.search.title": "Pesquisa de revistas", // "journalissue.listelement.badge": "Journal Issue", - "journalissue.listelement.badge": "Número", + "journalissue.listelement.badge": "Número de revista", // "journalissue.page.description": "Description", "journalissue.page.description": "Descrição", @@ -3002,27 +3910,25 @@ "journalissue.page.edit": "Editar este item", // "journalissue.page.issuedate": "Issue Date", - "journalissue.page.issuedate": "Data de Publicação", + "journalissue.page.issuedate": "Data de publicação", // "journalissue.page.journal-issn": "Journal ISSN", - "journalissue.page.journal-issn": "ISSN da Revista", + "journalissue.page.journal-issn": "ISSN da revista", // "journalissue.page.journal-title": "Journal Title", - "journalissue.page.journal-title": "Título da Revista", + "journalissue.page.journal-title": "Título da revista", // "journalissue.page.keyword": "Keywords", "journalissue.page.keyword": "Palavras-chave", // "journalissue.page.number": "Number", - "journalissue.page.number": "Número de Páginas", + "journalissue.page.number": "Número de páginas", // "journalissue.page.titleprefix": "Journal Issue: ", - "journalissue.page.titleprefix": "Número da Revista: ", - - + "journalissue.page.titleprefix": "Número de revista: ", // "journalvolume.listelement.badge": "Journal Volume", - "journalvolume.listelement.badge": "Volume da Revista", + "journalvolume.listelement.badge": "Volume de revista", // "journalvolume.page.description": "Description", "journalvolume.page.description": "Descrição", @@ -3031,15 +3937,46 @@ "journalvolume.page.edit": "Editar este item", // "journalvolume.page.issuedate": "Issue Date", - "journalvolume.page.issuedate": "Data de Publicação", + "journalvolume.page.issuedate": "Data de publicação", // "journalvolume.page.titleprefix": "Journal Volume: ", - "journalvolume.page.titleprefix": "Volume da Revista: ", + "journalvolume.page.titleprefix": "Volume de revista: ", // "journalvolume.page.volume": "Volume", "journalvolume.page.volume": "Volume", - + // "iiifsearchable.listelement.badge": "Document Media", + "iiifsearchable.listelement.badge": "Media do documeo", + + // "iiifsearchable.page.titleprefix": "Document: ", + "iiifsearchable.page.titleprefix": "Documento: ", + + // "iiifsearchable.page.doi": "Permanent Link: ", + "iiifsearchable.page.doi": "URI permanete: ", + + // "iiifsearchable.page.issue": "Issue: ", + "iiifsearchable.page.issue": "Núemero: ", + + // "iiifsearchable.page.description": "Description: ", + "iiifsearchable.page.description": "Descrição: ", + + // "iiifviewer.fullscreen.notice": "Use full screen for better viewing.", + "iiifviewer.fullscreen.notice": "Utilize o ecrã completo para melhor visualização .", + + // "iiif.listelement.badge": "Image Media", + "iiif.listelement.badge": "Media da imagem", + + // "iiif.page.titleprefix": "Image: ", + "iiif.page.titleprefix": "Imagem: ", + + // "iiif.page.doi": "Permanent Link: ", + "iiif.page.doi": "URI permanente: ", + + // "iiif.page.issue": "Issue: ", + "iiif.page.issue": "Número: ", + + // "iiif.page.description": "Description: ", + "iiif.page.description": "Description: ", // "loading.bitstream": "Loading bitstream...", "loading.bitstream": "A carregar ficheiro...", @@ -3081,7 +4018,7 @@ "loading.objects": "A carregar...", // "loading.recent-submissions": "Loading recent submissions...", - "loading.recent-submissions": "A carregar submissões recentes...", + "loading.recent-submissions": "A carregar depósitos recentes...", // "loading.search-results": "Loading search results...", "loading.search-results": "A carregar resultados de pesquisa...", @@ -3095,8 +4032,6 @@ // "loading.top-level-communities": "Loading top-level communities...", "loading.top-level-communities": "A carregar comunidades de nível superior...", - - // "login.form.email": "Email address", "login.form.email": "Endereço de email", @@ -3107,16 +4042,22 @@ "login.form.header": "Por favor entre no repositório", // "login.form.new-user": "New user? Click here to register.", - "login.form.new-user": "Novo Utilizador? Clique aqui para se registar.", + "login.form.new-user": "Novo utilizador? Clique aqui para se registar.", // "login.form.or-divider": "or", "login.form.or-divider": "ou", + // "login.form.oidc": "Log in with OIDC", + "login.form.oidc": "Entrar com OIDC", + + // "login.form.orcid": "Log in with ORCID", + "login.form.orcid": "Entrar com ORCID", + // "login.form.password": "Password", "login.form.password": "Palavra-chave", // "login.form.shibboleth": "Log in with Shibboleth", - "login.form.shibboleth": "Entrar com Autenticação Federada", + "login.form.shibboleth": "Entrar com autenticação federada", // "login.form.submit": "Log in", "login.form.submit": "Entrar", @@ -3127,10 +4068,8 @@ // "login.breadcrumbs": "Login", "login.breadcrumbs": "Entrar", - - // "logout.form.header": "Log out from DSpace", - "logout.form.header": "Sair do DSpace", + "logout.form.header": "Sair do repositório", // "logout.form.submit": "Log out", "logout.form.submit": "Sair", @@ -3138,18 +4077,17 @@ // "logout.title": "Logout", "logout.title": "Sair", - - - // "menu.header.admin": "Admin", + // "menu.header.admin": "Management", "menu.header.admin": "Administração", // "menu.header.image.logo": "Repository logo", "menu.header.image.logo": "Logo do repositório", - - + + // "menu.header.admin.description": "Management menu", + "menu.header.admin.description": "Menu de administração", // "menu.section.access_control": "Access Control", - "menu.section.access_control": "Controle de Acesso", + "menu.section.access_control": "Controlo de acesso", // "menu.section.access_control_authorizations": "Authorizations", "menu.section.access_control_authorizations": "Autorizações", @@ -3158,54 +4096,46 @@ "menu.section.access_control_groups": "Grupos", // "menu.section.access_control_people": "People", - "menu.section.access_control_people": "Pessoas", - - + "menu.section.access_control_people": "Pessoas", // "menu.section.admin_search": "Admin Search", - "menu.section.admin_search": "Pesquisa Administrativa", - - + "menu.section.admin_search": "Pesquisa administrativa", // "menu.section.browse_community": "This Community", - "menu.section.browse_community": "Esta Comunidade", + "menu.section.browse_community": "Esta comunidade", // "menu.section.browse_community_by_author": "By Author", - "menu.section.browse_community_by_author": "Por Autor", + "menu.section.browse_community_by_author": "Por autor", // "menu.section.browse_community_by_issue_date": "By Issue Date", - "menu.section.browse_community_by_issue_date": "Por Data de Publicação", + "menu.section.browse_community_by_issue_date": "Por data de publicação", // "menu.section.browse_community_by_title": "By Title", - "menu.section.browse_community_by_title": "Por Título", + "menu.section.browse_community_by_title": "Por título", // "menu.section.browse_global": "All of DSpace", - "menu.section.browse_global": "Percorrer", + "menu.section.browse_global": "Percorrer repositório", // "menu.section.browse_global_by_author": "By Author", - "menu.section.browse_global_by_author": "Por Autor", + "menu.section.browse_global_by_author": "Por autor", // "menu.section.browse_global_by_dateissued": "By Issue Date", - "menu.section.browse_global_by_dateissued": "Por Data de Publicação", + "menu.section.browse_global_by_dateissued": "Por data de publicação", // "menu.section.browse_global_by_subject": "By Subject", - "menu.section.browse_global_by_subject": "Por Assunto", + "menu.section.browse_global_by_subject": "Por assunto", // "menu.section.browse_global_by_title": "By Title", - "menu.section.browse_global_by_title": "Por Título", + "menu.section.browse_global_by_title": "Por título", // "menu.section.browse_global_communities_and_collections": "Communities & Collections", - "menu.section.browse_global_communities_and_collections": "Comunidades e Coleções", - - + "menu.section.browse_global_communities_and_collections": "Comunidades & Coleções", // "menu.section.control_panel": "Control Panel", - "menu.section.control_panel": "Painel de Controle", + "menu.section.control_panel": "Painel de controle", // "menu.section.curation_task": "Curation Task", - "menu.section.curation_task": "Tarefas de Curadoria", - - + "menu.section.curation_task": "Tarefas de curadoria", // "menu.section.edit": "Edit", "menu.section.edit": "Editar", @@ -3219,8 +4149,6 @@ // "menu.section.edit_item": "Item", "menu.section.edit_item": "Item", - - // "menu.section.export": "Export", "menu.section.export": "Exportar", @@ -3236,7 +4164,8 @@ // "menu.section.export_metadata": "Metadata", "menu.section.export_metadata": "Metadados", - + // "menu.section.export_batch": "Batch Export (ZIP)", + "menu.section.export_batch": "Importação em lote (ZIP)", // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": "Secção do menu Controle de Acesso", @@ -3247,8 +4176,8 @@ // "menu.section.icon.control_panel": "Control Panel menu section", "menu.section.icon.control_panel": "Secção do menu Painel de Controlo", - // "menu.section.icon.curation_task": "Curation Task menu section", - "menu.section.icon.curation_task": "Secção do menu Tarefas de Curadoria", + // "menu.section.icon.curation_tasks": "Curation Task menu section", + "menu.section.icon.curation_tasks": "Secção do menu Tarefas de Curadoria", // "menu.section.icon.edit": "Edit menu section", "menu.section.icon.edit": "Secção do menu Editar", @@ -3259,6 +4188,9 @@ // "menu.section.icon.find": "Find menu section", "menu.section.icon.find": "Secção do menu Pesquisar", + // "menu.section.icon.health": "Health check menu section", + "menu.section.icon.health": "Seção do menu Diagnóstico do sistema", + // "menu.section.icon.import": "Import menu section", "menu.section.icon.import": "Secção do menu Importar", @@ -3268,34 +4200,33 @@ // "menu.section.icon.pin": "Pin sidebar", "menu.section.icon.pin": "Fixar barra lateral", - // "menu.section.icon.processes": "Processes menu section", - "menu.section.icon.processes": "Secção do menu Processos", - + // "menu.section.icon.processes": "Processes Health", + "menu.section.icon.processes": "Processos diagnóstico", + // "menu.section.icon.registries": "Registries menu section", "menu.section.icon.registries": "Secção do menu Registos", // "menu.section.icon.statistics_task": "Statistics Task menu section", "menu.section.icon.statistics_task": "Secção do menu Tarefas de Estatísticas", + // "menu.section.icon.workflow": "Administer workflow menu section", + "menu.section.icon.workflow": "Menu administração de tarefas", + // "menu.section.icon.unpin": "Unpin sidebar", "menu.section.icon.unpin": "Soltar barra lateral", - - // "menu.section.import": "Import", "menu.section.import": "Importar", - // "menu.section.import_batch": "Batch Import (ZIP)", - "menu.section.import_batch": "Importação em Lote (ZIP)", + // "menu.section.import_batch": "Batch import (ZIP)", + "menu.section.import_batch": "Importação em lote (ZIP)", // "menu.section.import_metadata": "Metadata", "menu.section.import_metadata": "Metadados", - - // "menu.section.new": "New", "menu.section.new": "Novo", - + // "menu.section.new_collection": "Collection", "menu.section.new_collection": "Coleção", @@ -3306,25 +4237,22 @@ "menu.section.new_item": "Item", // "menu.section.new_item_version": "Item Version", - "menu.section.new_item_version": "Versão do Item", + "menu.section.new_item_version": "Versão do item", // "menu.section.new_process": "Process", "menu.section.new_process": "Processos", - - // "menu.section.pin": "Pin sidebar", "menu.section.pin": "Fixar barra lateral", // "menu.section.unpin": "Unpin sidebar", "menu.section.unpin": "Soltar barra lateral", - - // "menu.section.processes": "Processes", "menu.section.processes": "Processos", - + // "menu.section.health": "Health", + "menu.section.health": "Diagnóstico do sistema", // "menu.section.registries": "Registries", "menu.section.registries": "Registos", @@ -3334,58 +4262,61 @@ // "menu.section.registries_metadata": "Metadata", "menu.section.registries_metadata": "Metadados", - - - - // "menu.section.statistics": "Statistics", + + // "menu.section.statistics": "Statistics", "menu.section.statistics": "Estatísticas", - + // "menu.section.statistics_task": "Statistics Task", - "menu.section.statistics_task": "Tarefas de Estatísticas", - - + "menu.section.statistics_task": "Tarefa de estatísticas", // "menu.section.toggle.access_control": "Toggle Access Control section", - "menu.section.toggle.access_control": "Alternar Secção Controle de Acesso", + "menu.section.toggle.access_control": "Alternar secção controle de acesso", // "menu.section.toggle.control_panel": "Toggle Control Panel section", - "menu.section.toggle.control_panel": "Alternar Secção Painel de COntrole", + "menu.section.toggle.control_panel": "Alternar secção painel de controle", // "menu.section.toggle.curation_task": "Toggle Curation Task section", - "menu.section.toggle.curation_task": "Alternar Secção Tarefas de Curadoria", + "menu.section.toggle.curation_task": "Alternar secção tarefas de curadoria", // "menu.section.toggle.edit": "Toggle Edit section", - "menu.section.toggle.edit": "Alternar Secção Editar", + "menu.section.toggle.edit": "Alternar secção editar", // "menu.section.toggle.export": "Toggle Export section", - "menu.section.toggle.export": "Alternar Secção Exportar", + "menu.section.toggle.export": "Alternar secção exportar", // "menu.section.toggle.find": "Toggle Find section", - "menu.section.toggle.find": "Alternar Secção Pesquisa", + "menu.section.toggle.find": "Alternar secção pesquisa", // "menu.section.toggle.import": "Toggle Import section", - "menu.section.toggle.import": "Alternar Secção Importar", + "menu.section.toggle.import": "Alternar secção importar", // "menu.section.toggle.new": "Toggle New section", - "menu.section.toggle.new": "Alternar Nova Secção", + "menu.section.toggle.new": "Alternar nova secção", // "menu.section.toggle.registries": "Toggle Registries section", - "menu.section.toggle.registries": "Alternar Secção Registos", + "menu.section.toggle.registries": "Alternar secção registos", // "menu.section.toggle.statistics_task": "Toggle Statistics Task section", - "menu.section.toggle.statistics_task": "Alternar Secção Tarefas de Estatísticas", - + "menu.section.toggle.statistics_task": "Alternar secção tarefas de estatísticas", // "menu.section.workflow": "Administer Workflow", - "menu.section.workflow": "Gestão do Workflow", + "menu.section.workflow": "Gestão do workflow", + // "metadata-export-search.tooltip": "Export search results as CSV", + "metadata-export-search.tooltip": "Exportar resultados de pesquisa em CSV", + + // "metadata-export-search.submit.success": "The export was started successfully", + "metadata-export-search.submit.success": "A exportação foi iniciada com sucesso", + + // "metadata-export-search.submit.error": "Starting the export has failed", + "metadata-export-search.submit.error": "O início da exportação falhou!", + + // "mydspace.breadcrumbs": "MyDSpace", + "mydspace.breadcrumbs": "Área Pessoal", // "mydspace.description": "", "mydspace.description": "", - // "mydspace.general.text-here": "here", - "mydspace.general.text-here": "aqui", - // "mydspace.messages.controller-help": "Select this option to send a message to item's submitter.", "mydspace.messages.controller-help": "Selecione esta opção para enviar uma mensagem para o depositante do item.", @@ -3426,7 +4357,7 @@ "mydspace.messages.to": "Para", // "mydspace.new-submission": "New submission", - "mydspace.new-submission": "Nova submissão", + "mydspace.new-submission": "Novo depósito", // "mydspace.new-submission-external": "Import metadata from external source", "mydspace.new-submission-external": "Importar metadados de fontes externas", @@ -3435,7 +4366,7 @@ "mydspace.new-submission-external-short": "Importar metadados", // "mydspace.results.head": "Your submissions", - "mydspace.results.head": "Minhas submissões", + "mydspace.results.head": "Meus depósitos", // "mydspace.results.no-abstract": "No Abstract", "mydspace.results.no-abstract": "Sem Resumo", @@ -3444,13 +4375,13 @@ "mydspace.results.no-authors": "Sem Autores", // "mydspace.results.no-collections": "No Collections", - "mydspace.results.no-collections": "Sem Coleções", + "mydspace.results.no-collections": "Sem coleções", // "mydspace.results.no-date": "No Date", - "mydspace.results.no-date": "Sem Data", + "mydspace.results.no-date": "Sem data", // "mydspace.results.no-files": "No Files", - "mydspace.results.no-files": "Sem Ficheiros", + "mydspace.results.no-files": "Sem ficheiros", // "mydspace.results.no-results": "There were no items to show", "mydspace.results.no-results": "Não havia itens a mostrar", @@ -3459,28 +4390,34 @@ "mydspace.results.no-title": "Sem título", // "mydspace.results.no-uri": "No Uri", - "mydspace.results.no-uri": "Sem Uri", + "mydspace.results.no-uri": "Sem URI", + + // "mydspace.search-form.placeholder": "Search in mydspace...", + "mydspace.search-form.placeholder": "Pesquisar na Área Pessoal...", - // "mydspace.show.workflow": "All tasks", + // "mydspace.show.workflow": "Workflow tasks", "mydspace.show.workflow": "Todas as tarefas", // "mydspace.show.workspace": "Your Submissions", - "mydspace.show.workspace": "Minhas Submissões", + "mydspace.show.workspace": "Meus depósitos", + + // "mydspace.show.supervisedWorkspace": "Supervised items", + "mydspace.show.supervisedWorkspace": "Itens supervisionados", // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "Arquivado", + "mydspace.status.archived": "Depósito aceite", // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "Validação", + "mydspace.status.validation": "Em validação", // "mydspace.status.waiting-for-controller": "Waiting for controller", - "mydspace.status.waiting-for-controller": "Esperando pelo controlador", + "mydspace.status.waiting-for-controller": "Aguarda validador", // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "Fluxo de trabalho", + "mydspace.status.workflow": "Em fluxo de trabalho", // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "Espaço de trabalho", + "mydspace.status.workspace": "Depósito por terminar", // "mydspace.title": "MyDSpace", "mydspace.title": "Área Pessoal", @@ -3496,30 +4433,34 @@ // "mydspace.upload.upload-multiple-successful": "{{qty}} new workspace items created.", "mydspace.upload.upload-multiple-successful": "{{qty}} novo(s) item(ns) de espaço de trabalho criados.", - - // "mydspace.upload.upload-successful": "New workspace item created. Click {{here}} for edit it.", - "mydspace.upload.upload-successful": "Novo item de espaço de trabalho criado. Clique {{here}} para o editar.", - + // "mydspace.view-btn": "View", "mydspace.view-btn": "Ver", - - // "nav.browse.header": "All of DSpace", - "nav.browse.header": "Tudo no DSpace", + "nav.browse.header": "Tudo no repositório", // "nav.community-browse.header": "By Community", - "nav.community-browse.header": "Por Comunidade", + "nav.community-browse.header": "Por comunidade", + // "nav.context-help-toggle": "Toggle context help", + "nav.context-help-toggle": "Alternar ajuda contextual", + // "nav.language": "Language switch", - "nav.language": "Escolha de idioma", + "nav.language": "Escolher idioma", // "nav.login": "Log In", "nav.login": "Entrar", + // "nav.user-profile-menu-and-logout": "User profile menu and Log Out", + "nav.user-profile-menu-and-logout": "Menu perfil do utilizador e sair", + // "nav.logout": "Log Out", "nav.logout": "Sair", + // "nav.main.description": "Main navigation bar", + "nav.main.description": "Barra de naveção principal", + // "nav.mydspace": "MyDSpace", "nav.mydspace": "Área Pessoal", @@ -3533,13 +4474,26 @@ "nav.statistics.header": "Estatísticas", // "nav.stop-impersonating": "Stop impersonating EPerson", - "nav.stop-impersonating": "Deixar de assumir o papel do Utilizador", - + "nav.stop-impersonating": "Deixar de assumir o papel do utilizador", + + // "nav.subscriptions" : "Subscriptions", + "nav.subscriptions" : "Subscrições de alertas", + // "nav.toggle" : "Toggle navigation", + "nav.toggle" : "Alternar a navegação", + + // "nav.user.description" : "User profile bar", + "nav.user.description" : "Barra do perfil de utilizador", + + // "none.listelement.badge": "Item", + "none.listelement.badge": "Item", // "orgunit.listelement.badge": "Organizational Unit", "orgunit.listelement.badge": "Organização", + // "orgunit.listelement.no-title": "Untitled", + "orgunit.listelement.no-title": "Sem título", + // "orgunit.page.city": "City", "orgunit.page.city": "Cidade", @@ -3561,7 +4515,8 @@ // "orgunit.page.titleprefix": "Organizational Unit: ", "orgunit.page.titleprefix": "Organização: ", - + // "pagination.options.description": "Pagination options", + "pagination.options.description": "Opções de paginação", // "pagination.results-per-page": "Results Per Page", "pagination.results-per-page": "Resultados por página", @@ -3573,9 +4528,7 @@ "pagination.showing.label": "A mostrar ", // "pagination.sort-direction": "Sort Options", - "pagination.sort-direction": "Opções de Ordenação", - - + "pagination.sort-direction": "Opções de ordenação", // "person.listelement.badge": "Person", "person.listelement.badge": "Pessoa", @@ -3601,6 +4554,9 @@ // "person.page.lastname": "Last Name", "person.page.lastname": "Último Nome", + // "person.page.name": "Name", + "person.page.name": "Nome", + // "person.page.link.full": "Show all metadata", "person.page.link.full": "Mostrar todos os metadados", @@ -3614,12 +4570,13 @@ "person.page.titleprefix": "Pessoa: ", // "person.search.results.head": "Person Search Results", - "person.search.results.head": "Resultado da pesquisa de Pessoa", - - // "person.search.title": "DSpace Angular :: Person Search", - "person.search.title": "DSpace :: Pesquisar Pessoa", + "person.search.results.head": "Resultados da pesquisa de pessoas", + // "person-relationships.search.results.head": "Person Search Results", + "person-relationships.search.results.head": "Resultados da pesquisa de pessoas", + // "person.search.title": "Person Search", + "person.search.title": "Pesquisar pessoa", // "process.new.select-parameters": "Parameters", "process.new.select-parameters": "Parâmetros", @@ -3627,7 +4584,7 @@ // "process.new.cancel": "Cancel", "process.new.cancel": "Cancelar", - // "process.new.submit": "Submit", + // "process.new.submit": "Save", "process.new.submit": "Guardar", // "process.new.select-script": "Script", @@ -3637,7 +4594,7 @@ "process.new.select-script.placeholder": "Escolha um script...", // "process.new.select-script.required": "Script is required", - "process.new.select-script.required": "É necessário um Script", + "process.new.select-script.required": "É necessário um script", // "process.new.parameter.file.upload-button": "Select file...", "process.new.parameter.file.upload-button": "Selecionar ficheiro...", @@ -3678,8 +4635,6 @@ // "process.new.breadcrumbs": "Create a new process", "process.new.breadcrumbs": "Criar um novo processo", - - // "process.detail.arguments" : "Arguments", "process.detail.arguments" : "Argumentos", @@ -3725,10 +4680,32 @@ // "process.detail.create" : "Create similar process", "process.detail.create" : "Criar processo similar", + // "process.detail.actions": "Actions", + "process.detail.actions": "Ações", + + // "process.detail.delete.button": "Delete process", + "process.detail.delete.button": "Remover processo", + + // "process.detail.delete.header": "Delete process", + "process.detail.delete.header": "Remover processo", + + // "process.detail.delete.body": "Are you sure you want to delete the current process?", + "process.detail.delete.body": "Tem a certeza de que quer remover o processo actual?", + + // "process.detail.delete.cancel": "Cancel", + "process.detail.delete.cancel": "Cancelar", + + // "process.detail.delete.confirm": "Delete process", + "process.detail.delete.confirm": "Remover processo", + + // "process.detail.delete.success": "The process was successfully deleted.", + "process.detail.delete.success": "O processo foi removido com sucesso.", + + // "process.detail.delete.error": "Something went wrong when deleting the process", + "process.detail.delete.error": "Ocorreu algum erro ao remover o processo", - - // "process.overview.table.finish" : "Finish time", - "process.overview.table.finish" : "Tempo de término", + // "process.overview.table.finish" : "Finish time (UTC)", + "process.overview.table.finish" : "Hora de término (UTC)", // "process.overview.table.id" : "Process ID", "process.overview.table.id" : "ID do Processo", @@ -3736,8 +4713,8 @@ // "process.overview.table.name" : "Name", "process.overview.table.name" : "Nome", - // "process.overview.table.start" : "Start time", - "process.overview.table.start" : "Início", + // "process.overview.table.start" : "Start time (UTC)", + "process.overview.table.start" : "Hora de início (UTC)", // "process.overview.table.status" : "Status", "process.overview.table.status" : "Estado", @@ -3746,38 +4723,67 @@ "process.overview.table.user" : "Utilizador", // "process.overview.title": "Processes Overview", - "process.overview.title": "Resumo dos Processos", + "process.overview.title": "Resumo dos processos", // "process.overview.breadcrumbs": "Processes Overview", - "process.overview.breadcrumbs": "Resumo dos Processos", + "process.overview.breadcrumbs": "Resumo dos processos", // "process.overview.new": "New", "process.overview.new": "Novo", + // "process.overview.table.actions": "Actions", + "process.overview.table.actions": "Ações", + + // "process.overview.delete": "Delete {{count}} processes", + "process.overview.delete": "Remover {{count}} processos", + + // "process.overview.delete.clear": "Clear delete selection", + "process.overview.delete.clear": "Limpar selecção a remover", + + // "process.overview.delete.processing": "{{count}} process(es) are being deleted. Please wait for the deletion to fully complete. Note that this can take a while.", + "process.overview.delete.processing": "{{count}} processo(s) estão a ser removidos. Por favor aguarde pela remoção completa. Notar que esta operação pode demorar algum tempo.", + + // "process.overview.delete.body": "Are you sure you want to delete {{count}} process(es)?", + "process.overview.delete.body": "Tem a certeza de que quer remover o(s) processo(s) {{count}}?", + + // "process.overview.delete.header": "Delete processes", + "process.overview.delete.header": "Remover processos", + + // "process.bulk.delete.error.head": "Error on deleteing process", + "process.bulk.delete.error.head": "Ocorreu um erro ao remover os processos", + + // "process.bulk.delete.error.body": "The process with ID {{processId}} could not be deleted. The remaining processes will continue being deleted. ", + "process.bulk.delete.error.body": "O processo com o ID {{{processId}} não pôde ser removido. Os restantes processos continuarão a ser removidos.", + + // "process.bulk.delete.success": "{{count}} process(es) have been succesfully deleted", + "process.bulk.delete.success": "{{count}} processso(s) foram removidos com sucesso", // "profile.breadcrumbs": "Update Profile", - "profile.breadcrumbs": "Atualizar Perfil", + "profile.breadcrumbs": "Atualizar perfil", // "profile.card.identify": "Identify", "profile.card.identify": "Identificação", // "profile.card.security": "Security", - "profile.card.security": "Segurança", + "profile.card.security": "Senha de acesso", - // "profile.form.submit": "Update Profile", - "profile.form.submit": "Atualizar Perfil", + // "profile.form.submit": "Save", + "profile.form.submit": "Atualizar perfil", // "profile.groups.head": "Authorization groups you belong to", "profile.groups.head": "Os seus grupos", + // "profile.special.groups.head": "Authorization special groups you belong to", + "profile.special.groups.head": "Autorização de grupos especiais aos quais pertence", + // "profile.head": "Update Profile", - "profile.head": "Atualizar Perfil", + "profile.head": "Atualizar perfil", // "profile.metadata.form.error.firstname.required": "First Name is required", - "profile.metadata.form.error.firstname.required": "O Nome é obrigatório", + "profile.metadata.form.error.firstname.required": "O preenchimento do nome é um elemento obrigatório!", // "profile.metadata.form.error.lastname.required": "Last Name is required", - "profile.metadata.form.error.lastname.required": "O Apelido é obrigatório", + "profile.metadata.form.error.lastname.required": "O preenchiento do apelido é um elemento obrigatório!", // "profile.metadata.form.label.email": "Email Address", "profile.metadata.form.label.email": "Endereço de correio eletrónico", @@ -3807,42 +4813,46 @@ "profile.notifications.warning.no-changes.title": "Sem alterações", // "profile.security.form.error.matching-passwords": "The passwords do not match.", - "profile.security.form.error.matching-passwords": "As palavras-chave não coincidem.", + "profile.security.form.error.matching-passwords": "As senhas não coincidem.", - // "profile.security.form.error.password-length": "The password should be at least 6 characters long.", - "profile.security.form.error.password-length": "A palavra-chave deve ter pelo menos 6 caracteres.", - - // "profile.security.form.info": "Optionally, you can enter a new password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", - "profile.security.form.info": "Opcionalmente, pode incluir a nova palavra-chave na primeira caixa de texto e confirmar a mesma incluindo-a novamente na segunda caixa de texto. Deverá possuir pelo menos 6 caracteres.", + // "profile.security.form.info": "Optionally, you can enter a new password in the box below, and confirm it by typing it again into the second box.", + "profile.security.form.info": "Opcionalmente, pode criar uma nova senha introduzindo-a primeira caixa de texto e confirmando-a na segunda caixa de texto.", // "profile.security.form.label.password": "Password", - "profile.security.form.label.password": "Palavra-chave", + "profile.security.form.label.password": "Senha", // "profile.security.form.label.passwordrepeat": "Retype to confirm", - "profile.security.form.label.passwordrepeat": "Insira novamente para confirmar", + "profile.security.form.label.passwordrepeat": "Insira novamente a senha para confirmar", + + // "profile.security.form.label.current-password": "Current password", + "profile.security.form.label.current-password": "Senha atual", // "profile.security.form.notifications.success.content": "Your changes to the password were saved.", - "profile.security.form.notifications.success.content": "As alterações à palavra-chave foram guardadas.", + "profile.security.form.notifications.success.content": "As alterações da senha foram guardadas.", // "profile.security.form.notifications.success.title": "Password saved", - "profile.security.form.notifications.success.title": "Palavra-chave guardada", + "profile.security.form.notifications.success.title": "Senha guardada", // "profile.security.form.notifications.error.title": "Error changing passwords", - "profile.security.form.notifications.error.title": "Erro ao mudar a palavra-chave", + "profile.security.form.notifications.error.title": "Erro ao mudar a senha", - // "profile.security.form.notifications.error.not-long-enough": "The password has to be at least 6 characters long.", - "profile.security.form.notifications.error.not-long-enough": "A palavra-chave deve ter pelo menos 6 caracteres.", + // "profile.security.form.notifications.error.change-failed": "An error occurred while trying to change the password. Please check if the current password is correct.", + "profile.security.form.notifications.error.change-failed": "Ocorreu um erro ao tentar alterar a senha. Verifique se a senha atual está correcta.", // "profile.security.form.notifications.error.not-same": "The provided passwords are not the same.", - "profile.security.form.notifications.error.not-same": "As palavras-chave fornecidas não coincidem.", + "profile.security.form.notifications.error.not-same": "As senhas fornecidas não coincidem.", + + // "profile.security.form.notifications.error.general": "Please fill required fields of security form.", + "profile.security.form.notifications.error.general": "Por favor preencha os campos obrigatórios no formulário de segurança.", // "profile.title": "Update Profile", - "profile.title": "Atualizar Perfil", - + "profile.title": "Atualizar perfil", + // "profile.card.researcher": "Researcher Profile", + "profile.card.researcher": "Perfil do investigador", // "project.listelement.badge": "Research Project", - "project.listelement.badge": "Projeto de Investigação", + "project.listelement.badge": "Projeto de investigação", // "project.page.contributor": "Contributors", "project.page.contributor": "Contribuidores", @@ -3869,12 +4879,13 @@ "project.page.status": "Estado", // "project.page.titleprefix": "Research Project: ", - "project.page.titleprefix": "Projeto de Investigação: ", - + "project.page.titleprefix": "Projeto de investigação: ", + // "project.search.results.head": "Project Search Results", - "project.search.results.head": "Resultado da Pesquisa de Projetos", - - + "project.search.results.head": "Resultados da pesquisa de projetos", + + // "project-relationships.search.results.head": "Project Search Results", + "project-relationships.search.results.head": "Resultados da pesquisa de projetos", // "publication.listelement.badge": "Publication", "publication.listelement.badge": "Publicação", @@ -3886,10 +4897,10 @@ "publication.page.edit": "Editar este item", // "publication.page.journal-issn": "Journal ISSN", - "publication.page.journal-issn": "ISSN do Periódico", + "publication.page.journal-issn": "ISSN da revista", // "publication.page.journal-title": "Journal Title", - "publication.page.journal-title": "Título do Periódico", + "publication.page.journal-title": "Título da revista", // "publication.page.publisher": "Publisher", "publication.page.publisher": "Editora", @@ -3899,16 +4910,27 @@ // "publication.page.volume-title": "Volume Title", "publication.page.volume-title": "Título do Volume", - + // "publication.search.results.head": "Publication Search Results", - "publication.search.results.head": "Resultados da Busca de Publicação", + "publication.search.resuts.head": "Resultados da pesquisa de publicações", - // "publication.search.title": "DSpace Angular :: Publication Search", - "publication.search.title": "DSpace :: Busca de Publicações", + // "publication-relationships.search.results.head": "Publication Search Results", + "publication-relationships.search.results.head": "Resultados da pesquisa de publicações", + // "publication.search.title": "Publication Search", + "publication.search.title": "Pesquisa de publicações", + + // "media-viewer.next": "Next", + "media-viewer.next": "Próximo", + + // "media-viewer.previous": "Previous", + "media-viewer.previous": "Anterior", + + // "media-viewer.playlist": "Playlist", + "media-viewer.playlist": "Playlist", // "register-email.title": "New user registration", - "register-email.title": "Registo de Novo Utilizador", + "register-email.title": "Registo de novo utilizador", // "register-page.create-profile.header": "Create Profile", "register-page.create-profile.header": "Criar perfil", @@ -3917,22 +4939,22 @@ "register-page.create-profile.identification.header": "Identificação", // "register-page.create-profile.identification.email": "Email Address", - "register-page.create-profile.identification.email": "Endereço de Correio Eletrónico", + "register-page.create-profile.identification.email": "Endereço de correio eletrónico", // "register-page.create-profile.identification.first-name": "First Name *", "register-page.create-profile.identification.first-name": "Nome *", // "register-page.create-profile.identification.first-name.error": "Please fill in a First Name", - "register-page.create-profile.identification.first-name.error": "Inclua um Nome", + "register-page.create-profile.identification.first-name.error": "Inclua um nome", // "register-page.create-profile.identification.last-name": "Last Name *", "register-page.create-profile.identification.last-name": "Apelido *", // "register-page.create-profile.identification.last-name.error": "Please fill in a Last Name", - "register-page.create-profile.identification.last-name.error": "Inclua um Apelido", + "register-page.create-profile.identification.last-name.error": "Inclua um apelido", // "register-page.create-profile.identification.contact": "Contact Telephone", - "register-page.create-profile.identification.contact": "Contacto Telefónico", + "register-page.create-profile.identification.contact": "Contacto telefónico", // "register-page.create-profile.identification.language": "Language", "register-page.create-profile.identification.language": "Idioma", @@ -3940,8 +4962,8 @@ // "register-page.create-profile.security.header": "Security", "register-page.create-profile.security.header": "Segurança", - // "register-page.create-profile.security.info": "Please enter a password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", - "register-page.create-profile.security.info": "Insira uma palavra-chave na caixa abaixo, e confirme colocando-a de novo da segunda caixa. Deverá ter pelo menos 6 caracteres.", + // "register-page.create-profile.security.info": "Please enter a password in the box below, and confirm it by typing it again into the second box.", + "register-page.create-profile.security.info": "Insira uma palavra-chave na caixa abaixo, e confirme colocando-a de novo da segunda caixa.", // "register-page.create-profile.security.label.password": "Password *", "register-page.create-profile.security.label.password": "Palavra-chave *", @@ -3955,39 +4977,38 @@ // "register-page.create-profile.security.error.matching-passwords": "The passwords do not match.", "register-page.create-profile.security.error.matching-passwords": "As palavras-chave não coincidem.", - // "register-page.create-profile.security.error.password-length": "The password should be at least 6 characters long.", - "register-page.create-profile.security.error.password-length": "A palavra-chave deve possuir pelo menos 6 caracteres.", - // "register-page.create-profile.submit": "Complete Registration", "register-page.create-profile.submit": "Finalizar Registo", // "register-page.create-profile.submit.error.content": "Something went wrong while registering a new user.", - "register-page.create-profile.submit.error.content": "Ocorreu um erro ao registar o Utilizador.", + "register-page.create-profile.submit.error.content": "Ocorreu um erro ao registar o utilizador.", // "register-page.create-profile.submit.error.head": "Registration failed", - "register-page.create-profile.submit.error.head": "Falha no Registo", + "register-page.create-profile.submit.error.head": "Falha no registo", // "register-page.create-profile.submit.success.content": "The registration was successful. You have been logged in as the created user.", "register-page.create-profile.submit.success.content": "O registo foi criado com sucesso. Foi iniciada sessão com o Utilizador criado.", // "register-page.create-profile.submit.success.head": "Registration completed", - "register-page.create-profile.submit.success.head": "Registo Finalizado com Sucesso", - + "register-page.create-profile.submit.success.head": "Registo finalizado com sucesso", // "register-page.registration.header": "New user registration", - "register-page.registration.header": "Registo de Novo Utilizador", + "register-page.registration.header": "Registo de novo utilizador", // "register-page.registration.info": "Register an account to subscribe to collections for email updates, and submit new items to DSpace.", - "register-page.registration.info": "Registe uma conta de Utilizador para subscrever novos conteúdos das coleções e depositar itens no repositório.", + "register-page.registration.info": "Crie uma conta de utilizador para subscrever novos conteúdos das coleções e depositar itens no repositório.", // "register-page.registration.email": "Email Address *", - "register-page.registration.email": "Endereço de Correio Eletrónico *", + "register-page.registration.email": "Endereço de correio eletrónico *", // "register-page.registration.email.error.required": "Please fill in an email address", - "register-page.registration.email.error.required": "Insira um endereço de email", + "register-page.registration.email.error.required": "Insira um endereço de correio eletrónico", - // "register-page.registration.email.error.pattern": "Please fill in a valid email address", - "register-page.registration.email.error.pattern": "Insira um endereço de email válido", + // "register-page.registration.email.error.not-email-form": "Please fill in a valid email address.", + "register-page.registration.email.error.not-email-form": "Insira um endereço de correio eletrónico válido.", + + // "register-page.registration.email.error.not-valid-domain": "Use email with allowed domains: {{ domains }}", + "register-page.registration.email.error.not-valid-domain": "Usar endereço de correio eletrónico com domínios permitidos: {{ domains }}", // "register-page.registration.email.hint": "This address will be verified and used as your login name.", "register-page.registration.email.hint": "Este endereço de correio eletrónico será verificado e usado para iniciar sessão.", @@ -3996,7 +5017,7 @@ "register-page.registration.submit": "Registo", // "register-page.registration.success.head": "Verification email sent", - "register-page.registration.success.head": "Email de verificação enviado", + "register-page.registration.success.head": "Enviado Email de verificação", // "register-page.registration.success.content": "An email has been sent to {{ email }} containing a special URL and further instructions.", "register-page.registration.success.content": "Foi enviado um email para {{ email }} com instruções e um endereço especial para confirmação.", @@ -4007,7 +5028,29 @@ // "register-page.registration.error.content": "An error occured when registering the following email address: {{ email }}", "register-page.registration.error.content": "Ocorreu um erro ao registar o seguinte endereço de correio eletrónico: {{ email }}", + // "register-page.registration.error.recaptcha": "Error when trying to authenticate with recaptcha", + "register-page.registration.error.recaptcha": "Ocorreu um erro ao tentar autenticar com o recaptcha", + + // "register-page.registration.google-recaptcha.must-accept-cookies": "In order to register you must accept the Registration and Password recovery (Google reCaptcha) cookies.", + "register-page.registration.google-recaptcha.must-accept-cookies": "Para se registar deve aceitar o registo e a senha de recuperação (Google reCaptcha) cookies.", + + // "register-page.registration.error.maildomain": "This email address is not on the list of domains who can register. Allowed domains are {{ domains }}", + "register-page.registration.error.maildomain": "Este endereço de e-mail não consta da lista de domínios que podem ser registados. Os domínios permitidos são {{ domains }}", + // "register-page.registration.google-recaptcha.open-cookie-settings": "Open cookie settings", + "register-page.registration.google-recaptcha.open-cookie-settings": "Configurações de Open cookie", + + // "register-page.registration.google-recaptcha.notification.title": "Google reCaptcha", + "register-page.registration.google-recaptcha.notification.title": "Google reCaptcha", + + // "register-page.registration.google-recaptcha.notification.message.error": "An error occurred during reCaptcha verification", + "register-page.registration.google-recaptcha.notification.message.error": "Ocorreu um erro na verificação do reCaptcha", + + // "register-page.registration.google-recaptcha.notification.message.expired": "Verification expired. Please verify again.", + "register-page.registration.google-recaptcha.notification.message.expired": "Verificação expirou. Por favor verifique novamente.", + + // "register-page.registration.info.maildomain": "Accounts can be registered for mail addresses of the domains", + "register-page.registration.info.maildomain": "As contas podem ser registadas para os endereços de email os domínios", // "relationships.add.error.relationship-type.content": "No suitable match could be found for relationship type {{ type }} between the two items", "relationships.add.error.relationship-type.content": "Não foi encontrado uma licação adequada no tipo de relação {{ type }} entre os dois itens", @@ -4037,13 +5080,13 @@ "relationships.isJournalOf": "Periódicos", // "relationships.isOrgUnitOf": "Organizational Units", - "relationships.isOrgUnitOf": "Unidades Organizacionais", + "relationships.isOrgUnitOf": "Unidades organizacionais", // "relationships.isPersonOf": "Authors", "relationships.isPersonOf": "Autores", // "relationships.isProjectOf": "Research Projects", - "relationships.isProjectOf": "Projetos de Investigação", + "relationships.isProjectOf": "Projetos de investigação", // "relationships.isPublicationOf": "Publications", "relationships.isPublicationOf": "Publicações", @@ -4052,19 +5095,35 @@ "relationships.isPublicationOfJournalIssue": "Artigos", // "relationships.isSingleJournalOf": "Journal", - "relationships.isSingleJournalOf": "Periódico", + "relationships.isSingleJournalOf": "Revista", // "relationships.isSingleVolumeOf": "Journal Volume", - "relationships.isSingleVolumeOf": "Volume do Periódico", + "relationships.isSingleVolumeOf": "Volume de revista", // "relationships.isVolumeOf": "Journal Volumes", - "relationships.isVolumeOf": "Volumes do Periódico", + "relationships.isVolumeOf": "Volumes da revista", // "relationships.isContributorOf": "Contributors", "relationships.isContributorOf": "Contribuidores", + // "relationships.isContributorOf.OrgUnit": "Contributor (Organizational Unit)", + "relationships.isContributorOf.OrgUnit": "Colaborador (Unidade organizacional)", + + // "relationships.isContributorOf.Person": "Contributor", + "relationships.isContributorOf.Person": "Contribuidor", + // "relationships.isFundingAgencyOf.OrgUnit": "Funder", + "relationships.isFundingAgencyOf.OrgUnit": "Financiador", + // "repository.image.logo": "Repository logo", + "repository.image.logo": "Logótipo do repositório", + + // "repository.title.prefix": "DSpace Angular :: ", + "repository.title.prefix": "Repositório :: ", + + // "repository.title.prefixDSpace": "DSpace Angular ::", + "repository.title.prefixDSpace": "Repositório ::", + // "resource-policies.add.button": "Add", "resource-policies.add.button": "Adicionar", @@ -4116,6 +5175,12 @@ // "resource-policies.edit.page.failure.content": "An error occurred while editing the resource policy.", "resource-policies.edit.page.failure.content": "Ocorreu um erro ao editar a política de recurso.", + // "resource-policies.edit.page.target-failure.content": "An error occurred while editing the target (ePerson or group) of the resource policy.", + "resource-policies.edit.page.target-failure.content": "Ocorreu um erro durante a edição da (ePerson ou grupo) da política de recursos.", + + // "resource-policies.edit.page.other-failure.content": "An error occurred while editing the resource policy. The target (ePerson or group) has been successfully updated.", + "resource-policies.edit.page.other-failure.content": "Ocorreu um erro durante a edição da política de recursos. A (ePerson ou grupo) foi actualizado com sucesso.", + // "resource-policies.edit.page.success.content": "Operation successful", "resource-policies.edit.page.success.content": "Operação bem sucedida", @@ -4123,19 +5188,19 @@ "resource-policies.edit.page.title": "Editar política de recurso", // "resource-policies.form.action-type.label": "Select the action type", - "resource-policies.form.action-type.label": "Seleccione o tipo de ação", + "resource-policies.form.action-type.label": "Selecione o tipo de ação", // "resource-policies.form.action-type.required": "You must select the resource policy action.", "resource-policies.form.action-type.required": "Deve selecionar a ação da política de recurso.", // "resource-policies.form.eperson-group-list.label": "The eperson or group that will be granted the permission", - "resource-policies.form.eperson-group-list.label": "O Utilizador ou grupo ao qual serão atribuídas as permissões", + "resource-policies.form.eperson-group-list.label": "O utilizador ou grupo ao qual serão atribuídas as permissões", // "resource-policies.form.eperson-group-list.select.btn": "Select", "resource-policies.form.eperson-group-list.select.btn": "Seleccionar", // "resource-policies.form.eperson-group-list.tab.eperson": "Search for a ePerson", - "resource-policies.form.eperson-group-list.tab.eperson": "Pesquisar um Utilizador", + "resource-policies.form.eperson-group-list.tab.eperson": "Pesquisar um utilizador", // "resource-policies.form.eperson-group-list.tab.group": "Search for a group", "resource-policies.form.eperson-group-list.tab.group": "Pesquisar um grupo", @@ -4146,14 +5211,29 @@ // "resource-policies.form.eperson-group-list.table.headers.id": "ID", "resource-policies.form.eperson-group-list.table.headers.id": "ID", - // "resource-policies.form.eperson-group-list.table.headers.name": "Name", + // "resource-policies.form.eperson-group-list.table.headers.name": "Name", "resource-policies.form.eperson-group-list.table.headers.name": "Nome", + + // "resource-policies.form.eperson-group-list.modal.header": "Cannot change type", + "resource-policies.form.eperson-group-list.modal.header": "Não pode mudar de tipo", + + // "resource-policies.form.eperson-group-list.modal.text1.toGroup": "It is not possible to replace an ePerson with a group.", + "resource-policies.form.eperson-group-list.modal.text1.toGroup": "Não é possível substituir um utilizador por um grupo.", + + // "resource-policies.form.eperson-group-list.modal.text1.toEPerson": "It is not possible to replace a group with an ePerson.", + "resource-policies.form.eperson-group-list.modal.text1.toEPerson": "Não é possível substituir um grupo por uma ePerson.", + + // "resource-policies.form.eperson-group-list.modal.text2": "Delete the current resource policy and create a new one with the desired type.", + "resource-policies.form.eperson-group-list.modal.text2": "Eliminar a política actual de recursos e criar uma nova política com o tipo desejado.", + + // "resource-policies.form.eperson-group-list.modal.close": "Ok", + "resource-policies.form.eperson-group-list.modal.close": "Ok", // "resource-policies.form.date.end.label": "End Date", - "resource-policies.form.date.end.label": "Data de Fim", + "resource-policies.form.date.end.label": "Data de fim", // "resource-policies.form.date.start.label": "Start Date", - "resource-policies.form.date.start.label": "Data de Início", + "resource-policies.form.date.start.label": "Data de início", // "resource-policies.form.description.label": "Description", "resource-policies.form.description.label": "Descrição", @@ -4162,7 +5242,7 @@ "resource-policies.form.name.label": "Nome", // "resource-policies.form.policy-type.label": "Select the policy type", - "resource-policies.form.policy-type.label": "Seleccione o tipo de política", + "resource-policies.form.policy-type.label": "Selecione o tipo de política", // "resource-policies.form.policy-type.required": "You must select the resource policy type.", "resource-policies.form.policy-type.required": "Deve selecionar um tipo de política de recurso.", @@ -4171,10 +5251,10 @@ "resource-policies.table.headers.action": "Ação", // "resource-policies.table.headers.date.end": "End Date", - "resource-policies.table.headers.date.end": "Data de Fim", + "resource-policies.table.headers.date.end": "Data de término", // "resource-policies.table.headers.date.start": "Start Date", - "resource-policies.table.headers.date.start": "Data de Início", + "resource-policies.table.headers.date.start": "Data de início", // "resource-policies.table.headers.edit": "Edit", "resource-policies.table.headers.edit": "Editar", @@ -4201,34 +5281,34 @@ "resource-policies.table.headers.policyType": "tipo", // "resource-policies.table.headers.title.for.bitstream": "Policies for Bitstream", - "resource-policies.table.headers.title.for.bitstream": "Política de Ficheiros", + "resource-policies.table.headers.title.for.bitstream": "Política de ficheiros", // "resource-policies.table.headers.title.for.bundle": "Policies for Bundle", - "resource-policies.table.headers.title.for.bundle": "Políticas para Pacote", + "resource-policies.table.headers.title.for.bundle": "Políticas para pacote", // "resource-policies.table.headers.title.for.item": "Policies for Item", - "resource-policies.table.headers.title.for.item": "Políticas para Item", + "resource-policies.table.headers.title.for.item": "Políticas para item", // "resource-policies.table.headers.title.for.community": "Policies for Community", - "resource-policies.table.headers.title.for.community": "Políticas para Comunidades", + "resource-policies.table.headers.title.for.community": "Políticas para comunidade", // "resource-policies.table.headers.title.for.collection": "Policies for Collection", - "resource-policies.table.headers.title.for.collection": "Políticas para Coleção", - - - + "resource-policies.table.headers.title.for.collection": "Políticas para coleção", + // "search.description": "", "search.description": "", // "search.switch-configuration.title": "Show", "search.switch-configuration.title": "Mostrar", + + // "search.title": "Search", + "search.title": "Pesquisa", - // "search.title": "DSpace Angular :: Search", - "search.title": "DSpace :: Pesquisa", - - // "search.breadcrumbs": "Search", + // "search.breadcrumbs": "Search", "search.breadcrumbs": "Pesquisar", + // "search.search-form.placeholder": "Search the repository ...", + "search.search-form.placeholder": "Pesquisar no repositório...", // "search.filters.applied.f.author": "Author", "search.filters.applied.f.author": "Autor", @@ -4240,13 +5320,13 @@ "search.filters.applied.f.dateIssued.min": "Data inicial", // "search.filters.applied.f.dateSubmitted": "Date submitted", - "search.filters.applied.f.dateSubmitted": "Data de submissão", + "search.filters.applied.f.dateSubmitted": "Data de depósito", - // "search.filters.applied.f.discoverable": "Private", + // "search.filters.applied.f.discoverable": "Non-discoverable", "search.filters.applied.f.discoverable": "Privado", - // "search.filters.applied.f.entityType": "Item Type", - "search.filters.applied.f.entityType": "Tipo de Item", + // "search.filters.applied.f.entityType": "Item type", + "search.filters.applied.f.entityType": "Tipo de item", // "search.filters.applied.f.has_content_in_original_bundle": "Has files", "search.filters.applied.f.has_content_in_original_bundle": "Tem ficheiros", @@ -4272,6 +5352,9 @@ // "search.filters.applied.f.birthDate.min": "Start birth date", "search.filters.applied.f.birthDate.min": "Início data de nascimento", + // "search.filters.applied.f.supervisedBy": "Supervised by", + "search.filters.applied.f.supervisedBy": "Supervisionado por", + // "search.filters.applied.f.withdrawn": "Withdrawn", "search.filters.applied.f.withdrawn": "Retirado", @@ -4281,119 +5364,182 @@ // "search.filters.filter.author.placeholder": "Author name", "search.filters.filter.author.placeholder": "Nome do autor", + // "search.filters.filter.author.label": "Search author name", + "search.filters.filter.author.label": "Pesquisar por nome", + // "search.filters.filter.birthDate.head": "Birth Date", "search.filters.filter.birthDate.head": "Data de nascimento", // "search.filters.filter.birthDate.placeholder": "Birth Date", "search.filters.filter.birthDate.placeholder": "Data de nascimento", + // "search.filters.filter.birthDate.label": "Search birth date", + "search.filters.filter.birthDate.label": "Procurar data de nascimento", + + // "search.filters.filter.collapse": "Collapse filter", + "search.filters.filter.collapse": "Fechar filtro", + // "search.filters.filter.creativeDatePublished.head": "Date Published", "search.filters.filter.creativeDatePublished.head": "Data de publicação", // "search.filters.filter.creativeDatePublished.placeholder": "Date Published", - "search.filters.filter.creativeDatePublished.placeholder": "Data de publicação", + "search.filters.filter.creativeDatePublished.placeholder": "Data de publicação", + // "search.filters.filter.creativeDatePublished.label": "Search date published", + "search.filters.filter.creativeDatePublished.label": "Procurar data de publicação", + // "search.filters.filter.creativeWorkEditor.head": "Editor", "search.filters.filter.creativeWorkEditor.head": "Editor", // "search.filters.filter.creativeWorkEditor.placeholder": "Editor", "search.filters.filter.creativeWorkEditor.placeholder": "Editor", + // "search.filters.filter.creativeWorkEditor.label": "Search editor", + "search.filters.filter.creativeWorkEditor.label": "Procurar editor", + // "search.filters.filter.creativeWorkKeywords.head": "Subject", "search.filters.filter.creativeWorkKeywords.head": "Assunto", // "search.filters.filter.creativeWorkKeywords.placeholder": "Subject", "search.filters.filter.creativeWorkKeywords.placeholder": "Assunto", + // "search.filters.filter.creativeWorkKeywords.label": "Search subject", + "search.filters.filter.creativeWorkKeywords.label": "Procurar assuntos", + // "search.filters.filter.creativeWorkPublisher.head": "Publisher", "search.filters.filter.creativeWorkPublisher.head": "Editora", // "search.filters.filter.creativeWorkPublisher.placeholder": "Publisher", "search.filters.filter.creativeWorkPublisher.placeholder": "Editora", + // "search.filters.filter.creativeWorkPublisher.label": "Search publisher", + "search.filters.filter.creativeWorkPublisher.label": "Procurar editora", + // "search.filters.filter.dateIssued.head": "Date", "search.filters.filter.dateIssued.head": "Data", - // "search.filters.filter.dateIssued.max.placeholder": "Minimum Date", - "search.filters.filter.dateIssued.max.placeholder": "Data Mínima", + // "search.filters.filter.dateIssued.max.placeholder": "Maximum Date", + "search.filters.filter.dateIssued.max.placeholder": "Data máxima", - // "search.filters.filter.dateIssued.min.placeholder": "Maximum Date", - "search.filters.filter.dateIssued.min.placeholder": "Data Máxima", + // "search.filters.filter.dateIssued.max.label": "End", + "search.filters.filter.dateIssued.max.label": "Fim", + + // "search.filters.filter.dateIssued.min.placeholder": "Minimum Date", + "search.filters.filter.dateIssued.min.placeholder": "Data mínima", + + // "search.filters.filter.dateIssued.min.label": "Start", + "search.filters.filter.dateIssued.min.label": "Início", // "search.filters.filter.dateSubmitted.head": "Date submitted", - "search.filters.filter.dateSubmitted.head": "Data de submissão", + "search.filters.filter.dateSubmitted.head": "Data de depósito", // "search.filters.filter.dateSubmitted.placeholder": "Date submitted", - "search.filters.filter.dateSubmitted.placeholder": "Data de submissão", + "search.filters.filter.dateSubmitted.placeholder": "Data de depósito", - // "search.filters.filter.discoverable.head": "Private", + // "search.filters.filter.dateSubmitted.label": "Search date submitted", + "search.filters.filter.dateSubmitted.label": "Procurar data de depósito", + + // "search.filters.filter.discoverable.head": "Non-discoverable", "search.filters.filter.discoverable.head": "Privado", // "search.filters.filter.withdrawn.head": "Withdrawn", "search.filters.filter.withdrawn.head": "Retirado", // "search.filters.filter.entityType.head": "Item Type", - "search.filters.filter.entityType.head": "Tipo de Item", + "search.filters.filter.entityType.head": "Tipo de item", // "search.filters.filter.entityType.placeholder": "Item Type", - "search.filters.filter.entityType.placeholder": "Tipo de Item", + "search.filters.filter.entityType.placeholder": "Tipo de item", + + // "search.filters.filter.entityType.label": "Search item type", + "search.filters.filter.entityType.label": "Pesquisar por tipo", + + // "search.filters.filter.expand": "Expand filter", + "search.filters.filter.expand": "Expandir filtro", // "search.filters.filter.has_content_in_original_bundle.head": "Has files", - "search.filters.filter.has_content_in_original_bundle.head": "Tem Ficheiros", + "search.filters.filter.has_content_in_original_bundle.head": "Tem ficheiros", // "search.filters.filter.itemtype.head": "Type", - "search.filters.filter.itemtype.head": "Tipo", + "search.filters.filter.itemtype.head": "Tipo de item depositado", // "search.filters.filter.itemtype.placeholder": "Type", "search.filters.filter.itemtype.placeholder": "Tipo", + // "search.filters.filter.itemtype.label": "Search type", + "search.filters.filter.itemtype.label": "Procurar por tipo", + // "search.filters.filter.jobTitle.head": "Job Title", "search.filters.filter.jobTitle.head": "Cargo", // "search.filters.filter.jobTitle.placeholder": "Job Title", "search.filters.filter.jobTitle.placeholder": "Cargo", + // "search.filters.filter.jobTitle.label": "Search job title", + "search.filters.filter.jobTitle.label": "Procurar cargo", + // "search.filters.filter.knowsLanguage.head": "Known language", "search.filters.filter.knowsLanguage.head": "Idioma conhecido", // "search.filters.filter.knowsLanguage.placeholder": "Known language", "search.filters.filter.knowsLanguage.placeholder": "Idioma conhecido", + // "search.filters.filter.knowsLanguage.label": "Search known language", + "search.filters.filter.knowsLanguage.label": "Procurar idiomas conhecidos", + // "search.filters.filter.namedresourcetype.head": "Status", - "search.filters.filter.namedresourcetype.head": "Estado", + "search.filters.filter.namedresourcetype.head": "Estado do depósito", // "search.filters.filter.namedresourcetype.placeholder": "Status", "search.filters.filter.namedresourcetype.placeholder": "Estado", + // "search.filters.filter.namedresourcetype.label": "Search status", + "search.filters.filter.namedresourcetype.label": "Pesquisa por estado", + // "search.filters.filter.objectpeople.head": "People", "search.filters.filter.objectpeople.head": "Pessoas", - + // "search.filters.filter.objectpeople.placeholder": "People", "search.filters.filter.objectpeople.placeholder": "Pessoas", + // "search.filters.filter.objectpeople.label": "Search people", + "search.filters.filter.objectpeople.label": "Procurar pessoas", + // "search.filters.filter.organizationAddressCountry.head": "Country", "search.filters.filter.organizationAddressCountry.head": "País", // "search.filters.filter.organizationAddressCountry.placeholder": "Country", "search.filters.filter.organizationAddressCountry.placeholder": "País", + // "search.filters.filter.organizationAddressCountry.label": "Search country", + "search.filters.filter.organizationAddressCountry.label": "Procurar país", + // "search.filters.filter.organizationAddressLocality.head": "City", "search.filters.filter.organizationAddressLocality.head": "Cidade", // "search.filters.filter.organizationAddressLocality.placeholder": "City", "search.filters.filter.organizationAddressLocality.placeholder": "Cidade", + // "search.filters.filter.organizationAddressLocality.label": "Search city", + "search.filters.filter.organizationAddressLocality.label": "Procurar cidade", + // "search.filters.filter.organizationFoundingDate.head": "Date Founded", - "search.filters.filter.organizationFoundingDate.head": "Data de Fundação", + "search.filters.filter.organizationFoundingDate.head": "Data de fundação", // "search.filters.filter.organizationFoundingDate.placeholder": "Date Founded", - "search.filters.filter.organizationFoundingDate.placeholder": "Data de Fundação", + "search.filters.filter.organizationFoundingDate.placeholder": "Data de fundação", + + // "search.filters.filter.organizationFoundingDate.label": "Search date founded", + "search.filters.filter.organizationFoundingDate.label": "Procurar data de fundação", // "search.filters.filter.scope.head": "Scope", "search.filters.filter.scope.head": "Âmbito", // "search.filters.filter.scope.placeholder": "Scope filter", - "search.filters.filter.scope.placeholder": "Filtrar Ãmbito", + "search.filters.filter.scope.placeholder": "Filtrar âmbito", + + // "search.filters.filter.scope.label": "Search scope filter", + "search.filters.filter.scope.label": "Filtro âmbito da pesquisa", // "search.filters.filter.show-less": "Collapse", "search.filters.filter.show-less": "Mostrar menos", @@ -4406,6 +5552,9 @@ // "search.filters.filter.subject.placeholder": "Subject", "search.filters.filter.subject.placeholder": "Assunto", + + // "search.filters.filter.subject.label": "Search subject", + "search.filters.filter.subject.label": "Pesquisar por assunto", // "search.filters.filter.submitter.head": "Submitter", "search.filters.filter.submitter.head": "Depositante", @@ -4413,13 +5562,26 @@ // "search.filters.filter.submitter.placeholder": "Submitter", "search.filters.filter.submitter.placeholder": "Depositante", - + // "search.filters.filter.submitter.label": "Search submitter", + "search.filters.filter.submitter.label": "Procurar depositante", + + // "search.filters.filter.show-tree": "browse {{ name }} tree", + "search.filters.filter.show-tree": "Percorrer por hierarquia de {{ name }}", + + // "search.filters.filter.supervisedBy.head": "Supervised By", + "search.filters.filter.supervisedBy.head": "Supervisionado por", + + // "search.filters.filter.supervisedBy.placeholder": "Supervised By", + "search.filters.filter.supervisedBy.placeholder": "Supervisionado por", + + // "search.filters.filter.supervisedBy.label": "search Supervised By", + "search.filters.filter.supervisedBy.label": "pesquisar supervisionado por", // "search.filters.entityType.JournalIssue": "Journal Issue", - "search.filters.entityType.JournalIssue": "Número de Revista", + "search.filters.entityType.JournalIssue": "Número de revista", // "search.filters.entityType.JournalVolume": "Journal Volume", - "search.filters.entityType.JournalVolume": "Volume de Revista", + "search.filters.entityType.JournalVolume": "Volume de revista", // "search.filters.entityType.OrgUnit": "Organizational Unit", "search.filters.entityType.OrgUnit": "Organização", @@ -4442,28 +5604,26 @@ // "search.filters.withdrawn.false": "No", "search.filters.withdrawn.false": "Não", - // "search.filters.head": "Filters", "search.filters.head": "Filtros", // "search.filters.reset": "Reset filters", "search.filters.reset": "Limpar filtros", - - + // "search.filters.search.submit": "Submit", + "search.filters.search.submit": "Enviar", + // "search.form.search": "Search", "search.form.search": "Pesquisar", - // "search.form.search_dspace": "Search DSpace", - "search.form.search_dspace": "Pesquisar", - - // "search.form.search_mydspace": "Search MyDSpace", - "search.form.search_mydspace": "Pesquisar na Área Pessoal", - - + // "search.form.search_dspace": "All repository", + "search.form.search_dspace": "Pesquisar tudo", + // "search.form.scope.all": "All of DSpace", + "search.form.scope.all": "Pesquisar tudo", + // "search.results.head": "Search Results", - "search.results.head": "Resultados de Busca", + "search.results.head": "Resultados da pesquisa", // "search.results.no-results": "Your search returned no results. Having trouble finding what you're looking for? Try putting", "search.results.no-results": "Sua pesquisa não retornou resultados. Tem dificuldade em encontrar o que procura? Tente incluir ", @@ -4474,7 +5634,17 @@ // "search.results.empty": "Your search returned no results.", "search.results.empty": "A sua pesquisa não retornou resultados.", + // "search.results.view-result": "View", + "search.results.view-result": "Ver", + // "search.results.response.500": "An error occurred during query execution, please try again later", + "search.results.response.500": "Ocorreu um erro durante a execução da consulta, por favor tente novamente mais tarde", + + // "default.search.results.head": "Search Results", + "default.search.results.head": "Resultados da pesquisa", + + // "default-relationships.search.results.head": "Search Results", + "default-relationships.search.results.head": "Resultados da pesquisa", // "search.sidebar.close": "Back to results", "search.sidebar.close": "Voltar para os resultados", @@ -4497,8 +5667,6 @@ // "search.sidebar.settings.title": "Settings", "search.sidebar.settings.title": "Configurações", - - // "search.view-switch.show-detail": "Show detail", "search.view-switch.show-detail": "Mostrar detalhes", @@ -4508,8 +5676,6 @@ // "search.view-switch.show-list": "Show as list", "search.view-switch.show-list": "Mostrar como lista", - - // "sorting.ASC": "Ascending", "sorting.ASC": "Ascendente", @@ -4517,22 +5683,41 @@ "sorting.DESC": "Descendente", // "sorting.dc.title.ASC": "Title Ascending", - "sorting.dc.title.ASC": "Título Ascendente", + "sorting.dc.title.ASC": "Título ascendente", // "sorting.dc.title.DESC": "Title Descending", - "sorting.dc.title.DESC": "Título Descendente", + "sorting.dc.title.DESC": "Título descendente", - // "sorting.score.DESC": "Relevance", - "sorting.score.DESC": "Relevância", + // "sorting.score.ASC": "Least Relevant", + "sorting.score.ASC": "Menos relevante", + // "sorting.score.DESC": "Most Relevant", + "sorting.score.DESC": "Mais relevante", + // "sorting.dc.date.issued.ASC": "Date Issued Ascending", + "sorting.dc.date.issued.ASC": "Data de publicação ascendente", + + // "sorting.dc.date.issued.DESC": "Date Issued Descending", + "sorting.dc.date.issued.DESC": "Data de publicação descendente", + + // "sorting.dc.date.accessioned.ASC": "Accessioned Date Ascending", + "sorting.dc.date.accessioned.ASC": "Data de disponibilização ascendente", + + // "sorting.dc.date.accessioned.DESC": "Accessioned Date Descending", + "sorting.dc.date.accessioned.DESC": "Data de disponibilização descendente", + // "sorting.lastModified.ASC": "Last modified Ascending", + "sorting.lastModified.ASC": "Última modificação ascendente", + + // "sorting.lastModified.DESC": "Last modified Descending", + "sorting.lastModified.DESC": "Última modificação descendente", + // "statistics.title": "Statistics", "statistics.title": "Estatísticas", - - // "statistics.header": "Statistics for {{ scope }}", + + // "statistics.header": "Statistics for {{ scope }}", "statistics.header": "Estatísticas para {{ scope }}", - + // "statistics.breadcrumbs": "Statistics", "statistics.breadcrumbs": "Estatísticas", @@ -4543,30 +5728,34 @@ "statistics.table.no-data": "Sem dados disponíveis", // "statistics.table.title.TotalVisits": "Total visits", - "statistics.table.title.TotalVisits": "Total de Visitas", + "statistics.table.title.TotalVisits": "Total de visitas", // "statistics.table.title.TotalVisitsPerMonth": "Total visits per month", - "statistics.table.title.TotalVisitsPerMonth": "Total de Visitas por Mês", + "statistics.table.title.TotalVisitsPerMonth": "Total de visitas por mês", // "statistics.table.title.TotalDownloads": "File Visits", "statistics.table.title.TotalDownloads": "Downloads", // "statistics.table.title.TopCountries": "Top country views", - "statistics.table.title.TopCountries": "Top de Consultas por País", + "statistics.table.title.TopCountries": "Top de consultas por país", // "statistics.table.title.TopCities": "Top city views", - "statistics.table.title.TopCities": "Top de Consultas por Cidade", + "statistics.table.title.TopCities": "Top de consultas por cidade", // "statistics.table.header.views": "Views", "statistics.table.header.views": "Consultas", - - + + // "submission.edit.breadcrumbs": "Edit Submission", + "submission.edit.breadcrumbs": "Editar depósito", // "submission.edit.title": "Edit Submission", - "submission.edit.title": "Editar Submissão", + "submission.edit.title": "Editar depósito", + + // "submission.general.cancel": "Cancel", + "submission.general.cancel": "Cancelar", // "submission.general.cannot_submit": "You have not the privilege to make a new submission.", - "submission.general.cannot_submit": "Você não tem privilégios para fazer uma nova submissão.", + "submission.general.cannot_submit": "Você não tem privilégios para fazer um novo depósito.", // "submission.general.deposit": "Deposit", "submission.general.deposit": "Depositar", @@ -4581,23 +5770,52 @@ "submission.general.discard.confirm.submit": "Sim, tenho certeza", // "submission.general.discard.confirm.title": "Discard submission", - "submission.general.discard.confirm.title": "Cancelar submissão", + "submission.general.discard.confirm.title": "Cancelar depósito", // "submission.general.discard.submit": "Discard", "submission.general.discard.submit": "Cancelar", + // "submission.general.info.saved": "Saved", + "submission.general.info.saved": "Informação guardada", + + // "submission.general.info.pending-changes": "Unsaved changes", + "submission.general.info.pending-changes": "Alterações não guardadas", + // "submission.general.save": "Save", "submission.general.save": "Guardar", // "submission.general.save-later": "Save for later", - "submission.general.save-later": "Guardar para continuar depois", - + "submission.general.save-later": "Guardar e fechar", // "submission.import-external.page.title": "Import metadata from an external source", "submission.import-external.page.title": "Importar metadados de uma fonte externa", // "submission.import-external.title": "Import metadata from an external source", "submission.import-external.title": "Importar metadados de uma fonte externa", + + // "submission.import-external.title.Journal": "Import a journal from an external source", + "submission.import-external.title.Journal": "Importar revista de uma fonte externa", + + // "submission.import-external.title.JournalIssue": "Import a journal issue from an external source", + "submission.import-external.title.JournalIssue": "Importar o número de um revista de um fonte externa", + + // "submission.import-external.title.JournalVolume": "Import a journal volume from an external source", + "submission.import-external.title.JournalVolume": "Importar o volume de uma revista de fonte externa", + + // "submission.import-external.title.OrgUnit": "Import a publisher from an external source", + "submission.import-external.title.OrgUnit": "Importar editora de uma fonte externa", + + // "submission.import-external.title.Person": "Import a person from an external source", + "submission.import-external.title.Person": "Importar pessoa de uma fonte externa", + + // "submission.import-external.title.Project": "Import a project from an external source", + "submission.import-external.title.Project": "Importar projeto de uma fonte externa", + + // "submission.import-external.title.Publication": "Import a publication from an external source", + "submission.import-external.title.Publication": "Importar uma publicação de uma fonte externa", + + // "submission.import-external.title.none": "Import metadata from an external source", + "submission.import-external.title.none": "Importar metadados de uma fonte externa", // "submission.import-external.page.hint": "Enter a query above to find items from the web to import in to DSpace.", "submission.import-external.page.hint": "Pesquise itens abaixo disponíveis na internet para que sejam importados para o repositório.", @@ -4620,35 +5838,92 @@ // "submission.import-external.source.arxiv": "arXiv", "submission.import-external.source.arxiv": "arXiv", + // "submission.import-external.source.ads": "NASA/ADS", + "submission.import-external.source.ads": "NASA/ADS", + + // "submission.import-external.source.cinii": "CiNii", + "submission.import-external.source.cinii": "CiNii", + + // "submission.import-external.source.crossref": "CrossRef", + "submission.import-external.source.crossref": "CrossRef", + + // "submission.import-external.source.datacite": "DataCite", + "submission.import-external.source.datacite": "DataCite", + + // "submission.import-external.source.scielo": "SciELO", + "submission.import-external.source.scielo": "SciELO", + + // "submission.import-external.source.scopus": "Scopus", + "submission.import-external.source.scopus": "Scopus", + + // "submission.import-external.source.vufind": "VuFind", + "submission.import-external.source.vufind": "VuFind", + + // "submission.import-external.source.wos": "Web of Science", + "submission.import-external.source.wos": "Web of Science", + + // "submission.import-external.source.orcidWorks": "ORCID", + "submission.import-external.source.orcidWorks": "ORCID", + + // "submission.import-external.source.epo": "European Patent Office (EPO)", + "submission.import-external.source.epo": "European Patent Office (EPO)", + // "submission.import-external.source.loading": "Loading ...", - "submission.import-external.source.loading": "A Carregar ...", + "submission.import-external.source.loading": "A carregar ...", // "submission.import-external.source.sherpaJournal": "SHERPA Journals", - "submission.import-external.source.sherpaJournal": "Revistas do SHERPA", + "submission.import-external.source.sherpaJournal": "Revistas Sherpa Romeo por nome", + + // "submission.import-external.source.sherpaJournalIssn": "SHERPA Journals by ISSN", + "submission.import-external.source.sherpaJournalIssn": "Revistas Sherpa Romeo por ISSN", // "submission.import-external.source.sherpaPublisher": "SHERPA Publishers", - "submission.import-external.source.sherpaPublisher": "Editores do SHERPA", + "submission.import-external.source.sherpaPublisher": "Editoras Sherpa Romeo", + // "submission.import-external.source.openAIREFunding": "Funding OpenAIRE API", + "submission.import-external.source.openAIREFunding": "Financiamento via API OpenAIRE", + // "submission.import-external.source.orcid": "ORCID", "submission.import-external.source.orcid": "ORCID", - // "submission.import-external.source.pubmed": "Pubmed", - "submission.import-external.source.pubmed": "Pubmed", + // "submission.import-external.source.pubmed": "PubMed", + "submission.import-external.source.pubmed": "PubMed", + + // "submission.import-external.source.pubmedeu": "PubMed Europe", + "submission.import-external.source.pubmedeu": "PubMed Europa", // "submission.import-external.source.lcname": "Library of Congress Names", "submission.import-external.source.lcname": "Nomes da Library of Congress", // "submission.import-external.preview.title": "Item Preview", - "submission.import-external.preview.title": "Prévisualização do Item", + "submission.import-external.preview.title": "Pré-visualização do item", + // "submission.import-external.preview.title.Publication": "Publication Preview", + "submission.import-external.preview.title.Publication": "Pré-visualização da publicação", + + // "submission.import-external.preview.title.none": "Item Preview", + "submission.import-external.preview.title.none": "Pré-visualização do Item", + + // "submission.import-external.preview.title.Journal": "Journal Preview", + "submission.import-external.preview.title.Journal": "Pré-visualização da revista", + + // "submission.import-external.preview.title.OrgUnit": "Organizational Unit Preview", + "submission.import-external.preview.title.OrgUnit": "Pré-visualização da organização", + + // "submission.import-external.preview.title.Person": "Person Preview", + "submission.import-external.preview.title.Person": "Pré-visualização dos dados pessoais a importar", + + // "submission.import-external.preview.title.Project": "Project Preview", + "submission.import-external.preview.title.Project": "Pré-visualização do dados do projeto a importar", + // "submission.import-external.preview.subtitle": "The metadata below was imported from an external source. It will be pre-filled when you start the submission.", - "submission.import-external.preview.subtitle": "Os metadados abaixo foram importados de uma fonte externa. Serão pré-preenchidos quando iniciar a submissão.", + "submission.import-external.preview.subtitle": "Os seguintes metadados foram importados de uma fonte externa. Serão pré-preenchidos quando iniciar o depósito.", // "submission.import-external.preview.button.import": "Start submission", - "submission.import-external.preview.button.import": "Iniciar submissão", + "submission.import-external.preview.button.import": "Iniciar depósito", // "submission.import-external.preview.error.import.title": "Submission error", - "submission.import-external.preview.error.import.title": "Erro na submissão", + "submission.import-external.preview.error.import.title": "Erro no depósito", // "submission.import-external.preview.error.import.body": "An error occurs during the external source entry import process.", "submission.import-external.preview.error.import.body": "Ocorreu um erro durante o processo de importação de metadados de uma fonte externa.", @@ -4658,21 +5933,63 @@ // "submission.sections.describe.relationship-lookup.external-source.added": "Successfully added local entry to the selection", "submission.sections.describe.relationship-lookup.external-source.added": "Adicionada com sucesso uma entrada local à seleção", - + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Import remote author", "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Importar autor remoto", - - // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Import remote journal", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Importar Informação Remota", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Import remote journal", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Importar revista remota", // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Import remote journal issue", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Importar Número de revista remoto", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Importar número de revista remoto", // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Import remote journal volume", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Importar Volume de revista remoto", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Importar volume de revista remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Project", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Projeto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.none": "Import remote item", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.none": "Importar item remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Event": "Import remote event", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Event": "Importar evento remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Product": "Import remote product", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Product": "Importar produto remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Equipment": "Import remote equipment", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Equipment": "Importar equipamento remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.OrgUnit": "Import remote organizational unit", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.OrgUnit": "Importar organização remota", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Funding": "Import remote fund", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Funding": "Importar financiamento remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Person": "Import remote person", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Person": "Import remote person", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Patent": "Import remote patent", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Patent": "Import remote patent", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Project": "Import remote project", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Project": "Importar projeto remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Import remote publication", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Importar publicação remota", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "New Entity Added!", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "Nova entidade adicionada!", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Project", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Projeto", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Funding OpenAIRE API", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Financiamento API OpenAIRE", // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Import Remote Author", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Importar Autor remoto", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Importar autor remoto", // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Successfully added local author to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Adicionado com sucesso um autor local à seleção", @@ -4688,10 +6005,9 @@ // "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel": "Cancel", "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel": "Cancelar", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Select a collection to import new entries to", - - "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Seleccione a coleção para onde pretende importar as novas entradas", + "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Selecione a coleção para onde pretende importar as novas entradas", // "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Entities", "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Entidades", @@ -4700,40 +6016,40 @@ "submission.sections.describe.relationship-lookup.external-source.import-modal.entities.new": "Importar como nova entidade local", // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "Importing from LC Name", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "A Importar de LC Name", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "A importar de LC Name", // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "Importing from ORCID", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "A Importar do ORCID", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "A importar do ORCID", // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "Importing from Sherpa Journal", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "A Importar Revista do Sherpa", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "A importar Revista do Sherpa", // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "Importing from Sherpa Publisher", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "A Importar Editora do Sherpa", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "A importar Editora do Sherpa", // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "Importing from PubMed", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "A Importar da PubMed", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "A importar da PubMed", // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "Importing from arXiv", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "A Importar do arXiv", - + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "A importar do arXiv", + // "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Import", "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Importar", // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Import Remote Journal", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Importar Revista Remota", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Importar revista Remota", // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Successfully added local journal to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Revista local adicionada com sucesso à seleção", // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Successfully imported and added external journal to the selection", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Importado e adicionada com sucesso uma revista externa à seleção", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Importada e adicionada com sucesso uma revista externa à seleção", // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title": "Import Remote Journal Issue", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title": "Importar número de revista remota", // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Successfully added local journal issue to the selection", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Número de Revista Local adicionado com sucesso à seleção", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Número de revista Local adicionado com sucesso à seleção", // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity": "Successfully imported and added external journal issue to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity": "Importado e adicionado um Número de Revista externa com sucesso à seleção", @@ -4742,22 +6058,22 @@ "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.title": "Importar volume de revista remota", // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Successfully added local journal volume to the selection", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Volume de Revista Local adicionado com sucesso à seleção", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Volume de revista Local adicionado com sucesso à seleção", // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Successfully imported and added external journal volume to the selection", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Importado e adicionado um volume de Revista externa com sucesso à seleção", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Importado e adicionado um volume de revista externa com sucesso à seleção", // "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Select a local match:", - "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Seleccione uma correspondência local:", + "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Selecione uma correspondência local:", // "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Deselect all", - "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Deseleccionar todos", + "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Deselecionar todos", // "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Deselect page", - "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Deseleccionar página", + "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Deselecionar página", // "submission.sections.describe.relationship-lookup.search-tab.loading": "Loading...", - "submission.sections.describe.relationship-lookup.search-tab.loading": "A Carregar...", + "submission.sections.describe.relationship-lookup.search-tab.loading": "A carregar...", // "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Search query", "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Termos da pesquisa", @@ -4765,6 +6081,9 @@ // "submission.sections.describe.relationship-lookup.search-tab.search": "Go", "submission.sections.describe.relationship-lookup.search-tab.search": "Pesquisar", + // "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Search...", + "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Pesquisar...", + // "submission.sections.describe.relationship-lookup.search-tab.select-all": "Select all", "submission.sections.describe.relationship-lookup.search-tab.select-all": "Selecionar todos", @@ -4775,43 +6094,43 @@ "submission.sections.describe.relationship-lookup.selected": "Selecionados {{ size }} itens", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Local Authors ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Autores Locais ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Autores locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Local Journals ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Revistas Locais ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Revistas locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Local Projects ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Projetos Locais ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Projetos locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Local Publications ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Publicações Locais ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Publicações locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Local Authors ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Autores Locais ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Autores locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Local Organizational Units ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Unidades Organizacionais Locais ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Unidades organizacionais locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Local Data Packages ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Pacotes de Dados Locais ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Pacotes de dados locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Local Data Files ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Ficheiros de Dados Locais ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Ficheiros de dados locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Local Journals ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Revistas Locais ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Revistas locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Local Journal Issues ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Números de Revista Local ({{ count }})", - + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Números de revistas locais ({{ count }})", + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Local Journal Issues ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Números de Revista Local ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Números de revista locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Local Journal Volumes ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Volumes de Revista Local ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Volumes de revistas locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Local Journal Volumes ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Volume de revista Local ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Volumes de revistas locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Sherpa Journals ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Revistas do Sherpa ({{ count }})", @@ -4823,7 +6142,7 @@ "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid": "ORCID ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "LC Names ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "Nomes LC ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "Nomes LC ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", @@ -4832,28 +6151,55 @@ "submission.sections.describe.relationship-lookup.search-tab.tab-title.arxiv": "arXiv ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Search for Funding Agencies", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Pesquisar Agências de Financiamento", - + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Pesquisar por agências de financiamento", + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Search for Funding", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Pesquisar Financiamento", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Pesquisar por financiamento", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Search for Organizational Units", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Pesquisar Unidades Organizacionais", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Pesquisar por unidades organizacionais", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Funding OpenAIRE API", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Via API OpenAIRE", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projects", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projetos", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Funder of the Project", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Financiador do projeto", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor": "Publication of the Author", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor": "Publicação do author", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Funding OpenAIRE API", + "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Financiamento API OpenAIRE", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Project", + "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Projeto", + + // "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projects", + "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projetos", + + // "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Funder of the Project", + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Financiador do projeto", + + //"submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Search...", + "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Pesquisar...", // "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Current Selection ({{ count }})", - "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Seleção Atual ({{ count }})", + "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Seleção atual ({{ count }})", // "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Journal Issues", - "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Números de Revista", + "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Números de revista", // "submission.sections.describe.relationship-lookup.title.JournalIssue": "Journal Issues", - "submission.sections.describe.relationship-lookup.title.JournalIssue": "Números de Revista", + "submission.sections.describe.relationship-lookup.title.JournalIssue": "Pesquisar números de revista", // "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Journal Volumes", "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Volumes de Revistas", // "submission.sections.describe.relationship-lookup.title.JournalVolume": "Journal Volumes", - "submission.sections.describe.relationship-lookup.title.JournalVolume": "Volumes de Revistas", + "submission.sections.describe.relationship-lookup.title.JournalVolume": "Volumes de revistas", // "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Journals", "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Revistas", @@ -4862,35 +6208,38 @@ "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication": "Autores", // "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Funding Agency", - "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Agência de Financiamento", + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Agência de financiamento", // "submission.sections.describe.relationship-lookup.title.Project": "Projects", - "submission.sections.describe.relationship-lookup.title.Project": "Projetos", + "submission.sections.describe.relationship-lookup.title.Project": "Pesquisar projetos", // "submission.sections.describe.relationship-lookup.title.Publication": "Publications", "submission.sections.describe.relationship-lookup.title.Publication": "Publicações", // "submission.sections.describe.relationship-lookup.title.Person": "Authors", - "submission.sections.describe.relationship-lookup.title.Person": "Autores", + "submission.sections.describe.relationship-lookup.title.Person": "Pesquisar autores", // "submission.sections.describe.relationship-lookup.title.OrgUnit": "Organizational Units", - "submission.sections.describe.relationship-lookup.title.OrgUnit": "Unidades Organizacionais", + "submission.sections.describe.relationship-lookup.title.OrgUnit": "Pesquisar unidades organizacionais", // "submission.sections.describe.relationship-lookup.title.DataPackage": "Data Packages", - "submission.sections.describe.relationship-lookup.title.DataPackage": "Pacote de Dados", + "submission.sections.describe.relationship-lookup.title.DataPackage": "Pacote de dados", // "submission.sections.describe.relationship-lookup.title.DataFile": "Data Files", - "submission.sections.describe.relationship-lookup.title.DataFile": "Ficheiros de Dados", + "submission.sections.describe.relationship-lookup.title.DataFile": "Ficheiros de dados", // "submission.sections.describe.relationship-lookup.title.Funding Agency": "Funding Agency", - "submission.sections.describe.relationship-lookup.title.Funding Agency": "Agência de Financiamento", + "submission.sections.describe.relationship-lookup.title.Funding Agency": "Agência de financiamento", // "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Funding", "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Financiamento", // "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Parent Organizational Unit", - "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Organização Principal", + "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Organização principal", + // "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor": "Publication", + "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor": "Publicação", + // "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Toggle dropdown", "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Alternar menu dropdown", @@ -4901,25 +6250,25 @@ "submission.sections.describe.relationship-lookup.selection-tab.no-selection": "Não selecionou nenhum item.", // "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Selected Authors", - "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Autores Selecionados", - + "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Autores selecionados", + // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Selected Journals", - "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Revistas Selecionadas", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Revistas selecionadas", // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Selected Journal Volume", - "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Volume de Revista Selecionados", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Volume de revistas selecionadas", // "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Selected Projects", - "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Projetos Selecionados", + "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Projetos selecionados", // "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Selected Publications", - "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Publicações Selecionados", + "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Publicações selecionadas", // "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Selected Authors", - "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Autores Selecionados", + "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Autores selecionados", // "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Selected Organizational Units", - "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Unidades Organizacionais Selecionadas", + "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Unidades organizacionais selecionadas", // "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Selected Data Packages", "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Pacotes de dados selecionados", @@ -4928,64 +6277,82 @@ "submission.sections.describe.relationship-lookup.selection-tab.title.DataFile": "Ficheiros de dados selecionados", // "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Selected Journals", - "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Revistas Selecionadas", + "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Revistas selecionadas", // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Selected Issue", - "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Número Selecionado", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Número selecionado", // "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Selected Journal Volume", - "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Volume de Revista Selecionado", + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Volume de revista selecionado", // "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Selected Funding Agency", - "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Agência de Financiamento selecionada", + "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Agência de financiamento selecionada", // "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Selected Funding", "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Financiamento selecionado", // "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Selected Issue", - "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Número Selecionado", + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Número selecionado", // "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Selected Organizational Unit", - "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Organização Selecionada", + "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Organização selecionada", // "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Resultados da Pesquisa", + "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Resultados da pesquisa", // "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Resultados da Pesquisa", + "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Resultados da pesquisa", // "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Resultados da Pesquisa", + "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Resultados da pesquisa", // "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Resultados da Pesquisa", + "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Resultados da pesquisa", // "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Resultados da Pesquisa", + "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Resultados da pesquisa", // "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Resultados da Pesquisa", + "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Resultados da pesquisa", // "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Resultados da Pesquisa", + "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Resultados da pesquisa", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Resultados da pesquisa", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.epo": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.epo": "Resultados da pesquisa", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.scopus": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.scopus": "Resultados da pesquisa", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.scielo": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.scielo": "Resultados da pesquisa", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Resultados da pesquisa", + + // "submission.sections.describe.relationship-lookup.selection-tab.title": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title": "Resultados da pesquisa", // "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Would you like to save \"{{ value }}\" as a name variant for this person so you and others can reuse it for future submissions? If you don\'t you can still use it for this submission.", - "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Pretende guardar \"{{ value }}\" como um nome alternativo para esta pessoa permitindo a sua reutilização por outros em futuras submissões? Se não, pode usar apenas nesta submissão.", + "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Pretende guardar \"{{ value }}\" como um nome alternativo para esta pessoa permitindo a sua reutilização por outros em futuros depósitos? Se não, pode usar apenas neste depósito.", // "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Save a new name variant", "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Guardar um Nome alternativo", // "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Use only for this submission", - "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Usar apenas para esta submissão", + "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Usar apenas para este depósito", // "submission.sections.ccLicense.type": "License Type", "submission.sections.ccLicense.type": "Tipo de licença", // "submission.sections.ccLicense.select": "Select a license type…", - "submission.sections.ccLicense.select": "Selecionar o tipo de licença…", + "submission.sections.ccLicense.select": "Selecionar tipo de licença…", // "submission.sections.ccLicense.change": "Change your license type…", - "submission.sections.ccLicense.change": "Alterar o tipo de licença…", + "submission.sections.ccLicense.change": "Alterar tipo de licença…", // "submission.sections.ccLicense.none": "No licenses available", "submission.sections.ccLicense.none": "Sem licenças disponíveis", @@ -4997,54 +6364,76 @@ "submission.sections.ccLicense.link": "Escolheu a seguinte licença:", // "submission.sections.ccLicense.confirmation": "I grant the license above", - "submission.sections.ccLicense.confirmation": "Consedo a licença abaixo indicada", + "submission.sections.ccLicense.confirmation": "Concedo a licença abaixo indicada", // "submission.sections.general.add-more": "Add more", "submission.sections.general.add-more": "Adicionar mais", + // "submission.sections.general.cannot_deposit": "Deposit cannot be completed due to errors in the form.
    Please fill out all required fields to complete the deposit.", + "submission.sections.general.cannot_deposit": "O depósito não pode ser preenchido devido a erros no formulário.
    Por favor preencha todos os campos necessários para completar o depósito.", + // "submission.sections.general.collection": "Collection", "submission.sections.general.collection": "Coleção", // "submission.sections.general.deposit_error_notice": "There was an issue when submitting the item, please try again later.", - "submission.sections.general.deposit_error_notice": "Houve um problema durante a submissão do item, por favor tente novamente mais tarde.", + "submission.sections.general.deposit_error_notice": "Houve um problema durante o depósito do item, por favor tente novamente mais tarde.", // "submission.sections.general.deposit_success_notice": "Submission deposited successfully.", - "submission.sections.general.deposit_success_notice": "Submissão depositada com sucesso.", + "submission.sections.general.deposit_success_notice": "Depositado com sucesso.", // "submission.sections.general.discard_error_notice": "There was an issue when discarding the item, please try again later.", - "submission.sections.general.discard_error_notice": "Houve um problema ao descartar o item, por favor tente novamente mais tarde.", + "submission.sections.general.discard_error_notice": "Houve um problema ao cancelar o item, por favor tente novamente mais tarde.", // "submission.sections.general.discard_success_notice": "Submission discarded successfully.", - "submission.sections.general.discard_success_notice": "Submissão descartada com sucesso.", + "submission.sections.general.discard_success_notice": "Depósito cancelado com sucesso.", // "submission.sections.general.metadata-extracted": "New metadata have been extracted and added to the {{sectionId}} section.", - "submission.sections.general.metadata-extracted": "Novos metadados foram extraídos e adicionados a Secção {{sectionId}}.", + "submission.sections.general.metadata-extracted": "Novos metadados foram extraídos e adicionados à secção {{sectionId}}.", // "submission.sections.general.metadata-extracted-new-section": "New {{sectionId}} section has been added to submission.", "submission.sections.general.metadata-extracted-new-section": "Nova Secção {{sectionId}} foi adicionada a dubmissão.", // "submission.sections.general.no-collection": "No collection found", - "submission.sections.general.no-collection": "Nenhuma coleção encontrada", + "submission.sections.general.no-collection": "Não foi encontrada nenhuma coleção", // "submission.sections.general.no-sections": "No options available", "submission.sections.general.no-sections": "Sem opções disponíveis", // "submission.sections.general.save_error_notice": "There was an issue when saving the item, please try again later.", - "submission.sections.general.save_error_notice": "Houve um problema ao salvar o item, por favor tente novamente mais tarde.", + "submission.sections.general.save_error_notice": "Houve um problema ao guardar o item, por favor tente novamente mais tarde.", // "submission.sections.general.save_success_notice": "Submission saved successfully.", - "submission.sections.general.save_success_notice": "Submissão salva com sucesso.", + "submission.sections.general.save_success_notice": "Depósito guardado com sucesso.", // "submission.sections.general.search-collection": "Search for a collection", "submission.sections.general.search-collection": "Pesquisar uma coleção", // "submission.sections.general.sections_not_valid": "There are incomplete sections.", - "submission.sections.general.sections_not_valid": "Há seções incompletas.", + "submission.sections.general.sections_not_valid": "Subsistem seções incompletas.", + // "submission.sections.identifiers.info": "The following identifiers will be created for your item:", + "submission.sections.identifiers.info": "Serão criados os seguintes identificadores para o seu item:", + + // "submission.sections.identifiers.no_handle": "No handles have been minted for this item.", + "submission.sections.identifiers.no_handle": "Não foram gerados 'handles' para este item.", + // "submission.sections.identifiers.no_doi": "No DOIs have been minted for this item.", + "submission.sections.identifiers.no_doi": "Não foram gerados DOIs para este item.", + + // "submission.sections.identifiers.handle_label": "Handle: ", + "submission.sections.identifiers.handle_label": "Handle: ", + + // "submission.sections.identifiers.doi_label": "DOI: ", + "submission.sections.identifiers.doi_label": "DOI: ", + + // "submission.sections.identifiers.otherIdentifiers_label": "Other identifiers: ", + "submission.sections.identifiers.otherIdentifiers_label": "Outros identificadores: ", + // "submission.sections.submit.progressbar.accessCondition": "Item access conditions", + "submission.sections.submit.progressbar.accessCondition": "Condições de acesso do item", + // "submission.sections.submit.progressbar.CClicense": "Creative commons license", - "submission.sections.submit.progressbar.CClicense": "Licença Creative commons", + "submission.sections.submit.progressbar.CClicense": "Associar uma licença Creative Commons", // "submission.sections.submit.progressbar.describe.recycle": "Recycle", "submission.sections.submit.progressbar.describe.recycle": "Reciclar", @@ -5061,14 +6450,60 @@ // "submission.sections.submit.progressbar.detect-duplicate": "Potential duplicates", "submission.sections.submit.progressbar.detect-duplicate": "Duplicados em potencial", + // "submission.sections.submit.progressbar.identifiers": "Identifiers", + "submission.sections.submit.progressbar.identifiers": "Identificadores", + // "submission.sections.submit.progressbar.license": "Deposit license", - "submission.sections.submit.progressbar.license": "Depositar licença", + "submission.sections.submit.progressbar.license": "Licença de distribuição não-exclusiva do repositório", + + // "submission.sections.submit.progressbar.sherpapolicy": "Sherpa policies", + "submission.sections.submit.progressbar.sherpapolicy": "[Ajuda em contexto] Informação SHERPA sobre políticas de editoras e revistas face ao auto-arquivo em repositórios.", // "submission.sections.submit.progressbar.upload": "Upload files", - "submission.sections.submit.progressbar.upload": "Enviar ficheiros", + "submission.sections.submit.progressbar.upload": "Carregar ficheiro(s)", + // "submission.sections.submit.progressbar.sherpaPolicies": "Publisher open access policy information", + "submission.sections.submit.progressbar.sherpaPolicies": "Informação sobre a política de auto arquivo dos editores", + // "submission.sections.sherpa-policy.title-empty": "No publisher policy information available. If your work has an associated ISSN, please enter it above to see any related publisher open access policies.", + "submission.sections.sherpa-policy.title-empty": "Não foi encontrada informação disponível sobre política desta editora. Se o seu trabalho tem um ISSN associado, por favor, introduza-o em cima para poder visualizar as políticas de auto arquivo associadas.", + // "submission.sections.status.errors.title": "Errors", + "submission.sections.status.errors.title": "Erros", + + // "submission.sections.status.valid.title": "Valid", + "submission.sections.status.valid.title": "Válido", + + // "submission.sections.status.warnings.title": "Warnings", + "submission.sections.status.warnings.title": "Avisos", + + // "submission.sections.status.errors.aria": "has errors", + "submission.sections.status.errors.aria": "contém erros", + + // "submission.sections.status.valid.aria": "is valid", + "submission.sections.status.valid.aria": "é válido", + + // "submission.sections.status.warnings.aria": "has warnings", + "submission.sections.status.warnings.aria": "tem avisos", + + // "submission.sections.status.info.title": "Additional Information", + "submission.sections.status.info.title": "Informação adicional", + + // "submission.sections.status.info.aria": "Additional Information", + "submission.sections.status.info.aria": "Informação adicional", + + // "submission.sections.toggle.open": "Open section", + "submission.sections.toggle.open": "Seção aberta", + + // "submission.sections.toggle.close": "Close section", + "submission.sections.toggle.close": "Seção fechada", + + // "submission.sections.toggle.aria.open": "Expand {{sectionHeader}} section", + "submission.sections.toggle.aria.open": "Expandir seção {{sectionHeader}}", + + // "submission.sections.toggle.aria.close": "Collapse {{sectionHeader}} section", + "submission.sections.toggle.aria.close": "Fechar seção {{sectionHeader}}", + // "submission.sections.upload.delete.confirm.cancel": "Cancel", "submission.sections.upload.delete.confirm.cancel": "Cancelar", @@ -5077,25 +6512,43 @@ // "submission.sections.upload.delete.confirm.submit": "Yes, I'm sure", "submission.sections.upload.delete.confirm.submit": "Sim, tenho certeza", - + // "submission.sections.upload.delete.confirm.title": "Delete bitstream", - "submission.sections.upload.delete.confirm.title": "Remover bitstream", + "submission.sections.upload.delete.confirm.title": "Remover ficheiro", // "submission.sections.upload.delete.submit": "Delete", "submission.sections.upload.delete.submit": "Remover", + // "submission.sections.upload.download.title": "Download bitstream", + "submission.sections.upload.download.title": "Descarregar ficheiro", + // "submission.sections.upload.drop-message": "Drop files to attach them to the item", - "submission.sections.upload.drop-message": "Arraste ficheiros para os anexar a este item", + "submission.sections.upload.drop-message": "Arraste para aqui o(s) ficheiro(s) que pretende anexar a este registo", + + // "submission.sections.upload.edit.title": "Edit bitstream", + "submission.sections.upload.edit.title": "Editar ficheiro", // "submission.sections.upload.form.access-condition-label": "Access condition type", "submission.sections.upload.form.access-condition-label": "Tipo de condição de acesso", + // "submission.sections.upload.form.access-condition-hint": "Select an access condition to apply on the bitstream once the item is deposited", + "submission.sections.upload.form.access-condition-hint": "Selecione um tipo de acesso a aplicar ao ficheiro assim que o item seja depositado", + // "submission.sections.upload.form.date-required": "Date is required.", - "submission.sections.upload.form.date-required": "Data necessária.", + "submission.sections.upload.form.date-required": "Data necessária.", + + // "submission.sections.upload.form.date-required-from": "Grant access from date is required.", + "submission.sections.upload.form.date-required-from": "A data de início é obrigatória.", + + // "submission.sections.upload.form.date-required-until": "Grant access until date is required.", + "submission.sections.upload.form.date-required-until": "A data de fim é obrigatória.", // "submission.sections.upload.form.from-label": "Grant access from", "submission.sections.upload.form.from-label": "Acesso permitido a partir de", + // "submission.sections.upload.form.from-hint": "Select the date from which the related access condition is applied", + "submission.sections.upload.form.from-hint": "Selecione a data a partir da qual o tipo de acesso é aplicável", + // "submission.sections.upload.form.from-placeholder": "From", "submission.sections.upload.form.from-placeholder": "De", @@ -5106,25 +6559,28 @@ "submission.sections.upload.form.group-required": "Grupo é necessário.", // "submission.sections.upload.form.until-label": "Grant access until", - "submission.sections.upload.form.until-label": "Acesso permitido até", + "submission.sections.upload.form.until-label": "conceder acesso até", + + // "submission.sections.upload.form.until-hint": "Select the date until which the related access condition is applied", + "submission.sections.upload.form.until-hint": "Selecione a data até a qual o tipo de acesso será aplicado", // "submission.sections.upload.form.until-placeholder": "Until", - "submission.sections.upload.form.until-placeholder": "Até", - + "submission.sections.upload.form.until-placeholder": "Até", + // "submission.sections.upload.header.policy.default.nolist": "Uploaded files in the {{collectionName}} collection will be accessible according to the following group(s):", "submission.sections.upload.header.policy.default.nolist": "Arquivos enviados na coleção {{collectionName}} serão acessiveis de acordo com o(s) seguinte(s) grupo(s):", // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", "submission.sections.upload.header.policy.default.withlist": "Por favor note que os ficheiros enviados à coleção {{collectionName}} serão acessíveis, de acordo com o que está explicitamente definido no ficheiro, no(s) seguinte(s) grupo(s):", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", - "submission.sections.upload.info": "Aqui encontra todos os ficheiros que estão atualmente no item. Pode atualizar os metadados do ficheiro e condições de acesso ou carregar ficheiros adicionais arrastando os ficheiros em qualquer lugar desta página", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", + "submission.sections.upload.info": "Aqui encontra o(s) ficheiro(s) carregado(s) neste registo. Pode atualizar os metadados do(s) ficheiro(s), definir as suas condições de acesso ou carregar ficheiros adicionais arrastando-os em qualquer local da página.", // "submission.sections.upload.no-entry": "No", "submission.sections.upload.no-entry": "Não", // "submission.sections.upload.no-file-uploaded": "No file uploaded yet.", - "submission.sections.upload.no-file-uploaded": "Nenhum ficheiro enviado ainda.", + "submission.sections.upload.no-file-uploaded": "Nenhum ficheiro carregado!", // "submission.sections.upload.save-metadata": "Save metadata", "submission.sections.upload.save-metadata": "Guardar metadados", @@ -5138,47 +6594,194 @@ // "submission.sections.upload.upload-successful": "Upload successful", "submission.sections.upload.upload-successful": "Enviado com sucesso", + // "submission.sections.accesses.form.discoverable-description": "When checked, this item will be discoverable in search/browse. When unchecked, the item will only be available via a direct link and will never appear in search/browse.", + "submission.sections.accesses.form.discoverable-description": "Quando selecionado, este item será pesquisável na pesquisa/navegação. Se não estiver selecionado, o item apenas estará disponível através uma ligação direta (link) e não aparecerá na pesquisa/navegação.", + // "submission.sections.accesses.form.discoverable-label": "Discoverable", + "submission.sections.accesses.form.discoverable-label": "Recuperável", - // "submission.submit.title": "Submission", - "submission.submit.title": "Submissão", + // "submission.sections.accesses.form.access-condition-label": "Access condition type", + "submission.sections.accesses.form.access-condition-label": "Tipo de acesso", + // "submission.sections.accesses.form.access-condition-hint": "Select an access condition to apply on the item once it is deposited", + "submission.sections.accesses.form.access-condition-hint": "Selecione um tipo de acesso para aplicar ao item no momento do seu depósito ", + // "submission.sections.accesses.form.date-required": "Date is required.", + "submission.sections.accesses.form.date-required": "O preenchimento da data é obrigatório.", + + // "submission.sections.accesses.form.date-required-from": "Grant access from date is required.", + "submission.sections.accesses.form.date-required-from": "O preenchimento da data de início é obrigatório.", + + // "submission.sections.accesses.form.date-required-until": "Grant access until date is required.", + "submission.sections.accesses.form.date-required-until": "O preenchimento da data de término é obrigatório.", + + // "submission.sections.accesses.form.from-label": "Grant access from", + "submission.sections.accesses.form.from-label": "Conceder acesso a partir de", + + // "submission.sections.accesses.form.from-hint": "Select the date from which the related access condition is applied", + "submission.sections.accesses.form.from-hint": "Selecine a data a partir da qual o tipo de acesso é aplicável", + + // "submission.sections.accesses.form.from-placeholder": "From", + "submission.sections.accesses.form.from-placeholder": "De", + + // "submission.sections.accesses.form.group-label": "Group", + "submission.sections.accesses.form.group-label": "Grupo", + + // "submission.sections.accesses.form.group-required": "Group is required.", + "submission.sections.accesses.form.group-required": "A indicação de um grupo é obrigátória.", + // "submission.sections.accesses.form.until-label": "Grant access until", + "submission.sections.accesses.form.until-label": "Conceder acesso até", + + // "submission.sections.accesses.form.until-hint": "Select the date until which the related access condition is applied", + "submission.sections.accesses.form.until-hint": "Selecione a data até a qual o tipo de acesso é aplicável", + + // "submission.sections.accesses.form.until-placeholder": "Until", + "submission.sections.accesses.form.until-placeholder": "Até", + + // "submission.sections.license.granted-label": "I confirm the license above", + "submission.sections.license.granted-label": "Confirmo a licença", + + // "submission.sections.license.required": "You must accept the license", + "submission.sections.license.required": "A aceitação da licença constitui um requisito", + + // "submission.sections.license.notgranted": "You must accept the license", + "submission.sections.license.notgranted": "Deve aceitar a licença", + + // "submission.sections.sherpa.publication.information": "Publication information", + "submission.sections.sherpa.publication.information": "Informação sobre a publicação", + + // "submission.sections.sherpa.publication.information.title": "Title", + "submission.sections.sherpa.publication.information.title": "Título", + + // "submission.sections.sherpa.publication.information.issns": "ISSNs", + "submission.sections.sherpa.publication.information.issns": "ISSNs", + + // "submission.sections.sherpa.publication.information.url": "URL", + "submission.sections.sherpa.publication.information.url": "URL", + + // "submission.sections.sherpa.publication.information.publishers": "Publisher", + "submission.sections.sherpa.publication.information.publishers": "Editora", + + // "submission.sections.sherpa.publication.information.romeoPub": "Romeo Pub", + "submission.sections.sherpa.publication.information.romeoPub": "Romeo Pub", + + // "submission.sections.sherpa.publication.information.zetoPub": "Zeto Pub", + "submission.sections.sherpa.publication.information.zetoPub": "Zeto Pub", + + // "submission.sections.sherpa.publisher.policy": "Publisher Policy", + "submission.sections.sherpa.publisher.policy": "Política da editora", + + // "submission.sections.sherpa.publisher.policy.description": "The below information was found via Sherpa Romeo. Based on the policies of your publisher, it provides advice regarding whether an embargo may be necessary and/or which files you are allowed to upload. If you have questions, please contact your site administrator via the feedback form in the footer.", + "submission.sections.sherpa.publisher.policy.description": "A seguinte informação foi obtida através do diretório SHERPA, com base nas políticas disponíveis das editoras/revistas. Fornece informações úteis, sobre as versões dos ficheiros que deverá carregar em repositórios, bem como tipo de embargo ou restrições de acesso poderá ser aconselhável. As informações do SHERPA são fidedignas tanto quanto é do nosso conhecimento, mas não devem ser assumidas como aconselhamento jurídico. Se tiver dúvidas, por favor contacte o(s) administrador(es) do seu repositório através do formulário de feedback no rodapé.", + + // "submission.sections.sherpa.publisher.policy.openaccess": "Open Access pathways permitted by this journal's policy are listed below by article version. Click on a pathway for a more detailed view", + "submission.sections.sherpa.publisher.policy.openaccess": "As 'vias' de acesso aberto permitidas pela política desta revista estão listadas em baixo, tendo em consideração as versões do artigo (ex. 'Versão final publicada', 'Versão aceite do autor', 'Versão submetida'). Clique numa via para obter mais detalhes.", + + // "submission.sections.sherpa.publisher.policy.more.information": "For more information, please see the following links:", + "submission.sections.sherpa.publisher.policy.more.information": "Para mais informações, consulte por favor os seguintes links:", + + // "submission.sections.sherpa.publisher.policy.version": "Version", + "submission.sections.sherpa.publisher.policy.version": "Versão", + + // "submission.sections.sherpa.publisher.policy.embargo": "Embargo", + "submission.sections.sherpa.publisher.policy.embargo": "Embargo", + + // "submission.sections.sherpa.publisher.policy.noembargo": "No Embargo", + "submission.sections.sherpa.publisher.policy.noembargo": "Sem embargo", + + // "submission.sections.sherpa.publisher.policy.nolocation": "None", + "submission.sections.sherpa.publisher.policy.nolocation": "Nenhuma", + + // "submission.sections.sherpa.publisher.policy.license": "License", + "submission.sections.sherpa.publisher.policy.license": "Licença", + + // "submission.sections.sherpa.publisher.policy.prerequisites": "Prerequisites", + "submission.sections.sherpa.publisher.policy.prerequisites": "Pré-requisitos", + + // "submission.sections.sherpa.publisher.policy.location": "Location", + "submission.sections.sherpa.publisher.policy.location": "Localização", + + // "submission.sections.sherpa.publisher.policy.conditions": "Conditions", + "submission.sections.sherpa.publisher.policy.conditions": "Condições", + + // "submission.sections.sherpa.publisher.policy.refresh": "Refresh", + "submission.sections.sherpa.publisher.policy.refresh": "Atualizar", + + // "submission.sections.sherpa.record.information": "Record Information", + "submission.sections.sherpa.record.information": "Informação do registo", + + // "submission.sections.sherpa.record.information.id": "ID", + "submission.sections.sherpa.record.information.id": "ID", + + // "submission.sections.sherpa.record.information.date.created": "Date Created", + "submission.sections.sherpa.record.information.date.created": "Data de Criação", + + // "submission.sections.sherpa.record.information.date.modified": "Last Modified", + "submission.sections.sherpa.record.information.date.modified": "Última modificação", + + // "submission.sections.sherpa.record.information.uri": "URI", + "submission.sections.sherpa.record.information.uri": "URI", + + // "submission.sections.sherpa.error.message": "There was an error retrieving sherpa informations", + "submission.sections.sherpa.error.message": "Ocorreu um erro na recuperação de informações do SHERPA", + + // "submission.submit.breadcrumbs": "New submission", + "submission.submit.breadcrumbs": "Novos depósitos", + + // "submission.submit.title": "New submission", + "submission.submit.title": "Novo depósito", + // "submission.workflow.generic.delete": "Delete", - "submission.workflow.generic.delete": "Apagar", + "submission.workflow.generic.delete": "Remover", - // "submission.workflow.generic.delete-help": "If you would to discard this item, select \"Delete\". You will then be asked to confirm it.", - "submission.workflow.generic.delete-help": "Se você gostaria de descartar este item, selecione \"Apagar\". Você será questionado para confirmar.", + // "submission.workflow.generic.delete-help": "If you would to discard this item, select \"Delete\". You will then be asked to confirm it.", + "submission.workflow.generic.delete-help": "Clique se pretender remover definitivamente este item. Será solicitada confirmação.", // "submission.workflow.generic.edit": "Edit", "submission.workflow.generic.edit": "Editar", // "submission.workflow.generic.edit-help": "Select this option to change the item's metadata.", - "submission.workflow.generic.edit-help": "Selecione esta opção para modificar os metadados do item.", + "submission.workflow.generic.edit-help": "Selecione esta opção para modificar os metadados do item", // "submission.workflow.generic.view": "View", "submission.workflow.generic.view": "Visualizar", // "submission.workflow.generic.view-help": "Select this option to view the item's metadata.", - "submission.workflow.generic.view-help": "Selecione esta opção para ver o metadados do item.", + "submission.workflow.generic.view-help": "Visualizar os metadados do item", + // "submission.workflow.generic.submit_select_reviewer": "Select Reviewer", + "submission.workflow.generic.submit_select_reviewer": "Selecionar revisor", - - // "submission.workflow.tasks.claimed.approve": "Approve", + // "submission.workflow.generic.submit_select_reviewer-help": "", + "submission.workflow.generic.submit_select_reviewer-help": "", + + // "submission.workflow.generic.submit_score": "Rate", + "submission.workflow.generic.submit_score": "Classificar", + + // "submission.workflow.generic.submit_score-help": "", + "submission.workflow.generic.submit_score-help": "", + + // "submission.workflow.tasks.claimed.approve": "Approve", "submission.workflow.tasks.claimed.approve": "Aprovar", // "submission.workflow.tasks.claimed.approve_help": "If you have reviewed the item and it is suitable for inclusion in the collection, select \"Approve\".", - "submission.workflow.tasks.claimed.approve_help": "Se você revisou o item e este está adequado para inclusão na coleção, selecione \"Aprovar\".", + "submission.workflow.tasks.claimed.approve_help": "Se reviu o item e está adequado para inclusão na coleção, selecione \"Aprovar\".", // "submission.workflow.tasks.claimed.edit": "Edit", "submission.workflow.tasks.claimed.edit": "Editar", - + // "submission.workflow.tasks.claimed.edit_help": "Select this option to change the item's metadata.", "submission.workflow.tasks.claimed.edit_help": "Selecione esta opção para modificar os metadados do item.", + // "submission.workflow.tasks.claimed.decline": "Decline", + "submission.workflow.tasks.claimed.decline": "Declinar", + + // "submission.workflow.tasks.claimed.decline_help": "", + "submission.workflow.tasks.claimed.decline_help": "", + // "submission.workflow.tasks.claimed.reject.reason.info": "Please enter your reason for rejecting the submission into the box below, indicating whether the submitter may fix a problem and resubmit.", - "submission.workflow.tasks.claimed.reject.reason.info": "Informe o motivo da rejeição da submissão na caixa abaixo, indicando se o depositante pode corrigir algum problema e reenviar.", + "submission.workflow.tasks.claimed.reject.reason.info": "Informe o motivo da rejeição do depósito em baixo, indicando se o depositante pode corrigir algum problema e reenviar o depósito.", // "submission.workflow.tasks.claimed.reject.reason.placeholder": "Describe the reason of reject", "submission.workflow.tasks.claimed.reject.reason.placeholder": "Descreva o motivo da rejeição", @@ -5201,27 +6804,23 @@ // "submission.workflow.tasks.claimed.return_help": "Return the task to the pool so that another user may perform the task.", "submission.workflow.tasks.claimed.return_help": "Enviar a tarefa para a lista para que outra pessoa possa executar.", - - // "submission.workflow.tasks.generic.error": "Error occurred during operation...", - "submission.workflow.tasks.generic.error": "Ocorreu um erro durante a operação...", + "submission.workflow.tasks.generic.error": "ocorreu um erro durante a operação...", // "submission.workflow.tasks.generic.processing": "Processing...", - "submission.workflow.tasks.generic.processing": "Processando...", + "submission.workflow.tasks.generic.processing": "a processar...", // "submission.workflow.tasks.generic.submitter": "Submitter", - "submission.workflow.tasks.generic.submitter": "Submetedor", + "submission.workflow.tasks.generic.submitter": "Depositante", // "submission.workflow.tasks.generic.success": "Operation successful", "submission.workflow.tasks.generic.success": "Operação realizada com sucesso", - - // "submission.workflow.tasks.pool.claim": "Claim", - "submission.workflow.tasks.pool.claim": "Requerer", + "submission.workflow.tasks.pool.claim": "Assumir", // "submission.workflow.tasks.pool.claim_help": "Assign this task to yourself.", - "submission.workflow.tasks.pool.claim_help": "Atribua esta tarefa a si mesmo.", + "submission.workflow.tasks.pool.claim_help": "Assumir esta tarefa", // "submission.workflow.tasks.pool.hide-detail": "Hide detail", "submission.workflow.tasks.pool.hide-detail": "Ocultar detalhes", @@ -5229,13 +6828,144 @@ // "submission.workflow.tasks.pool.show-detail": "Show detail", "submission.workflow.tasks.pool.show-detail": "Mostrar detalhes", + // "submission.workspace.generic.view": "View", + "submission.workspace.generic.view": "Ver", + + // "submission.workspace.generic.view-help": "Select this option to view the item's metadata.", + "submission.workspace.generic.view-help": "Selecione esta opção para ver os metadados do item.", + + // "subscriptions.title": "subscriptions", + "subscriptions.title": "Subscrições de alertas", + + // "subscriptions.item": "subscriptions for items", + "subscriptions.item": "Subscrições para itens", + + // "subscriptions.collection": "subscriptions for collections", + "subscriptions.collection": "Subscrições para coleções", + + // "subscriptions.community": "subscriptions for communities", + "subscriptions.community": "Subscrições para comunidades", + + // "subscriptions.subscription_type": "Subscription type", + "subscriptions.subscription_type": "Tipo de subscrição", + + // "subscriptions.frequency": "Subscription frequency", + "subscriptions.frequency": "Frequência da subscrição", + + // "subscriptions.frequency.D": "Daily", + "subscriptions.frequency.D": "Diária", + + // "subscriptions.frequency.M": "Monthly", + "subscriptions.frequency.M": "Mensal", + + // "subscriptions.frequency.W": "Weekly", + "subscriptions.frequency.W": "Semanal", + + // "subscriptions.tooltip": "Subscribe", + "subscriptions.tooltip": "Subscrever", + + // "subscriptions.modal.title": "subscriptions", + "subscriptions.modal.title": "Subscrições de alertas", + + // "subscriptions.modal.type-frequency": "Type and frequency", + "subscriptions.modal.type-frequency": "Tipo e frequência", + + // "subscriptions.modal.close": "Close", + "subscriptions.modal.close": "Fechar", + + // "subscriptions.modal.delete-info": "To remove this subscription, please visit the \// "subscriptions\" page under your user profile", + "subscriptions.modal.delete-info": "Para remover esta subscrição, por favor aceda à página de 'subscrições' debaixo do seu perfil de utilizador", + + // "subscriptions.modal.new-subscription-form.type.content": "Content", + "subscriptions.modal.new-subscription-form.type.content": "Conteúdo", + + // "subscriptions.modal.new-subscription-form.frequency.D": "Daily", + "subscriptions.modal.new-subscription-form.frequency.D": "Diária", + + // "subscriptions.modal.new-subscription-form.frequency.W": "Weekly", + "subscriptions.modal.new-subscription-form.frequency.W": "Semanal", + + // "subscriptions.modal.new-subscription-form.frequency.M": "Monthly", + "subscriptions.modal.new-subscription-form.frequency.M": "Mensal", + + // "subscriptions.modal.new-subscription-form.submit": "Submit", + "subscriptions.modal.new-subscription-form.submit": "Submeter", + + // "subscriptions.modal.new-subscription-form.processing": "processing...", + "subscriptions.modal.new-subscription-form.processing": "A processar...", + + // "subscriptions.modal.create.success": "Subscribed to {{ type }} successfully.", + "subscriptions.modal.create.success": "Subscrição para '{{ type }}' realizada com sucessso.", + + // "subscriptions.modal.delete.success": "Subscription deleted successfully", + "subscriptions.modal.delete.success": "Subscrição removida com sucesso", + + // "subscriptions.modal.update.success": "Subscription to {{ type }} updated successfully", + "subscriptions.modal.update.success": "Subscrição para '{{ type }}' atualizada com suceso", + + // "subscriptions.modal.create.error": "An error occurs during the subscription creation", + "subscriptions.modal.create.error": "Ocorre um erro durante a criação da subscrição", + + // "subscriptions.modal.delete.error": "An error occurs during the subscription delete", + "subscriptions.modal.delete.error": "Ocorre um erro durante a remoção da subscrição", + + // "subscriptions.modal.update.error": "An error occurs during the subscription update", + "subscriptions.modal.update.error": "Ocorre um erro durante a atualização da subscrição", + + // "subscriptions.table.dso": "Subject", + "subscriptions.table.dso": "Assunto", + + // "subscriptions.table.subscription_type": "Subscription Type", + "subscriptions.table.subscription_type": "Tipo de subscrição", + + // "subscriptions.table.subscription_frequency": "Subscription Frequency", + "subscriptions.table.subscription_frequency": "Frequência da subscrição", + + // "subscriptions.table.action": "Action", + "subscriptions.table.action": "Ação", + + // "subscriptions.table.edit": "Edit", + "subscriptions.table.edit": "Editar", + + // "subscriptions.table.delete": "Delete", + "subscriptions.table.delete": "Remover", + + // "subscriptions.table.not-available": "Not available", + "subscriptions.table.not-available": "Indisponível", + + // "subscriptions.table.not-available-message": "The subscribed item has been deleted, or you don't currently have the permission to view it", + "subscriptions.table.not-available-message": "O item subscrito foi removido ou atualmente não tem permissão para o visualizar", + + // "subscriptions.table.empty.message": "You do not have any subscriptions at this time. To subscribe to email updates for a Community or Collection, use the subscription button on the object's page.", + "subscriptions.table.empty.message": "Neste momento, não tem quaisquer subscrições. Para subscrever atualizações por correio electrónico para uma 'Comunidade' ou 'Colecção', utilize o botão de 'Subscrição' na página do objeto.", + + // "thumbnail.default.alt": "Thumbnail Image", + "thumbnail.default.alt": "Miniatura", + + // "thumbnail.default.placeholder": "No Thumbnail Available", + "thumbnail.default.placeholder": "Miniatura indisponível", + + // "thumbnail.project.alt": "Project Logo", + "thumbnail.project.alt": "Logótipo do projeto", + // "thumbnail.project.placeholder": "Project Placeholder Image", + "thumbnail.project.placeholder": "Imagem do projeto", + + // "thumbnail.orgunit.alt": "OrgUnit Logo", + "thumbnail.orgunit.alt": "Logótipo da unidade", + // "thumbnail.orgunit.placeholder": "OrgUnit Placeholder Image", + "thumbnail.orgunit.placeholder": "Imagem da unidade", + + // "thumbnail.person.alt": "Profile Picture", + "thumbnail.person.alt": "Foto do perfil", + + // "thumbnail.person.placeholder": "No Profile Picture Available", + "thumbnail.person.placeholder": "Foto indisponível", + // "title": "DSpace", - "title": "DSpace", - - - + "title": "Repositório", + // "vocabulary-treeview.header": "Hierarchical tree view", "vocabulary-treeview.header": "Vista hierárquica", @@ -5246,7 +6976,7 @@ "vocabulary-treeview.search.form.reset": "Redefinir", // "vocabulary-treeview.search.form.search": "Search", - "vocabulary-treeview.search.form.search": "Pesquisar", + "vocabulary-treeview.search.form.search": "pesquisar", // "vocabulary-treeview.search.no-result": "There were no items to show", "vocabulary-treeview.search.no-result": "Não existem itens para mostrar", @@ -5256,21 +6986,24 @@ // "vocabulary-treeview.tree.description.srsc": "Research Subject Categories", "vocabulary-treeview.tree.description.srsc": "Categorias de Assuntos de Investigação", - - + + // "vocabulary-treeview.info": "Select a subject to add as search filter", + "vocabulary-treeview.info": "Selecione um assunto para adicionar como filtro de pesquisa", // "uploader.browse": "browse", - "uploader.browse": "Navegar", + "uploader.browse": "navegue para o(s) carregar.", // "uploader.drag-message": "Drag & Drop your files here", - "uploader.drag-message": "Clique e arraste os seus ficheiros aqui", + "uploader.drag-message": "Clique e arraste o(s) seu(s) ficheiro(s) para aqui", + // "uploader.delete.btn-title": "Delete", + "uploader.delete.btn-title": "Apagar", + // "uploader.or": ", or ", - "uploader.or": ", ou", + "uploader.or": " ou", // "uploader.processing": "Processing uploaded file(s)... (it's now safe to close this page)", - // TODO Source message changed - Revise the translation - "uploader.processing": "A Processar", + "uploader.processing": "A processar o(s) ficheiro(s) carregado(s)... (agora é seguro fechar esta página)", // "uploader.queue-length": "Queue length", "uploader.queue-length": "Tamanho da fila", @@ -5284,12 +7017,26 @@ // "virtual-metadata.delete-relationship.modal-head": "Select the items for which you want to save the virtual metadata as real metadata", "virtual-metadata.delete-relationship.modal-head": "Selecione os tipos para os quais pretende guardar os metadados virtuais como metadados reais", + // "supervisedWorkspace.search.results.head": "Supervised Items", + "supervisedWorkspace.search.results.head": "Itens supervisionados", + // "workspace.search.results.head": "Your submissions", + "workspace.search.results.head": "Os meus depósitos", // "workflowAdmin.search.results.head": "Administer Workflow", - "workflowAdmin.search.results.head": "Gestão do Workflow", - + "workflowAdmin.search.results.head": "Gestão do workflow", + // "workflow.search.results.head": "Workflow tasks", + "workflow.search.results.head": "Tarefas em workflow", + + // "supervision.search.results.head": "Workflow and Workspace tasks", + "supervision.search.results.head": "Workflow e tarefas na área de trabalho", + + // "workflow-item.edit.breadcrumbs": "Edit workflowitem", + "workflow-item.edit.breadcrumbs": "Editar item em processamento", + + // "workflow-item.edit.title": "Edit workflowitem", + "workflow-item.edit.title": "Editar item em processamento", // "workflow-item.delete.notification.success.title": "Deleted", "workflow-item.delete.notification.success.title": "Apagado", @@ -5304,10 +7051,10 @@ "workflow-item.delete.notification.error.content": "Não foi possível apagar o item do workflow", // "workflow-item.delete.title": "Delete workflow item", - "workflow-item.delete.title": "Apagar Item do Workflow", + "workflow-item.delete.title": "Apagar item do workflow", // "workflow-item.delete.header": "Delete workflow item", - "workflow-item.delete.header": "Apagar Item do Workflow", + "workflow-item.delete.header": "Apagar item do workflow", // "workflow-item.delete.button.cancel": "Cancel", "workflow-item.delete.button.cancel": "Cancelar", @@ -5315,7 +7062,6 @@ // "workflow-item.delete.button.confirm": "Delete", "workflow-item.delete.button.confirm": "Apagar", - // "workflow-item.send-back.notification.success.title": "Sent back to submitter", "workflow-item.send-back.notification.success.title": "Devolver ao depositante", @@ -5337,8 +7083,610 @@ // "workflow-item.send-back.button.cancel": "Cancel", "workflow-item.send-back.button.cancel": "Cancelar", - // "workflow-item.send-back.button.confirm": "Send back" - "workflow-item.send-back.button.confirm": "Devolver" + // "workflow-item.send-back.button.confirm": "Send back", + "workflow-item.send-back.button.confirm": "Devolver", + + // "workflow-item.view.breadcrumbs": "Workflow View", + "workflow-item.view.breadcrumbs": "Vista das tarefas", + + // "workspace-item.view.breadcrumbs": "Workspace View", + "workspace-item.view.breadcrumbs": "Vista das tarefas", + + // "workspace-item.view.title": "Workspace View", + "workspace-item.view.title": "Vista das tarefas", + + // "workflow-item.advanced.title": "Advanced workflow", + "workflow-item.advanced.title": "Fluxo de trabalho avançado", + + // "workflow-item.selectrevieweraction.notification.success.title": "Selected reviewer", + "workflow-item.selectrevieweraction.notification.success.title": "Selecionar revisor", + + // "workflow-item.selectrevieweraction.notification.success.content": "The reviewer for this workflow item has been successfully selected", + "workflow-item.selectrevieweraction.notification.success.content": "O revisor para o fluxo de trabalho deste item foi seleccionado com sucesso", + + // "workflow-item.selectrevieweraction.notification.error.title": "Something went wrong", + "workflow-item.selectrevieweraction.notification.error.title": "Ocorreu algum erro!", + + // "workflow-item.selectrevieweraction.notification.error.content": "Couldn't select the reviewer for this workflow item", + "workflow-item.selectrevieweraction.notification.error.content": "Não foi possível selecionar o revisor para o fluxo de trabalho deste item", + + // "workflow-item.selectrevieweraction.title": "Select Reviewer", + "workflow-item.selectrevieweraction.title": "Selecionar revisor", + + // "workflow-item.selectrevieweraction.header": "Select Reviewer", + "workflow-item.selectrevieweraction.header": "Selecionar revisor", + + // "workflow-item.selectrevieweraction.button.cancel": "Cancel", + "workflow-item.selectrevieweraction.button.cancel": "Cancelar", + + // "workflow-item.selectrevieweraction.button.confirm": "Confirm", + "workflow-item.selectrevieweraction.button.confirm": "Confirmar", + + // "workflow-item.scorereviewaction.notification.success.title": "Rating review", + "workflow-item.scorereviewaction.notification.success.title": "Classificar revisão", + + // "workflow-item.scorereviewaction.notification.success.content": "The rating for this item workflow item has been successfully submitted", + "workflow-item.scorereviewaction.notification.success.content": "A classificação para o fluxo de trabalho deste item foi submetida com sucesso", + + // "workflow-item.scorereviewaction.notification.error.title": "Something went wrong", + "workflow-item.scorereviewaction.notification.error.title": "Ocorreu algum erro!", + + // "workflow-item.scorereviewaction.notification.error.content": "Couldn't rate this item", + "workflow-item.scorereviewaction.notification.error.content": "Não foi possível classificar este item", + + // "workflow-item.scorereviewaction.title": "Rate this item", + "workflow-item.scorereviewaction.title": "Classifique este item", + + // "workflow-item.scorereviewaction.header": "Rate this item", + "workflow-item.scorereviewaction.header": "Classifique este item", + + // "workflow-item.scorereviewaction.button.cancel": "Cancel", + "workflow-item.scorereviewaction.button.cancel": "Cancelar", + + // "workflow-item.scorereviewaction.button.confirm": "Confirm", + "workflow-item.scorereviewaction.button.confirm": "Confirmar", + + // "idle-modal.header": "Session will expire soon", + "idle-modal.header": "A sua sessão vai expirar em breve!", + + // "idle-modal.info": "For security reasons, user sessions expire after {{ timeToExpire }} minutes of inactivity. Your session will expire soon. Would you like to extend it or log out?", + "idle-modal.info": "Por razões de segurança, as sessões de utilizador expiram depois de {{ timeToExpire }} minutos de inatividade. A sua sessão expira em breve. Gostaria de a prolongar ou sair?", + + // "idle-modal.log-out": "Log out", + "idle-modal.log-out": "Desligar", + + // "idle-modal.extend-session": "Extend session", + "idle-modal.extend-session": "Prolongar sessão", + + // "researcher.profile.action.processing" : "Processing...", + "researcher.profile.action.processing" : "A processar...", + + // "researcher.profile.associated": "Researcher profile associated", + "researcher.profile.associated": "Perfil do investigador associado", + + // "researcher.profile.change-visibility.fail": "An unexpected error occurs while changing the profile visibility", + "researcher.profile.change-visibility.fail": "Ocorre um erro inesperado ao alterar a visibilidade do perfil", + + // "researcher.profile.create.new": "Create new", + "researcher.profile.create.new": "Criar novo", + + // "researcher.profile.create.success": "Researcher profile created successfully", + "researcher.profile.create.success": "Perfil do investigador criado com sucesso", + + // "researcher.profile.create.fail": "An error occurs during the researcher profile creation", + "researcher.profile.create.fail": "Ocorre um erro durante a criação do perfil do investigador", + + // "researcher.profile.delete": "Delete", + "researcher.profile.delete": "Remover", + + // "researcher.profile.expose": "Expose", + "researcher.profile.expose": "Expor", + + // "researcher.profile.hide": "Hide", + "researcher.profile.hide": "Esconder", + + // "researcher.profile.not.associated": "Researcher profile not yet associated", + "researcher.profile.not.associated": "Perfil do investigador ainda não associado", + + // "researcher.profile.view": "View", + "researcher.profile.view": "Ver", + + // "researcher.profile.private.visibility" : "PRIVATE", + "researcher.profile.private.visibility" : "PRIVADO", + + // "researcher.profile.public.visibility" : "PUBLIC", + "researcher.profile.public.visibility" : "PÚBLICO", + + // "researcher.profile.status": "Status:", + "researcher.profile.status": "Estado:", + + // "researcherprofile.claim.not-authorized": "You are not authorized to claim this item. For more details contact the administrator(s).", + "researcherprofile.claim.not-authorized": "Não possui autorização para reinvindicar este artigo. Para mais pormenores, contactar o(s) administrador(es).", + + // "researcherprofile.error.claim.body" : "An error occurred while claiming the profile, please try again later", + "researcherprofile.error.claim.body" : "Ocorreu um erro ao reclamar o perfil, por favor tente novamente mais tarde", + + // "researcherprofile.error.claim.title" : "Error", + "researcherprofile.error.claim.title" : "Erro", + + // "researcherprofile.success.claim.body" : "Profile claimed with success", + "researcherprofile.success.claim.body" : "Perfil reivindicado com sucesso", + + // "researcherprofile.success.claim.title" : "Success", + "researcherprofile.success.claim.title" : "Sucesso", + + // "person.page.orcid.create": "Create an ORCID iD", + "person.page.orcid.create": "Criar um ORCID iD", + + // "person.page.orcid.granted-authorizations": "Granted authorizations", + "person.page.orcid.granted-authorizations": "Autorizações concedidas", + + // "person.page.orcid.grant-authorizations" : "Grant authorizations", + "person.page.orcid.grant-authorizations" : "Conceder autorizações", + + // "person.page.orcid.link": "Connect to ORCID iD", + "person.page.orcid.link": "Ligar ao ORCID iD", + + // "person.page.orcid.link.processing": "Linking profile to ORCID...", + "person.page.orcid.link.processing": "Ligação do perfil ao ORCID...", + + // "person.page.orcid.link.error.message": "Something went wrong while connecting the profile with ORCID. If the problem persists, contact the administrator.", + "person.page.orcid.link.error.message": "Ocorreu algum problema ao ligar o perfil ao ORCID. Se o problema persistir, contacte o administrador.", + + // "person.page.orcid.orcid-not-linked-message": "The ORCID iD of this profile ({{ orcid }}) has not yet been connected to an account on the ORCID registry or the connection is expired.", + "person.page.orcid.orcid-not-linked-message": "O ORCID iD deste perfil ({{{ orcid }}) ainda não foi ligado a uma conta no registo do ORCID ou a ligação está expirada.", + + // "person.page.orcid.unlink": "Disconnect from ORCID", + "person.page.orcid.unlink": "Desligar do ORCID", + + // "person.page.orcid.unlink.processing": "Processing...", + "person.page.orcid.unlink.processing": "A processar...", + + // "person.page.orcid.missing-authorizations": "Missing authorizations", + "person.page.orcid.missing-authorizations": "Autorizações em falta", + + // "person.page.orcid.missing-authorizations-message": "The following authorizations are missing:", + "person.page.orcid.missing-authorizations-message": "Faltam as seguintes autorizações:", + + // "person.page.orcid.no-missing-authorizations-message": "Great! This box is empty, so you have granted all access rights to use all functions offers by your institution.", + "person.page.orcid.no-missing-authorizations-message": "Óptimo! Esta caixa está vazia, pelo que lhe foram concedidas todos as permissões de acesso para utilizar todas as funções oferecidas pela sua instituição.", + + // "person.page.orcid.no-orcid-message": "No ORCID iD associated yet. By clicking on the button below it is possible to link this profile with an ORCID account.", + "person.page.orcid.no-orcid-message": "Ainda não foi associado nenhum ORCID iD. Ao clicar no botão abaixo, é possível ligar este perfil a uma conta ORCID.", + + // "person.page.orcid.profile-preferences": "Profile preferences", + "person.page.orcid.profile-preferences": "Preferências de perfil", + + // "person.page.orcid.funding-preferences": "Funding preferences", + "person.page.orcid.funding-preferences": "Preferências de financiamento", + + // "person.page.orcid.publications-preferences": "Publication preferences", + "person.page.orcid.publications-preferences": "Preferências de publicações", + + // "person.page.orcid.remove-orcid-message": "If you need to remove your ORCID, please contact the repository administrator", + "person.page.orcid.remove-orcid-message": "Se precisar de remover o seu ORCID, por favor contacte o administrador do repositório", + + // "person.page.orcid.save.preference.changes": "Update settings", + "person.page.orcid.save.preference.changes": "Atualizar configurações", + + // "person.page.orcid.sync-profile.affiliation" : "Affiliation", + "person.page.orcid.sync-profile.affiliation" : "Afiliação", + + // "person.page.orcid.sync-profile.biographical" : "Biographical data", + "person.page.orcid.sync-profile.biographical" : "Dados biográficos", + + // "person.page.orcid.sync-profile.education" : "Education", + "person.page.orcid.sync-profile.education" : "Educação", + + // "person.page.orcid.sync-profile.identifiers" : "Identifiers", + "person.page.orcid.sync-profile.identifiers" : "Identificadores", + + // "person.page.orcid.sync-fundings.all" : "All fundings", + "person.page.orcid.sync-fundings.all" : "Todos financiamentos", + + // "person.page.orcid.sync-fundings.mine" : "My fundings", + "person.page.orcid.sync-fundings.mine" : "Meus financiamentos", + + // "person.page.orcid.sync-fundings.my_selected" : "Selected fundings", + "person.page.orcid.sync-fundings.my_selected" : "Financiamentos selecionados", + + // "person.page.orcid.sync-fundings.disabled" : "Disabled", + "person.page.orcid.sync-fundings.disabled" : "Desligado", + + // "person.page.orcid.sync-publications.all" : "All publications", + "person.page.orcid.sync-publications.all" : "Todas as publicações", + + // "person.page.orcid.sync-publications.mine" : "My publications", + "person.page.orcid.sync-publications.mine" : "As minhas publicações", + + // "person.page.orcid.sync-publications.my_selected" : "Selected publications", + "person.page.orcid.sync-publications.my_selected" : "Publicações selecionadas", + + // "person.page.orcid.sync-publications.disabled" : "Disabled", + "person.page.orcid.sync-publications.disabled" : "Desligado", + + // "person.page.orcid.sync-queue.discard" : "Discard the change and do not synchronize with the ORCID registry", + "person.page.orcid.sync-queue.discard" : "Cancelar a alteração e não sincronizar com o registo ORCID", + + // "person.page.orcid.sync-queue.discard.error": "The discarding of the ORCID queue record failed", + "person.page.orcid.sync-queue.discard.error": "A eliminação do registo da fila do ORCID falhou", + + // "person.page.orcid.sync-queue.discard.success": "The ORCID queue record have been discarded successfully", + "person.page.orcid.sync-queue.discard.success": "O registo da fila do ORCID foi descartado com sucesso", + + // "person.page.orcid.sync-queue.empty-message": "The ORCID queue registry is empty", + "person.page.orcid.sync-queue.empty-message": "O registo de filas do ORCID está vazio", + + // "person.page.orcid.sync-queue.table.header.type" : "Type", + "person.page.orcid.sync-queue.table.header.type" : "Tipo", + + // "person.page.orcid.sync-queue.table.header.description" : "Description", + "person.page.orcid.sync-queue.table.header.description" : "Descrição", + + // "person.page.orcid.sync-queue.table.header.action" : "Action", + "person.page.orcid.sync-queue.table.header.action" : "Ação", + + // "person.page.orcid.sync-queue.description.affiliation": "Affiliations", + "person.page.orcid.sync-queue.description.affiliation": "Afiliações", + + // "person.page.orcid.sync-queue.description.country": "Country", + "person.page.orcid.sync-queue.description.country": "País", + + // "person.page.orcid.sync-queue.description.education": "Educations", + "person.page.orcid.sync-queue.description.education": "Educação", + + // "person.page.orcid.sync-queue.description.external_ids": "External ids", + "person.page.orcid.sync-queue.description.external_ids": "IDs externos", + + // "person.page.orcid.sync-queue.description.other_names": "Other names", + "person.page.orcid.sync-queue.description.other_names": "Outros nomes", + + // "person.page.orcid.sync-queue.description.qualification": "Qualifications", + "person.page.orcid.sync-queue.description.qualification": "Qualificações", + + // "person.page.orcid.sync-queue.description.researcher_urls": "Researcher urls", + "person.page.orcid.sync-queue.description.researcher_urls": "URLS dos investigadores", + + // "person.page.orcid.sync-queue.description.keywords": "Keywords", + "person.page.orcid.sync-queue.description.keywords": "Palavras-chave", + + // "person.page.orcid.sync-queue.tooltip.insert": "Add a new entry in the ORCID registry", + "person.page.orcid.sync-queue.tooltip.insert": "Acrescentar uma nova entrada no registo ORCID", + + // "person.page.orcid.sync-queue.tooltip.update": "Update this entry on the ORCID registry", + "person.page.orcid.sync-queue.tooltip.update": "Actualizar esta entrada no registo do ORCID", + + // "person.page.orcid.sync-queue.tooltip.delete": "Remove this entry from the ORCID registry", + "person.page.orcid.sync-queue.tooltip.delete": "Remover esta entrada do registo do ORCID", + + // "person.page.orcid.sync-queue.tooltip.publication": "Publication", + "person.page.orcid.sync-queue.tooltip.publication": "Publicação", + + // "person.page.orcid.sync-queue.tooltip.project": "Project", + "person.page.orcid.sync-queue.tooltip.project": "Projeto", + + // "person.page.orcid.sync-queue.tooltip.affiliation": "Affiliation", + "person.page.orcid.sync-queue.tooltip.affiliation": "Afiliação", + + // "person.page.orcid.sync-queue.tooltip.education": "Education", + "person.page.orcid.sync-queue.tooltip.education": "Educação", + + // "person.page.orcid.sync-queue.tooltip.qualification": "Qualification", + "person.page.orcid.sync-queue.tooltip.qualification": "Qualificação", + + // "person.page.orcid.sync-queue.tooltip.other_names": "Other name", + "person.page.orcid.sync-queue.tooltip.other_names": "Outro nome", + + // "person.page.orcid.sync-queue.tooltip.country": "Country", + "person.page.orcid.sync-queue.tooltip.country": "País", + + // "person.page.orcid.sync-queue.tooltip.keywords": "Keyword", + "person.page.orcid.sync-queue.tooltip.keywords": "Palavra-chave", + + // "person.page.orcid.sync-queue.tooltip.external_ids": "External identifier", + "person.page.orcid.sync-queue.tooltip.external_ids": "Identificadores externos", + + // "person.page.orcid.sync-queue.tooltip.researcher_urls": "Researcher url", + "person.page.orcid.sync-queue.tooltip.researcher_urls": "URL do investigador", + + // "person.page.orcid.sync-queue.send" : "Synchronize with ORCID registry", + "person.page.orcid.sync-queue.send" : "Sincronizar com o registo ORCID", + + // "person.page.orcid.sync-queue.send.unauthorized-error.title": "The submission to ORCID failed for missing authorizations.", + "person.page.orcid.sync-queue.send.unauthorized-error.title": "A submissão ao ORCID falhou por falta de autorizações.", + + // "person.page.orcid.sync-queue.send.unauthorized-error.content": "Click here to grant again the required permissions. If the problem persists, contact the administrator", + "person.page.orcid.sync-queue.send.unauthorized-error.content": "Clique aqui para conceder novamente as permissões necessárias. Se o problema persistir, por favor contacte o administrador", + + // "person.page.orcid.sync-queue.send.bad-request-error": "The submission to ORCID failed because the resource sent to ORCID registry is not valid", + "person.page.orcid.sync-queue.send.bad-request-error": "A submissão ao ORCID falhou porque o recurso enviado para o registo do ORCID não é válido", + + // "person.page.orcid.sync-queue.send.error": "The submission to ORCID failed", + "person.page.orcid.sync-queue.send.error": "A submissão ao ORCID falhou", + + // "person.page.orcid.sync-queue.send.conflict-error": "The submission to ORCID failed because the resource is already present on the ORCID registry", + "person.page.orcid.sync-queue.send.conflict-error": "A submissão ao ORCID falhou porque o recurso já existe no registo do ORCID", + + // "person.page.orcid.sync-queue.send.not-found-warning": "The resource does not exists anymore on the ORCID registry.", + "person.page.orcid.sync-queue.send.not-found-warning": "O recurso já não existe no registo do ORCID.", + + // "person.page.orcid.sync-queue.send.success": "The submission to ORCID was completed successfully", + "person.page.orcid.sync-queue.send.success": "A submissão ao ORCID foi concluída com sucesso", + + // "person.page.orcid.sync-queue.send.validation-error": "The data that you want to synchronize with ORCID is not valid", + "person.page.orcid.sync-queue.send.validation-error": "Os dados que pretende sincronizar com ORCID não são válidos", + + // "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "The amount's currency is required", + "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "O valor de financiamento é obrigatório", + + // "person.page.orcid.sync-queue.send.validation-error.external-id.required": "The resource to be sent requires at least one identifier", + "person.page.orcid.sync-queue.send.validation-error.external-id.required": "O recurso a ser enviado requer pelo menos um identificador", + + // "person.page.orcid.sync-queue.send.validation-error.title.required": "The title is required", + "person.page.orcid.sync-queue.send.validation-error.title.required": "O título é obrigatório", + + // "person.page.orcid.sync-queue.send.validation-error.type.required": "The dc.type is required", + "person.page.orcid.sync-queue.send.validation-error.type.required": "O 'dc.type' é obrigatório", + + // "person.page.orcid.sync-queue.send.validation-error.start-date.required": "The start date is required", + "person.page.orcid.sync-queue.send.validation-error.start-date.required": "A data de início é obrigatória", + + // "person.page.orcid.sync-queue.send.validation-error.funder.required": "The funder is required", + "person.page.orcid.sync-queue.send.validation-error.funder.required": "O financiador é obrigatório", + + // "person.page.orcid.sync-queue.send.validation-error.country.invalid": "Invalid 2 digits ISO 3166 country", + "person.page.orcid.sync-queue.send.validation-error.country.invalid": "País inválido (2 dígitos ISO 3166)", + + // "person.page.orcid.sync-queue.send.validation-error.organization.required": "The organization is required", + "person.page.orcid.sync-queue.send.validation-error.organization.required": "A organização é obrigatória", + + // "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "The organization's name is required", + "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "O nome da organização é obrigatório", + + // "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid" : "The publication date must be one year after 1900", + "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid" : "A data de publicação deve ser um ano após 1900", + + // "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "The organization to be sent requires an address", + "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "A organização a ser enviada requer um endereço", + + // "person.page.orcid.sync-queue.send.validation-error.organization.city-required": "The address of the organization to be sent requires a city", + "person.page.orcid.sync-queue.send.validation-error.organization.city-required": "O endereço da organização a enviar requer uma cidade", + + // "person.page.orcid.sync-queue.send.validation-error.organization.country-required": "The address of the organization to be sent requires a valid 2 digits ISO 3166 country", + "person.page.orcid.sync-queue.send.validation-error.organization.country-required": "O endereço da organização a enviar requer um país ISO 3166 válido de 2 dígitos", + + // "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.required": "An identifier to disambiguate organizations is required. Supported ids are GRID, Ringgold, Legal Entity identifiers (LEIs) and Crossref Funder Registry identifiers", + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.required": "É necessário um identificador para desambiguar as organizações. Os identificadores suportados são os identificadores GRID, RINGGOLD, Legal Entity Identity (LEIs) e Crossref Funder Registry (CrossRef)", + + // "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.value-required": "The organization's identifiers requires a value", + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.value-required": "Os identificadores da organização requerem um valor", + + // "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "The organization's identifiers requires a source", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "Os identificadores da organização requerem uma fonte", + + // "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "The source of one of the organization identifiers is invalid. Supported sources are RINGGOLD, GRID, LEI and FUNDREF", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "A fonte de um dos identificadores da organização é inválida. As fontes suportadas são RINGGOLD, GRID, LEI e FUNDREF", + + // "person.page.orcid.synchronization-mode": "Synchronization mode", + "person.page.orcid.synchronization-mode": "Modo sincronização", + + // "person.page.orcid.synchronization-mode.batch": "Batch", + "person.page.orcid.synchronization-mode.batch": "Lote", + + // "person.page.orcid.synchronization-mode.label": "Synchronization mode", + "person.page.orcid.synchronization-mode.label": "Modo sincronização", + + // "person.page.orcid.synchronization-mode-message": "Please select how you would like synchronization to ORCID to occur. The options include 'Manual' (you must send your data to ORCID manually), or 'Batch' (the system will send your data to ORCID via a scheduled script).", + "person.page.orcid.synchronization-mode-message": "Por favor, selecione a forma como deseja que a sincronização com ORCID ocorra. As opções incluem 'Manual' (deve enviar os seus dados para o ORCID manualmente), ou 'Batch' (o sistema enviará os seus dados para o ORCID através de um script agendado).", + + // "person.page.orcid.synchronization-mode-funding-message": "Select whether to send your linked Project entities to your ORCID record's list of funding information.", + "person.page.orcid.synchronization-mode-funding-message": "Selecione se pretende enviar as suas entidades ligadas de 'Projeto' para a lista de informação de financiamento do seu registo ORCID.", + + // "person.page.orcid.synchronization-mode-publication-message": "Select whether to send your linked Publication entities to your ORCID record's list of works.", + "person.page.orcid.synchronization-mode-publication-message": "Selecione se pretende enviar as suas entidades ligadas de 'Publicação' associadas à lista de obras do seu registo ORCID.", + + // "person.page.orcid.synchronization-mode-profile-message": "Select whether to send your biographical data or personal identifiers to your ORCID record.", + "person.page.orcid.synchronization-mode-profile-message": "Selecione se pretende enviar os seus dados biográficos ou identificadores pessoais para o seu registo ORCID.", + + // "person.page.orcid.synchronization-settings-update.success": "The synchronization settings have been updated successfully", + "person.page.orcid.synchronization-settings-update.success": "As definições de sincronização foram atualizadas com sucesso", + + // "person.page.orcid.synchronization-settings-update.error": "The update of the synchronization settings failed", + "person.page.orcid.synchronization-settings-update.error": "A atualização das definições de sincronização falhou", + + // "person.page.orcid.synchronization-mode.manual": "Manual", + "person.page.orcid.synchronization-mode.manual": "Manual", + + // "person.page.orcid.scope.authenticate": "Get your ORCID iD", + "person.page.orcid.scope.authenticate": "Obtenha o seu ORCID iD", + + // "person.page.orcid.scope.read-limited": "Read your information with visibility set to Trusted Parties", + "person.page.orcid.scope.read-limited": "Leia a sua informação com visibilidade definida para 'Trusted Parties'", + + // "person.page.orcid.scope.activities-update": "Add/update your research activities", + "person.page.orcid.scope.activities-update": "Acrescentar/actualizar as suas actividades de investigação", + + // "person.page.orcid.scope.person-update": "Add/update other information about you", + "person.page.orcid.scope.person-update": "Adicionar/actualizar outras informações sobre si", + + // "person.page.orcid.unlink.success": "The disconnection between the profile and the ORCID registry was successful", + "person.page.orcid.unlink.success": "A desconexão entre o perfil e o registo ORCID foi bem sucedida", + + // "person.page.orcid.unlink.error": "An error occurred while disconnecting between the profile and the ORCID registry. Try again", + "person.page.orcid.unlink.error": "Ocorreu um erro ao desligar o perfil e o registo ORCID. Tente novamente.", + + // "person.orcid.sync.setting": "ORCID Synchronization settings", + "person.orcid.sync.setting": "Definições de sincronização ORCID", + + // "person.orcid.registry.queue": "ORCID Registry Queue", + "person.orcid.registry.queue": "Fila de registo ORCID", + + // "person.orcid.registry.auth": "ORCID Authorizations", + "person.orcid.registry.auth": "Autorizações ORCID", + + // "home.recent-submissions.head": "Recent Submissions", + "home.recent-submissions.head": "Entradas recentes", + + // "listable-notification-object.default-message": "This object couldn't be retrieved", + "listable-notification-object.default-message": "Este objeto não pode ser recuperado", + + // "system-wide-alert-banner.retrieval.error": "Something went wrong retrieving the system-wide alert banner", + "system-wide-alert-banner.retrieval.error": "Algo correu mal ao recuperar o 'banner' de alerta em todo o sistema", + + // "system-wide-alert-banner.countdown.prefix": "In", + "system-wide-alert-banner.countdown.prefix": "Em", + + // "system-wide-alert-banner.countdown.days": "{{days}} day(s),", + "system-wide-alert-banner.countdown.days": "{{dias}} dia(s),", + + // "system-wide-alert-banner.countdown.hours": "{{hours}} hour(s) and", + "system-wide-alert-banner.countdown.hours": "{{hours}} hora(s) e", + + // "system-wide-alert-banner.countdown.minutes": "{{minutes}} minute(s):", + "system-wide-alert-banner.countdown.minutes": "{{minutos}} minuto(s):", + + // "menu.section.system-wide-alert": "System-wide Alert", + "menu.section.system-wide-alert": "Alertas gerais do sistema", + + // "system-wide-alert.form.header": "System-wide Alert", + "system-wide-alert.form.header": "Alertas gerais do sistema", + + // "system-wide-alert-form.retrieval.error": "Something went wrong retrieving the system-wide alert", + "system-wide-alert-form.retrieval.error": "Algo correu mal ao recuperar o alerta geral do sistema", + + // "system-wide-alert.form.cancel": "Cancel", + "system-wide-alert.form.cancel": "Cancelar", + + // "system-wide-alert.form.save": "Save", + "system-wide-alert.form.save": "Guardar", + + // "system-wide-alert.form.label.active": "ACTIVE", + "system-wide-alert.form.label.active": "ACTIVO", + + // "system-wide-alert.form.label.inactive": "INACTIVE", + "system-wide-alert.form.label.inactive": "INACTIVO", + + // "system-wide-alert.form.error.message": "The system wide alert must have a message", + "system-wide-alert.form.error.message": "O alerta geral do sistema deve conter uma mensagem", + + // "system-wide-alert.form.label.message": "Alert message", + "system-wide-alert.form.label.message": "Mensagem de alerta", + + // "system-wide-alert.form.label.countdownTo.enable": "Enable a countdown timer", + "system-wide-alert.form.label.countdownTo.enable": "Ativar um temporizador de contagem decrescente", + + // "system-wide-alert.form.label.countdownTo.hint": "Hint: Set a countdown timer. When enabled, a date can be set in the future and the system-wide alert banner will perform a countdown to the set date. When this timer ends, it will disappear from the alert. The server will NOT be automatically stopped.", + "system-wide-alert.form.label.countdownTo.hint": "Dica: Defina um temporizador de contagem decrescente. Quando ativado, pode ser definida uma data no futuro e o 'banner' de alerta geral do sistema irá realizar uma contagem decrescente para a data definida. Quando este temporizador terminar, desaparecerá do alerta. O servidor NÃO pára automaticamente.", + + // "system-wide-alert.form.label.preview": "system-wide alert preview", + "system-wide-alert.form.label.preview": "Pré-visualização de alerta geral do sistema", + + // "system-wide-alert.form.update.success": "The system-wide alert was successfully updated", + "system-wide-alert.form.update.success": "O alerta geral do sistema foi atualizado com sucesso", + + // "system-wide-alert.form.update.error": "Something went wrong when updating the system-wide alert", + "system-wide-alert.form.update.error": "Algo correu mal ao atualizar o alerta geral do sistema", + + // "system-wide-alert.form.create.success": "The system-wide alert was successfully created", + "system-wide-alert.form.create.success": "O alerta geral do sistema foi criado com sucesso", + + // "system-wide-alert.form.create.error": "Something went wrong when creating the system-wide alert", + "system-wide-alert.form.create.error": "Algo correu mal ao criar o alerta geral do sistema", + + // "admin.system-wide-alert.breadcrumbs": "System-wide Alerts", + "admin.system-wide-alert.breadcrumbs": "Alertas gerais do sistema", + + // "admin.system-wide-alert.title": "System-wide Alerts", + "admin.system-wide-alert.title": "Alertas gerais do sistema", + + + + // Other strings... + // Missing, Duplicate or Redundant ??? + + // NOT FOUND 30-05-2023 + + + // "datafile.listelement.badge": "Data file", + "datafile.listelement.badge": "Ficheiro de dados", + + // "datapackage.listelement.badge": "Data package", + "datapackage.listelement.badge": "Pacote de dados", + + // "browse.next.button": "Next", + "browse.next.button": "Próximo", + + // "browse.previous.button": "Previous", + "browse.previous.button": "Anterior", + + // "curation-task.task.registerdoi.label": "DOI check", + "curation-task.task.registerdoi.label": "Verificação de DOIs", + + // "mydspace.general.text-here": "here", + "mydspace.general.text-here": "aqui", + + // "mydspace.upload.upload-successful": "New workspace item created. Click {{here}} for edit it.", + "mydspace.upload.upload-successful": "Novo item de espaço de trabalho criado. Clique {{here}} para o editar.", + + // "profile.security.form.notifications.error.not-long-enough": "The password has to be at least 6 characters long.", + "profile.security.form.notifications.error.not-long-enough": "A senha deve ter pelo menos 6 caracteres.", + + // "register-page.create-profile.security.error.password-length": "The password should be at least 6 characters long.", + "register-page.create-profile.security.error.password-length": "A senha deve possuir pelo menos 6 caracteres.", + + // "search.form.search_mydspace": "Search MyDSpace", + "search.form.search_mydspace": "Pesquisar na Área Pessoal", + + // "forgot-password.form.error.password-length": "The password should be at least 6 characters long.", + "forgot-password.form.error.password-length": "A senha deve ter pelo menos 6 caracteres.", + + // "search.filters.entityType.Publication": "Publicação", + "search.filters.entityType.Publication": "Publicação", + + // "search.filters.entityType.Person": "Pessoa", + "search.filters.entityType.Person": "Pessoa", + + // "search.filters.entityType.Project": "Projecto", + "search.filters.entityType.Project": "Projeto", + + // "search.filters.entityType.Journal": "Revista", + "search.filters.entityType.Journal": "Revista", + + // "search.filters.entityType.DataFile": "Data File", + "search.filters.entityType.DataFile": "Ficheiro de dados", + + // "forgot-email.form.google-recaptcha.must-accept-cookies": "Must accept cookies", + "forgot-email.form.google-recaptcha.must-accept-cookies": "Deve aceitar cookies", + + // "forgot-email.form.google-recaptcha.open-cookie-settings": "Cookie settings", + "forgot-email.form.google-recaptcha.open-cookie-settings": "Configurar cookies", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.local-entity": "Successfully imported and added external project to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.local-entity": "Importado com sucesso e adicionado autor à seleção", + + // "search.filters.namedresourcetype.Archived": "Archived", + "search.filters.namedresourcetype.Archived": "Aceites", + + // "search.filters.namedresourcetype.Workspace": "Workspace", + "search.filters.namedresourcetype.Workspace": "Por terminar", + + // "search.filters.namedresourcetype.Workflow": "Workflow", + "search.filters.namedresourcetype.Workflow": "Em fluxo de trabalho", + + // "search.filters.namedresourcetype.Validation": "Validation", + "search.filters.namedresourcetype.Validation": "Em validação", + + // "orgunit.search.results.head": "Organizational Unit Search Results", + "orgunit.search.results.head": "Resultados da pesquisa de organizações", + + // "orgunit-relationships.search.results.head": "Organizational Unit Search Results", + "orgunit-relationships.search.results.head": "Resultados da pesquisa de organizações", + + // "journalissue.search.results.head": "Journal Issue Search Results", + "journalissue.search.results.head": "Resultados da pesquisa de números", + + // "journalissue-relationships.search.results.head": "Journal Issue Search Results", + "journalissue-relationships.search.results.head": "Resultados da pesquisa de números", } From 244608aa5c9e17938bf2fa43d03d5a1a0c5211b0 Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Wed, 31 May 2023 12:11:15 +0200 Subject: [PATCH 139/425] fix issue where a colon in a uuid would get misinterpreted as a route param --- src/app/shared/menu/menu.service.spec.ts | 37 ++++++++++++++++++++++++ src/app/shared/menu/menu.service.ts | 20 +++++-------- 2 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/app/shared/menu/menu.service.spec.ts b/src/app/shared/menu/menu.service.spec.ts index f4b0fe3db8..0d8d669a0a 100644 --- a/src/app/shared/menu/menu.service.spec.ts +++ b/src/app/shared/menu/menu.service.spec.ts @@ -567,4 +567,41 @@ describe('MenuService', () => { }); }); + describe(`resolveSubstitutions`, () => { + let linkPrefix; + let link; + let uuid; + + beforeEach(() => { + linkPrefix = 'statistics_collection_'; + link = `${linkPrefix}:id`; + uuid = 'f7cc3ca4-3c2c-464d-8af8-add9f84f711c'; + }); + + it(`shouldn't do anything when there are no params`, () => { + let result = (service as any).resolveSubstitutions(link, undefined); + expect(result).toEqual(link); + result = (service as any).resolveSubstitutions(link, null); + expect(result).toEqual(link); + result = (service as any).resolveSubstitutions(link, {}); + expect(result).toEqual(link); + }); + + it(`should replace link params that are also route params`, () => { + const result = (service as any).resolveSubstitutions(link,{ 'id': uuid }); + expect(result).toEqual(linkPrefix + uuid); + }); + + it(`should not replace link params that aren't route params`, () => { + const result = (service as any).resolveSubstitutions(link,{ 'something': 'else' }); + expect(result).toEqual(link); + }); + + it(`should gracefully deal with routes that contain the name of the route param`, () => { + const selfReferentialParam = `:id:something`; + const result = (service as any).resolveSubstitutions(link,{ 'id': selfReferentialParam }); + expect(result).toEqual(linkPrefix + selfReferentialParam); + }); + }); + }); diff --git a/src/app/shared/menu/menu.service.ts b/src/app/shared/menu/menu.service.ts index 2253e9ce09..fac3b3fba7 100644 --- a/src/app/shared/menu/menu.service.ts +++ b/src/app/shared/menu/menu.service.ts @@ -17,7 +17,7 @@ import { ToggleActiveMenuSectionAction, ToggleMenuAction, } from './menu.actions'; -import { hasNoValue, hasValue, hasValueOperator, isNotEmpty } from '../empty.util'; +import { hasNoValue, hasValue, hasValueOperator, isNotEmpty, isEmpty } from '../empty.util'; import { MenuState } from './menu-state.model'; import { MenuSections } from './menu-sections.model'; import { MenuSection } from './menu-section.model'; @@ -409,20 +409,14 @@ export class MenuService { } protected resolveSubstitutions(object, params) { - let resolved; - if (typeof object === 'string') { + if (isEmpty(params)) { resolved = object; - let match: RegExpMatchArray; - do { - match = resolved.match(/:(\w+)/); - if (match) { - const substitute = params[match[1]]; - if (hasValue(substitute)) { - resolved = resolved.replace(match[0], `${substitute}`); - } - } - } while (match); + } else if (typeof object === 'string') { + resolved = object; + Object.entries(params).forEach(([key, value]: [string, string]) => + resolved = resolved.replaceAll(`:${key}`, value) + ); } else if (Array.isArray(object)) { resolved = []; object.forEach((entry, index) => { From 6483eb2c304346258f3ea797bb3826556a56ffa4 Mon Sep 17 00:00:00 2001 From: Alan Orth Date: Wed, 31 May 2023 12:51:49 +0300 Subject: [PATCH 140/425] Remove scripts/webpack.js This is no longer used. Fixes: https://github.com/DSpace/dspace-angular/issues/2285 --- README.md | 3 +-- scripts/webpack.js | 13 ------------- 2 files changed, 1 insertion(+), 15 deletions(-) delete mode 100644 scripts/webpack.js diff --git a/README.md b/README.md index c90dc1d08f..689c64a292 100644 --- a/README.md +++ b/README.md @@ -413,8 +413,7 @@ dspace-angular │ ├── merge-i18n-files.ts * │ ├── serve.ts * │ ├── sync-i18n-files.ts * -│ ├── test-rest.ts * -│ └── webpack.js * +│ └── test-rest.ts * ├── src * The source of the application │ ├── app * The source code of the application, subdivided by module/page. │ ├── assets * Folder for static resources diff --git a/scripts/webpack.js b/scripts/webpack.js deleted file mode 100644 index 93f17b4619..0000000000 --- a/scripts/webpack.js +++ /dev/null @@ -1,13 +0,0 @@ -const path = require('path'); -const child_process = require('child_process'); - -const heapSize = 4096; -const webpackPath = path.join('node_modules', 'webpack', 'bin', 'webpack.js'); - -const params = [ - '--max_old_space_size=' + heapSize, - webpackPath, - ...process.argv.slice(2) -]; - -child_process.spawn('node', params, { stdio:'inherit' }); From bbfb8bec01239e2939a13cd9b9a1b91dbc42f76a Mon Sep 17 00:00:00 2001 From: rsaraivac <122451983+rsaraivac@users.noreply.github.com> Date: Wed, 31 May 2023 18:34:59 +0100 Subject: [PATCH 141/425] Update pt-PT.json5 --- src/assets/i18n/pt-PT.json5 | 229 ++++++++++++++++++------------------ 1 file changed, 114 insertions(+), 115 deletions(-) diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index 761da582b6..9b37fce1c7 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -1,26 +1,25 @@ { - // Dspace v7.5 > i18n pt-PT > reviewed 30-05-2023 - - + // Dspace v7.5 > i18n pt-PT > reviewed 30-05-2023 + // "401.help": "You're not authorized to access this page. You can use the button below to get back to the home page.", "401.help": "Não está autorizado a aceder a esta página. Pode utilizar o botão em baixo para voltar à página de início.", // "401.link.home-page": "Take me to the home page", "401.link.home-page": "Voltar à página de início", - + // "401.unauthorized": "unauthorized", "401.unauthorized": "Não autorizado", - + // "403.help": "You don't have permission to access this page. You can use the button below to get back to the home page.", "403.help": "Não possui permissões para aceder a esta página. Pode utilizar o botão em baixo para voltar à página de início.", - + // "403.link.home-page": "Take me to the home page", "403.link.home-page": "Voltar à página de início", - + // "403.forbidden": "forbidden", "403.forbidden": "Proibido", - + // "500.page-internal-server-error": "Service Unavailable", "500.page-internal-server-error": "Serviço indisponível", @@ -29,16 +28,16 @@ // "500.link.home-page": "Take me to the home page", "500.link.home-page": "Voltar à página de início", - + // "404.help": "We can't find the page you're looking for. The page may have been moved or deleted. You can use the button below to get back to the home page. ", "404.help": "Não encontramos a página que procura. A página pode ter sido movida ou eliminada. Pode utilizar o botão em baixo para voltar à página de início. ", - + // "404.link.home-page": "Take me to the home page", "404.link.home-page": "Voltar à página de início", // "404.page-not-found": "page not found", "404.page-not-found": "página não encontrada", - + // "error-page.description.401": "unauthorized", "error-page.description.401": "Não autorizado", @@ -46,10 +45,10 @@ "error-page.description.403": "Proibido", // "error-page.description.500": "Service Unavailable", - "error-page.description.500": "Serviço indisponível", - + "error-page.description.500": "Serviço indisponível", + // "error-page.description.404": "page not found", - "error-page.description.404": "página não encontrada", + "error-page.description.404": "página não encontrada", // "error-page.orcid.generic-error": "An error occurred during login via ORCID. Make sure you have shared your ORCID account email address with DSpace. If the error persists, contact the administrator", "error-page.orcid.generic-error": "Ocorreu um erro com a sua autenticação via ORCID. Certifique-se que partilhou o seu endereço de email associado à sua conta ORCID com o repositório. Se o erro persistir, por favor contacte o administrador do sistema.", @@ -58,8 +57,8 @@ "access-status.embargo.listelement.badge": "Embargado", // "access-status.metadata.only.listelement.badge": "Metadata only", - "access-status.metadata.only.listelement.badge": "Apenas Metadados", - + "access-status.metadata.only.listelement.badge": "Apenas Metadados", + // "access-status.open.access.listelement.badge": "Open Access", "access-status.open.access.listelement.badge": "Acesso Aberto", @@ -68,16 +67,16 @@ // "access-status.unknown.listelement.badge": "Unknown", "access-status.unknown.listelement.badge": "Desconhecido", - + // "admin.curation-tasks.breadcrumbs": "System curation tasks", "admin.curation-tasks.breadcrumbs": "Tarefas de curadoria", // "admin.curation-tasks.title": "System curation tasks", "admin.curation-tasks.title": "Tarefas de curadoria", - + // "admin.curation-tasks.header": "System curation tasks", "admin.curation-tasks.header": "Tarefas de curadoria", - + // "admin.registries.bitstream-formats.breadcrumbs": "Format registry", "admin.registries.bitstream-formats.breadcrumbs": "Registo de formatos", @@ -89,31 +88,31 @@ // "admin.registries.bitstream-formats.create.failure.head": "Failure", "admin.registries.bitstream-formats.create.failure.head": "Falha", - + // "admin.registries.bitstream-formats.create.head": "Create Bitstream format", "admin.registries.bitstream-formats.create.head": "Criar formato de ficheiro", // "admin.registries.bitstream-formats.create.new": "Add a new bitstream format", "admin.registries.bitstream-formats.create.new": "Adicionar um novo formato de ficheiro", - + // "admin.registries.bitstream-formats.create.success.content": "The new bitstream format was successfully created.", "admin.registries.bitstream-formats.create.success.content": "O novo formato de ficheiro foi criado com sucesso.", - + // "admin.registries.bitstream-formats.create.success.head": "Success", "admin.registries.bitstream-formats.create.success.head": "Sucesso", - + // "admin.registries.bitstream-formats.delete.failure.amount": "Failed to remove {{ amount }} format(s)", "admin.registries.bitstream-formats.delete.failure.amount": "Falha ao remover {{ amount }} formato(s)", - + // "admin.registries.bitstream-formats.delete.failure.head": "Failure", "admin.registries.bitstream-formats.delete.failure.head": "Falha", - + // "admin.registries.bitstream-formats.delete.success.amount": "Successfully removed {{ amount }} format(s)", "admin.registries.bitstream-formats.delete.success.amount": "Removeu {{ amount }} formato(s) com sucesso", - + // "admin.registries.bitstream-formats.delete.success.head": "Success", "admin.registries.bitstream-formats.delete.success.head": "Sucesso", - + // "admin.registries.bitstream-formats.description": "This list of bitstream formats provides information about known formats and their support level.", "admin.registries.bitstream-formats.description": "Esta lista de formatos de ficheiro apresenta informações sobre formatos conhecidos e os seus níveis de suporte.", @@ -122,76 +121,76 @@ // "admin.registries.bitstream-formats.edit.description.hint": "", "admin.registries.bitstream-formats.edit.description.hint": "", - + // "admin.registries.bitstream-formats.edit.description.label": "Description", "admin.registries.bitstream-formats.edit.description.label": "Descrição", - + // "admin.registries.bitstream-formats.edit.extensions.hint": "Extensions are file extensions that are used to automatically identify the format of uploaded files. You can enter several extensions for each format.", "admin.registries.bitstream-formats.edit.extensions.hint": "Extensões são extensões de ficheiro que são usadas para identificar automaticamente o formato dos ficheiros enviados. Pode informar várias extensões para cada formato.", - + // "admin.registries.bitstream-formats.edit.extensions.label": "File extensions", "admin.registries.bitstream-formats.edit.extensions.label": "Extensões de ficheiro", - + // "admin.registries.bitstream-formats.edit.extensions.placeholder": "Enter a file extension without the dot", "admin.registries.bitstream-formats.edit.extensions.placeholder": "Indique uma extenção de ficheiro sem o ponto", - + // "admin.registries.bitstream-formats.edit.failure.content": "An error occurred while editing the bitstream format.", "admin.registries.bitstream-formats.edit.failure.content": "Ocorreu um erro ao editar o formato de bitstream.", - + // "admin.registries.bitstream-formats.edit.failure.head": "Failure", "admin.registries.bitstream-formats.edit.failure.head": "Falha", - + // "admin.registries.bitstream-formats.edit.head": "Bitstream format: {{ format }}", "admin.registries.bitstream-formats.edit.head": "Formato de bitstream: {{ format }}", - + // "admin.registries.bitstream-formats.edit.internal.hint": "Formats marked as internal are hidden from the user, and used for administrative purposes.", "admin.registries.bitstream-formats.edit.internal.hint": "Formatos marcados como internos são ocultos para o utilizador, usados por motivos administrativos.", // "admin.registries.bitstream-formats.edit.internal.label": "Internal", "admin.registries.bitstream-formats.edit.internal.label": "Interno", - + // "admin.registries.bitstream-formats.edit.mimetype.hint": "The MIME type associated with this format, does not have to be unique.", "admin.registries.bitstream-formats.edit.mimetype.hint": "O MIME type associado a este formato não tem que ser único.", - + // "admin.registries.bitstream-formats.edit.mimetype.label": "MIME Type", "admin.registries.bitstream-formats.edit.mimetype.label": "MIME Type", - + // "admin.registries.bitstream-formats.edit.shortDescription.hint": "A unique name for this format, (e.g. Microsoft Word XP or Microsoft Word 2000)", "admin.registries.bitstream-formats.edit.shortDescription.hint": "Um nome único para este formato (exemplo. Microsoft Word XP ou Microsoft Word 2000)", - + // "admin.registries.bitstream-formats.edit.shortDescription.label": "Name", "admin.registries.bitstream-formats.edit.shortDescription.label": "Nome", - + // "admin.registries.bitstream-formats.edit.success.content": "The bitstream format was successfully edited.", "admin.registries.bitstream-formats.edit.success.content": "O formato de bitstream foi editado com sucesso.", - + // "admin.registries.bitstream-formats.edit.success.head": "Success", "admin.registries.bitstream-formats.edit.success.head": "Sucesso", - + // "admin.registries.bitstream-formats.edit.supportLevel.hint": "The level of support your institution pledges for this format.", "admin.registries.bitstream-formats.edit.supportLevel.hint": "O nível de suporte que a sua instituição promete para este formato.", - + // "admin.registries.bitstream-formats.edit.supportLevel.label": "Support level", "admin.registries.bitstream-formats.edit.supportLevel.label": "Nível de suporte", - + // "admin.registries.bitstream-formats.head": "Bitstream Format Registry", "admin.registries.bitstream-formats.head": "Registo de formatos de ficheiros", // "admin.registries.bitstream-formats.no-items": "No bitstream formats to show.", "admin.registries.bitstream-formats.no-items": "Nenhum formato de bitstream para exibir.", - + // "admin.registries.bitstream-formats.table.delete": "Delete selected", "admin.registries.bitstream-formats.table.delete": "Apagar selecionado(s)", - + // "admin.registries.bitstream-formats.table.deselect-all": "Deselect all", "admin.registries.bitstream-formats.table.deselect-all": "Desselecionar todos", - + // "admin.registries.bitstream-formats.table.internal": "internal", "admin.registries.bitstream-formats.table.internal": "Interno", - + // "admin.registries.bitstream-formats.table.mimetype": "MIME Type", "admin.registries.bitstream-formats.table.mimetype": "MIME Type", - + // "admin.registries.bitstream-formats.table.name": "Name", "admin.registries.bitstream-formats.table.name": "Nome", @@ -200,76 +199,76 @@ // "admin.registries.bitstream-formats.table.return": "Back", "admin.registries.bitstream-formats.table.return": "Voltar", - + // "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Known", "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Conhecido", - + // "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Supported", "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Suportado", - + // "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Unknown", "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Desconhecido", - + // "admin.registries.bitstream-formats.table.supportLevel.head": "Support Level", "admin.registries.bitstream-formats.table.supportLevel.head": "Nível de suporte", // "admin.registries.bitstream-formats.title": "Bitstream Format Registry", "admin.registries.bitstream-formats.title": "Registo de formatos de ficheiro", - + // "admin.registries.metadata.breadcrumbs": "Metadata registry", "admin.registries.metadata.breadcrumbs": "Registo de metadados", // "admin.registries.metadata.description": "The metadata registry maintains a list of all metadata fields available in the repository. These fields may be divided amongst multiple schemas. However, DSpace requires the qualified Dublin Core schema.", "admin.registries.metadata.description": "O registo de metadados mantém a lista de todos os campos de metadados disponíveis no repositório. Estes campos podem ser divididos em multiplos esquemas. No entanto, o DSpace requer esquemas de Dublin Core qualificados.", - + // "admin.registries.metadata.form.create": "Create metadata schema", "admin.registries.metadata.form.create": "Criar esquema de metadados", // "admin.registries.metadata.form.edit": "Edit metadata schema", "admin.registries.metadata.form.edit": "Editar esquema de metadados", - + // "admin.registries.metadata.form.name": "Name", "admin.registries.metadata.form.name": "Nome", - + // "admin.registries.metadata.form.namespace": "Namespace", "admin.registries.metadata.form.namespace": "Namespace", - + // "admin.registries.metadata.head": "Metadata Registry", "admin.registries.metadata.head": "Registo de metadados", - + // "admin.registries.metadata.schemas.no-items": "No metadata schemas to show.", "admin.registries.metadata.schemas.no-items": "Nenhum esquema de metadados para mostrar.", - + // "admin.registries.metadata.schemas.table.delete": "Delete selected", "admin.registries.metadata.schemas.table.delete": "Apagar selecionado(s)", - + // "admin.registries.metadata.schemas.table.id": "ID", "admin.registries.metadata.schemas.table.id": "ID", - + // "admin.registries.metadata.schemas.table.name": "Name", "admin.registries.metadata.schemas.table.name": "Nome", - + // "admin.registries.metadata.schemas.table.namespace": "Namespace", "admin.registries.metadata.schemas.table.namespace": "Namespace", // "admin.registries.metadata.title": "Metadata Registry", "admin.registries.metadata.title": "Registo de metadados", - + // "admin.registries.schema.breadcrumbs": "Metadata schema", "admin.registries.schema.breadcrumbs": "Esquema de metadados", - + // "admin.registries.schema.description": "This is the metadata schema for \"{{namespace}}\".", "admin.registries.schema.description": "Este é o esquema de metadados para \"{{namespace}}\".", - + // "admin.registries.schema.fields.head": "Schema metadata fields", "admin.registries.schema.fields.head": "Campos do esquema de metadados", // "admin.registries.schema.fields.no-items": "No metadata fields to show.", "admin.registries.schema.fields.no-items": "Nenhum campo de metadado para exibir.", - + // "admin.registries.schema.fields.table.delete": "Delete selected", "admin.registries.schema.fields.table.delete": "Apagar selecionado(s)", - + // "admin.registries.schema.fields.table.field": "Field", "admin.registries.schema.fields.table.field": "Campo", @@ -278,7 +277,7 @@ // "admin.registries.schema.fields.table.scopenote": "Scope Note", "admin.registries.schema.fields.table.scopenote": "Descrição", - + // "admin.registries.schema.form.create": "Create metadata field", "admin.registries.schema.form.create": "Criar elemento de metadados", @@ -287,10 +286,10 @@ // "admin.registries.schema.form.element": "Element", "admin.registries.schema.form.element": "Elemento", - + // "admin.registries.schema.form.qualifier": "Qualifier", "admin.registries.schema.form.qualifier": "Qualificador", - + // "admin.registries.schema.form.scopenote": "Scope Note", "admin.registries.schema.form.scopenote": "Nota de âmbito", @@ -299,28 +298,28 @@ // "admin.registries.schema.notification.created": "Successfully created metadata schema \"{{prefix}}\"", "admin.registries.schema.notification.created": "Criou o esquema de metadados \"{{prefix}}\" com sucesso", - + // "admin.registries.schema.notification.deleted.failure": "Failed to delete {{amount}} metadata schemas", "admin.registries.schema.notification.deleted.failure": "Falhou ao apagar {{amount}} esquema(s) de metadados", - + // "admin.registries.schema.notification.deleted.success": "Successfully deleted {{amount}} metadata schemas", "admin.registries.schema.notification.deleted.success": "Apagou {{amount}} esquema(s) de metadados com sucesso", - + // "admin.registries.schema.notification.edited": "Successfully edited metadata schema \"{{prefix}}\"", "admin.registries.schema.notification.edited": "Editou o esquema de metadados \"{{prefix}}\" com sucesso", - + // "admin.registries.schema.notification.failure": "Error", "admin.registries.schema.notification.failure": "Erro", - + // "admin.registries.schema.notification.field.created": "Successfully created metadata field \"{{field}}\"", "admin.registries.schema.notification.field.created": "Criou o campo de metadado \"{{field}}\" com sucesso", - + // "admin.registries.schema.notification.field.deleted.failure": "Failed to delete {{amount}} metadata fields", "admin.registries.schema.notification.field.deleted.failure": "Falhou ao apagar {{amount}} campo(s) de metadados", - + // "admin.registries.schema.notification.field.deleted.success": "Successfully deleted {{amount}} metadata fields", "admin.registries.schema.notification.field.deleted.success": "Apagou {{amount}} campo(s) de metadados com sucesso", - + // "admin.registries.schema.notification.field.edited": "Successfully edited metadata field \"{{field}}\"", "admin.registries.schema.notification.field.edited": "Editou o campo de metadado \"{{field}}\" com sucesso", @@ -338,16 +337,16 @@ // "admin.access-control.epeople.actions.impersonate": "Impersonate EPerson", "admin.access-control.epeople.actions.impersonate": "Assumir o papel do Utilizador", - + // "admin.access-control.epeople.actions.reset": "Reset password", - "admin.access-control.epeople.actions.reset": "Redefinir password", + "admin.access-control.epeople.actions.reset": "Redefinir password", // "admin.access-control.epeople.actions.stop-impersonating": "Stop impersonating EPerson", "admin.access-control.epeople.actions.stop-impersonating": "Deixar de assumir o papel do utilizador", // "admin.access-control.epeople.breadcrumbs": "EPeople", "admin.access-control.epeople.breadcrumbs": "Utilizadores", - + // "admin.access-control.epeople.title": "EPeople", "admin.access-control.epeople.title": "Utilizadores", @@ -356,46 +355,46 @@ // "admin.access-control.epeople.search.head": "Search", "admin.access-control.epeople.search.head": "Pesquisar", - + // "admin.access-control.epeople.button.see-all": "Browse All", "admin.access-control.epeople.button.see-all": "Pesquisar tudo", // "admin.access-control.epeople.search.scope.metadata": "Metadata", "admin.access-control.epeople.search.scope.metadata": "Metadados", - + // "admin.access-control.epeople.search.scope.email": "E-mail (exact)", "admin.access-control.epeople.search.scope.email": "Email (exato)", - + // "admin.access-control.epeople.search.button": "Search", "admin.access-control.epeople.search.button": "Pesquisar", // "admin.access-control.epeople.search.placeholder": "Search people...", "admin.access-control.epeople.search.placeholder": "Pesquisar utilizadores...", - + // "admin.access-control.epeople.button.add": "Add EPerson", "admin.access-control.epeople.button.add": "Adicionar utilizador", // "admin.access-control.epeople.table.id": "ID", - "admin.access-control.epeople.table.id": "ID", - + "admin.access-control.epeople.table.id": "ID", + // "admin.access-control.epeople.table.name": "Name", "admin.access-control.epeople.table.name": "Nome", - + // "admin.access-control.epeople.table.email": "E-mail (exact)", "admin.access-control.epeople.table.email": "Email (exato)", - + // "admin.access-control.epeople.table.edit": "Edit", "admin.access-control.epeople.table.edit": "Editar", - + // "admin.access-control.epeople.table.edit.buttons.edit": "Edit \"{{name}}\"", "admin.access-control.epeople.table.edit.buttons.edit": "Editar \"{{name}}\"", // "admin.access-control.epeople.table.edit.buttons.edit-disabled": "You are not authorized to edit this group", "admin.access-control.epeople.table.edit.buttons.edit-disabled": "Não possui autorização para editar este grupo", - + // "admin.access-control.epeople.table.edit.buttons.remove": "Delete \"{{name}}\"", "admin.access-control.epeople.table.edit.buttons.remove": "Apagar \"{{name}}\"", - + // "admin.access-control.epeople.no-items": "No EPeople to show.", "admin.access-control.epeople.no-items": "Sem utilizadores para mostrar.", @@ -407,43 +406,43 @@ // "admin.access-control.epeople.form.firstName": "First name", "admin.access-control.epeople.form.firstName": "Nome", - + // "admin.access-control.epeople.form.lastName": "Last name", "admin.access-control.epeople.form.lastName": "Apelido", - + // "admin.access-control.epeople.form.email": "E-mail", "admin.access-control.epeople.form.email": "Email", - + // "admin.access-control.epeople.form.emailHint": "Must be valid e-mail address", "admin.access-control.epeople.form.emailHint": "Deve conter um email válido", - + // "admin.access-control.epeople.form.canLogIn": "Can log in", "admin.access-control.epeople.form.canLogIn": "Pode iniciar sessão", - + // "admin.access-control.epeople.form.requireCertificate": "Requires certificate", "admin.access-control.epeople.form.requireCertificate": "Requer certificado", - + // "admin.access-control.epeople.form.return": "Back", "admin.access-control.epeople.form.return": "Voltar", // "admin.access-control.epeople.form.notification.created.success": "Successfully created EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.created.success": "Utilizador criado com sucesso \"{{name}}\"", - + // "admin.access-control.epeople.form.notification.created.failure": "Failed to create EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.created.failure": "Falha ao criar o Utilizador \"{{name}}\"", - + // "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Failed to create EPerson \"{{name}}\", email \"{{email}}\" already in use.", "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Falha ao criar o Utilizador \"{{name}}\", o email \"{{email}}\" já está registado no repositório.", - + // "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Failed to edit EPerson \"{{name}}\", email \"{{email}}\" already in use.", "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Falha ao editar o Utilizador \"{{name}}\", o email \"{{email}}\" já está registado no repositório.", - + // "admin.access-control.epeople.form.notification.edited.success": "Successfully edited EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.edited.success": "Utilizador editado com successo \"{{name}}\"", - + // "admin.access-control.epeople.form.notification.edited.failure": "Failed to edit EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.edited.failure": "Falha ao editor Utilizador \"{{name}}\"", - + // "admin.access-control.epeople.form.notification.deleted.success": "Successfully deleted EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.deleted.success": "Utilizador removido com sucesso \"{{name}}\"", @@ -452,13 +451,13 @@ // "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Member of these groups:", "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Membro dos grupos:", - + // "admin.access-control.epeople.form.table.id": "ID", "admin.access-control.epeople.form.table.id": "ID", - + // "admin.access-control.epeople.form.table.name": "Name", "admin.access-control.epeople.form.table.name": "Nome", - + // "admin.access-control.epeople.form.table.collectionOrCommunity": "Collection/Community", "admin.access-control.epeople.form.table.collectionOrCommunity": "Coleção/Comunidade", @@ -467,7 +466,7 @@ // "admin.access-control.epeople.form.goToGroups": "Add to groups", "admin.access-control.epeople.form.goToGroups": "Adicionar a grupos", - + // "admin.access-control.epeople.notification.deleted.failure": "Failed to delete EPerson: \"{{name}}\"", "admin.access-control.epeople.notification.deleted.failure": "Falha ao apagar utilizador: \"{{name}}\"", @@ -481,8 +480,8 @@ "admin.access-control.groups.breadcrumbs": "Grupos", // "admin.access-control.groups.singleGroup.breadcrumbs": "Edit Group", - "admin.access-control.groups.singleGroup.breadcrumbs": "Editar grupo", - + "admin.access-control.groups.singleGroup.breadcrumbs": "Editar grupo", + // "admin.access-control.groups.title.singleGroup": "Edit Group", "admin.access-control.groups.title.singleGroup": "Editar grupo", @@ -491,13 +490,13 @@ // "admin.access-control.groups.addGroup.breadcrumbs": "New Group", "admin.access-control.groups.addGroup.breadcrumbs": "Novo grupo", - + // "admin.access-control.groups.head": "Groups", "admin.access-control.groups.head": "Grupos", - + // "admin.access-control.groups.button.add": "Add group", "admin.access-control.groups.button.add": "Adicionar grupo", - + // "admin.access-control.groups.search.head": "Search groups", "admin.access-control.groups.search.head": "Pesquisar grupos", @@ -7689,4 +7688,4 @@ "journalissue-relationships.search.results.head": "Resultados da pesquisa de números", -} \ No newline at end of file +} From d3d9a526fd093175e55047446c68ab50e9b50503 Mon Sep 17 00:00:00 2001 From: rsaraivac <122451983+rsaraivac@users.noreply.github.com> Date: Wed, 31 May 2023 19:29:57 +0100 Subject: [PATCH 142/425] Update pt-PT.json5 --- src/assets/i18n/pt-PT.json5 | 254 ++++++++++++++++++------------------ 1 file changed, 127 insertions(+), 127 deletions(-) diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index 9b37fce1c7..c7b677d597 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -194,8 +194,8 @@ // "admin.registries.bitstream-formats.table.name": "Name", "admin.registries.bitstream-formats.table.name": "Nome", - // "admin.registries.bitstream-formats.table.id" : "ID", - "admin.registries.bitstream-formats.table.id" : "ID", + // "admin.registries.bitstream-formats.table.id": "ID", + "admin.registries.bitstream-formats.table.id": "ID", // "admin.registries.bitstream-formats.table.return": "Back", "admin.registries.bitstream-formats.table.return": "Voltar", @@ -272,8 +272,8 @@ // "admin.registries.schema.fields.table.field": "Field", "admin.registries.schema.fields.table.field": "Campo", - // "admin.registries.schema.fields.table.id" : "ID", - "admin.registries.schema.fields.table.id" : "ID", + // "admin.registries.schema.fields.table.id": "ID", + "admin.registries.schema.fields.table.id": "ID", // "admin.registries.schema.fields.table.scopenote": "Scope Note", "admin.registries.schema.fields.table.scopenote": "Descrição", @@ -2195,8 +2195,8 @@ // "supervision-group-selector.notification.create.failure.title": "error", "supervision-group-selector.notification.create.failure.title": "erro", - // "supervision-group-selector.notification.create.already-existing" : "A supervision order already exists on this item for selected group", - "supervision-group-selector.notification.create.already-existing" : "Já existe uma ordem de supervisão sobre este item para grupo selecionado", + // "supervision-group-selector.notification.create.already-existing": "A supervision order already exists on this item for selected group", + "supervision-group-selector.notification.create.already-existing": "Já existe uma ordem de supervisão sobre este item para grupo selecionado", // "confirmation-modal.export-metadata.header": "Export metadata for {{ dsoName }}", "confirmation-modal.export-metadata.header": "Exportar metadados para {{ dsoName }}", @@ -2651,9 +2651,9 @@ // "home.title": "Home", "home.title": "Página inicial", - // "home.top-level-communities.head": "Communities in DSpace", + // "home.top-level-communities.head": "Communities in DSpace", "home.top-level-communities.head": "Comunidades", - + // "home.top-level-communities.help": "Select a community to browse its collections.", "home.top-level-communities.help": "Selecione uma comunidade para navegar nas suas coleções", @@ -2714,20 +2714,20 @@ // "info.feedback.email-label": "Your Email", "info.feedback.email-label": "O seu endereço de correio electrónico:", - // "info.feedback.create.success" : "Feedback Sent Successfully!", - "info.feedback.create.success" : "Mensagem enviada com sucesso!", + // "info.feedback.create.success": "Feedback Sent Successfully!", + "info.feedback.create.success": "Mensagem enviada com sucesso!", - // "info.feedback.error.email.required" : "A valid email address is required", - "info.feedback.error.email.required" : "Deve inserir um endereço de correio electrónico válido", + // "info.feedback.error.email.required": "A valid email address is required", + "info.feedback.error.email.required": "Deve inserir um endereço de correio electrónico válido", - // "info.feedback.error.message.required" : "A comment is required", - "info.feedback.error.message.required" : "Deve inserir uma mensagem", + // "info.feedback.error.message.required": "A comment is required", + "info.feedback.error.message.required": "Deve inserir uma mensagem", + + // "info.feedback.page-label": "Page", + "info.feedback.page-label": "Página/URL de contexo:", - // "info.feedback.page-label" : "Page", - "info.feedback.page-label" : "Página/URL de contexo:", - - // "info.feedback.page_help" : "The page related to your feedback", - "info.feedback.page_help" : "Esta é a página/URL que contextualiza o seu contacto.", + // "info.feedback.page_help": "The page related to your feedback", + "info.feedback.page_help": "Esta é a página/URL que contextualiza o seu contacto.", // "item.alerts.private": "This item is non-discoverable", "item.alerts.private": "Este item é privado", @@ -3533,11 +3533,11 @@ // "item.page.bitstreams.collapse": "Collapse", "item.page.bitstreams.collapse": "Fechar", - // "item.page.filesection.original.bundle" : "Original bundle", + // "item.page.filesection.original.bundle": "Original bundle", "item.page.filesection.original.bundle": "Principais", - // "item.page.filesection.license.bundle" : "License bundle", - "item.page.filesection.license.bundle" : "Licença", + // "item.page.filesection.license.bundle": "License bundle", + "item.page.filesection.license.bundle": "Licença", // "item.page.return": "Back", "item.page.return": "Voltar", @@ -3581,35 +3581,35 @@ // "item.preview.dc.type": "Type:", "item.preview.dc.type": "Tipo:", - // "item.preview.oaire.citation.issue" : "Issue", - "item.preview.oaire.citation.issue" : "Issue", + // "item.preview.oaire.citation.issue": "Issue", + "item.preview.oaire.citation.issue": "Issue", - // "item.preview.oaire.citation.volume" : "Volume", - "item.preview.oaire.citation.volume" : "Volume", + // "item.preview.oaire.citation.volume": "Volume", + "item.preview.oaire.citation.volume": "Volume", - // "item.preview.dc.relation.issn" : "ISSN", - "item.preview.dc.relation.issn" : "ISSN", + // "item.preview.dc.relation.issn": "ISSN", + "item.preview.dc.relation.issn": "ISSN", - // "item.preview.dc.relation.eissn" : "EISSN", - "item.preview.dc.relation.eissn" : "EISSN", + // "item.preview.dc.relation.eissn": "EISSN", + "item.preview.dc.relation.eissn": "EISSN", - // "item.preview.dc.identifier.isbn" : "ISBN", - "item.preview.dc.identifier.isbn" : "ISBN", + // "item.preview.dc.identifier.isbn": "ISBN", + "item.preview.dc.identifier.isbn": "ISBN", - // "item.preview.dc.identifier.eisbn" : "EISBN", - "item.preview.dc.identifier.eisbn" : "EISBN", + // "item.preview.dc.identifier.eisbn": "EISBN", + "item.preview.dc.identifier.eisbn": "EISBN", - // "item.preview.dc.identifier.tid" : "TID", - "item.preview.dc.identifier.tid" : "TID", + // "item.preview.dc.identifier.tid": "TID", + "item.preview.dc.identifier.tid": "TID", // "item.preview.dc.identifier": "Identifier:", "itemm.preview.dc.identifier": "Identificador:", - // "item.preview.dc.relation.ispartof" : "Journal or Serie", - "item.preview.dc.relation.ispartof" : "Revista ou Série", + // "item.preview.dc.relation.ispartof": "Journal or Serie", + "item.preview.dc.relation.ispartof": "Revista ou Série", - // "item.preview.dc.identifier.doi" : "DOI", - "item.preview.dc.identifier.doi" : "DOI", + // "item.preview.dc.identifier.doi": "DOI", + "item.preview.dc.identifier.doi": "DOI", // "item.preview.person.familyName": "Surname:", "item.preview.person.familyName": "Apelido:", @@ -4475,14 +4475,14 @@ // "nav.stop-impersonating": "Stop impersonating EPerson", "nav.stop-impersonating": "Deixar de assumir o papel do utilizador", - // "nav.subscriptions" : "Subscriptions", - "nav.subscriptions" : "Subscrições de alertas", + // "nav.subscriptions": "Subscriptions", + "nav.subscriptions": "Subscrições de alertas", - // "nav.toggle" : "Toggle navigation", - "nav.toggle" : "Alternar a navegação", + // "nav.toggle": "Toggle navigation", + "nav.toggle": "Alternar a navegação", - // "nav.user.description" : "User profile bar", - "nav.user.description" : "Barra do perfil de utilizador", + // "nav.user.description": "User profile bar", + "nav.user.description": "Barra do perfil de utilizador", // "none.listelement.badge": "Item", "none.listelement.badge": "Item", @@ -4634,16 +4634,16 @@ // "process.new.breadcrumbs": "Create a new process", "process.new.breadcrumbs": "Criar um novo processo", - // "process.detail.arguments" : "Arguments", + // "process.detail.arguments": "Arguments", "process.detail.arguments": "Argumentos", - // "process.detail.arguments.empty" : "This process doesn't contain any arguments", + // "process.detail.arguments.empty": "This process doesn't contain any arguments", "process.detail.arguments.empty": "Este processo não contém argumentos", - // "process.detail.back" : "Back", + // "process.detail.back": "Back", "process.detail.back": "Voltar", - // "process.detail.output" : "Process Output", + // "process.detail.output": "Process Output", "process.detail.output": "Output do Processo", // "process.detail.logs.button": "Retrieve process output", @@ -4655,29 +4655,29 @@ // "process.detail.logs.none": "This process has no output", "process.detail.logs.none": "Este processo não tem output", - // "process.detail.output-files" : "Output Files", + // "process.detail.output-files": "Output Files", "process.detail.output-files": "Ficheiros do Output", - // "process.detail.output-files.empty" : "This process doesn't contain any output files", + // "process.detail.output-files.empty": "This process doesn't contain any output files", "process.detail.output-files.empty": "Este processo não possui nenhum ficheiro de output", - // "process.detail.script" : "Script", + // "process.detail.script": "Script", "process.detail.script": "Script", - // "process.detail.title" : "Process: {{ id }} - {{ name }}", + // "process.detail.title": "Process: {{ id }} - {{ name }}", "process.detail.title": "Processo: {{ id }} - {{ name }}", - // "process.detail.start-time" : "Start time", + // "process.detail.start-time": "Start time", "process.detail.start-time": "Início", - // "process.detail.end-time" : "Finish time", + // "process.detail.end-time": "Finish time", "process.detail.end-time": "Fim", - // "process.detail.status" : "Status", + // "process.detail.status": "Status", "process.detail.status": "Estado", - // "process.detail.create" : "Create similar process", - "process.detail.create" : "Criar processo similar", + // "process.detail.create": "Create similar process", + "process.detail.create": "Criar processo similar", // "process.detail.actions": "Actions", "process.detail.actions": "Ações", @@ -4703,22 +4703,22 @@ // "process.detail.delete.error": "Something went wrong when deleting the process", "process.detail.delete.error": "Ocorreu algum erro ao remover o processo", - // "process.overview.table.finish" : "Finish time (UTC)", - "process.overview.table.finish" : "Hora de término (UTC)", + // "process.overview.table.finish": "Finish time (UTC)", + "process.overview.table.finish": "Hora de término (UTC)", - // "process.overview.table.id" : "Process ID", + // "process.overview.table.id": "Process ID", "process.overview.table.id": "ID do Processo", - // "process.overview.table.name" : "Name", - "process.overview.table.name" : "Nome", + // "process.overview.table.name": "Name", + "process.overview.table.name": "Nome", - // "process.overview.table.start" : "Start time (UTC)", - "process.overview.table.start" : "Hora de início (UTC)", + // "process.overview.table.start": "Start time (UTC)", + "process.overview.table.start": "Hora de início (UTC)", - // "process.overview.table.status" : "Status", + // "process.overview.table.status": "Status", "process.overview.table.status": "Estado", - // "process.overview.table.user" : "User", + // "process.overview.table.user": "User", "process.overview.table.user": "Utilizador", // "process.overview.title": "Processes Overview", @@ -5303,7 +5303,7 @@ // "search.title": "Search", "search.title": "Pesquisa", - // "search.breadcrumbs": "Search", + // "search.breadcrumbs": "Search", "search.breadcrumbs": "Pesquisar", // "search.search-form.placeholder": "Search the repository ...", @@ -5935,8 +5935,8 @@ // "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Import remote author", "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Importar autor remoto", - - // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Import remote journal", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Import remote journal", "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Importar revista remota", // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Import remote journal issue", @@ -6484,9 +6484,9 @@ // "submission.sections.status.warnings.aria": "has warnings", "submission.sections.status.warnings.aria": "tem avisos", - + // "submission.sections.status.info.title": "Additional Information", - "submission.sections.status.info.title": "Informação adicional", + "submission.sections.status.info.title": "Informação adicional", // "submission.sections.status.info.aria": "Additional Information", "submission.sections.status.info.aria": "Informação adicional", @@ -6644,8 +6644,8 @@ // "submission.sections.license.required": "You must accept the license", "submission.sections.license.required": "A aceitação da licença constitui um requisito", - // "submission.sections.license.notgranted": "You must accept the license", - "submission.sections.license.notgranted": "Deve aceitar a licença", + // "submission.sections.license.notgranted": "You must accept the license", + "submission.sections.license.notgranted": "Deve aceitar a licença", // "submission.sections.sherpa.publication.information": "Publication information", "submission.sections.sherpa.publication.information": "Informação sobre a publicação", @@ -7157,8 +7157,8 @@ // "idle-modal.extend-session": "Extend session", "idle-modal.extend-session": "Prolongar sessão", - // "researcher.profile.action.processing" : "Processing...", - "researcher.profile.action.processing" : "A processar...", + // "researcher.profile.action.processing": "Processing...", + "researcher.profile.action.processing": "A processar...", // "researcher.profile.associated": "Researcher profile associated", "researcher.profile.associated": "Perfil do investigador associado", @@ -7190,11 +7190,11 @@ // "researcher.profile.view": "View", "researcher.profile.view": "Ver", - // "researcher.profile.private.visibility" : "PRIVATE", - "researcher.profile.private.visibility" : "PRIVADO", + // "researcher.profile.private.visibility": "PRIVATE", + "researcher.profile.private.visibility": "PRIVADO", - // "researcher.profile.public.visibility" : "PUBLIC", - "researcher.profile.public.visibility" : "PÚBLICO", + // "researcher.profile.public.visibility": "PUBLIC", + "researcher.profile.public.visibility": "PÚBLICO", // "researcher.profile.status": "Status:", "researcher.profile.status": "Estado:", @@ -7202,17 +7202,17 @@ // "researcherprofile.claim.not-authorized": "You are not authorized to claim this item. For more details contact the administrator(s).", "researcherprofile.claim.not-authorized": "Não possui autorização para reinvindicar este artigo. Para mais pormenores, contactar o(s) administrador(es).", - // "researcherprofile.error.claim.body" : "An error occurred while claiming the profile, please try again later", - "researcherprofile.error.claim.body" : "Ocorreu um erro ao reclamar o perfil, por favor tente novamente mais tarde", + // "researcherprofile.error.claim.body": "An error occurred while claiming the profile, please try again later", + "researcherprofile.error.claim.body": "Ocorreu um erro ao reclamar o perfil, por favor tente novamente mais tarde", - // "researcherprofile.error.claim.title" : "Error", - "researcherprofile.error.claim.title" : "Erro", + // "researcherprofile.error.claim.title": "Error", + "researcherprofile.error.claim.title": "Erro", - // "researcherprofile.success.claim.body" : "Profile claimed with success", - "researcherprofile.success.claim.body" : "Perfil reivindicado com sucesso", + // "researcherprofile.success.claim.body": "Profile claimed with success", + "researcherprofile.success.claim.body": "Perfil reivindicado com sucesso", - // "researcherprofile.success.claim.title" : "Success", - "researcherprofile.success.claim.title" : "Sucesso", + // "researcherprofile.success.claim.title": "Success", + "researcherprofile.success.claim.title": "Sucesso", // "person.page.orcid.create": "Create an ORCID iD", "person.page.orcid.create": "Criar um ORCID iD", @@ -7220,8 +7220,8 @@ // "person.page.orcid.granted-authorizations": "Granted authorizations", "person.page.orcid.granted-authorizations": "Autorizações concedidas", - // "person.page.orcid.grant-authorizations" : "Grant authorizations", - "person.page.orcid.grant-authorizations" : "Conceder autorizações", + // "person.page.orcid.grant-authorizations": "Grant authorizations", + "person.page.orcid.grant-authorizations": "Conceder autorizações", // "person.page.orcid.link": "Connect to ORCID iD", "person.page.orcid.link": "Ligar ao ORCID iD", @@ -7268,44 +7268,44 @@ // "person.page.orcid.save.preference.changes": "Update settings", "person.page.orcid.save.preference.changes": "Atualizar configurações", - // "person.page.orcid.sync-profile.affiliation" : "Affiliation", - "person.page.orcid.sync-profile.affiliation" : "Afiliação", + // "person.page.orcid.sync-profile.affiliation": "Affiliation", + "person.page.orcid.sync-profile.affiliation": "Afiliação", - // "person.page.orcid.sync-profile.biographical" : "Biographical data", - "person.page.orcid.sync-profile.biographical" : "Dados biográficos", + // "person.page.orcid.sync-profile.biographical": "Biographical data", + "person.page.orcid.sync-profile.biographical": "Dados biográficos", - // "person.page.orcid.sync-profile.education" : "Education", - "person.page.orcid.sync-profile.education" : "Educação", + // "person.page.orcid.sync-profile.education": "Education", + "person.page.orcid.sync-profile.education": "Educação", - // "person.page.orcid.sync-profile.identifiers" : "Identifiers", - "person.page.orcid.sync-profile.identifiers" : "Identificadores", + // "person.page.orcid.sync-profile.identifiers": "Identifiers", + "person.page.orcid.sync-profile.identifiers": "Identificadores", - // "person.page.orcid.sync-fundings.all" : "All fundings", - "person.page.orcid.sync-fundings.all" : "Todos financiamentos", + // "person.page.orcid.sync-fundings.all": "All fundings", + "person.page.orcid.sync-fundings.all": "Todos financiamentos", - // "person.page.orcid.sync-fundings.mine" : "My fundings", - "person.page.orcid.sync-fundings.mine" : "Meus financiamentos", + // "person.page.orcid.sync-fundings.mine": "My fundings", + "person.page.orcid.sync-fundings.mine": "Meus financiamentos", - // "person.page.orcid.sync-fundings.my_selected" : "Selected fundings", - "person.page.orcid.sync-fundings.my_selected" : "Financiamentos selecionados", + // "person.page.orcid.sync-fundings.my_selected": "Selected fundings", + "person.page.orcid.sync-fundings.my_selected": "Financiamentos selecionados", - // "person.page.orcid.sync-fundings.disabled" : "Disabled", - "person.page.orcid.sync-fundings.disabled" : "Desligado", + // "person.page.orcid.sync-fundings.disabled": "Disabled", + "person.page.orcid.sync-fundings.disabled": "Desligado", - // "person.page.orcid.sync-publications.all" : "All publications", - "person.page.orcid.sync-publications.all" : "Todas as publicações", + // "person.page.orcid.sync-publications.all": "All publications", + "person.page.orcid.sync-publications.all": "Todas as publicações", - // "person.page.orcid.sync-publications.mine" : "My publications", - "person.page.orcid.sync-publications.mine" : "As minhas publicações", + // "person.page.orcid.sync-publications.mine": "My publications", + "person.page.orcid.sync-publications.mine": "As minhas publicações", - // "person.page.orcid.sync-publications.my_selected" : "Selected publications", - "person.page.orcid.sync-publications.my_selected" : "Publicações selecionadas", + // "person.page.orcid.sync-publications.my_selected": "Selected publications", + "person.page.orcid.sync-publications.my_selected": "Publicações selecionadas", - // "person.page.orcid.sync-publications.disabled" : "Disabled", - "person.page.orcid.sync-publications.disabled" : "Desligado", + // "person.page.orcid.sync-publications.disabled": "Disabled", + "person.page.orcid.sync-publications.disabled": "Desligado", - // "person.page.orcid.sync-queue.discard" : "Discard the change and do not synchronize with the ORCID registry", - "person.page.orcid.sync-queue.discard" : "Cancelar a alteração e não sincronizar com o registo ORCID", + // "person.page.orcid.sync-queue.discard": "Discard the change and do not synchronize with the ORCID registry", + "person.page.orcid.sync-queue.discard": "Cancelar a alteração e não sincronizar com o registo ORCID", // "person.page.orcid.sync-queue.discard.error": "The discarding of the ORCID queue record failed", "person.page.orcid.sync-queue.discard.error": "A eliminação do registo da fila do ORCID falhou", @@ -7316,14 +7316,14 @@ // "person.page.orcid.sync-queue.empty-message": "The ORCID queue registry is empty", "person.page.orcid.sync-queue.empty-message": "O registo de filas do ORCID está vazio", - // "person.page.orcid.sync-queue.table.header.type" : "Type", - "person.page.orcid.sync-queue.table.header.type" : "Tipo", + // "person.page.orcid.sync-queue.table.header.type": "Type", + "person.page.orcid.sync-queue.table.header.type": "Tipo", - // "person.page.orcid.sync-queue.table.header.description" : "Description", - "person.page.orcid.sync-queue.table.header.description" : "Descrição", + // "person.page.orcid.sync-queue.table.header.description": "Description", + "person.page.orcid.sync-queue.table.header.description": "Descrição", - // "person.page.orcid.sync-queue.table.header.action" : "Action", - "person.page.orcid.sync-queue.table.header.action" : "Ação", + // "person.page.orcid.sync-queue.table.header.action": "Action", + "person.page.orcid.sync-queue.table.header.action": "Ação", // "person.page.orcid.sync-queue.description.affiliation": "Affiliations", "person.page.orcid.sync-queue.description.affiliation": "Afiliações", @@ -7388,8 +7388,8 @@ // "person.page.orcid.sync-queue.tooltip.researcher_urls": "Researcher url", "person.page.orcid.sync-queue.tooltip.researcher_urls": "URL do investigador", - // "person.page.orcid.sync-queue.send" : "Synchronize with ORCID registry", - "person.page.orcid.sync-queue.send" : "Sincronizar com o registo ORCID", + // "person.page.orcid.sync-queue.send": "Synchronize with ORCID registry", + "person.page.orcid.sync-queue.send": "Sincronizar com o registo ORCID", // "person.page.orcid.sync-queue.send.unauthorized-error.title": "The submission to ORCID failed for missing authorizations.", "person.page.orcid.sync-queue.send.unauthorized-error.title": "A submissão ao ORCID falhou por falta de autorizações.", @@ -7442,8 +7442,8 @@ // "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "The organization's name is required", "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "O nome da organização é obrigatório", - // "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid" : "The publication date must be one year after 1900", - "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid" : "A data de publicação deve ser um ano após 1900", + // "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "The publication date must be one year after 1900", + "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "A data de publicação deve ser um ano após 1900", // "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "The organization to be sent requires an address", "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "A organização a ser enviada requer um endereço", From 6ad0f99ca471ea8735faad179e79206a3fcb91fa Mon Sep 17 00:00:00 2001 From: rsaraivac <122451983+rsaraivac@users.noreply.github.com> Date: Wed, 31 May 2023 20:06:12 +0100 Subject: [PATCH 143/425] Update pt-PT.json5 --- src/assets/i18n/pt-PT.json5 | 2595 +++++++++++++++++------------------ 1 file changed, 1297 insertions(+), 1298 deletions(-) diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index c7b677d597..8dff07a387 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -1,502 +1,502 @@ { // Dspace v7.5 > i18n pt-PT > reviewed 30-05-2023 - + // "401.help": "You're not authorized to access this page. You can use the button below to get back to the home page.", "401.help": "Não está autorizado a aceder a esta página. Pode utilizar o botão em baixo para voltar à página de início.", - + // "401.link.home-page": "Take me to the home page", "401.link.home-page": "Voltar à página de início", - + // "401.unauthorized": "unauthorized", "401.unauthorized": "Não autorizado", - + // "403.help": "You don't have permission to access this page. You can use the button below to get back to the home page.", "403.help": "Não possui permissões para aceder a esta página. Pode utilizar o botão em baixo para voltar à página de início.", - + // "403.link.home-page": "Take me to the home page", "403.link.home-page": "Voltar à página de início", - + // "403.forbidden": "forbidden", "403.forbidden": "Proibido", - + // "500.page-internal-server-error": "Service Unavailable", "500.page-internal-server-error": "Serviço indisponível", - + // "500.help": "The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.", "500.help": "O servidor encontra-se temporariamete indisponível para responder ao seu pedido, devido a processos de manutenção em curso ou capacidade de resposta. Por favor tente mais tarde.", - + // "500.link.home-page": "Take me to the home page", "500.link.home-page": "Voltar à página de início", - + // "404.help": "We can't find the page you're looking for. The page may have been moved or deleted. You can use the button below to get back to the home page. ", "404.help": "Não encontramos a página que procura. A página pode ter sido movida ou eliminada. Pode utilizar o botão em baixo para voltar à página de início. ", - + // "404.link.home-page": "Take me to the home page", "404.link.home-page": "Voltar à página de início", - + // "404.page-not-found": "page not found", "404.page-not-found": "página não encontrada", - + // "error-page.description.401": "unauthorized", "error-page.description.401": "Não autorizado", - + // "error-page.description.403": "forbidden", "error-page.description.403": "Proibido", - + // "error-page.description.500": "Service Unavailable", "error-page.description.500": "Serviço indisponível", - + // "error-page.description.404": "page not found", "error-page.description.404": "página não encontrada", - + // "error-page.orcid.generic-error": "An error occurred during login via ORCID. Make sure you have shared your ORCID account email address with DSpace. If the error persists, contact the administrator", "error-page.orcid.generic-error": "Ocorreu um erro com a sua autenticação via ORCID. Certifique-se que partilhou o seu endereço de email associado à sua conta ORCID com o repositório. Se o erro persistir, por favor contacte o administrador do sistema.", - + // "access-status.embargo.listelement.badge": "Embargo", "access-status.embargo.listelement.badge": "Embargado", - + // "access-status.metadata.only.listelement.badge": "Metadata only", "access-status.metadata.only.listelement.badge": "Apenas Metadados", - + // "access-status.open.access.listelement.badge": "Open Access", "access-status.open.access.listelement.badge": "Acesso Aberto", - + // "access-status.restricted.listelement.badge": "Restricted", "access-status.restricted.listelement.badge": "Acesso Restrito", - + // "access-status.unknown.listelement.badge": "Unknown", "access-status.unknown.listelement.badge": "Desconhecido", - + // "admin.curation-tasks.breadcrumbs": "System curation tasks", "admin.curation-tasks.breadcrumbs": "Tarefas de curadoria", - + // "admin.curation-tasks.title": "System curation tasks", "admin.curation-tasks.title": "Tarefas de curadoria", - + // "admin.curation-tasks.header": "System curation tasks", "admin.curation-tasks.header": "Tarefas de curadoria", - + // "admin.registries.bitstream-formats.breadcrumbs": "Format registry", "admin.registries.bitstream-formats.breadcrumbs": "Registo de formatos", - + // "admin.registries.bitstream-formats.create.breadcrumbs": "Bitstream format", "admin.registries.bitstream-formats.create.breadcrumbs": "Registo de formatos de ficheiro", - + // "admin.registries.bitstream-formats.create.failure.content": "An error occurred while creating the new bitstream format.", "admin.registries.bitstream-formats.create.failure.content": "Ocorreu um erro durante a criação do novo formato de ficheiro.", - + // "admin.registries.bitstream-formats.create.failure.head": "Failure", "admin.registries.bitstream-formats.create.failure.head": "Falha", - + // "admin.registries.bitstream-formats.create.head": "Create Bitstream format", "admin.registries.bitstream-formats.create.head": "Criar formato de ficheiro", - + // "admin.registries.bitstream-formats.create.new": "Add a new bitstream format", "admin.registries.bitstream-formats.create.new": "Adicionar um novo formato de ficheiro", - + // "admin.registries.bitstream-formats.create.success.content": "The new bitstream format was successfully created.", "admin.registries.bitstream-formats.create.success.content": "O novo formato de ficheiro foi criado com sucesso.", - + // "admin.registries.bitstream-formats.create.success.head": "Success", "admin.registries.bitstream-formats.create.success.head": "Sucesso", - + // "admin.registries.bitstream-formats.delete.failure.amount": "Failed to remove {{ amount }} format(s)", "admin.registries.bitstream-formats.delete.failure.amount": "Falha ao remover {{ amount }} formato(s)", - + // "admin.registries.bitstream-formats.delete.failure.head": "Failure", "admin.registries.bitstream-formats.delete.failure.head": "Falha", - + // "admin.registries.bitstream-formats.delete.success.amount": "Successfully removed {{ amount }} format(s)", "admin.registries.bitstream-formats.delete.success.amount": "Removeu {{ amount }} formato(s) com sucesso", - + // "admin.registries.bitstream-formats.delete.success.head": "Success", "admin.registries.bitstream-formats.delete.success.head": "Sucesso", - + // "admin.registries.bitstream-formats.description": "This list of bitstream formats provides information about known formats and their support level.", "admin.registries.bitstream-formats.description": "Esta lista de formatos de ficheiro apresenta informações sobre formatos conhecidos e os seus níveis de suporte.", - + // "admin.registries.bitstream-formats.edit.breadcrumbs": "Bitstream format", "admin.registries.bitstream-formats.edit.breadcrumbs": "Formatos de ficheiro", - + // "admin.registries.bitstream-formats.edit.description.hint": "", "admin.registries.bitstream-formats.edit.description.hint": "", - + // "admin.registries.bitstream-formats.edit.description.label": "Description", "admin.registries.bitstream-formats.edit.description.label": "Descrição", - + // "admin.registries.bitstream-formats.edit.extensions.hint": "Extensions are file extensions that are used to automatically identify the format of uploaded files. You can enter several extensions for each format.", "admin.registries.bitstream-formats.edit.extensions.hint": "Extensões são extensões de ficheiro que são usadas para identificar automaticamente o formato dos ficheiros enviados. Pode informar várias extensões para cada formato.", - + // "admin.registries.bitstream-formats.edit.extensions.label": "File extensions", "admin.registries.bitstream-formats.edit.extensions.label": "Extensões de ficheiro", - + // "admin.registries.bitstream-formats.edit.extensions.placeholder": "Enter a file extension without the dot", "admin.registries.bitstream-formats.edit.extensions.placeholder": "Indique uma extenção de ficheiro sem o ponto", - + // "admin.registries.bitstream-formats.edit.failure.content": "An error occurred while editing the bitstream format.", "admin.registries.bitstream-formats.edit.failure.content": "Ocorreu um erro ao editar o formato de bitstream.", - + // "admin.registries.bitstream-formats.edit.failure.head": "Failure", "admin.registries.bitstream-formats.edit.failure.head": "Falha", - + // "admin.registries.bitstream-formats.edit.head": "Bitstream format: {{ format }}", "admin.registries.bitstream-formats.edit.head": "Formato de bitstream: {{ format }}", - + // "admin.registries.bitstream-formats.edit.internal.hint": "Formats marked as internal are hidden from the user, and used for administrative purposes.", "admin.registries.bitstream-formats.edit.internal.hint": "Formatos marcados como internos são ocultos para o utilizador, usados por motivos administrativos.", - + // "admin.registries.bitstream-formats.edit.internal.label": "Internal", "admin.registries.bitstream-formats.edit.internal.label": "Interno", - + // "admin.registries.bitstream-formats.edit.mimetype.hint": "The MIME type associated with this format, does not have to be unique.", "admin.registries.bitstream-formats.edit.mimetype.hint": "O MIME type associado a este formato não tem que ser único.", - + // "admin.registries.bitstream-formats.edit.mimetype.label": "MIME Type", "admin.registries.bitstream-formats.edit.mimetype.label": "MIME Type", - + // "admin.registries.bitstream-formats.edit.shortDescription.hint": "A unique name for this format, (e.g. Microsoft Word XP or Microsoft Word 2000)", "admin.registries.bitstream-formats.edit.shortDescription.hint": "Um nome único para este formato (exemplo. Microsoft Word XP ou Microsoft Word 2000)", - + // "admin.registries.bitstream-formats.edit.shortDescription.label": "Name", "admin.registries.bitstream-formats.edit.shortDescription.label": "Nome", - + // "admin.registries.bitstream-formats.edit.success.content": "The bitstream format was successfully edited.", "admin.registries.bitstream-formats.edit.success.content": "O formato de bitstream foi editado com sucesso.", - + // "admin.registries.bitstream-formats.edit.success.head": "Success", "admin.registries.bitstream-formats.edit.success.head": "Sucesso", - + // "admin.registries.bitstream-formats.edit.supportLevel.hint": "The level of support your institution pledges for this format.", "admin.registries.bitstream-formats.edit.supportLevel.hint": "O nível de suporte que a sua instituição promete para este formato.", - + // "admin.registries.bitstream-formats.edit.supportLevel.label": "Support level", "admin.registries.bitstream-formats.edit.supportLevel.label": "Nível de suporte", - + // "admin.registries.bitstream-formats.head": "Bitstream Format Registry", "admin.registries.bitstream-formats.head": "Registo de formatos de ficheiros", - + // "admin.registries.bitstream-formats.no-items": "No bitstream formats to show.", "admin.registries.bitstream-formats.no-items": "Nenhum formato de bitstream para exibir.", - + // "admin.registries.bitstream-formats.table.delete": "Delete selected", "admin.registries.bitstream-formats.table.delete": "Apagar selecionado(s)", - + // "admin.registries.bitstream-formats.table.deselect-all": "Deselect all", "admin.registries.bitstream-formats.table.deselect-all": "Desselecionar todos", - + // "admin.registries.bitstream-formats.table.internal": "internal", "admin.registries.bitstream-formats.table.internal": "Interno", - + // "admin.registries.bitstream-formats.table.mimetype": "MIME Type", "admin.registries.bitstream-formats.table.mimetype": "MIME Type", - + // "admin.registries.bitstream-formats.table.name": "Name", "admin.registries.bitstream-formats.table.name": "Nome", - + // "admin.registries.bitstream-formats.table.id": "ID", "admin.registries.bitstream-formats.table.id": "ID", - + // "admin.registries.bitstream-formats.table.return": "Back", "admin.registries.bitstream-formats.table.return": "Voltar", - + // "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Known", "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Conhecido", - + // "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Supported", "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Suportado", - + // "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Unknown", "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Desconhecido", - + // "admin.registries.bitstream-formats.table.supportLevel.head": "Support Level", "admin.registries.bitstream-formats.table.supportLevel.head": "Nível de suporte", - + // "admin.registries.bitstream-formats.title": "Bitstream Format Registry", "admin.registries.bitstream-formats.title": "Registo de formatos de ficheiro", - + // "admin.registries.metadata.breadcrumbs": "Metadata registry", "admin.registries.metadata.breadcrumbs": "Registo de metadados", - + // "admin.registries.metadata.description": "The metadata registry maintains a list of all metadata fields available in the repository. These fields may be divided amongst multiple schemas. However, DSpace requires the qualified Dublin Core schema.", "admin.registries.metadata.description": "O registo de metadados mantém a lista de todos os campos de metadados disponíveis no repositório. Estes campos podem ser divididos em multiplos esquemas. No entanto, o DSpace requer esquemas de Dublin Core qualificados.", - + // "admin.registries.metadata.form.create": "Create metadata schema", "admin.registries.metadata.form.create": "Criar esquema de metadados", - + // "admin.registries.metadata.form.edit": "Edit metadata schema", "admin.registries.metadata.form.edit": "Editar esquema de metadados", - + // "admin.registries.metadata.form.name": "Name", "admin.registries.metadata.form.name": "Nome", - + // "admin.registries.metadata.form.namespace": "Namespace", "admin.registries.metadata.form.namespace": "Namespace", - + // "admin.registries.metadata.head": "Metadata Registry", "admin.registries.metadata.head": "Registo de metadados", - + // "admin.registries.metadata.schemas.no-items": "No metadata schemas to show.", "admin.registries.metadata.schemas.no-items": "Nenhum esquema de metadados para mostrar.", - + // "admin.registries.metadata.schemas.table.delete": "Delete selected", "admin.registries.metadata.schemas.table.delete": "Apagar selecionado(s)", - + // "admin.registries.metadata.schemas.table.id": "ID", "admin.registries.metadata.schemas.table.id": "ID", - + // "admin.registries.metadata.schemas.table.name": "Name", "admin.registries.metadata.schemas.table.name": "Nome", - + // "admin.registries.metadata.schemas.table.namespace": "Namespace", "admin.registries.metadata.schemas.table.namespace": "Namespace", - + // "admin.registries.metadata.title": "Metadata Registry", "admin.registries.metadata.title": "Registo de metadados", - + // "admin.registries.schema.breadcrumbs": "Metadata schema", "admin.registries.schema.breadcrumbs": "Esquema de metadados", - + // "admin.registries.schema.description": "This is the metadata schema for \"{{namespace}}\".", "admin.registries.schema.description": "Este é o esquema de metadados para \"{{namespace}}\".", - + // "admin.registries.schema.fields.head": "Schema metadata fields", "admin.registries.schema.fields.head": "Campos do esquema de metadados", - + // "admin.registries.schema.fields.no-items": "No metadata fields to show.", "admin.registries.schema.fields.no-items": "Nenhum campo de metadado para exibir.", - + // "admin.registries.schema.fields.table.delete": "Delete selected", "admin.registries.schema.fields.table.delete": "Apagar selecionado(s)", - + // "admin.registries.schema.fields.table.field": "Field", "admin.registries.schema.fields.table.field": "Campo", - + // "admin.registries.schema.fields.table.id": "ID", "admin.registries.schema.fields.table.id": "ID", - + // "admin.registries.schema.fields.table.scopenote": "Scope Note", "admin.registries.schema.fields.table.scopenote": "Descrição", - + // "admin.registries.schema.form.create": "Create metadata field", "admin.registries.schema.form.create": "Criar elemento de metadados", - + // "admin.registries.schema.form.edit": "Edit metadata field", "admin.registries.schema.form.edit": "Editar campo de metadados", - + // "admin.registries.schema.form.element": "Element", "admin.registries.schema.form.element": "Elemento", - + // "admin.registries.schema.form.qualifier": "Qualifier", "admin.registries.schema.form.qualifier": "Qualificador", - + // "admin.registries.schema.form.scopenote": "Scope Note", "admin.registries.schema.form.scopenote": "Nota de âmbito", - + // "admin.registries.schema.head": "Metadata Schema", "admin.registries.schema.head": "Esquema de metadados", - + // "admin.registries.schema.notification.created": "Successfully created metadata schema \"{{prefix}}\"", "admin.registries.schema.notification.created": "Criou o esquema de metadados \"{{prefix}}\" com sucesso", - + // "admin.registries.schema.notification.deleted.failure": "Failed to delete {{amount}} metadata schemas", "admin.registries.schema.notification.deleted.failure": "Falhou ao apagar {{amount}} esquema(s) de metadados", - + // "admin.registries.schema.notification.deleted.success": "Successfully deleted {{amount}} metadata schemas", "admin.registries.schema.notification.deleted.success": "Apagou {{amount}} esquema(s) de metadados com sucesso", - + // "admin.registries.schema.notification.edited": "Successfully edited metadata schema \"{{prefix}}\"", "admin.registries.schema.notification.edited": "Editou o esquema de metadados \"{{prefix}}\" com sucesso", - + // "admin.registries.schema.notification.failure": "Error", "admin.registries.schema.notification.failure": "Erro", - + // "admin.registries.schema.notification.field.created": "Successfully created metadata field \"{{field}}\"", "admin.registries.schema.notification.field.created": "Criou o campo de metadado \"{{field}}\" com sucesso", - + // "admin.registries.schema.notification.field.deleted.failure": "Failed to delete {{amount}} metadata fields", "admin.registries.schema.notification.field.deleted.failure": "Falhou ao apagar {{amount}} campo(s) de metadados", - + // "admin.registries.schema.notification.field.deleted.success": "Successfully deleted {{amount}} metadata fields", "admin.registries.schema.notification.field.deleted.success": "Apagou {{amount}} campo(s) de metadados com sucesso", - + // "admin.registries.schema.notification.field.edited": "Successfully edited metadata field \"{{field}}\"", "admin.registries.schema.notification.field.edited": "Editou o campo de metadado \"{{field}}\" com sucesso", - + // "admin.registries.schema.notification.success": "Success", "admin.registries.schema.notification.success": "Sucesso", - + // "admin.registries.schema.return": "Back", "admin.registries.schema.return": "Voltar", - + // "admin.registries.schema.title": "Metadata Schema Registry", "admin.registries.schema.title": "Registo de esquemas de metadados", - + // "admin.access-control.epeople.actions.delete": "Delete EPerson", "admin.access-control.epeople.actions.delete": "Apagar utilizador", - + // "admin.access-control.epeople.actions.impersonate": "Impersonate EPerson", "admin.access-control.epeople.actions.impersonate": "Assumir o papel do Utilizador", - + // "admin.access-control.epeople.actions.reset": "Reset password", "admin.access-control.epeople.actions.reset": "Redefinir password", - + // "admin.access-control.epeople.actions.stop-impersonating": "Stop impersonating EPerson", "admin.access-control.epeople.actions.stop-impersonating": "Deixar de assumir o papel do utilizador", - + // "admin.access-control.epeople.breadcrumbs": "EPeople", "admin.access-control.epeople.breadcrumbs": "Utilizadores", - + // "admin.access-control.epeople.title": "EPeople", "admin.access-control.epeople.title": "Utilizadores", - + // "admin.access-control.epeople.head": "EPeople", "admin.access-control.epeople.head": "Utilizadores", - + // "admin.access-control.epeople.search.head": "Search", "admin.access-control.epeople.search.head": "Pesquisar", - + // "admin.access-control.epeople.button.see-all": "Browse All", "admin.access-control.epeople.button.see-all": "Pesquisar tudo", - + // "admin.access-control.epeople.search.scope.metadata": "Metadata", "admin.access-control.epeople.search.scope.metadata": "Metadados", - + // "admin.access-control.epeople.search.scope.email": "E-mail (exact)", "admin.access-control.epeople.search.scope.email": "Email (exato)", - + // "admin.access-control.epeople.search.button": "Search", "admin.access-control.epeople.search.button": "Pesquisar", - + // "admin.access-control.epeople.search.placeholder": "Search people...", "admin.access-control.epeople.search.placeholder": "Pesquisar utilizadores...", - - // "admin.access-control.epeople.button.add": "Add EPerson", + + // "admin.access-control.epeople.button.add": "Add EPerson", "admin.access-control.epeople.button.add": "Adicionar utilizador", - + // "admin.access-control.epeople.table.id": "ID", "admin.access-control.epeople.table.id": "ID", - + // "admin.access-control.epeople.table.name": "Name", "admin.access-control.epeople.table.name": "Nome", - + // "admin.access-control.epeople.table.email": "E-mail (exact)", "admin.access-control.epeople.table.email": "Email (exato)", - + // "admin.access-control.epeople.table.edit": "Edit", "admin.access-control.epeople.table.edit": "Editar", - + // "admin.access-control.epeople.table.edit.buttons.edit": "Edit \"{{name}}\"", "admin.access-control.epeople.table.edit.buttons.edit": "Editar \"{{name}}\"", - + // "admin.access-control.epeople.table.edit.buttons.edit-disabled": "You are not authorized to edit this group", "admin.access-control.epeople.table.edit.buttons.edit-disabled": "Não possui autorização para editar este grupo", - + // "admin.access-control.epeople.table.edit.buttons.remove": "Delete \"{{name}}\"", "admin.access-control.epeople.table.edit.buttons.remove": "Apagar \"{{name}}\"", - + // "admin.access-control.epeople.no-items": "No EPeople to show.", "admin.access-control.epeople.no-items": "Sem utilizadores para mostrar.", - + // "admin.access-control.epeople.form.create": "Create EPerson", "admin.access-control.epeople.form.create": "Criar utilizador", - + // "admin.access-control.epeople.form.edit": "Edit EPerson", "admin.access-control.epeople.form.edit": "Editar utilizador", - + // "admin.access-control.epeople.form.firstName": "First name", "admin.access-control.epeople.form.firstName": "Nome", - + // "admin.access-control.epeople.form.lastName": "Last name", "admin.access-control.epeople.form.lastName": "Apelido", - + // "admin.access-control.epeople.form.email": "E-mail", "admin.access-control.epeople.form.email": "Email", - + // "admin.access-control.epeople.form.emailHint": "Must be valid e-mail address", "admin.access-control.epeople.form.emailHint": "Deve conter um email válido", - + // "admin.access-control.epeople.form.canLogIn": "Can log in", "admin.access-control.epeople.form.canLogIn": "Pode iniciar sessão", - + // "admin.access-control.epeople.form.requireCertificate": "Requires certificate", "admin.access-control.epeople.form.requireCertificate": "Requer certificado", - + // "admin.access-control.epeople.form.return": "Back", "admin.access-control.epeople.form.return": "Voltar", - + // "admin.access-control.epeople.form.notification.created.success": "Successfully created EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.created.success": "Utilizador criado com sucesso \"{{name}}\"", - + // "admin.access-control.epeople.form.notification.created.failure": "Failed to create EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.created.failure": "Falha ao criar o Utilizador \"{{name}}\"", - + // "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Failed to create EPerson \"{{name}}\", email \"{{email}}\" already in use.", "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Falha ao criar o Utilizador \"{{name}}\", o email \"{{email}}\" já está registado no repositório.", - + // "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Failed to edit EPerson \"{{name}}\", email \"{{email}}\" already in use.", "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Falha ao editar o Utilizador \"{{name}}\", o email \"{{email}}\" já está registado no repositório.", - + // "admin.access-control.epeople.form.notification.edited.success": "Successfully edited EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.edited.success": "Utilizador editado com successo \"{{name}}\"", - + // "admin.access-control.epeople.form.notification.edited.failure": "Failed to edit EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.edited.failure": "Falha ao editor Utilizador \"{{name}}\"", - + // "admin.access-control.epeople.form.notification.deleted.success": "Successfully deleted EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.deleted.success": "Utilizador removido com sucesso \"{{name}}\"", - + // "admin.access-control.epeople.form.notification.deleted.failure": "Failed to delete EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.deleted.failure": "Falha ao remover o utilizador \"{{name}}\"", - + // "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Member of these groups:", "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Membro dos grupos:", - + // "admin.access-control.epeople.form.table.id": "ID", "admin.access-control.epeople.form.table.id": "ID", - + // "admin.access-control.epeople.form.table.name": "Name", "admin.access-control.epeople.form.table.name": "Nome", - + // "admin.access-control.epeople.form.table.collectionOrCommunity": "Collection/Community", "admin.access-control.epeople.form.table.collectionOrCommunity": "Coleção/Comunidade", - + // "admin.access-control.epeople.form.memberOfNoGroups": "This EPerson is not a member of any groups", "admin.access-control.epeople.form.memberOfNoGroups": "Este utilizador não é membro de nenhum grupo", - + // "admin.access-control.epeople.form.goToGroups": "Add to groups", "admin.access-control.epeople.form.goToGroups": "Adicionar a grupos", - + // "admin.access-control.epeople.notification.deleted.failure": "Failed to delete EPerson: \"{{name}}\"", "admin.access-control.epeople.notification.deleted.failure": "Falha ao apagar utilizador: \"{{name}}\"", - + // "admin.access-control.epeople.notification.deleted.success": "Successfully deleted EPerson: \"{{name}}\"", "admin.access-control.epeople.notification.deleted.success": "Utilizador removido com sucesso: \"{{name}}\"", - + // "admin.access-control.groups.title": "Groups", "admin.access-control.groups.title": "Grupos", - + // "admin.access-control.groups.breadcrumbs": "Groups", "admin.access-control.groups.breadcrumbs": "Grupos", - + // "admin.access-control.groups.singleGroup.breadcrumbs": "Edit Group", "admin.access-control.groups.singleGroup.breadcrumbs": "Editar grupo", - + // "admin.access-control.groups.title.singleGroup": "Edit Group", "admin.access-control.groups.title.singleGroup": "Editar grupo", - + // "admin.access-control.groups.title.addGroup": "New Group", "admin.access-control.groups.title.addGroup": "Novo grupo", - + // "admin.access-control.groups.addGroup.breadcrumbs": "New Group", "admin.access-control.groups.addGroup.breadcrumbs": "Novo grupo", - + // "admin.access-control.groups.head": "Groups", "admin.access-control.groups.head": "Grupos", - + // "admin.access-control.groups.button.add": "Add group", "admin.access-control.groups.button.add": "Adicionar grupo", - + // "admin.access-control.groups.search.head": "Search groups", "admin.access-control.groups.search.head": "Pesquisar grupos", @@ -505,7 +505,7 @@ // "admin.access-control.groups.search.button": "Search", "admin.access-control.groups.search.button": "Pesquisar", - + // "admin.access-control.groups.search.placeholder": "Search groups...", "admin.access-control.groups.search.placeholder": "Pesquisar grupos...", @@ -517,7 +517,7 @@ // "admin.access-control.groups.table.collectionOrCommunity": "Collection/Community", "admin.access-control.groups.table.collectionOrCommunity": "Coleção/Comunidade", - + // "admin.access-control.groups.table.members": "Members", "admin.access-control.groups.table.members": "Membros", @@ -535,19 +535,19 @@ // "admin.access-control.groups.notification.deleted.success": "Successfully deleted group \"{{name}}\"", "admin.access-control.groups.notification.deleted.success": "Grupo removido com sucesso \"{{name}}\"", - + // "admin.access-control.groups.notification.deleted.failure.title": "Failed to delete group \"{{name}}\"", - "admin.access-control.groups.notification.deleted.failure.title": "Falha ao remover grupo \"{{name}}\"", - + "admin.access-control.groups.notification.deleted.failure.title": "Falha ao remover grupo \"{{name}}\"", + // "admin.access-control.groups.notification.deleted.failure.content": "Cause: \"{{cause}}\"", "admin.access-control.groups.notification.deleted.failure.content": "Causa: \"{{cause}}\"", - + // "admin.access-control.groups.form.alert.permanent": "This group is permanent, so it can't be edited or deleted. You can still add and remove group members using this page.", "admin.access-control.groups.form.alert.permanent": "Este grupo é permanente, não pode ser editado ou apagado. Pode adicionar ou remover membros deste grupo nesta página.", - + // "admin.access-control.groups.form.alert.workflowGroup": "This group can’t be modified or deleted because it corresponds to a role in the submission and workflow process in the \"{{name}}\" {{comcol}}. You can delete it from the \"assign roles\" tab on the edit {{comcol}} page. You can still add and remove group members using this page.", "admin.access-control.groups.form.alert.workflowGroup": "Este grupo não pode ser editado ou apagado porque corresponde a um papel no 'workflow' de depósito em \"{{name}}\" {{comcol}}. Pode apagá-lo na aba \"Atribuir Papéis\" na edição da página {{comcol}}. Pode adicionar ou remover membros nesta página.", - + // "admin.access-control.groups.form.head.create": "Create group", "admin.access-control.groups.form.head.create": "Criar grupo", @@ -556,7 +556,7 @@ // "admin.access-control.groups.form.groupName": "Group name", "admin.access-control.groups.form.groupName": "Nome do grupo", - + // "admin.access-control.groups.form.groupCommunity": "Community or Collection", "admin.access-control.groups.form.groupCommunity": "Comunidade ou Coleção", @@ -610,10 +610,10 @@ // "admin.access-control.groups.form.members-list.search.head": "Add EPeople", "admin.access-control.groups.form.members-list.search.head": "Adicionar utilizador", - + // "admin.access-control.groups.form.members-list.button.see-all": "Browse All", "admin.access-control.groups.form.members-list.button.see-all": "Percorrer todos", - + // "admin.access-control.groups.form.members-list.headMembers": "Current Members", "admin.access-control.groups.form.members-list.headMembers": "Membros atuais", @@ -622,7 +622,7 @@ // "admin.access-control.groups.form.members-list.search.scope.email": "E-mail (exact)", "admin.access-control.groups.form.members-list.search.scope.email": "E-mail (completo)", - + // "admin.access-control.groups.form.members-list.search.button": "Search", "admin.access-control.groups.form.members-list.search.button": "Pesquisar", @@ -640,7 +640,7 @@ // "admin.access-control.groups.form.members-list.table.netid": "NetID", "admin.access-control.groups.form.members-list.table.netid": "NetID", - + // "admin.access-control.groups.form.members-list.table.edit": "Remove / Add", "admin.access-control.groups.form.members-list.table.edit": "Remover / Adicionar", @@ -655,10 +655,10 @@ // "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Successfully deleted member: \"{{name}}\"", "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Membro removido com sucesso: \"{{name}}\"", - + // "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Failed to delete member: \"{{name}}\"", "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Falha ao remover o membro: \"{{name}}\"", - + // "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Add member with name \"{{name}}\"", "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Adicionar membro com o nome \"{{name}}\"", @@ -682,7 +682,7 @@ // "admin.access-control.groups.form.subgroups-list.button.see-all": "Browse All", "admin.access-control.groups.form.subgroups-list.button.see-all": "Percorrer todos", - + // "admin.access-control.groups.form.subgroups-list.headSubgroups": "Current Subgroups", "admin.access-control.groups.form.subgroups-list.headSubgroups": "Subgrupos atuais", @@ -694,7 +694,7 @@ // "admin.access-control.groups.form.subgroups-list.table.name": "Name", "admin.access-control.groups.form.subgroups-list.table.name": "Nome", - + // "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Collection/Community", "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Coleção/Comunidade", @@ -718,10 +718,10 @@ // "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Successfully deleted subgroup: \"{{name}}\"", "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Subgrupo removido com sucesso: \"{{name}}\"", - + // "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Failed to delete subgroup: \"{{name}}\"", "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Falha ao remover o subgrupo: \"{{name}}\"", - + // "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "Sem grupo ativo, indique um nome primeiro.", @@ -733,20 +733,20 @@ // "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "No subgroups in group yet.", "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "Este grupo ainda não tem subgrupos.", - + // "admin.access-control.groups.form.return": "Back", "admin.access-control.groups.form.return": "Voltar", - + // "admin.access-control.groups.form.tooltip.editGroupPage": "On this page, you can modify the properties and members of a group. In the top section, you can edit the group name and description, unless this is an admin group for a collection or community, in which case the group name and description are auto-generated and cannot be edited. In the following sections, you can edit group membership. See [the wiki](https://wiki.lyrasis.org/display/DSDOC7x/Create+or+manage+a+user+group) for more details.", "admin.access-control.groups.form.tooltip.editGroupPage": "Nesta página, pode modificar as propriedades e os membros de um grupo. Na secção superior, pode editar o nome e a descrição do grupo, a menos que se trate de um grupo administrativo para uma coleção ou comunidade, em que o nome e a descrição do grupo são auto-gerados e não podem ser editados. Nas seções seguintes, pode editar o nome e a descrição do grupo. Ver [wiki](https://wiki.lyrasis.org/display/DSDOC7x/Create+ou+gerir+a+utilizador+grupo) para mais detalhes.", // "admin.access-control.groups.form.tooltip.editGroup.addEpeople": "To add or remove an EPerson to/from this group, either click the 'Browse All' button or use the search bar below to search for users (use the dropdown to the left of the search bar to choose whether to search by metadata or by email). Then click the plus icon for each user you wish to add in the list below, or the trash can icon for each user you wish to remove. The list below may have several pages: use the page controls below the list to navigate to the next pages. Once you are ready, save your changes by clicking the 'Save' button in the top section.", "admin.access-control.groups.form.tooltip.editGroup.addEpeople": "Para adicionar ou remover um utilizador de/para este grupo, clique no botão 'Procurar tudo' ou use a barra de pesquisa em baixo para procurar utilizadores (use o menu suspenso, à esquerda da barra de pesquisa, para escolher se pretende pesquisar por metadados ou por e-mail). Depois clique no ícone 'mais' para cada utilizador que deseja adicionar na lista em baixo, ou no ícone 'lixo' para cada utilizador que deseja remover. A lista pode conter várias páginas: utilize os controlos no final da lista para navegar para as páginas seguintes. Quando estiver pronto, guarde as suas alterações clicando no botão 'Guardar' na seção superior.", - + // "admin.access-control.groups.form.tooltip.editGroup.addSubgroups": "To add or remove a Subgroup to/from this group, either click the 'Browse All' button or use the search bar below to search for users. Then click the plus icon for each user you wish to add in the list below, or the trash can icon for each user you wish to remove. The list below may have several pages: use the page controls below the list to navigate to the next pages. Once you are ready, save your changes by clicking the 'Save' button in the top section.", "admin.access-control.groups.form.tooltip.editGroup.addSubgroups": "Para adicionar ou remover um sub-grupo de/para grupo, clique no botão 'Procurar Tudo' ou use a barra de pesquisa em baixo para procurar utilizadores. Depois clique no ícone 'mais' para cada utilizador que deseja adicionar lista em baixo, ou no ícone 'lixo' para cada utilizador que deseja remover. A lista pode conter várias páginas: utilize os controlos de página no final da lista para navegar para as páginas seguintes. Quando estiver pronto, guarde as suas alterações clicando no botão 'Guardar' na seção superior.", - // "admin.search.breadcrumbs": "Administrative Search", + // "admin.search.breadcrumbs": "Administrative Search", "admin.search.breadcrumbs": "Pesquisa administrativa", // "admin.search.collection.edit": "Edit", @@ -760,13 +760,13 @@ // "admin.search.item.edit": "Edit", "admin.search.item.edit": "Editar", - + // "admin.search.item.make-private": "Make non-discoverable", "admin.search.item.make-private": "Tornar privado", - + // "admin.search.item.make-public": "Make discoverable", "admin.search.item.make-public": "Tornar público", - + // "admin.search.item.move": "Move", "admin.search.item.move": "Mover", @@ -781,64 +781,64 @@ // "administrativeView.search.results.head": "Administrative Search", "administrativeView.search.results.head": "Pesquisa administrativa", - + // "admin.workflow.breadcrumbs": "Administer Workflow", "admin.workflow.breadcrumbs": "Gestão do workflow", - + // "admin.workflow.title": "Administer Workflow", "admin.workflow.title": "Gestão do workflow", - + // "admin.workflow.item.workflow": "Workflow", "admin.workflow.item.workflow": "Workflow", - + // "admin.workflow.item.workspace": "Workspace", "admin.workflow.item.workspace": "Área de trabalho", - + // "admin.workflow.item.delete": "Delete", - "admin.workflow.item.delete": "Apagar", - + "admin.workflow.item.delete": "Apagar", + // "admin.workflow.item.send-back": "Send back", "admin.workflow.item.send-back": "Devolver", - + // "admin.workflow.item.policies": "Policies", "admin.workflow.item.policies": "Políticas", - + // "admin.workflow.item.supervision": "Supervision", - "admin.workflow.item.supervision": "Supervisão", + "admin.workflow.item.supervision": "Supervisão", // "admin.metadata-import.breadcrumbs": "Import Metadata", "admin.metadata-import.breadcrumbs": "Importação de metadados", - + // "admin.batch-import.breadcrumbs": "Import Batch", "admin.batch-import.breadcrumbs": "Importação em lote (batch)", - + // "admin.metadata-import.title": "Import Metadata", "admin.metadata-import.title": "Importação de metadados", - + // "admin.batch-import.title": "Import Batch", "admin.batch-import.title": "Importação em lote (batch)", - + // "admin.metadata-import.page.header": "Import Metadata", "admin.metadata-import.page.header": "Importação de metadados", - + // "admin.batch-import.page.header": "Import Batch", "admin.batch-import.page.header": "Importação em lote (batch)", - + // "admin.metadata-import.page.help": "You can drop or browse CSV files that contain batch metadata operations on files here", "admin.metadata-import.page.help": "Pode arrastar ou procurar ficheiros .csv que contenham operações em lote de metadados", // "admin.batch-import.page.help": "Select the Collection to import into. Then, drop or browse to a Simple Archive Format (SAF) zip file that includes the Items to import", - "admin.batch-import.page.help": "Selecione a coleção para a qual pretende importar. Em seguida, largue ou selecione ficheiro .zip em formato Simple Archive Format (SAF) que inclua os itens a importar.", - + "admin.batch-import.page.help": "Selecione a coleção para a qual pretende importar. Em seguida, largue ou selecione ficheiro .zip em formato Simple Archive Format (SAF) que inclua os itens a importar.", + // "admin.metadata-import.page.dropMsg": "Drop a metadata CSV to import", "admin.metadata-import.page.dropMsg": "Arraste ficheiro .csv para importar metadados", - + // "admin.batch-import.page.dropMsg": "Drop a batch ZIP to import", "admin.batch-import.page.dropMsg": "Arraste ficheiro .zip para importação em lote", - + // "admin.metadata-import.page.dropMsgReplace": "Drop to replace the metadata CSV to import", "admin.metadata-import.page.dropMsgReplace": "Arraste ficheiro .csv para substituir metadados a importar", - + // "admin.batch-import.page.dropMsgReplace": "Drop to replace the batch ZIP to import", "admin.batch-import.page.dropMsgReplace": "Arraste ficheiro .zip para substituir importação em lote", @@ -847,13 +847,13 @@ // "admin.metadata-import.page.button.proceed": "Proceed", "admin.metadata-import.page.button.proceed": "Continuar", - + // "admin.metadata-import.page.button.select-collection": "Select Collection", "admin.metadata-import.page.button.select-collection": "Selecione a coleção", - + // "admin.metadata-import.page.error.addFile": "Select file first!", "admin.metadata-import.page.error.addFile": "Selecione um ficheiro!", - + // "admin.batch-import.page.error.addFile": "Select Zip file first!", "admin.batch-import.page.error.addFile": "Selecione primeiro o ficheiro .zip!", @@ -862,7 +862,7 @@ // "admin.metadata-import.page.validateOnly.hint": "When selected, the uploaded CSV will be validated. You will receive a report of detected changes, but no changes will be saved.", "admin.metadata-import.page.validateOnly.hint": "Quando selecionado, o ficheiro .csv carregado será validado. Irá receber um relatório com as alterações detetadas, porém nenhuma será guardada.", - + // "advanced-workflow-action.rating.form.rating.label": "Rating", "advanced-workflow-action.rating.form.rating.label": "Classificação", @@ -916,7 +916,7 @@ // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity": "Identity", "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity": "Identidade", - + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "Email", "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "Email", @@ -928,7 +928,7 @@ // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove": "Remove member with name \"{{name}}\"", "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove": "Remover membro com o nome \"{{name}}\"", - + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember": "Successfully added member: \"{{name}}\"", "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember": "Membro adicionado com sucessso: \"{{name}}\"", @@ -942,7 +942,7 @@ "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.deleteMember": "Falha ao remover o membro: \"{{name}}\"", // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Add member with name \"{{name}}\"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Adicionar membro com nome \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Adicionar membro com nome \"{{name}}\"", // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "Atualmente sem grupo ativo, submeter um nome primeiro.", @@ -960,14 +960,14 @@ "admin.batch-import.page.validateOnly.hint": "Quando selecionado, o ficheiro .zip carregado será validado. Irá receber um relatório com as alterações detetadas, porém nenhuma será guardada.", // "admin.batch-import.page.remove": "remove", - "admin.batch-import.page.remove": "Remover", + "admin.batch-import.page.remove": "Remover", // "auth.errors.invalid-user": "Invalid email address or password.", "auth.errors.invalid-user": "Endereço de email ou palavra-chave inválidos.", - + // "auth.messages.expired": "Your session has expired. Please log in again.", "auth.messages.expired": "A sua sessão expirou. Por favor, autentique-se novamente.", - + // "auth.messages.token-refresh-failed": "Refreshing your session token failed. Please log in again.", "auth.messages.token-refresh-failed": "A atualização do token da sua sessão falhou. Por favor, autentique-se novamente.", @@ -976,7 +976,7 @@ // "bitstream.download.page.back": "Back", "bitstream.download.page.back": "Voltar", - + // "bitstream.edit.authorizations.link": "Edit bitstream's Policies", "bitstream.edit.authorizations.link": "Editar políticas dos bitstreams", @@ -984,7 +984,7 @@ "bitstream.edit.authorizations.title": "Editar políticas dos bitstreams", // "bitstream.edit.return": "Back", - "bitstream.edit.return": "Voltar", + "bitstream.edit.return": "Voltar", // "bitstream.edit.bitstream": "Bitstream: ", "bitstream.edit.bitstream": "Ficheiros: ", @@ -1018,21 +1018,21 @@ // "bitstream.edit.form.selectedFormat.hint": "If the format is not in the above list, select \"format not in list\" above and describe it under \"Describe new format\".", "bitstream.edit.form.selectedFormat.hint": "Se o formato não se encontrar listado, selecione por favor a opção \"Formato não está na lista\" e faculte detalhes em \"Descreva o novo formato\".", - + // "bitstream.edit.form.selectedFormat.label": "Selected Format", "bitstream.edit.form.selectedFormat.label": "Formato selecionado", - + // "bitstream.edit.form.selectedFormat.unknown": "Format not in list", "bitstream.edit.form.selectedFormat.unknown": "O formato não está na lista", - + // "bitstream.edit.notifications.error.format.title": "An error occurred saving the bitstream's format", "bitstream.edit.notifications.error.format.title": "Ocorreu um erro ao guardar o formato do ficheiro", // "bitstream.edit.form.iiifLabel.label": "IIIF Label", "bitstream.edit.form.iiifLabel.label": "IIIF Label", - + // "bitstream.edit.form.iiifLabel.hint": "Canvas label for this image. If not provided default label will be used.", - "bitstream.edit.form.iiifLabel.hint": "Etiqueta canvas para esta imagem. Se não for fornecida será utilizada uma etiqueta padrão.", + "bitstream.edit.form.iiifLabel.hint": "Etiqueta canvas para esta imagem. Se não for fornecida será utilizada uma etiqueta padrão.", // "bitstream.edit.form.iiifToc.label": "IIIF Table of Contents", "bitstream.edit.form.iiifToc.label": "Tabela de conteúdos IIIF", @@ -1047,8 +1047,8 @@ "bitstream.edit.form.iiifWidth.hint": "A largura do canvas normalmente deve corresponder à largura da imagem.", // "bitstream.edit.form.iiifHeight.label": "IIIF Canvas Height", - "bitstream.edit.form.iiifHeight.label": "Altura do canvas IIIF", - + "bitstream.edit.form.iiifHeight.label": "Altura do canvas IIIF", + // "bitstream.edit.form.iiifHeight.hint": "The canvas height should usually match the image height.", "bitstream.edit.form.iiifHeight.hint": "A altura do canvas normalmente deve corresponder à altura da imagem.", @@ -1060,7 +1060,7 @@ // "bitstream.edit.title": "Edit bitstream", "bitstream.edit.title": "Editar ficheiro", - + // "bitstream-request-a-copy.alert.canDownload1": "You already have access to this file. If you want to download the file, click ", "bitstream-request-a-copy.alert.canDownload1": "Já tem acesso a este ficheiro. Se quiser descarregar o ficheiro, clique ", @@ -1096,7 +1096,7 @@ // "bitstream-request-a-copy.allfiles.label": "Files", "bitstream-request-a-copy.allfiles.label": "Ficheiro(s) pretendido(s):", - + // "bitstream-request-a-copy.files-all-false.label": "Only the requested file", "bitstream-request-a-copy.files-all-false.label": "Apenas o ficheiro solicitado", @@ -1108,7 +1108,7 @@ // "bitstream-request-a-copy.return": "Back", "bitstream-request-a-copy.return": "Voltar", - + // "bitstream-request-a-copy.submit": "Request copy", "bitstream-request-a-copy.submit": "Solicitar cópia ao autor", @@ -1119,20 +1119,20 @@ "bitstream-request-a-copy.submit.error": "Ocorreu algum erro no envio do pedido de cópia!", // "browse.back.all-results": "All browse results", - "browse.back.all-results": "Todos os resultados", - + "browse.back.all-results": "Todos os resultados", + // "browse.comcol.by.author": "By Author", "browse.comcol.by.author": "Por autor", - + // "browse.comcol.by.dateissued": "By Issue Date", "browse.comcol.by.dateissued": "Por data de publicação", - + // "browse.comcol.by.subject": "By Subject", "browse.comcol.by.subject": "Por assunto", - + // "browse.comcol.by.title": "By Title", "browse.comcol.by.title": "Por título", - + // "browse.comcol.head": "Browse", "browse.comcol.head": "Navegar", @@ -1141,28 +1141,28 @@ // "browse.metadata.author": "Author", "browse.metadata.author": "autor", - + // "browse.metadata.dateissued": "Issue Date", "browse.metadata.dateissued": "data de Publicação", - + // "browse.metadata.subject": "Subject", "browse.metadata.subject": "assunto", - + // "browse.metadata.title": "Title", - "browse.metadata.title": "título", + "browse.metadata.title": "título", // "browse.metadata.author.breadcrumbs": "Browse by Author", "browse.metadata.author.breadcrumbs": "Percorrer por autor", - + // "browse.metadata.dateissued.breadcrumbs": "Browse by Date", "browse.metadata.dateissued.breadcrumbs": "Percorrer por data", - + // "browse.metadata.subject.breadcrumbs": "Browse by Subject", "browse.metadata.subject.breadcrumbs": "Percorrer por assunto", - + // "browse.metadata.title.breadcrumbs": "Browse by Title", "browse.metadata.title.breadcrumbs": "Percorrer por título", - + // "pagination.next.button": "Next", "pagination.next.button": "Próximo", @@ -1171,88 +1171,88 @@ // "pagination.next.button.disabled.tooltip": "No more pages of results", "pagination.next.button.disabled.tooltip": "Sem mais páginas de resultados", - + // "browse.startsWith": ", starting with {{ startsWith }}", "browse.startsWith": ", começado por {{ startsWith }}", - + // "browse.startsWith.choose_start": "(Choose start)", "browse.startsWith.choose_start": "(Escolha o início)", // "browse.startsWith.choose_year": "(Choose year)", "browse.startsWith.choose_year": "(Escolha o ano)", - + // "browse.startsWith.choose_year.label": "Choose the issue year", "browse.startsWith.choose_year.label": "Escolha o ano", // "browse.startsWith.jump": "Filter results by year or month", "browse.startsWith.jump": "Filtrar resultados por ano ou mês", - + // "browse.startsWith.months.april": "April", "browse.startsWith.months.april": "abril", - + // "browse.startsWith.months.august": "August", "browse.startsWith.months.august": "agosto", - + // "browse.startsWith.months.december": "December", "browse.startsWith.months.december": "dezembro", - + // "browse.startsWith.months.february": "February", "browse.startsWith.months.february": "fevereiro", - + // "browse.startsWith.months.january": "January", "browse.startsWith.months.january": "janeiro", - + // "browse.startsWith.months.july": "July", "browse.startsWith.months.july": "julho", - + // "browse.startsWith.months.june": "June", "browse.startsWith.months.june": "junho", - + // "browse.startsWith.months.march": "March", "browse.startsWith.months.march": "março", - + // "browse.startsWith.months.may": "May", "browse.startsWith.months.may": "maio", - + // "browse.startsWith.months.none": "(Choose month)", "browse.startsWith.months.none": "(Escolha o mês)", - + // "browse.startsWith.months.none.label": "Choose the issue month", "browse.startsWith.months.none.label": "Escolha o mês", - + // "browse.startsWith.months.november": "November", "browse.startsWith.months.november": "novembro", - + // "browse.startsWith.months.october": "October", "browse.startsWith.months.october": "outubro", - + // "browse.startsWith.months.september": "September", "browse.startsWith.months.september": "setembro", - + // "browse.startsWith.submit": "Browse", "browse.startsWith.submit": "Pesquisar", - + // "browse.startsWith.type_date": "Filter results by date", "browse.startsWith.type_date": "Filtrar resultados por data", - + // "browse.startsWith.type_date.label": "Or type in a date (year-month) and click on the Browse button", "browse.startsWith.type_date.label": "ou indique uma data (ano-mês):", - + // "browse.startsWith.type_text": "Filter results by typing the first few letters", - "browse.startsWith.type_text": "Filtrar resultados inserindo as primeiras letras", - + "browse.startsWith.type_text": "Filtrar resultados inserindo as primeiras letras", + // "browse.title": "Browsing {{ collection }} by {{ field }}{{ startsWith }} {{ value }}", "browse.title": "Percorrer {{ collection }} por {{ field }}{{ startsWith }} {{ value }}", // "browse.title.page": "Browsing {{ collection }} by {{ field }} {{ value }}", "browse.title.page": "Percorrer {{ collection }} por {{ field }} {{ value }}", - + // "search.browse.item-back": "Back to Results", "search.browse.item-back": "Voltar aos resultados", - + // "chips.remove": "Remove chip", "chips.remove": "Remover chip", - + // "claimed-approved-search-result-list-element.title": "Approved", "claimed-approved-search-result-list-element.title": "Aprovado", @@ -1261,16 +1261,16 @@ // "claimed-declined-task-search-result-list-element.title": "Declined, sent back to Review Manager's workflow", "claimed-declined-task-search-result-list-element.title": "Declinado, reenviado para a área de trabalho do gestor de revisão", - + // "collection.create.head": "Create a Collection", "collection.create.head": "Criar uma coleção", // "collection.create.notifications.success": "Successfully created the Collection", "collection.create.notifications.success": "Coleção criada com sucesso", - + // "collection.create.sub-head": "Create a Collection for Community {{ parent }}", "collection.create.sub-head": "Criar uma coleção na comunidade {{ parent }}", - + // "collection.curate.header": "Curate Collection: {{collection}}", "collection.curate.header": "Curadoria da coleção: {{collection}}", @@ -1279,16 +1279,16 @@ // "collection.delete.confirm": "Confirm", "collection.delete.confirm": "Confirmar", - + // "collection.delete.processing": "Deleting", "collection.delete.processing": "A apagar", - + // "collection.delete.head": "Delete Collection", "collection.delete.head": "Apagar coleção", - + // "collection.delete.notification.fail": "collection could not be deleted", "collection.delete.notification.fail": "Coleção não pode ser apagada", - + // "collection.delete.notification.success": "Successfully deleted collection", "collection.delete.notification.success": "Apagou a coleção com sucesso", @@ -1300,40 +1300,40 @@ // "collection.edit.head": "Edit Collection", "collection.edit.head": "Editar coleção", - + // "collection.edit.breadcrumbs": "Edit Collection", "collection.edit.breadcrumbs": "Editar coleção", - + // "collection.edit.tabs.mapper.head": "Item Mapper", "collection.edit.tabs.mapper.head": "Mapeamentos", - + // "collection.edit.tabs.item-mapper.title": "collection Edit - Item Mapper", "collection.edit.tabs.item-mapper.title": "Editar coleção - mapeamentos", - + // "collection.edit.item-mapper.cancel": "Cancel", "collection.edit.item-mapper.cancel": "Cancelar", - + // "collection.edit.item-mapper.collection": "collection: \"{{name}}\"", "collection.edit.item-mapper.collection": "Coleção: \"{{name}}\"", // "collection.edit.item-mapper.confirm": "Map selected items", "collection.edit.item-mapper.confirm": "Mapear itens selecionados", - + // "collection.edit.item-mapper.description": "This is the item mapper tool that allows collection administrators to map items from other collections into this collection. You can search for items from other collections and map them, or browse the list of currently mapped items.", "collection.edit.item-mapper.description": "Esta é a ferramenta de mapeamento de itens que permite aos administradores de coleções mapear itens de outras coleções para esta. Pode pesquisá-los noutras coleções para os mapear ou navegar na lista dos itens atualmente mapeados.", - + // "collection.edit.item-mapper.head": "Item Mapper - Map Items from Other Collections", "collection.edit.item-mapper.head": "Mapeador de Itens - Mapear itens noutras coleções", - + // "collection.edit.item-mapper.no-search": "Please enter a query to search", "collection.edit.item-mapper.no-search": "Por favor introduza um termo para pesquisar!", - + // "collection.edit.item-mapper.notifications.map.error.content": "Errors occurred for mapping of {{amount}} items.", "collection.edit.item-mapper.notifications.map.error.content": "Ocorreu erros ao mapear {{amount}} itens.", // "collection.edit.item-mapper.notifications.map.error.head": "Mapping errors", "collection.edit.item-mapper.notifications.map.error.head": "Erros de mapeamento!", - + // "collection.edit.item-mapper.notifications.map.success.content": "Successfully mapped {{amount}} items.", "collection.edit.item-mapper.notifications.map.success.content": "Mapeou {{amount}} itens com sucesso.", @@ -1348,31 +1348,31 @@ // "collection.edit.item-mapper.notifications.unmap.success.content": "Successfully removed the mappings of {{amount}} items.", "collection.edit.item-mapper.notifications.unmap.success.content": "Removeu os mapeamentos de {{amount}} item(ns) com sucesso.", - + // "collection.edit.item-mapper.notifications.unmap.success.head": "Remove mapping completed", "collection.edit.item-mapper.notifications.unmap.success.head": "Remoção de mapeamentos completa", // "collection.edit.item-mapper.remove": "Remove selected item mappings", "collection.edit.item-mapper.remove": "Remover mapeamentos selecionados", - + // "collection.edit.item-mapper.search-form.placeholder": "Search items...", "collection.edit.item-mapper.search-form.placeholder": "Pesquisar items...", - + // "collection.edit.item-mapper.tabs.browse": "Browse mapped items", "collection.edit.item-mapper.tabs.browse": "Navegar por itens mapeados", // "collection.edit.item-mapper.tabs.map": "Map new items", "collection.edit.item-mapper.tabs.map": "Mapear novos itens", - + // "collection.edit.logo.delete.title": "Delete logo", "collection.edit.logo.delete.title": "Apagar logótipo", - - // "collection.edit.logo.delete-undo.title": "Undo delete", + + // "collection.edit.logo.delete-undo.title": "Undo delete", "collection.edit.logo.delete-undo.title": "Não apagar", // "collection.edit.logo.label": "Collection logo", "collection.edit.logo.label": "Logótipo da coleção", - + // "collection.edit.logo.notifications.add.error": "Uploading Collection logo failed. Please verify the content before retrying.", "collection.edit.logo.notifications.add.error": "Falha ao carregar o logotipo da coleção. Verifique o ficheiro antes de tentar de novo.", @@ -1381,7 +1381,7 @@ // "collection.edit.logo.notifications.delete.success.title": "Logo deleted", "collection.edit.logo.notifications.delete.success.title": "Logótipo apagado", - + // "collection.edit.logo.notifications.delete.success.content": "Successfully deleted the collection's logo", "collection.edit.logo.notifications.delete.success.content": "O logotipo da coleção foi apagado com sucesso", @@ -1390,46 +1390,46 @@ // "collection.edit.logo.upload": "Drop a Collection Logo to upload", "collection.edit.logo.upload": "Arraste um logótipo da coleção para carregar", - + // "collection.edit.notifications.success": "Successfully edited the Collection", "collection.edit.notifications.success": "Coleção editada com sucesso", - + // "collection.edit.return": "Back", "collection.edit.return": "Voltar", - + // "collection.edit.tabs.curate.head": "Curate", "collection.edit.tabs.curate.head": "Curadoria", - - // "collection.edit.tabs.curate.title": "Collection Edit - Curate", + + // "collection.edit.tabs.curate.title": "Collection Edit - Curate", "collection.edit.tabs.curate.title": "Editar coleção - Curadoria", - + // "collection.edit.tabs.authorizations.head": "Authorizations", "collection.edit.tabs.authorizations.head": "Autorizações", // "collection.edit.tabs.authorizations.title": "Collection Edit - Authorizations", "collection.edit.tabs.authorizations.title": "Editar coleção - autorizações", - + // "collection.edit.item.authorizations.load-bundle-button": "Load more bundles", "collection.edit.item.authorizations.load-bundle-button": "Carregar mais pacotes", // "collection.edit.item.authorizations.load-more-button": "Load more", "collection.edit.item.authorizations.load-more-button": "Carregar mais", - + // "collection.edit.item.authorizations.show-bitstreams-button": "Show bitstream policies for bundle", "collection.edit.item.authorizations.show-bitstreams-button": "Mostrar as políticas do bitstream para o pacote", - + // "collection.edit.tabs.metadata.head": "Edit Metadata", "collection.edit.tabs.metadata.head": "Editar metadados", - + // "collection.edit.tabs.metadata.title": "Collection Edit - Metadata", "collection.edit.tabs.metadata.title": "Editar coleção - metadados", - + // "collection.edit.tabs.roles.head": "Assign Roles", "collection.edit.tabs.roles.head": "Atribuir perfis", - + // "collection.edit.tabs.roles.title": "Collection Edit - Roles", "collection.edit.tabs.roles.title": "Editar coleção - perfis", - + // "collection.edit.tabs.source.external": "This collection harvests its content from an external source", "collection.edit.tabs.source.external": "Esta coleção agrega conteúdo de uma fonte externa", @@ -1444,7 +1444,7 @@ // "collection.edit.tabs.source.form.metadataConfigId": "Metadata Format", "collection.edit.tabs.source.form.metadataConfigId": "Formato de metadados", - + // "collection.edit.tabs.source.form.oaiSetId": "OAI specific set id", "collection.edit.tabs.source.form.oaiSetId": "ID do set OAI-PMH", @@ -1462,10 +1462,10 @@ // "collection.edit.tabs.source.head": "Content Source", "collection.edit.tabs.source.head": "Fonte externa", - + // "collection.edit.tabs.source.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", "collection.edit.tabs.source.notifications.discarded.content": "As alterações foram ignoradas. Para regravar as alterações clique no botão ´Voltar'", - + // "collection.edit.tabs.source.notifications.discarded.title": "Changes discarded", "collection.edit.tabs.source.notifications.discarded.title": "Alterações descartadas", @@ -1483,7 +1483,7 @@ // "collection.edit.tabs.source.title": "Collection Edit - Content Source", "collection.edit.tabs.source.title": "Editar coleção - conteúdo fonte", - + // "collection.edit.template.add-button": "Add", "collection.edit.template.add-button": "Adicionar", @@ -1498,28 +1498,28 @@ // "collection.edit.template.edit-button": "Edit", "collection.edit.template.edit-button": "Editar", - + // "collection.edit.template.error": "An error occurred retrieving the template item", "collection.edit.template.error": "Ocorreu um erro na recuperação do template do item", - + // "collection.edit.template.head": "Edit Template Item for Collection \"{{ collection }}\"", "collection.edit.template.head": "Editar template do item para a coleção \"{{ collection }}\"", - + // "collection.edit.template.label": "Template item", "collection.edit.template.label": "Template do item", - + // "collection.edit.template.loading": "Loading template item...", "collection.edit.template.loading": "A carregar o template do item...", - + // "collection.edit.template.notifications.delete.error": "Failed to delete the item template", "collection.edit.template.notifications.delete.error": "Erro ao apagar o template do item", // "collection.edit.template.notifications.delete.success": "Successfully deleted the item template", "collection.edit.template.notifications.delete.success": "Template do item apagado com sucesso", - + // "collection.edit.template.title": "Edit Template Item", "collection.edit.template.title": "Editar template do item", - + // "collection.form.abstract": "Short Description", "collection.form.abstract": "Descrição curta", @@ -1543,25 +1543,25 @@ // "collection.form.title": "Name", "collection.form.title": "Nome", - + // "collection.form.entityType": "Entity Type", "collection.form.entityType": "Tipo de entidade", // "collection.listelement.badge": "collection", "collection.listelement.badge": "coleção", - + // "collection.page.browse.recent.head": "Recent Submissions", "collection.page.browse.recent.head": "Entradas recentes", - + // "collection.page.browse.recent.empty": "No items to show", "collection.page.browse.recent.empty": "Nenhum item a exibir", // "collection.page.edit": "Edit this collection", "collection.page.edit": "Editar esta coleção", - + // "collection.page.handle": "Permanent URI for this collection:", "collection.page.handle": "URI permanente para esta coleção:", - + // "collection.page.license": "License", "collection.page.license": "Licença", @@ -1576,94 +1576,94 @@ // "collection.select.table.title": "Title", "collection.select.table.title": "Título", - + // "collection.source.controls.head": "Harvest Controls", "collection.source.controls.head": "Controlos de importação", - + // "collection.source.controls.test.submit.error": "Something went wrong with initiating the testing of the settings", "collection.source.controls.test.submit.error": "Algo correu mal ao inicar os testes das configurações", - + // "collection.source.controls.test.failed": "The script to test the settings has failed", "collection.source.controls.test.failed": "O script para testar as configurações falhou!", - + // "collection.source.controls.test.completed": "The script to test the settings has successfully finished", "collection.source.controls.test.completed": "O script para testar as configurações terminou com sucesso!", - + // "collection.source.controls.test.submit": "Test configuration", "collection.source.controls.test.submit": "Configuração de teste", - + // "collection.source.controls.test.running": "Testing configuration...", "collection.source.controls.test.running": "A testar as configurações...", - + // "collection.source.controls.import.submit.success": "The import has been successfully initiated", "collection.source.controls.import.submit.success": "A importação iniciou com sucesso.", - + // "collection.source.controls.import.submit.error": "Something went wrong with initiating the import", "collection.source.controls.import.submit.error": "Algo correu mal ao iniciar a importação", - + // "collection.source.controls.import.submit": "Import now", "collection.source.controls.import.submit": "Importar agora", - + // "collection.source.controls.import.running": "Importing...", "collection.source.controls.import.running": "Importar...", - + // "collection.source.controls.import.failed": "An error occurred during the import", "collection.source.controls.import.failed": "Ocorreu um erro durante a importação", - + // "collection.source.controls.import.completed": "The import completed", "collection.source.controls.import.completed": "A importação encontra-se completa", - + // "collection.source.controls.reset.submit.success": "The reset and reimport has been successfully initiated", "collection.source.controls.reset.submit.success": "A reposição e re-importação iniciou-se com sucesso", - + // "collection.source.controls.reset.submit.error": "Something went wrong with initiating the reset and reimport", "collection.source.controls.reset.submit.error": "Algo correu mal com a reposição e re-importação", - + // "collection.source.controls.reset.failed": "An error occurred during the reset and reimport", "collection.source.controls.reset.failed": "Ocorreu um erro durante a reposição e a re-importação", - + // "collection.source.controls.reset.completed": "The reset and reimport completed", "collection.source.controls.reset.completed": "A reposição e a re-importação encontram-se completas", - + // "collection.source.controls.reset.submit": "Reset and reimport", "collection.source.controls.reset.submit": "Repor e re-importar", - + // "collection.source.controls.reset.running": "Resetting and reimporting...", "collection.source.controls.reset.running": "Repor e re-importar...", - + // "collection.source.controls.harvest.status": "Harvest status:", "collection.source.controls.harvest.status": "Estado da importação:", - + // "collection.source.controls.harvest.start": "Harvest start time:", "collection.source.controls.harvest.start": "Hora de início da importação:", - + // "collection.source.controls.harvest.last": "Last time harvested:", "collection.source.controls.harvest.start": "Hora de fim da importação:", - + // "collection.source.controls.harvest.message": "Harvest info:", "collection.source.controls.harvest.message": "Informação sobre a importação:", - + // "collection.source.controls.harvest.no-information": "N/A", "collection.source.controls.harvest.no-information": "N/A", - + // "collection.source.update.notifications.error.content": "The provided settings have been tested and didn't work.", "collection.source.update.notifications.error.content": "As configurações providenciadas foram testadas mas não funcionam.", // "collection.source.update.notifications.error.title": "Server Error", "collection.source.update.notifications.error.title": "Erro no servidor", - + // "communityList.breadcrumbs": "Community List", "communityList.breadcrumbs": "Lista de comunidades", - + // "communityList.tabTitle": "Community List", "communityList.tabTitle": "Lista de comunidades", - + // "communityList.title": "List of Communities", "communityList.title": "Lista de comunidades", - + // "communityList.showMore": "Show More", "communityList.showMore": "Mostrar mais", - + // "community.create.head": "Create a Community", "community.create.head": "Criar uma comunidade", @@ -1675,22 +1675,22 @@ // "community.curate.header": "Curate Community: {{community}}", "community.curate.header": "Curar comunidade: {{community}}", - + // "community.delete.cancel": "Cancel", "community.delete.cancel": "Cancelar", // "community.delete.confirm": "Confirm", "community.delete.confirm": "Confirmar", - + // "community.delete.processing": "Deleting...", "community.delete.processing": "A apagar...", - + // "community.delete.head": "Delete Community", "community.delete.head": "Apagar comunidade", - + // "community.delete.notification.fail": "Community could not be deleted", "community.delete.notification.fail": "Não foi possível apagar a comunidade", - + // "community.delete.notification.success": "Successfully deleted community", "community.delete.notification.success": "Comunidade apagada com sucesso", @@ -1702,37 +1702,37 @@ // "community.edit.head": "Edit Community", "community.edit.head": "Editar comunidade", - + // "community.edit.breadcrumbs": "Edit Community", "community.edit.breadcrumbs": "Editar Comunidade", - + // "community.edit.logo.delete.title": "Delete logo", "community.edit.logo.delete.title": "Apagar logótipo", // "community.edit.logo.delete-undo.title": "Undo delete", "community.edit.logo.delete-undo.title": "Não apagar logótipo", - + // "community.edit.logo.label": "Community logo", "community.edit.logo.label": "Logótipo da comunidade", - + // "community.edit.logo.notifications.add.error": "Uploading Community logo failed. Please verify the content before retrying.", "community.edit.logo.notifications.add.error": "Falha ao carregar o logótipo da comunidade. Verifique o conteúdo antes de tentar de novo.", - + // "community.edit.logo.notifications.add.success": "Upload Community logo successful.", "community.edit.logo.notifications.add.success": "Logótipo da comunindade carregado com sucesso.", - + // "community.edit.logo.notifications.delete.success.title": "Logo deleted", "community.edit.logo.notifications.delete.success.title": "Logótipo apagado", - + // "community.edit.logo.notifications.delete.success.content": "Successfully deleted the community's logo", "community.edit.logo.notifications.delete.success.content": "O logótipo da comuindade foi apagado com sucesso", - + // "community.edit.logo.notifications.delete.error.title": "Error deleting logo", "community.edit.logo.notifications.delete.error.title": "Erro ao apagar o logótipo", - + // "community.edit.logo.upload": "Drop a Community Logo to upload", "community.edit.logo.upload": "Arraste um logótipo da comunidade para carregar", - + // "community.edit.notifications.success": "Successfully edited the Community", "community.edit.notifications.success": "Comunidade editada com sucesso", @@ -1741,115 +1741,115 @@ // "community.edit.notifications.error": "An error occured while editing the Community", "community.edit.notifications.error": "Ocorreu um erro ao editar a comunidade", - + // "community.edit.return": "Back", "community.edit.return": "Voltar", - + // "community.edit.tabs.curate.head": "Curate", "community.edit.tabs.curate.head": "Curadoria", // "community.edit.tabs.curate.title": "Community Edit - Curate", "community.edit.tabs.curate.title": "Editar comunidade - curadoria", - + // "community.edit.tabs.metadata.head": "Edit Metadata", "community.edit.tabs.metadata.head": "Editar metadados", - + // "community.edit.tabs.metadata.title": "Community Edit - Metadata", "community.edit.tabs.metadata.title": "Editar comunidade - metadados", - + // "community.edit.tabs.roles.head": "Assign Roles", "community.edit.tabs.roles.head": "Atribuir perfis", - + // "community.edit.tabs.roles.title": "Community Edit - Roles", "community.edit.tabs.roles.title": "Editar comunidade - perfis", - + // "community.edit.tabs.authorizations.head": "Authorizations", "community.edit.tabs.authorizations.head": "Autorizações", // "community.edit.tabs.authorizations.title": "Community Edit - Authorizations", "community.edit.tabs.authorizations.title": "Editar comunidade - autorizações", - + // "community.listelement.badge": "Community", "community.listelement.badge": "Comunidade", - + // "comcol-role.edit.no-group": "None", "comcol-role.edit.no-group": "Nenhum", // "comcol-role.edit.create": "Create", "comcol-role.edit.create": "Criar", - + // "comcol-role.edit.create.error.title": "Failed to create a group for the '{{ role }}' role", "comcol-role.edit.create.error.title": "Falha na criação de um grupo para o perfil '{{ role }}'", - + // "comcol-role.edit.restrict": "Restrict", "comcol-role.edit.restrict": "Restrito", // "comcol-role.edit.delete": "Delete", "comcol-role.edit.delete": "Apagar", - + // "comcol-role.edit.delete.error.title": "Failed to delete the '{{ role }}' role's group", "comcol-role.edit.delete.error.title": "Falha na remoção do '{{ role }}' nos perfis do grupo", - + // "comcol-role.edit.community-admin.name": "Administrators", "comcol-role.edit.community-admin.name": "Administradores", // "comcol-role.edit.collection-admin.name": "Administrators", "comcol-role.edit.collection-admin.name": "Administradores", - + // "comcol-role.edit.community-admin.description": "Community administrators can create sub-communities or collections, and manage or assign management for those sub-communities or collections. In addition, they decide who can submit items to any sub-collections, edit item metadata (after submission), and add (map) existing items from other collections (subject to authorization).", "comcol-role.edit.community-admin.description": "Os 'Administradores de comunidades' podem criar 'sub-comunidades' e/ou 'coleções', podem também gerir ou delegar a gestão dessas 'sub-comunidade' ou 'coleções'. Adicionalmente, decidem quem pode depositar itens em coleções, editar metadados (após o depósito) e mapear itens de outras coleções (sujeito a autorização).", - + // "comcol-role.edit.collection-admin.description": "Collection administrators decide who can submit items to the collection, edit item metadata (after submission), and add (map) existing items from other collections to this collection (subject to authorization for that collection).", "comcol-role.edit.collection-admin.description": "Os 'Administradores de coleção' decidem quem pode depositar itens a uma coleção, editar metadados (após o depósito), e mapear itens de outras coleções (sujeito a autorização para essa coleção).", - + // "comcol-role.edit.submitters.name": "Submitters", "comcol-role.edit.submitters.name": "Depositantes", // "comcol-role.edit.submitters.description": "The E-People and Groups that have permission to submit new items to this collection.", "comcol-role.edit.submitters.description": "Os 'Utilizadores' e 'Grupos' que possuem permissões de depósito nesta coleção.", - + // "comcol-role.edit.item_read.name": "Default item read access", - "comcol-role.edit.item_read.name": "Acesso de leitura ao item predefinido (DEFAULT_ITEM_READ)", - + "comcol-role.edit.item_read.name": "Acesso de leitura ao item predefinido (DEFAULT_ITEM_READ)", + // "comcol-role.edit.item_read.description": "E-People and Groups that can read new items submitted to this collection. Changes to this role are not retroactive. Existing items in the system will still be viewable by those who had read access at the time of their addition.", "comcol-role.edit.item_read.description": "'Utilizadores' e 'Grupos' que podem ver itens depositados nesta coleção. As alterações feitas a este papel não são retroativas. Os itens existentes no sistema ainda poderão ser vistos por aqueles que tiveram acesso de leitura no momento da sua adição.", - + // "comcol-role.edit.item_read.anonymous-group": "Default read for incoming items is currently set to Anonymous.", "comcol-role.edit.item_read.anonymous-group": "A leitura de novos itens (Item Read) está predefinida para utilizadores anónimos.", - + // "comcol-role.edit.bitstream_read.name": "Default bitstream read access", "comcol-role.edit.bitstream_read.name": "Leitura predefinida de ficheiros (DEFAULT_BITSTREAM_READ)", - + // "comcol-role.edit.bitstream_read.description": "Community administrators can create sub-communities or collections, and manage or assign management for those sub-communities or collections. In addition, they decide who can submit items to any sub-collections, edit item metadata (after submission), and add (map) existing items from other collections (subject to authorization).", "comcol-role.edit.bitstream_read.description": "Os 'Administradores de comunidades' podem criar sub-comunidades e coleções, bem como gerir ou delegar a gestão dessas sub-comunidade ou coleções. Adicionalmente, decidem quem pode depositar itens em qualquer coleção, editar metadados (após depósito) e mapear itens de outras coleções (sujeito a autorização).", - + // "comcol-role.edit.bitstream_read.anonymous-group": "Default read for incoming bitstreams is currently set to Anonymous.", "comcol-role.edit.bitstream_read.anonymous-group": "A leitura de novos ficheiros (Bitstream Read) está predefinida para utilizadores anónimos.", - + // "comcol-role.edit.editor.name": "Editors", "comcol-role.edit.editor.name": "Editores", // "comcol-role.edit.editor.description": "Editors are able to edit the metadata of incoming submissions, and then accept or reject them.", - "comcol-role.edit.editor.description": "Os 'Editores' podem aceitar ou rejeitar os depósitos e podem editar os seus metadados.", + "comcol-role.edit.editor.description": "Os 'Editores' podem aceitar ou rejeitar os depósitos e podem editar os seus metadados.", // "comcol-role.edit.finaleditor.name": "Final editors", "comcol-role.edit.finaleditor.name": "Validadores finais", - + // "comcol-role.edit.finaleditor.description": "Final editors are able to edit the metadata of incoming submissions, but will not be able to reject them.", "comcol-role.edit.finaleditor.description": "Os 'Validadores finais' podem editar os metadados de um depósito, mas não os podem rejeitar.", - + // "comcol-role.edit.reviewer.name": "Reviewers", "comcol-role.edit.reviewer.name": "Revisores", // "comcol-role.edit.reviewer.description": "Reviewers are able to accept or reject incoming submissions. However, they are not able to edit the submission's metadata.", "comcol-role.edit.reviewer.description": "Os 'Revisores' podem aceitar ou rejeitar os depósitos, mas não podem editar os seus metadados.", - + // "comcol-role.edit.scorereviewers.name": "Score Reviewers", "comcol-role.edit.scorereviewers.name": "Pontuar revisores", // "comcol-role.edit.scorereviewers.description": "Reviewers are able to give a score to incoming submissions, this will define whether the submission will be rejected or not.", "comcol-role.edit.scorereviewers.description": "Os 'Revisores' podem dar uma pontuação aos depósitos recebidos, isto irá determinar se o depósito será rejeitado ou não.", - + // "community.form.abstract": "Short Description", "community.form.abstract": "Descrição curta", @@ -1861,7 +1861,7 @@ // "community.form.rights": "Copyright text (HTML)", "community.form.rights": "Texto de Copyright (HTML)", - + // "community.form.tableofcontents": "News (HTML)", "community.form.tableofcontents": "Notícias (HTML)", @@ -1873,7 +1873,7 @@ // "community.page.handle": "Permanent URI for this community", "community.page.handle": "URI permanente desta comunidade:", - + // "community.page.license": "License", "community.page.license": "Licença", @@ -1882,13 +1882,13 @@ // "community.all-lists.head": "Subcommunities and Collections", "community.all-lists.head": "Sub-comunidade e coleções", - + // "community.sub-collection-list.head": "Collections of this Community", "community.sub-collection-list.head": "Coleções desta comunidade", - + // "community.sub-community-list.head": "Communities of this Community", "community.sub-community-list.head": "Comunidades desta comunidade", - + // "cookies.consent.accept-all": "Accept all", "cookies.consent.accept-all": "Aceitar todos", @@ -1910,12 +1910,12 @@ // "cookies.consent.app.required.title": "(always required)", "cookies.consent.app.required.title": "(sempre necessária)", - // "cookies.consent.app.disable-all.description": "Use this switch to enable or disable all services.", - "cookies.consent.app.disable-all.description": "Utilize este interruptor para ativar ou desativar todos os serviços.", + // "cookies.consent.app.disable-all.description": "Use this switch to enable or disable all services.", + "cookies.consent.app.disable-all.description": "Utilize este interruptor para ativar ou desativar todos os serviços.", + + // "cookies.consent.app.disable-all.title": "Enable or disable all services", + "cookies.consent.app.disable-all.title": "Ativar ou desativar todos os serviços", - // "cookies.consent.app.disable-all.title": "Enable or disable all services", - "cookies.consent.app.disable-all.title": "Ativar ou desativar todos os serviços", - // "cookies.consent.update": "There were changes since your last visit, please update your consent.", "cookies.consent.update": "Existem alterações desde a sua última visita, atualize o seu consentimento.", @@ -1932,20 +1932,20 @@ "cookies.consent.save": "Guardar", // "cookies.consent.content-notice.title": "Cookie Consent", - "cookies.consent.content-notice.title": "Consentir cookies", - + "cookies.consent.content-notice.title": "Consentir cookies", + // "cookies.consent.content-notice.description": "We collect and process your personal information for the following purposes: Authentication, Preferences, Acknowledgement and Statistics.
    To learn more, please read our {privacyPolicy}.", "cookies.consent.content-notice.description": "Recolhemos e processamos informação pessoal para os seguintes propósitos: Autenticação, Guardar Preferências, Termos de Uso e Estatísticas.
    Para saber mais, por favor leia a nossa {privacyPolicy}.", - + // "cookies.consent.content-notice.description.no-privacy": "We collect and process your personal information for the following purposes: Authentication, Preferences, Acknowledgement and Statistics.", "cookies.consent.content-notice.description.no-privacy": "Recolhemos e processamos as suas informações pessoais para os seguintes fins: Autenticação, Preferências, Reconhecimento e Estatísticas.", - + // "cookies.consent.content-notice.learnMore": "Customize", "cookies.consent.content-notice.learnMore": "Pesonalizar", // "cookies.consent.content-modal.description": "Here you can see and customize the information that we collect about you.", "cookies.consent.content-modal.description": "Aqui pode ver e personalizar a informação pessoal que recolhemos sobre si.", - + // "cookies.consent.content-modal.privacy-policy.name": "privacy policy", "cookies.consent.content-modal.privacy-policy.name": "política de privacidade", @@ -1954,13 +1954,13 @@ // "cookies.consent.content-modal.title": "Information that we collect", "cookies.consent.content-modal.title": "Informação que recolhemos", - + // "cookies.consent.content-modal.services": "Services", "cookies.consent.content-modal.services": "Serviços", // "cookies.consent.content-modal.service": "Service", "cookies.consent.content-modal.service": "Serviço", - + // "cookies.consent.app.title.authentication": "Authentication", "cookies.consent.app.title.authentication": "Autenticação", @@ -1978,43 +1978,43 @@ // "cookies.consent.app.description.acknowledgement": "Required for saving your acknowledgements and consents", "cookies.consent.app.description.acknowledgement": "Obrigatório para guardar os 'Termos de Uso' e 'Consentimentos'", - + // "cookies.consent.app.title.google-analytics": "Google Analytics", "cookies.consent.app.title.google-analytics": "Google Analytics", // "cookies.consent.app.description.google-analytics": "Allows us to track statistical data", "cookies.consent.app.description.google-analytics": "Permite-nos rastrear dados estatísticos", - + // "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", // "cookies.consent.app.description.google-recaptcha": "We use google reCAPTCHA service during registration and password recovery", "cookies.consent.app.description.google-recaptcha": "Utilizamos o serviço Google reCAPTCHA durante o registo e recuperação de palavra-passe", - + // "cookies.consent.purpose.functional": "Functional", "cookies.consent.purpose.functional": "Funcional", // "cookies.consent.purpose.statistical": "Statistical", "cookies.consent.purpose.statistical": "Estatísticos", - + // "cookies.consent.purpose.registration-password-recovery": "Registration and Password recovery", "cookies.consent.purpose.registration-password-recovery": "Registo e recuperação de senha", - + // "cookies.consent.purpose.sharing": "Sharing", "cookies.consent.purpose.sharing": "Partilha", - // "curation-task.task.citationpage.label": "Generate Citation Page", - "curation-task.task.citationpage.label": "Gerar página de citações", - + // "curation-task.task.citationpage.label": "Generate Citation Page", + "curation-task.task.citationpage.label": "Gerar página de citações", + // "curation-task.task.checklinks.label": "Check Links in Metadata", "curation-task.task.checklinks.label": "Verifica ligações nos metadados", - + // "curation-task.task.noop.label": "NOOP", "curation-task.task.noop.label": "NOOP", // "curation-task.task.profileformats.label": "Profile Bitstream Formats", "curation-task.task.profileformats.label": "Perfil dos formatos de ficheiro", - + // "curation-task.task.requiredmetadata.label": "Check for Required Metadata", "curation-task.task.requiredmetadata.label": "Verifica metadados obrigatórios", @@ -2023,16 +2023,16 @@ // "curation-task.task.vscan.label": "Virus Scan", "curation-task.task.vscan.label": "Scan de vírus", - + // "curation-task.task.register-doi.label": "Register DOI", "curation-task.task.register-doi.label": "Registo DOI", - + // "curation.form.task-select.label": "Task:", "curation.form.task-select.label": "Tarefa:", // "curation.form.submit": "Start", "curation.form.submit": "Iniciar", - + // "curation.form.submit.success.head": "The curation task has been started successfully", "curation.form.submit.success.head": "A tarefa de curadoria iniciou com sucesso", @@ -2044,25 +2044,25 @@ // "curation.form.submit.error.content": "An error occured when trying to start the curation task.", "curation.form.submit.error.content": "Ocorreu um erro ao tentar iniciar a tarefa de curadoria.", - + // "curation.form.submit.error.invalid-handle": "Couldn't determine the handle for this object", "curation.form.submit.error.invalid-handle": "Não foi possível determinar o handle para este objecto", - + // "curation.form.handle.label": "Handle:", "curation.form.handle.label": "Handle:", // "curation.form.handle.hint": "Hint: Enter [your-handle-prefix]/0 to run a task across entire site (not all tasks may support this capability)", "curation.form.handle.hint": "Dica: Introduza [o-seu-prefixo-handle]/0 para executar a tarefa em todo o repositório (nem todas as tarefas são compatíveis com esta opção)", - + // "deny-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I regret to inform you that it's not possible to send you a copy of the file(s) you have requested, concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", - "deny-request-copy.email.message": "Caro {{ recipientName }},\ em resposta ao seu pedido, lamento informá-lo que não me é possível enviar-lhe uma cópia do(s) Ficheiro(s) que solicitou, relativamente ao documento: \"{{ itemUrl }}\" ({{ itemName }}), do qual sou autor.\n\n Com os melhores cumprimentos,\n {{ authorName }} <{{ authorEmail }}>", + "deny-request-copy.email.message": "Caro {{ recipientName }}, Em resposta ao seu pedido, lamento informá-lo que não me é possível enviar-lhe uma cópia do(s) Ficheiro(s) que solicitou, relativamente ao documento: \"{{ itemUrl }}\" ({{ itemName }}), do qual sou autor.\n\n Com os melhores cumprimentos,\n {{ authorName }} <{{ authorEmail }}>", // "deny-request-copy.email.subject": "Request copy of document", "deny-request-copy.email.subject": "Solicitar cópia ao autor", // "deny-request-copy.error": "An error occurred", "deny-request-copy.error": "Ocorreu um erro!", - + // "deny-request-copy.header": "Deny document copy request", "deny-request-copy.header": "Declinar o pedido de cópia", @@ -2074,7 +2074,7 @@ // "dso.name.untitled": "Untitled", "dso.name.untitled": "Sem título", - + // "dso-selector.create.collection.head": "New collection", "dso-selector.create.collection.head": "Nova coleção", @@ -2083,10 +2083,10 @@ // "dso-selector.create.community.head": "New community", "dso-selector.create.community.head": "Nova comunidade", - - // "dso-selector.create.community.or-divider": "or", - "dso-selector.create.community.or-divider": "ou", - + + // "dso-selector.create.community.or-divider": "or", + "dso-selector.create.community.or-divider": "ou", + // "dso-selector.create.community.sub-level": "Create a new community in", "dso-selector.create.community.sub-level": "Criar uma nova coleção em", @@ -2101,7 +2101,7 @@ // "dso-selector.create.submission.head": "New submission", "dso-selector.create.submission.head": "Novo depósito", - + // "dso-selector.edit.collection.head": "Edit collection", "dso-selector.edit.collection.head": "Editar coleção", @@ -2110,25 +2110,25 @@ // "dso-selector.edit.item.head": "Edit item", "dso-selector.edit.item.head": "Editar item", - + // "dso-selector.error.title": "An error occurred searching for a {{ type }}", "dso-selector.error.title": "Ocorreu um erro ao procurar por um(a) {{ type }}", - + // "dso-selector.export-metadata.dspaceobject.head": "Export metadata from", "dso-selector.export-metadata.dspaceobject.head": "Exportar metadados de", - + // "dso-selector.export-batch.dspaceobject.head": "Export Batch (ZIP) from", - "dso-selector.export-batch.dspaceobject.head": "Exportar lote (ZIP) de", + "dso-selector.export-batch.dspaceobject.head": "Exportar lote (ZIP) de", // "dso-selector.import-batch.dspaceobject.head": "Import batch from", - "dso-selector.import-batch.dspaceobject.head": "Importar lote de", - + "dso-selector.import-batch.dspaceobject.head": "Importar lote de", + // "dso-selector.no-results": "No {{ type }} found", "dso-selector.no-results": "Nenhum(a) {{ type }} encontrado(a)", // "dso-selector.placeholder": "Search for a {{ type }}", "dso-selector.placeholder": "Pesquisar por um(a) {{ type }}", - + // "dso-selector.select.collection.head": "Select a collection", "dso-selector.select.collection.head": "Selecione uma coleção", @@ -2143,7 +2143,7 @@ // "dso-selector.set-scope.community.input-header": "Search for a community or collection", "dso-selector.set-scope.community.input-header": "Pesquisar por uma comunidade ou coleção", - + // "dso-selector.claim.item.head": "Profile tips", "dso-selector.claim.item.head": "Dicas de Perfil", @@ -2155,7 +2155,7 @@ // "dso-selector.claim.item.create-from-scratch": "Create a new one", "dso-selector.claim.item.create-from-scratch": "Criar novo", - + // "dso-selector.results-could-not-be-retrieved": "Something went wrong, please refresh again", "dso-selector.results-could-not-be-retrieved": "Algo correu mal, por favor repita", @@ -2173,7 +2173,7 @@ // "supervision-group-selector.select.type-of-order.option.observer": "OBSERVER", "supervision-group-selector.select.type-of-order.option.observer": "OBSERVADOR", - + // "supervision-group-selector.select.group.label": "Select a Group", "supervision-group-selector.select.group.label": "Selecionar um grupo", @@ -2220,8 +2220,8 @@ "confirmation-modal.export-batch.cancel": "Cancelar", // "confirmation-modal.export-batch.confirm": "Export", - "confirmation-modal.export-batch.confirm": "Exportar", - + "confirmation-modal.export-batch.confirm": "Exportar", + // "confirmation-modal.delete-eperson.header": "Delete EPerson \"{{ dsoName }}\"", "confirmation-modal.delete-eperson.header": "Apagar Utilizador \"{{ dsoName }}\"", @@ -2233,7 +2233,7 @@ // "confirmation-modal.delete-eperson.confirm": "Delete", "confirmation-modal.delete-eperson.confirm": "Apagar", - + // "confirmation-modal.delete-profile.header": "Delete Profile", "confirmation-modal.delete-profile.header": "Apagar perfil", @@ -2244,11 +2244,11 @@ "confirmation-modal.delete-profile.cancel": "Cancelar", // "confirmation-modal.delete-profile.confirm": "Delete", - "confirmation-modal.delete-profile.confirm": "Apagar", + "confirmation-modal.delete-profile.confirm": "Apagar", // "confirmation-modal.delete-subscription.header": "Delete Subscription", "confirmation-modal.delete-subscription.header": "Apagar subscrição", - + // "confirmation-modal.delete-subscription.info": "Are you sure you want to delete subscription for \"{{ dsoName }}\"", "confirmation-modal.delete-subscription.info": "Tem a certeza de que pretende apagar a subscrição de \"{{ dsoName }}\"", @@ -2260,64 +2260,64 @@ // "error.bitstream": "Error fetching bitstream", "error.bitstream": "Erro ao aceder ao ficheiro!", - + // "error.browse-by": "Error fetching items", "error.browse-by": "Erro ao carregar itens!", - + // "error.collection": "Error fetching collection", "error.collection": "Erro ao carregar coleção!", - + // "error.collections": "Error fetching collections", "error.collections": "Erro ao carregar coleções!", - + // "error.community": "Error fetching community", "error.community": "Erro ao carregar comunidade!", - + // "error.identifier": "No item found for the identifier", "error.identifier": "Nenhum item encontrado para o identificador!", - + // "error.default": "Error", "error.default": "Erro!", - + // "error.item": "Error fetching item", "error.item": "Erro ao carregar item!", - + // "error.items": "Error fetching items", "error.items": "Erro ao carregar itens!", - + // "error.objects": "Error fetching objects", "error.objects": "Erro ao carregar objetos!", - + // "error.recent-submissions": "Error fetching recent submissions", "error.recent-submissions": "Erro ao carregar depósitos recentes!", - + // "error.search-results": "Error fetching search results", "error.search-results": "Erro ao carregar os resultados da pesquisa!", - + // "error.invalid-search-query": "Search query is not valid. Please check Solr query syntax best practices for further information about this error.", "error.invalid-search-query": "A query da pesquisa não é válida! Por favor verifique Solr query syntax best practices for further information about this error.", - + // "error.sub-collections": "Error fetching sub-collections", "error.sub-collections": "Erro ao carregar sub-coleções!", - + // "error.sub-communities": "Error fetching sub-communities", "error.sub-communities": "Erro ao carregar sub-comunidade!", - + // "error.submission.sections.init-form-error": "An error occurred during section initialize, please check your input-form configuration. Details are below :

    ", "error.submission.sections.init-form-error": "Ocorreu um erro durante a seção de inicialização, por favor verifique sua configuração de 'input-form'. Detalhes estão abaixo :

    ", - + // "error.top-level-communities": "Error fetching top-level communities", "error.top-level-communities": "Erro ao carregar as comunidade de nível superior!", - + // "error.validation.license.notgranted": "You must grant this license to complete your submission. If you are unable to grant this license at this time you may save your work and return later or remove the submission.", "error.validation.license.notgranted": "Deve concordar com esta licença para completar o depósito. Se não estiver de acordo com a licença ou pretende ponderar, pode guardar este trabalho e retomar posteriormente, ou remover definitivamente este depósito.", - + // "error.validation.pattern": "This input is restricted by the current pattern: {{ pattern }}.", "error.validation.pattern": "Este campo está restrito ao seguinte padrão: {{ pattern }}.", // "error.validation.filerequired": "The file upload is mandatory", "error.validation.filerequired": "O carregamento de ficheiros é obrigatório!", - + // "error.validation.required": "This field is required", "error.validation.required": "Este campo é de preenchimento obrigatório!", @@ -2329,112 +2329,112 @@ // "error.validation.groupExists": "This group already exists", "error.validation.groupExists": "Este grupo já existe!", - + // "feed.description": "Syndication feed", - "feed.description": "Feed", - + "feed.description": "Feed", + // "file-section.error.header": "Error obtaining files for this item", "file-section.error.header": "Erro na obteção de ficheiros para este item!", - + // "footer.copyright": "copyright © 2002-{{ year }}", "footer.copyright": "Copyright © 2003-{{ year }}", - + // "footer.link.dspace": "DSpace software", "footer.link.dspace": "Software DSpace", // "footer.link.lyrasis": "LYRASIS", - "footer.link.lyrasis": "LYRASIS", - + "footer.link.lyrasis": "LYRASIS", + // "footer.link.cookies": "Cookie settings", "footer.link.cookies": "Configurações de Cookies", // "footer.link.privacy-policy": "Privacy policy", "footer.link.privacy-policy": "Política de Privacidade", - // "footer.link.end-user-agreement":"End User Agreement", - "footer.link.end-user-agreement":"Termos de Uso", - - // "footer.link.feedback":"Send Feedback", - "footer.link.feedback":"Contacte-nos", - + // "footer.link.end-user-agreement": "End User Agreement", + "footer.link.end-user-agreement": "Termos de Uso", + + // "footer.link.feedback": "Send Feedback", + "footer.link.feedback": "Contacte-nos", + // "forgot-email.form.header": "Forgot Password", - "forgot-email.form.header": "Esqueci a senha", + "forgot-email.form.header": "Esqueci a senha", // "forgot-email.form.info": "Enter the email address associated with the account.", "forgot-email.form.info": "Caso tenha esquecido a sua senha de acesso poderá recuperá-la, para o efeito basta introduzir em baixo o seu endereço de correio electrónico associado.", - + // "forgot-email.form.email": "Email Address *", "forgot-email.form.email": "Endereço de correio eletrónico *", - + // "forgot-email.form.email.error.required": "Please fill in an email address", "forgot-email.form.email.error.required": "Indique um endereço de correio eletrónico", - + // "forgot-email.form.email.error.not-email-form": "Please fill in a valid email address", "forgot-email.form.email.error.not-email-form": "Indique um endereço de correio eletrónico válido", - + // "forgot-email.form.email.hint": "An email will be sent to this address with a further instructions.", "forgot-email.form.email.hint": "Será enviada uma mensagem para este endereço de correio electrónico com mais instruções", - + // "forgot-email.form.submit": "Reset password", "forgot-email.form.submit": "Repor senha de acesso", - + // "forgot-email.form.success.head": "Password reset email sent", "forgot-email.form.success.head": "Foi enviada mensagem para redefinição da senha de acesso", - + // "forgot-email.form.success.content": "An email has been sent to {{ email }} containing a special URL and further instructions.", "forgot-email.form.success.content": "Foi enviado uma mensagem para {{ email }} com instruções e um endereço para validação da sua conta de utilizador.", - + // "forgot-email.form.error.head": "Error when trying to reset password", "forgot-email.form.error.head": "Ocorreu um erro ao tentar redefinir a senha de acesso", // "forgot-email.form.error.content": "An error occured when attempting to reset the password for the account associated with the following email address: {{ email }}", - "forgot-email.form.error.content": "Ocorreu um erro ao tentar redefinir a senha de acesso da conta associada com o seguinte endereço de email: {{ email }}", + "forgot-email.form.error.content": "Ocorreu um erro ao tentar redefinir a senha de acesso da conta associada com o seguinte endereço de email: {{ email }}", // "forgot-password.title": "Forgot Password", "forgot-password.title": "Esqueci a senha de acesso", - + // "forgot-password.form.head": "Forgot Password", "forgot-password.form.head": "Esqueci a Senha de acesso", - + // "forgot-password.form.info": "Enter a new password in the box below, and confirm it by typing it again into the second box.", "forgot-password.form.info": "Introduza uma nova senha na caixa em baixo, e depois confirme introduzindo de novo na segunda caixa. Deverá ter pelo menos 6 caracteres.", - + // "forgot-password.form.card.security": "Security", "forgot-password.form.card.security": "Senha de acesso", - + // "forgot-password.form.identification.header": "Identify", "forgot-password.form.identification.header": "Identificação", // "forgot-password.form.identification.email": "Email address: ", "forgot-password.form.identification.email": "Endereço de correio eletrónico: ", - + // "forgot-password.form.label.password": "Password", "forgot-password.form.label.password": "Palavra-chave", // "forgot-password.form.label.passwordrepeat": "Retype to confirm", "forgot-password.form.label.passwordrepeat": "Insira a senha novamente para confirmar", - + // "forgot-password.form.error.empty-password": "Please enter a password in the box below.", "forgot-password.form.error.empty-password": "Indique uma senha na caixa abaixo.", - + // "forgot-password.form.error.matching-passwords": "The passwords do not match.", - "forgot-password.form.error.matching-passwords": "As palavras de acesso não coincidem.", - + "forgot-password.form.error.matching-passwords": "As palavras de acesso não coincidem.", + // "forgot-password.form.notification.error.title": "Error when trying to submit new password", "forgot-password.form.notification.error.title": "Erro ao submeter nova senha de acesso", - + // "forgot-password.form.notification.success.content": "The password reset was successful. You have been logged in as the created user.", "forgot-password.form.notification.success.content": "A recuperação da senha foi efetuada com sucesso. Foi iniciada sessão com o utilizador criado.", - + // "forgot-password.form.notification.success.title": "Password reset completed", "forgot-password.form.notification.success.title": "Recuperação da senha efetuada com sucesso", - + // "forgot-password.form.submit": "Submit password", "forgot-password.form.submit": "Enviar senha", - + // "form.add": "Add more", "form.add": "Adicionar mais", - + // "form.add-help": "Click here to add the current entry and to add another one", "form.add-help": "Clique aqui para submeter esta entrada e adicionar uma nova", @@ -2446,13 +2446,13 @@ // "form.clear-help": "Click here to remove the selected value", "form.clear-help": "Clique aqui para apagar o valor selecionado", - + // "form.discard": "Discard", "form.discard": "Cancelar", // "form.drag": "Drag", - "form.drag": "Arrastar", - + "form.drag": "Arrastar", + // "form.edit": "Edit", "form.edit": "Editar", @@ -2479,7 +2479,7 @@ // "form.loading": "Loading...", "form.loading": "Carregando...", - + // "form.lookup": "Lookup", "form.lookup": "Consulta", @@ -2491,7 +2491,7 @@ // "form.no-value": "No value entered", "form.no-value": "Nenhum valor informado", - + // "form.other-information": {}, "form.other-information": {}, @@ -2500,10 +2500,10 @@ // "form.save": "Save", "form.save": "Guardar", - + // "form.save-help": "Save changes", "form.save-help": "Guardar alterações", - + // "form.search": "Search", "form.search": "Pesquisar", @@ -2523,7 +2523,7 @@ "grant-deny-request-copy.email.back": "Voltar", // "grant-deny-request-copy.email.message": "Message", - "grant-deny-request-copy.email.message": "Mensagem", + "grant-deny-request-copy.email.message": "Mensagem", // "grant-deny-request-copy.email.message.empty": "Please enter a message", "grant-deny-request-copy.email.message.empty": "Por favor insira uma mensagem", @@ -2578,9 +2578,9 @@ // "grant-request-copy.success": "Successfully granted item request", "grant-request-copy.success": "Pedido de cópia concedido com sucesso!", - - // "health.breadcrumbs": "Health", - "health.breadcrumbs": "Diagnóstico do sistema", + + // "health.breadcrumbs": "Health", + "health.breadcrumbs": "Diagnóstico do sistema", // "health-page.heading": "Health", "health-page.heading": "Diagnóstico do sistema", @@ -2593,7 +2593,7 @@ // "health-page.error.msg": "The health check service is temporarily unavailable", "health-page.error.msg": "O serviço de diagnóstico está temporariamente indisponível", - + // "health-page.property.status": "Status code", "health-page.property.status": "Código Estado", @@ -2637,35 +2637,35 @@ "health-page.title": "Diagnóstico do sistema", // "health-page.section.no-issues": "No issues detected", - "health-page.section.no-issues": "Nenhum problema detetado", - + "health-page.section.no-issues": "Nenhum problema detetado", + // "home.description": "", "home.description": "", // "home.breadcrumbs": "Home", "home.breadcrumbs": "Página inicial", - + //"home.search-form.placeholder": "Search the repository...", "home.search-form.placeholder": "pesquisar no repositório...", // "home.title": "Home", "home.title": "Página inicial", - + // "home.top-level-communities.head": "Communities in DSpace", "home.top-level-communities.head": "Comunidades", - + // "home.top-level-communities.help": "Select a community to browse its collections.", "home.top-level-communities.help": "Selecione uma comunidade para navegar nas suas coleções", // "info.end-user-agreement.accept": "I have read and I agree to the End User Agreement", "info.end-user-agreement.accept": "Li e aceito os 'Termos de Uso'", - + // "info.end-user-agreement.accept.error": "An error occurred accepting the End User Agreement", "info.end-user-agreement.accept.error": "Ocorreu um erro ao aceitar os 'Termos de Uso'", - + // "info.end-user-agreement.accept.success": "Successfully updated the End User Agreement", "info.end-user-agreement.accept.success": "'Termos de Uso' atualizados com sucesso", - + // "info.end-user-agreement.breadcrumbs": "End User Agreement", "info.end-user-agreement.breadcrumbs": "Termos de Uso", @@ -2689,7 +2689,7 @@ // "info.privacy.title": "Privacy Statement", "info.privacy.title": "Política de Privacidade", - + // "info.feedback.breadcrumbs": "Feedback", "info.feedback.breadcrumbs": "Contacte-nos", @@ -2722,22 +2722,22 @@ // "info.feedback.error.message.required": "A comment is required", "info.feedback.error.message.required": "Deve inserir uma mensagem", - + // "info.feedback.page-label": "Page", "info.feedback.page-label": "Página/URL de contexo:", - // "info.feedback.page_help": "The page related to your feedback", + // "info.feedback.page_help": "The page related to your feedback", "info.feedback.page_help": "Esta é a página/URL que contextualiza o seu contacto.", - + // "item.alerts.private": "This item is non-discoverable", "item.alerts.private": "Este item é privado", // "item.alerts.withdrawn": "This item has been withdrawn", "item.alerts.withdrawn": "Este item foi retirado", - + // "item.edit.authorizations.heading": "With this editor you can view and alter the policies of an item, plus alter policies of individual item components: bundles and bitstreams. Briefly, an item is a container of bundles, and bundles are containers of bitstreams. Containers usually have ADD/REMOVE/READ/WRITE policies, while bitstreams only have READ/WRITE policies.", "item.edit.authorizations.heading": "Com este editor pode ver e alterar as políticas de um item, bem como alterar políticas de componentes individuais do item: 'pacotes' (bundles) e 'ficheiros' (bitstreams). Em resumo, um item contém 'pacotes' e os pacotes contêm 'ficheiros'. Os pacotes usualmente possuem políticas de ADICIONAR/REMOVER/LER/ESCREVER, por outro lado, os ficheiros apenas possuem políticas de LER/ESCREVER.", - + // "item.edit.authorizations.title": "Edit item's Policies", "item.edit.authorizations.title": "Editar políticas dos itens", @@ -2745,11 +2745,11 @@ "item.badge.private": "Privado", // "item.badge.withdrawn": "Withdrawn", - "item.badge.withdrawn": "Retirado", - + "item.badge.withdrawn": "Retirado", + // "item.bitstreams.upload.bundle": "Bundle", "item.bitstreams.upload.bundle": "Pacote", - + // "item.bitstreams.upload.bundle.placeholder": "Select a bundle or input new bundle name", "item.bitstreams.upload.bundle.placeholder": "Selecione um pacote ou insira o nome de um pacote novo", @@ -2773,19 +2773,19 @@ // "item.bitstreams.upload.notifications.bundle.created.title": "Created bundle", "item.bitstreams.upload.notifications.bundle.created.title": "Pacote criado", - + // "item.bitstreams.upload.notifications.upload.failed": "Upload failed. Please verify the content before retrying.", "item.bitstreams.upload.notifications.upload.failed": "O carregamento falhou. Verifique os ficheiro antes de tentar carregar de novo.", - + // "item.bitstreams.upload.title": "Upload bitstream", "item.bitstreams.upload.title": "Carregar ficheiro(s)", - + // "item.edit.bitstreams.bundle.edit.buttons.upload": "Upload", "item.edit.bitstreams.bundle.edit.buttons.upload": "Carregar", // "item.edit.bitstreams.bundle.displaying": "Currently displaying {{ amount }} bitstreams of {{ total }}.", "item.edit.bitstreams.bundle.displaying": "Atualmente a mostrar {{ amount }} ficheiros de {{ total }}.", - + // "item.edit.bitstreams.bundle.load.all": "Load all ({{ total }})", "item.edit.bitstreams.bundle.load.all": "Carregar todos ({{ total }})", @@ -2797,7 +2797,7 @@ // "item.edit.bitstreams.discard-button": "Discard", "item.edit.bitstreams.discard-button": "Cancelar", - + // "item.edit.bitstreams.edit.buttons.download": "Download", "item.edit.bitstreams.edit.buttons.download": "Descarregar", @@ -2812,7 +2812,7 @@ // "item.edit.bitstreams.edit.buttons.undo": "Undo changes", "item.edit.bitstreams.edit.buttons.undo": "Cancelar alterações", - + // "item.edit.bitstreams.empty": "This item doesn't contain any bitstreams. Click the upload button to create one.", "item.edit.bitstreams.empty": "Este item não possui ficheiros. Carregue um novo ficheiro.", @@ -2863,7 +2863,7 @@ // "item.edit.bitstreams.reinstate-button": "Undo", "item.edit.bitstreams.reinstate-button": "Cancelar", - + // "item.edit.bitstreams.save-button": "Save", "item.edit.bitstreams.save-button": "Guardar", @@ -2890,19 +2890,19 @@ // "item.edit.head": "Edit Item", "item.edit.head": "Editar item", - + // "item.edit.breadcrumbs": "Edit Item", "item.edit.breadcrumbs": "Editar item", - + // "item.edit.tabs.disabled.tooltip": "You're not authorized to access this tab", "item.edit.tabs.disabled.tooltip": "Não está autorizado a aceder a esta área!", - + // "item.edit.tabs.mapper.head": "Collection Mapper", "item.edit.tabs.mapper.head": "Mapeamento de coleção", - + // "item.edit.tabs.item-mapper.title": "Item Edit - Collection Mapper", "item.edit.tabs.item-mapper.title": "Editar item - Mapeamento de coleção", - + // "item.edit.identifiers.doi.status.UNKNOWN": "Unknown", "item.edit.identifiers.doi.status.UNKNOWN": "Desconhecido", @@ -2968,19 +2968,19 @@ // "item.edit.item-mapper.buttons.add": "Map item to selected collections", "item.edit.item-mapper.buttons.add": "Mapear item para coleção(ões) selecionada(s)", - + // "item.edit.item-mapper.buttons.remove": "Remove item's mapping for selected collections", "item.edit.item-mapper.buttons.remove": "Remover mapeamento(s) na(s) coleção(ões) selecionada(s)", - + // "item.edit.item-mapper.cancel": "Cancel", "item.edit.item-mapper.cancel": "Cancelar", // "item.edit.item-mapper.description": "This is the item mapper tool that allows administrators to map this item to other collections. You can search for collections and map them, or browse the list of collections the item is currently mapped to.", "item.edit.item-mapper.description": "Esta ferramenta permite mapear itens para outras coleções. Pode procurar coleções e mapeá-las ou navegar na lista de coleções nas quais o item está atualmente mapeado.", - + // "item.edit.item-mapper.head": "Item Mapper - Map Item to Collections", "item.edit.item-mapper.head": "Mapeador de item - Mapear itens em coleções", - + // "item.edit.item-mapper.item": "Item: \"{{name}}\"", "item.edit.item-mapper.item": "Item: \"{{name}}\"", @@ -3010,10 +3010,10 @@ // "item.edit.item-mapper.notifications.remove.success.head": "Removal of mapping completed", "item.edit.item-mapper.notifications.remove.success.head": "Completou a remoção de mapeamento", - + // "item.edit.item-mapper.search-form.placeholder": "Search collections...", "item.edit.item-mapper.search-form.placeholder": "Pesquisar coleções...", - + // "item.edit.item-mapper.tabs.browse": "Browse mapped collections", "item.edit.item-mapper.tabs.browse": "Navegar nas coleções mapeadas", @@ -3031,7 +3031,7 @@ // "item.edit.metadata.edit.buttons.drag": "Drag to reorder", "item.edit.metadata.edit.buttons.drag": "Arrastar para reordenar", - + // "item.edit.metadata.edit.buttons.edit": "Edit", "item.edit.metadata.edit.buttons.edit": "Editar", @@ -3043,7 +3043,7 @@ // "item.edit.metadata.edit.buttons.unedit": "Stop editing", "item.edit.metadata.edit.buttons.unedit": "Parar edição", - + // "item.edit.metadata.edit.buttons.virtual": "This is a virtual metadata value, i.e. a value inherited from a related entity. It can’t be modified directly. Add or remove the corresponding relationship in the \"Relationships\" tab", "item.edit.metadata.edit.buttons.virtual": "Este é um valor de metadados virtual, ou seja, um valor herdado de uma entidade relacionada. Não pode ser modificado diretamente. Adicionar ou remover a relação correspondente no separador 'Relacionamentos'", @@ -3055,13 +3055,13 @@ // "item.edit.metadata.headers.field": "Field", "item.edit.metadata.headers.field": "Campo (metadado)", - + // "item.edit.metadata.headers.language": "Lang", "item.edit.metadata.headers.language": "Idioma", // "item.edit.metadata.headers.value": "Value", "item.edit.metadata.headers.value": "Valor", - + // "item.edit.metadata.metadatafield.error": "An error occurred validating the metadata field", "item.edit.metadata.metadatafield.error": "Ocorreu um erro ao validar o campo de metadados", @@ -3070,40 +3070,40 @@ // "item.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", "item.edit.metadata.notifications.discarded.content": "As suas alterações foram descartadas. Para restabelecer suas alterações, clique no botão 'Desfazer'", - + // "item.edit.metadata.notifications.discarded.title": "Changes discarded", "item.edit.metadata.notifications.discarded.title": "Mudança descartada", - + // "item.edit.metadata.notifications.error.title": "An error occurred", "item.edit.metadata.notifications.error.title": "Ocorreu um erro!", - + // "item.edit.metadata.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", "item.edit.metadata.notifications.invalid.content": "As suas alterações não foram guardadas! Verifique se todos os campos são válidos antes de guardar.", - + // "item.edit.metadata.notifications.invalid.title": "Metadata invalid", "item.edit.metadata.notifications.invalid.title": "Metadado inválido", // "item.edit.metadata.notifications.outdated.content": "The item you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", "item.edit.metadata.notifications.outdated.content": "O registo em que está a trabalhar foi alterado por outro utilizador. As suas alterações serão descartadas para evitar conflitos", - + // "item.edit.metadata.notifications.outdated.title": "Changes outdated", "item.edit.metadata.notifications.outdated.title": "Alteração desatualizada", // "item.edit.metadata.notifications.saved.content": "Your changes to this item's metadata were saved.", "item.edit.metadata.notifications.saved.content": "As alterações que realizou nos metadados deste registo foram salvas.", - + // "item.edit.metadata.notifications.saved.title": "Metadata saved", "item.edit.metadata.notifications.saved.title": "Metadados salvos", // "item.edit.metadata.reinstate-button": "Undo", "item.edit.metadata.reinstate-button": "Desfazer", - + // "item.edit.metadata.reset-order-button": "Undo reorder", "item.edit.metadata.reset-order-button": "Desfazer reordenamento", - + // "item.edit.metadata.save-button": "Save", "item.edit.metadata.save-button": "Guardar", - + // "item.edit.modify.overview.field": "Field", "item.edit.modify.overview.field": "Campo", @@ -3112,16 +3112,16 @@ // "item.edit.modify.overview.value": "Value", "item.edit.modify.overview.value": "Valor", - + // "item.edit.move.cancel": "Back", "item.edit.move.cancel": "Cancelar", - + // "item.edit.move.save-button": "Save", "item.edit.move.save-button": "Guardar", - + // "item.edit.move.discard-button": "Discard", - "item.edit.move.discard-button": "Cancelar", - + "item.edit.move.discard-button": "Cancelar", + // "item.edit.move.description": "Select the collection you wish to move this item to. To narrow down the list of displayed collections, you can enter a search query in the box.", "item.edit.move.description": "Selecione a coleção para a qual você deseja mover este item. Para restringir a lista de coleções exibidas, você pode inserir uma consulta de pesquisa na caixa.", @@ -3154,40 +3154,40 @@ // "item.edit.private.cancel": "Cancel", "item.edit.private.cancel": "Cancelar", - + // "item.edit.private.confirm": "Make it non-discoverable", "item.edit.private.confirm": "Tornar Privado", - + // "item.edit.private.description": "Are you sure this item should be made non-discoverable in the archive?", "item.edit.private.description": "Tem certeza de que este item deve ser tornado privado?", - + // "item.edit.private.error": "An error occurred while making the item non-discoverable", "item.edit.private.error": "Ocorreu um erro ao tornar o item privado", - + // "item.edit.private.header": "Make item non-discoverable: {{ id }}", "item.edit.private.header": "Tornar privado o item: {{ id }}", - + // "item.edit.private.success": "The item is now non-discoverable", "item.edit.private.success": "O item agora é privado", - + // "item.edit.public.cancel": "Cancel", "item.edit.public.cancel": "Cancelar", - + // "item.edit.public.confirm": "Make it discoverable", "item.edit.public.confirm": "Tornar público", - + // "item.edit.public.description": "Are you sure this item should be made discoverable in the archive?", "item.edit.public.description": "Você tem certeza que deseja tornar este item público?", - + // "item.edit.public.error": "An error occurred while making the item discoverable", "item.edit.public.error": "Ocorreu um erro ao tornar o item público", - + // "item.edit.public.header": "Make item discoverable: {{ id }}", "item.edit.public.header": "Tornar público o item: {{ id }}", - + // "item.edit.public.success": "The item is now discoverable", "item.edit.public.success": "O item agora é público!", - + // "item.edit.reinstate.cancel": "Cancel", "item.edit.reinstate.cancel": "Cancelar", @@ -3205,10 +3205,10 @@ // "item.edit.reinstate.success": "The item was reinstated successfully", "item.edit.reinstate.success": "O item foi restabelecido com sucesso", - + // "item.edit.relationships.discard-button": "Discard", "item.edit.relationships.discard-button": "Cancelar", - + // "item.edit.relationships.edit.buttons.add": "Add", "item.edit.relationships.edit.buttons.add": "Adicionar", @@ -3217,16 +3217,16 @@ // "item.edit.relationships.edit.buttons.undo": "Undo changes", "item.edit.relationships.edit.buttons.undo": "Cancelar alterações", - + // "item.edit.relationships.no-relationships": "No relationships", "item.edit.relationships.no-relationships": "Sem relações", // "item.edit.relationships.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", "item.edit.relationships.notifications.discarded.content": "Suas alterações foram canceladas. Para restabelecer suas alterações, clique no botão 'Cancelar'", - + // "item.edit.relationships.notifications.discarded.title": "Changes discarded", "item.edit.relationships.notifications.discarded.title": "Alterações canceladas", - + // "item.edit.relationships.notifications.failed.title": "Error editing relationships", "item.edit.relationships.notifications.failed.title": "Erro ao apagar relação", @@ -3247,16 +3247,16 @@ // "item.edit.relationships.save-button": "Save", "item.edit.relationships.save-button": "Guardar", - + // "item.edit.relationships.no-entity-type": "Add 'dspace.entity.type' metadata to enable relationships for this item", "item.edit.relationships.no-entity-type": "Adicione o metadado 'dspace.entity.type' para ativar relações neste item!", - - // "item.edit.return": "Back", + + // "item.edit.return": "Back", "item.edit.return": "Voltar", - + // "item.edit.tabs.bitstreams.head": "Bitstreams", "item.edit.tabs.bitstreams.head": "Ficheiros do item", - + // "item.edit.tabs.bitstreams.title": "Item Edit - Bitstreams", "item.edit.tabs.bitstreams.title": "Editar Item - Ficheiros", @@ -3265,28 +3265,28 @@ // "item.edit.tabs.curate.title": "Item Edit - Curate", "item.edit.tabs.curate.title": "Editar item - Curadoria", - + // "item.edit.tabs.metadata.head": "Metadata", "item.edit.tabs.metadata.head": "Metadados do item", - + // "item.edit.tabs.metadata.title": "Item Edit - Metadata", "item.edit.tabs.metadata.title": "Editar Item - Metadados", // "item.edit.tabs.relationships.head": "Relationships", "item.edit.tabs.relationships.head": "Relações do item", - + // "item.edit.tabs.relationships.title": "Item Edit - Relationships", "item.edit.tabs.relationships.title": "Editar Item - Relacionamentos", // "item.edit.tabs.status.buttons.authorizations.button": "Authorizations...", "item.edit.tabs.status.buttons.authorizations.button": "Permissões...", - + // "item.edit.tabs.status.buttons.authorizations.label": "Edit item's authorization policies", "item.edit.tabs.status.buttons.authorizations.label": "Editar políticas de permissões de item", - + // "item.edit.tabs.status.buttons.delete.button": "Permanently delete", "item.edit.tabs.status.buttons.delete.button": "Apagar definitivamente", - + // "item.edit.tabs.status.buttons.delete.label": "Completely expunge item", "item.edit.tabs.status.buttons.delete.label": "Eliminar completamente o item", @@ -3295,22 +3295,22 @@ // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", "item.edit.tabs.status.buttons.mappedCollections.label": "Gerir coleções mapeadas", - + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", "item.edit.tabs.status.buttons.move.button": "Mover este item para outra coleção", - + // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", "item.edit.tabs.status.buttons.move.label": "Mover item para outra coleção", - + // "item.edit.tabs.status.buttons.private.button": "Make it non-discoverable...", "item.edit.tabs.status.buttons.private.button": "Tornar o item privado...", - + // "item.edit.tabs.status.buttons.private.label": "Make item non-discoverable", "item.edit.tabs.status.buttons.private.label": "Tornar o item privado", - + // "item.edit.tabs.status.buttons.public.button": "Make it discoverable...", "item.edit.tabs.status.buttons.public.button": "Tornar público o item...", - + // "item.edit.tabs.status.buttons.public.label": "Make item discoverable", "item.edit.tabs.status.buttons.public.label": "Tornar público o item", @@ -3319,31 +3319,31 @@ // "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", "item.edit.tabs.status.buttons.reinstate.label": "Restabelecer item no repositório", - + // "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", "item.edit.tabs.status.buttons.unauthorized": "Não possui autorizações para realizar esta ação!", - + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", "item.edit.tabs.status.buttons.withdraw.button": "Retirar este item", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", "item.edit.tabs.status.buttons.withdraw.label": "Retirar item da vista pública do repositório", - + // "item.edit.tabs.status.description": "Welcome to the item management page. From here you can withdraw, reinstate, move or delete the item. You may also update or add new metadata / bitstreams on the other tabs.", "item.edit.tabs.status.description": "Bem-vindo à página de gestão de itens. Nesta área, pode retirar, restabelecer, mover ou apagar definitivamente o item. Adicionalmente, também pode atualizar ou adicionar novos metadados / bitstreams percorrendo pelas outras abas.", - + // "item.edit.tabs.status.head": "Status", "item.edit.tabs.status.head": "Estado do item", - + // "item.edit.tabs.status.labels.handle": "Handle", "item.edit.tabs.status.labels.handle": "Handle", // "item.edit.tabs.status.labels.id": "Item Internal ID", "item.edit.tabs.status.labels.id": "ID Interno do item", - + // "item.edit.tabs.status.labels.itemPage": "Item Page", "item.edit.tabs.status.labels.itemPage": "Página do item", - + // "item.edit.tabs.status.labels.lastModified": "Last Modified", "item.edit.tabs.status.labels.lastModified": "Ultima alteração", @@ -3352,13 +3352,13 @@ // "item.edit.tabs.versionhistory.head": "Version History", "item.edit.tabs.versionhistory.head": "Histórico de versões", - + // "item.edit.tabs.versionhistory.title": "Item Edit - Version History", "item.edit.tabs.versionhistory.title": "Edições do Item - Histórico de versões", - + // "item.edit.tabs.versionhistory.under-construction": "Editing or adding new versions is not yet possible in this user interface.", "item.edit.tabs.versionhistory.under-construction": "Editar ou adicionar novas versões ainda não é possível neste interface de utilizador.", - + // "item.edit.tabs.view.head": "View Item", "item.edit.tabs.view.head": "Visualizar Item", @@ -3382,22 +3382,22 @@ // "item.edit.withdraw.success": "The item was withdrawn successfully", "item.edit.withdraw.success": "O item foi retirado com sucesso!", - + // "item.orcid.return": "Back", "item.orcid.return": "Voltar", - + // "item.listelement.badge": "Item", "item.listelement.badge": "Item", // "item.page.description": "Description", "item.page.description": "Descrição", - + // "item.page.journal-issn": "Journal ISSN", "item.page.journal-issn": "ISSN da revista", - + // "item.page.journal-title": "Journal Title", "item.page.journal-title": "Título da revista", - + // "item.page.publisher": "Publisher", "item.page.publisher": "Editora", @@ -3409,19 +3409,19 @@ // "item.search.results.head": "Item Search Results", "item.search.results.head": "Resultados da pesquisa de item", - + // "item.search.title": "Item Search", "item.search.title": "Pesquisa de item", - + // "item.truncatable-part.show-more": "Show more", "item.truncatable-part.show-more": "Mostrar mais", // "item.truncatable-part.show-less": "Collapse", "item.truncatable-part.show-less": "Colapsar", - + // "workflow-item.search.result.delete-supervision.modal.header": "Delete Supervision Order", "workflow-item.search.result.delete-supervision.modal.header": "Eliminar ordem de supervisão", - + // "workflow-item.search.result.delete-supervision.modal.info": "Are you sure you want to delete Supervision Order", "workflow-item.search.result.delete-supervision.modal.info": "Tem a certeza de que quer remover a ordem de supervisão", @@ -3454,13 +3454,13 @@ // "item.page.collections": "Collections", "item.page.collections": "Coleções", - + // "item.page.collections.loading": "Loading...", "item.page.collections.loading": "A carregar...", - + // "item.page.collections.load-more": "Load more", "item.page.collections.load-more": "Carregar mais", - + // "item.page.date": "Date", "item.page.date": "Data", @@ -3475,7 +3475,7 @@ // "item.page.filesection.download": "Download", "item.page.filesection.download": "Ver/Abrir", - + // "item.page.filesection.format": "Format:", "item.page.filesection.format": "Formato:", @@ -3493,13 +3493,13 @@ // "item.page.link.simple": "Simple item page", "item.page.link.simple": "Ver registo simples", - + // "item.page.orcid.title": "ORCID", "item.page.orcid.title": "ORCID", // "item.page.orcid.tooltip": "Open ORCID setting page", "item.page.orcid.tooltip": "Abrir página de configuração do ORCID", - + // "item.page.person.search.title": "Articles by this author", "item.page.person.search.title": "Artigos deste autor", @@ -3517,10 +3517,10 @@ // "item.page.relationships.isOrgUnitOfPerson": "Authors", "item.page.relationships.isOrgUnitOfPerson": "Autores", - + // "item.page.relationships.isOrgUnitOfProject": "Research Projects", "item.page.relationships.isOrgUnitOfProject": "Projetos de investigação", - + // "item.page.subject": "Keywords", "item.page.subject": "Palavras-chave", @@ -3538,7 +3538,7 @@ // "item.page.filesection.license.bundle": "License bundle", "item.page.filesection.license.bundle": "Licença", - + // "item.page.return": "Back", "item.page.return": "Voltar", @@ -3546,14 +3546,14 @@ "item.page.version.create": "Criar nova versão", // "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", - "item.page.version.hasDraft": "Um nova versão não pode ser criada porque já se encontra uma submisão em curso no histórico de versões.", - + "item.page.version.hasDraft": "Um nova versão não pode ser criada porque já se encontra uma submisão em curso no histórico de versões.", + // "item.page.claim.button": "Claim", "item.page.claim.button": "Reivindicar", // "item.page.claim.tooltip": "Claim this item as profile", "item.page.claim.tooltip": "Reivindicar este item como perfil", - + // "item.preview.dc.identifier.uri": "Identifier:", "item.preview.dc.identifier.uri": "Identificador:", @@ -3577,10 +3577,10 @@ // "item.preview.dc.title": "Title:", "item.preview.dc.title": "Título:", - + // "item.preview.dc.type": "Type:", "item.preview.dc.type": "Tipo:", - + // "item.preview.oaire.citation.issue": "Issue", "item.preview.oaire.citation.issue": "Issue", @@ -3588,17 +3588,17 @@ "item.preview.oaire.citation.volume": "Volume", // "item.preview.dc.relation.issn": "ISSN", - "item.preview.dc.relation.issn": "ISSN", - + "item.preview.dc.relation.issn": "ISSN", + // "item.preview.dc.relation.eissn": "EISSN", "item.preview.dc.relation.eissn": "EISSN", // "item.preview.dc.identifier.isbn": "ISBN", - "item.preview.dc.identifier.isbn": "ISBN", - + "item.preview.dc.identifier.isbn": "ISBN", + // "item.preview.dc.identifier.eisbn": "EISBN", "item.preview.dc.identifier.eisbn": "EISBN", - + // "item.preview.dc.identifier.tid": "TID", "item.preview.dc.identifier.tid": "TID", @@ -3609,8 +3609,8 @@ "item.preview.dc.relation.ispartof": "Revista ou Série", // "item.preview.dc.identifier.doi": "DOI", - "item.preview.dc.identifier.doi": "DOI", - + "item.preview.dc.identifier.doi": "DOI", + // "item.preview.person.familyName": "Surname:", "item.preview.person.familyName": "Apelido:", @@ -3619,7 +3619,7 @@ // "item.preview.person.identifier.orcid": "ORCID:", "item.preview.person.identifier.orcid": "ORCID:", - + // "item.preview.project.funder.name": "Funder:", "item.preview.project.funder.name": "Financiador:", @@ -3634,16 +3634,16 @@ // "item.preview.dc.coverage.spatial": "Jurisdiction:", "item.preview.dc.coverage.spatial": "Jurisdição:", - + // "item.preview.oaire.fundingStream": "Funding Stream:", "item.preview.oaire.fundingStream": "Linha de financiamento:", - + // "item.select.confirm": "Confirm selected", "item.select.confirm": "Confirmar seleção", // "item.select.empty": "No items to show", "item.select.empty": "Nenhum item para mostrar.", - + // "item.select.table.author": "Author", "item.select.table.author": "Autor", @@ -3652,19 +3652,19 @@ // "item.select.table.title": "Title", "item.select.table.title": "Título", - + // "item.version.history.empty": "There are no other versions for this item yet.", "item.version.history.empty": "Ainda não existem outras versões deste item.", - + // "item.version.history.head": "Version History", "item.version.history.head": "Histórico de versões", - + // "item.version.history.return": "Back", "item.version.history.return": "Voltar", // "item.version.history.selected": "Selected version", "item.version.history.selected": "Versão selecionada", - + // "item.version.history.selected.alert": "You are currently viewing version {{version}} of the item.", "item.version.history.selected.alert": "Está a ver a versão {{version}} do item.", @@ -3712,16 +3712,16 @@ // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", "item.version.history.table.action.hasDraft": "Uma nova versão não pode ser criada porque se encontra um depósito em curso no histórico de versões", - + // "item.version.notice": "This is not the latest version of this item. The latest version can be found here.", "item.version.notice": "Esta não é a última versão deste item. A última versão pode ser encontrada aqui.", - + // "item.version.create.modal.header": "New version", "item.version.create.modal.header": "Nova versão", // "item.version.create.modal.text": "Create a new version for this item", "item.version.create.modal.text": "Criar uma nova versão para este item", - + // "item.version.create.modal.text.startingFrom": "starting from version {{version}}", "item.version.create.modal.text.startingFrom": "Iniciar a partir da versão {{version}}", @@ -3742,16 +3742,16 @@ // "item.version.create.modal.form.summary.placeholder": "Insert the summary for the new version", "item.version.create.modal.form.summary.placeholder": "Inserir o sumário para a nova versão", - - // "item.version.create.modal.submitted.header": "Creating new version...", - "item.version.create.modal.submitted.header": "Criar uma nova versão...", - // "item.version.create.modal.submitted.text": "The new version is being created. This may take some time if the item has a lot of relationships.", + // "item.version.create.modal.submitted.header": "Creating new version...", + "item.version.create.modal.submitted.header": "Criar uma nova versão...", + + // "item.version.create.modal.submitted.text": "The new version is being created. This may take some time if the item has a lot of relationships.", "item.version.create.modal.submitted.text": "A nova versão está a ser criada. Isto pode demorar algum tempo se o item tiver muitas relações.", // "item.version.create.notification.success": "New version has been created with version number {{version}}", "item.version.create.notification.success": "Nova versão foi criada com o número {{version}}", - + // "item.version.create.notification.failure": "New version has not been created", "item.version.create.notification.failure": "Nova versão não foi criada", @@ -3763,7 +3763,7 @@ // "item.version.delete.modal.text": "Do you want to delete version {{version}}?", "item.version.delete.modal.text": "Pretende remover a versão {{version}}?", - + // "item.version.delete.modal.button.confirm": "Delete", "item.version.delete.modal.button.confirm": "Remover", @@ -3775,7 +3775,7 @@ // "item.version.delete.modal.button.cancel.tooltip": "Do not delete this version", "item.version.delete.modal.button.cancel.tooltip": "Não remover esta versão", - + // "item.version.delete.notification.success": "Version number {{version}} has been deleted", "item.version.delete.notification.success": "A versão número {{version}} foi removida", @@ -3787,12 +3787,12 @@ // "item.version.edit.notification.failure": "The summary of version number {{version}} has not been changed", "item.version.edit.notification.failure": "O sumário da versão número {{version}} não foi alterado", - + // "itemtemplate.edit.metadata.add-button": "Add", "itemtemplate.edit.metadata.add-button": "Adicionar", // "itemtemplate.edit.metadata.discard-button": "Discard", - "itemtemplate.edit.metadata.discard-button": 'Rejeitar', + "itemtemplate.edit.metadata.discard-button": "Rejeitar", // "itemtemplate.edit.metadata.edit.buttons.confirm": "Confirm", "itemtemplate.edit.metadata.edit.buttons.confirm": "Confirmar", @@ -3868,7 +3868,7 @@ // "itemtemplate.edit.metadata.save-button": "Save", "itemtemplate.edit.metadata.save-button": "Guardar", - + // "journal.listelement.badge": "Journal", "journal.listelement.badge": "Revista", @@ -3889,19 +3889,19 @@ // "journal.page.titleprefix": "Journal: ", "journal.page.titleprefix": "Revista: ", - + // "journal.search.results.head": "Journal Search Results", "journal.search.results.head": "Resultado da pesquisa de revistas", - + // "journal-relationships.search.results.head": "Journal Search Results", "journal-relationships.search.results.head": "Resultado da pesquisa de revistas", - + // "journal.search.title": "Journal Search", "journal.search.title": "Pesquisa de revistas", - + // "journalissue.listelement.badge": "Journal Issue", "journalissue.listelement.badge": "Número de revista", - + // "journalissue.page.description": "Description", "journalissue.page.description": "Descrição", @@ -3910,25 +3910,25 @@ // "journalissue.page.issuedate": "Issue Date", "journalissue.page.issuedate": "Data de publicação", - + // "journalissue.page.journal-issn": "Journal ISSN", "journalissue.page.journal-issn": "ISSN da revista", - + // "journalissue.page.journal-title": "Journal Title", "journalissue.page.journal-title": "Título da revista", - + // "journalissue.page.keyword": "Keywords", "journalissue.page.keyword": "Palavras-chave", // "journalissue.page.number": "Number", "journalissue.page.number": "Número de páginas", - + // "journalissue.page.titleprefix": "Journal Issue: ", "journalissue.page.titleprefix": "Número de revista: ", - + // "journalvolume.listelement.badge": "Journal Volume", "journalvolume.listelement.badge": "Volume de revista", - + // "journalvolume.page.description": "Description", "journalvolume.page.description": "Descrição", @@ -3937,13 +3937,13 @@ // "journalvolume.page.issuedate": "Issue Date", "journalvolume.page.issuedate": "Data de publicação", - + // "journalvolume.page.titleprefix": "Journal Volume: ", "journalvolume.page.titleprefix": "Volume de revista: ", - + // "journalvolume.page.volume": "Volume", "journalvolume.page.volume": "Volume", - + // "iiifsearchable.listelement.badge": "Document Media", "iiifsearchable.listelement.badge": "Media do documeo", @@ -3974,9 +3974,9 @@ // "iiif.page.issue": "Issue: ", "iiif.page.issue": "Número: ", - // "iiif.page.description": "Description: ", - "iiif.page.description": "Description: ", - + // "iiif.page.description": "Description: ", + "iiif.page.description": "Description: ", + // "loading.bitstream": "Loading bitstream...", "loading.bitstream": "A carregar ficheiro...", @@ -4018,7 +4018,7 @@ // "loading.recent-submissions": "Loading recent submissions...", "loading.recent-submissions": "A carregar depósitos recentes...", - + // "loading.search-results": "Loading search results...", "loading.search-results": "A carregar resultados de pesquisa...", @@ -4042,22 +4042,22 @@ // "login.form.new-user": "New user? Click here to register.", "login.form.new-user": "Novo utilizador? Clique aqui para se registar.", - + // "login.form.or-divider": "or", "login.form.or-divider": "ou", - + // "login.form.oidc": "Log in with OIDC", "login.form.oidc": "Entrar com OIDC", - + // "login.form.orcid": "Log in with ORCID", "login.form.orcid": "Entrar com ORCID", - + // "login.form.password": "Password", "login.form.password": "Palavra-chave", // "login.form.shibboleth": "Log in with Shibboleth", "login.form.shibboleth": "Entrar com autenticação federada", - + // "login.form.submit": "Log in", "login.form.submit": "Entrar", @@ -4066,16 +4066,16 @@ // "login.breadcrumbs": "Login", "login.breadcrumbs": "Entrar", - + // "logout.form.header": "Log out from DSpace", "logout.form.header": "Sair do repositório", - + // "logout.form.submit": "Log out", "logout.form.submit": "Sair", // "logout.title": "Logout", "logout.title": "Sair", - + // "menu.header.admin": "Management", "menu.header.admin": "Administração", @@ -4084,10 +4084,10 @@ // "menu.header.admin.description": "Management menu", "menu.header.admin.description": "Menu de administração", - + // "menu.section.access_control": "Access Control", "menu.section.access_control": "Controlo de acesso", - + // "menu.section.access_control_authorizations": "Authorizations", "menu.section.access_control_authorizations": "Autorizações", @@ -4095,47 +4095,47 @@ "menu.section.access_control_groups": "Grupos", // "menu.section.access_control_people": "People", - "menu.section.access_control_people": "Pessoas", - + "menu.section.access_control_people": "Pessoas", + // "menu.section.admin_search": "Admin Search", "menu.section.admin_search": "Pesquisa administrativa", - + // "menu.section.browse_community": "This Community", "menu.section.browse_community": "Esta comunidade", - + // "menu.section.browse_community_by_author": "By Author", "menu.section.browse_community_by_author": "Por autor", - + // "menu.section.browse_community_by_issue_date": "By Issue Date", "menu.section.browse_community_by_issue_date": "Por data de publicação", - + // "menu.section.browse_community_by_title": "By Title", "menu.section.browse_community_by_title": "Por título", - + // "menu.section.browse_global": "All of DSpace", "menu.section.browse_global": "Percorrer repositório", - + // "menu.section.browse_global_by_author": "By Author", "menu.section.browse_global_by_author": "Por autor", - + // "menu.section.browse_global_by_dateissued": "By Issue Date", "menu.section.browse_global_by_dateissued": "Por data de publicação", - + // "menu.section.browse_global_by_subject": "By Subject", "menu.section.browse_global_by_subject": "Por assunto", - + // "menu.section.browse_global_by_title": "By Title", "menu.section.browse_global_by_title": "Por título", - + // "menu.section.browse_global_communities_and_collections": "Communities & Collections", "menu.section.browse_global_communities_and_collections": "Comunidades & Coleções", - + // "menu.section.control_panel": "Control Panel", "menu.section.control_panel": "Painel de controle", - + // "menu.section.curation_task": "Curation Task", "menu.section.curation_task": "Tarefas de curadoria", - + // "menu.section.edit": "Edit", "menu.section.edit": "Editar", @@ -4162,10 +4162,10 @@ // "menu.section.export_metadata": "Metadata", "menu.section.export_metadata": "Metadados", - + // "menu.section.export_batch": "Batch Export (ZIP)", "menu.section.export_batch": "Importação em lote (ZIP)", - + // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": "Secção do menu Controle de Acesso", @@ -4174,10 +4174,10 @@ // "menu.section.icon.control_panel": "Control Panel menu section", "menu.section.icon.control_panel": "Secção do menu Painel de Controlo", - + // "menu.section.icon.curation_tasks": "Curation Task menu section", "menu.section.icon.curation_tasks": "Secção do menu tarefas de curadoria", - + // "menu.section.icon.edit": "Edit menu section", "menu.section.icon.edit": "Secção do menu Editar", @@ -4186,10 +4186,10 @@ // "menu.section.icon.find": "Find menu section", "menu.section.icon.find": "Secção do menu Pesquisar", - + // "menu.section.icon.health": "Health check menu section", "menu.section.icon.health": "Seção do menu Diagnóstico do sistema", - + // "menu.section.icon.import": "Import menu section", "menu.section.icon.import": "Secção do menu Importar", @@ -4198,31 +4198,31 @@ // "menu.section.icon.pin": "Pin sidebar", "menu.section.icon.pin": "Fixar barra lateral", - + // "menu.section.icon.processes": "Processes Health", "menu.section.icon.processes": "Processos diagnóstico", - + // "menu.section.icon.registries": "Registries menu section", "menu.section.icon.registries": "Secção do menu Registos", // "menu.section.icon.statistics_task": "Statistics Task menu section", "menu.section.icon.statistics_task": "Secção do menu Tarefas de Estatísticas", - + // "menu.section.icon.workflow": "Administer workflow menu section", "menu.section.icon.workflow": "Menu administração de tarefas", - + // "menu.section.icon.unpin": "Unpin sidebar", "menu.section.icon.unpin": "Soltar barra lateral", - + // "menu.section.import": "Import", "menu.section.import": "Importar", - + // "menu.section.import_batch": "Batch import (ZIP)", "menu.section.import_batch": "Importação em lote (ZIP)", - + // "menu.section.import_metadata": "Metadata", "menu.section.import_metadata": "Metadados", - + // "menu.section.new": "New", "menu.section.new": "Novo", @@ -4237,10 +4237,10 @@ // "menu.section.new_item_version": "Item Version", "menu.section.new_item_version": "Versão do item", - + // "menu.section.new_process": "Process", "menu.section.new_process": "Processos", - + // "menu.section.pin": "Pin sidebar", "menu.section.pin": "Fixar barra lateral", @@ -4249,10 +4249,10 @@ // "menu.section.processes": "Processes", "menu.section.processes": "Processos", - + // "menu.section.health": "Health", "menu.section.health": "Diagnóstico do sistema", - + // "menu.section.registries": "Registries", "menu.section.registries": "Registos", @@ -4267,55 +4267,55 @@ // "menu.section.statistics_task": "Statistics Task", "menu.section.statistics_task": "Tarefa de estatísticas", - + // "menu.section.toggle.access_control": "Toggle Access Control section", "menu.section.toggle.access_control": "Alternar secção controle de acesso", - + // "menu.section.toggle.control_panel": "Toggle Control Panel section", "menu.section.toggle.control_panel": "Alternar secção painel de controle", - + // "menu.section.toggle.curation_task": "Toggle Curation Task section", "menu.section.toggle.curation_task": "Alternar secção tarefas de curadoria", - + // "menu.section.toggle.edit": "Toggle Edit section", "menu.section.toggle.edit": "Alternar secção editar", - + // "menu.section.toggle.export": "Toggle Export section", "menu.section.toggle.export": "Alternar secção exportar", - + // "menu.section.toggle.find": "Toggle Find section", "menu.section.toggle.find": "Alternar secção pesquisa", - + // "menu.section.toggle.import": "Toggle Import section", "menu.section.toggle.import": "Alternar secção importar", - + // "menu.section.toggle.new": "Toggle New section", "menu.section.toggle.new": "Alternar nova secção", - + // "menu.section.toggle.registries": "Toggle Registries section", "menu.section.toggle.registries": "Alternar secção registos", - + // "menu.section.toggle.statistics_task": "Toggle Statistics Task section", "menu.section.toggle.statistics_task": "Alternar secção tarefas de estatísticas", - + // "menu.section.workflow": "Administer Workflow", "menu.section.workflow": "Gestão do workflow", - + // "metadata-export-search.tooltip": "Export search results as CSV", "metadata-export-search.tooltip": "Exportar resultados de pesquisa em CSV", - - // "metadata-export-search.submit.success": "The export was started successfully", + + // "metadata-export-search.submit.success": "The export was started successfully", "metadata-export-search.submit.success": "A exportação foi iniciada com sucesso", - + // "metadata-export-search.submit.error": "Starting the export has failed", "metadata-export-search.submit.error": "O início da exportação falhou!", - + // "mydspace.breadcrumbs": "MyDSpace", - "mydspace.breadcrumbs": "Área Pessoal", - + "mydspace.breadcrumbs": "Área Pessoal", + // "mydspace.description": "", "mydspace.description": "", - + // "mydspace.messages.controller-help": "Select this option to send a message to item's submitter.", "mydspace.messages.controller-help": "Selecione esta opção para enviar uma mensagem para o depositante do item.", @@ -4357,7 +4357,7 @@ // "mydspace.new-submission": "New submission", "mydspace.new-submission": "Novo depósito", - + // "mydspace.new-submission-external": "Import metadata from external source", "mydspace.new-submission-external": "Importar metadados de fontes externas", @@ -4366,7 +4366,7 @@ // "mydspace.results.head": "Your submissions", "mydspace.results.head": "Meus depósitos", - + // "mydspace.results.no-abstract": "No Abstract", "mydspace.results.no-abstract": "Sem Resumo", @@ -4375,13 +4375,13 @@ // "mydspace.results.no-collections": "No Collections", "mydspace.results.no-collections": "Sem coleções", - + // "mydspace.results.no-date": "No Date", "mydspace.results.no-date": "Sem data", - + // "mydspace.results.no-files": "No Files", "mydspace.results.no-files": "Sem ficheiros", - + // "mydspace.results.no-results": "There were no items to show", "mydspace.results.no-results": "Não havia itens a mostrar", @@ -4392,32 +4392,32 @@ "mydspace.results.no-uri": "Sem URI", // "mydspace.search-form.placeholder": "Search in mydspace...", - "mydspace.search-form.placeholder": "Pesquisar na Área Pessoal...", - + "mydspace.search-form.placeholder": "Pesquisar na Área Pessoal...", + // "mydspace.show.workflow": "Workflow tasks", "mydspace.show.workflow": "Todas as tarefas", // "mydspace.show.workspace": "Your Submissions", "mydspace.show.workspace": "Meus depósitos", - + // "mydspace.show.supervisedWorkspace": "Supervised items", "mydspace.show.supervisedWorkspace": "Itens supervisionados", - + // "mydspace.status.archived": "Archived", "mydspace.status.archived": "Depósito aceite", - + // "mydspace.status.validation": "Validation", "mydspace.status.validation": "Em validação", - + // "mydspace.status.waiting-for-controller": "Waiting for controller", "mydspace.status.waiting-for-controller": "Aguarda validador", - + // "mydspace.status.workflow": "Workflow", "mydspace.status.workflow": "Em fluxo de trabalho", - + // "mydspace.status.workspace": "Workspace", "mydspace.status.workspace": "Depósito por terminar", - + // "mydspace.title": "MyDSpace", "mydspace.title": "Área Pessoal", @@ -4435,31 +4435,31 @@ // "mydspace.view-btn": "View", "mydspace.view-btn": "Ver", - + // "nav.browse.header": "All of DSpace", "nav.browse.header": "Tudo no repositório", - + // "nav.community-browse.header": "By Community", "nav.community-browse.header": "Por comunidade", - + // "nav.context-help-toggle": "Toggle context help", "nav.context-help-toggle": "Alternar ajuda contextual", // "nav.language": "Language switch", "nav.language": "Escolher idioma", - + // "nav.login": "Log In", "nav.login": "Entrar", - + // "nav.user-profile-menu-and-logout": "User profile menu and Log Out", "nav.user-profile-menu-and-logout": "Menu perfil do utilizador e sair", - + // "nav.logout": "Log Out", "nav.logout": "Sair", - + // "nav.main.description": "Main navigation bar", "nav.main.description": "Barra de naveção principal", - + // "nav.mydspace": "MyDSpace", "nav.mydspace": "Área Pessoal", @@ -4476,8 +4476,8 @@ "nav.stop-impersonating": "Deixar de assumir o papel do utilizador", // "nav.subscriptions": "Subscriptions", - "nav.subscriptions": "Subscrições de alertas", - + "nav.subscriptions": "Subscrições de alertas", + // "nav.toggle": "Toggle navigation", "nav.toggle": "Alternar a navegação", @@ -4486,13 +4486,13 @@ // "none.listelement.badge": "Item", "none.listelement.badge": "Item", - + // "orgunit.listelement.badge": "Organizational Unit", "orgunit.listelement.badge": "Organização", - + // "orgunit.listelement.no-title": "Untitled", "orgunit.listelement.no-title": "Sem título", - + // "orgunit.page.city": "City", "orgunit.page.city": "Cidade", @@ -4513,10 +4513,10 @@ // "orgunit.page.titleprefix": "Organizational Unit: ", "orgunit.page.titleprefix": "Organização: ", - + // "pagination.options.description": "Pagination options", - "pagination.options.description": "Opções de paginação", - + "pagination.options.description": "Opções de paginação", + // "pagination.results-per-page": "Results Per Page", "pagination.results-per-page": "Resultados por página", @@ -4528,7 +4528,7 @@ // "pagination.sort-direction": "Sort Options", "pagination.sort-direction": "Opções de ordenação", - + // "person.listelement.badge": "Person", "person.listelement.badge": "Pessoa", @@ -4555,7 +4555,7 @@ // "person.page.name": "Name", "person.page.name": "Nome", - + // "person.page.link.full": "Show all metadata", "person.page.link.full": "Mostrar todos os metadados", @@ -4570,19 +4570,19 @@ // "person.search.results.head": "Person Search Results", "person.search.results.head": "Resultados da pesquisa de pessoas", - + // "person-relationships.search.results.head": "Person Search Results", "person-relationships.search.results.head": "Resultados da pesquisa de pessoas", - + // "person.search.title": "Person Search", "person.search.title": "Pesquisar pessoa", - + // "process.new.select-parameters": "Parameters", "process.new.select-parameters": "Parâmetros", // "process.new.cancel": "Cancel", "process.new.cancel": "Cancelar", - + // "process.new.submit": "Save", "process.new.submit": "Guardar", @@ -4678,7 +4678,7 @@ // "process.detail.create": "Create similar process", "process.detail.create": "Criar processo similar", - + // "process.detail.actions": "Actions", "process.detail.actions": "Ações", @@ -4700,21 +4700,21 @@ // "process.detail.delete.success": "The process was successfully deleted.", "process.detail.delete.success": "O processo foi removido com sucesso.", - // "process.detail.delete.error": "Something went wrong when deleting the process", - "process.detail.delete.error": "Ocorreu algum erro ao remover o processo", - + // "process.detail.delete.error": "Something went wrong when deleting the process", + "process.detail.delete.error": "Ocorreu algum erro ao remover o processo", + // "process.overview.table.finish": "Finish time (UTC)", "process.overview.table.finish": "Hora de término (UTC)", - + // "process.overview.table.id": "Process ID", "process.overview.table.id": "ID do Processo", // "process.overview.table.name": "Name", "process.overview.table.name": "Nome", - + // "process.overview.table.start": "Start time (UTC)", "process.overview.table.start": "Hora de início (UTC)", - + // "process.overview.table.status": "Status", "process.overview.table.status": "Estado", @@ -4723,13 +4723,13 @@ // "process.overview.title": "Processes Overview", "process.overview.title": "Resumo dos processos", - + // "process.overview.breadcrumbs": "Processes Overview", "process.overview.breadcrumbs": "Resumo dos processos", - + // "process.overview.new": "New", "process.overview.new": "Novo", - + // "process.overview.table.actions": "Actions", "process.overview.table.actions": "Ações", @@ -4756,34 +4756,34 @@ // "process.bulk.delete.success": "{{count}} process(es) have been succesfully deleted", "process.bulk.delete.success": "{{count}} processso(s) foram removidos com sucesso", - + // "profile.breadcrumbs": "Update Profile", "profile.breadcrumbs": "Atualizar perfil", - + // "profile.card.identify": "Identify", "profile.card.identify": "Identificação", // "profile.card.security": "Security", "profile.card.security": "Senha de acesso", - + // "profile.form.submit": "Save", "profile.form.submit": "Atualizar perfil", - + // "profile.groups.head": "Authorization groups you belong to", "profile.groups.head": "Os seus grupos", - + // "profile.special.groups.head": "Authorization special groups you belong to", "profile.special.groups.head": "Autorização de grupos especiais aos quais pertence", // "profile.head": "Update Profile", "profile.head": "Atualizar perfil", - + // "profile.metadata.form.error.firstname.required": "First Name is required", "profile.metadata.form.error.firstname.required": "O preenchimento do nome é um elemento obrigatório!", - + // "profile.metadata.form.error.lastname.required": "Last Name is required", "profile.metadata.form.error.lastname.required": "O preenchiento do apelido é um elemento obrigatório!", - + // "profile.metadata.form.label.email": "Email Address", "profile.metadata.form.label.email": "Endereço de correio eletrónico", @@ -4813,46 +4813,46 @@ // "profile.security.form.error.matching-passwords": "The passwords do not match.", "profile.security.form.error.matching-passwords": "As senhas não coincidem.", - + // "profile.security.form.info": "Optionally, you can enter a new password in the box below, and confirm it by typing it again into the second box.", "profile.security.form.info": "Opcionalmente, pode criar uma nova senha introduzindo-a primeira caixa de texto e confirmando-a na segunda caixa de texto.", - + // "profile.security.form.label.password": "Password", "profile.security.form.label.password": "Senha", - + // "profile.security.form.label.passwordrepeat": "Retype to confirm", "profile.security.form.label.passwordrepeat": "Insira novamente a senha para confirmar", - + // "profile.security.form.label.current-password": "Current password", "profile.security.form.label.current-password": "Senha atual", - + // "profile.security.form.notifications.success.content": "Your changes to the password were saved.", "profile.security.form.notifications.success.content": "As alterações da senha foram guardadas.", - + // "profile.security.form.notifications.success.title": "Password saved", "profile.security.form.notifications.success.title": "Senha guardada", - + // "profile.security.form.notifications.error.title": "Error changing passwords", "profile.security.form.notifications.error.title": "Erro ao mudar a senha", - + // "profile.security.form.notifications.error.change-failed": "An error occurred while trying to change the password. Please check if the current password is correct.", "profile.security.form.notifications.error.change-failed": "Ocorreu um erro ao tentar alterar a senha. Verifique se a senha atual está correcta.", - + // "profile.security.form.notifications.error.not-same": "The provided passwords are not the same.", "profile.security.form.notifications.error.not-same": "As senhas fornecidas não coincidem.", - + // "profile.security.form.notifications.error.general": "Please fill required fields of security form.", "profile.security.form.notifications.error.general": "Por favor preencha os campos obrigatórios no formulário de segurança.", - + // "profile.title": "Update Profile", "profile.title": "Atualizar perfil", - + // "profile.card.researcher": "Researcher Profile", "profile.card.researcher": "Perfil do investigador", - + // "project.listelement.badge": "Research Project", "project.listelement.badge": "Projeto de investigação", - + // "project.page.contributor": "Contributors", "project.page.contributor": "Contribuidores", @@ -4884,8 +4884,8 @@ "project.search.results.head": "Resultados da pesquisa de projetos", // "project-relationships.search.results.head": "Project Search Results", - "project-relationships.search.results.head": "Resultados da pesquisa de projetos", - + "project-relationships.search.results.head": "Resultados da pesquisa de projetos", + // "publication.listelement.badge": "Publication", "publication.listelement.badge": "Publicação", @@ -4897,10 +4897,10 @@ // "publication.page.journal-issn": "Journal ISSN", "publication.page.journal-issn": "ISSN da revista", - + // "publication.page.journal-title": "Journal Title", "publication.page.journal-title": "Título da revista", - + // "publication.page.publisher": "Publisher", "publication.page.publisher": "Editora", @@ -4912,10 +4912,10 @@ // "publication.search.results.head": "Publication Search Results", "publication.search.resuts.head": "Resultados da pesquisa de publicações", - + // "publication-relationships.search.results.head": "Publication Search Results", "publication-relationships.search.results.head": "Resultados da pesquisa de publicações", - + // "publication.search.title": "Publication Search", "publication.search.title": "Pesquisa de publicações", @@ -4927,10 +4927,10 @@ // "media-viewer.playlist": "Playlist", "media-viewer.playlist": "Playlist", - + // "register-email.title": "New user registration", "register-email.title": "Registo de novo utilizador", - + // "register-page.create-profile.header": "Create Profile", "register-page.create-profile.header": "Criar perfil", @@ -4939,31 +4939,31 @@ // "register-page.create-profile.identification.email": "Email Address", "register-page.create-profile.identification.email": "Endereço de correio eletrónico", - + // "register-page.create-profile.identification.first-name": "First Name *", "register-page.create-profile.identification.first-name": "Nome *", // "register-page.create-profile.identification.first-name.error": "Please fill in a First Name", "register-page.create-profile.identification.first-name.error": "Inclua um nome", - + // "register-page.create-profile.identification.last-name": "Last Name *", "register-page.create-profile.identification.last-name": "Apelido *", // "register-page.create-profile.identification.last-name.error": "Please fill in a Last Name", "register-page.create-profile.identification.last-name.error": "Inclua um apelido", - + // "register-page.create-profile.identification.contact": "Contact Telephone", "register-page.create-profile.identification.contact": "Contacto telefónico", - + // "register-page.create-profile.identification.language": "Language", "register-page.create-profile.identification.language": "Idioma", // "register-page.create-profile.security.header": "Security", "register-page.create-profile.security.header": "Segurança", - + // "register-page.create-profile.security.info": "Please enter a password in the box below, and confirm it by typing it again into the second box.", "register-page.create-profile.security.info": "Insira uma palavra-chave na caixa abaixo, e confirme colocando-a de novo da segunda caixa.", - + // "register-page.create-profile.security.label.password": "Password *", "register-page.create-profile.security.label.password": "Palavra-chave *", @@ -4981,33 +4981,33 @@ // "register-page.create-profile.submit.error.content": "Something went wrong while registering a new user.", "register-page.create-profile.submit.error.content": "Ocorreu um erro ao registar o utilizador.", - + // "register-page.create-profile.submit.error.head": "Registration failed", "register-page.create-profile.submit.error.head": "Falha no registo", - + // "register-page.create-profile.submit.success.content": "The registration was successful. You have been logged in as the created user.", "register-page.create-profile.submit.success.content": "O registo foi criado com sucesso. Foi iniciada sessão com o Utilizador criado.", // "register-page.create-profile.submit.success.head": "Registration completed", "register-page.create-profile.submit.success.head": "Registo finalizado com sucesso", - + // "register-page.registration.header": "New user registration", "register-page.registration.header": "Registo de novo utilizador", - + // "register-page.registration.info": "Register an account to subscribe to collections for email updates, and submit new items to DSpace.", "register-page.registration.info": "Crie uma conta de utilizador para subscrever novos conteúdos das coleções e depositar itens no repositório.", - + // "register-page.registration.email": "Email Address *", "register-page.registration.email": "Endereço de correio eletrónico *", - + // "register-page.registration.email.error.required": "Please fill in an email address", "register-page.registration.email.error.required": "Insira um endereço de correio eletrónico", - + // "register-page.registration.email.error.not-email-form": "Please fill in a valid email address.", "register-page.registration.email.error.not-email-form": "Insira um endereço de correio eletrónico válido.", // "register-page.registration.email.error.not-valid-domain": "Use email with allowed domains: {{ domains }}", - "register-page.registration.email.error.not-valid-domain": "Usar endereço de correio eletrónico com domínios permitidos: {{ domains }}", + "register-page.registration.email.error.not-valid-domain": "Usar endereço de correio eletrónico com domínios permitidos: {{ domains }}", // "register-page.registration.email.hint": "This address will be verified and used as your login name.", "register-page.registration.email.hint": "Este endereço de correio eletrónico será verificado e usado para iniciar sessão.", @@ -5017,7 +5017,7 @@ // "register-page.registration.success.head": "Verification email sent", "register-page.registration.success.head": "Enviado email de verificação", - + // "register-page.registration.success.content": "An email has been sent to {{ email }} containing a special URL and further instructions.", "register-page.registration.success.content": "Foi enviado um email para {{ email }} com instruções e um endereço especial para confirmação.", @@ -5026,7 +5026,7 @@ // "register-page.registration.error.content": "An error occured when registering the following email address: {{ email }}", "register-page.registration.error.content": "Ocorreu um erro ao registar o seguinte endereço de correio eletrónico: {{ email }}", - + // "register-page.registration.error.recaptcha": "Error when trying to authenticate with recaptcha", "register-page.registration.error.recaptcha": "Ocorreu um erro ao tentar autenticar com o recaptcha", @@ -5034,8 +5034,8 @@ "register-page.registration.google-recaptcha.must-accept-cookies": "Para se registar deve aceitar o registo e a senha de recuperação (Google reCaptcha) cookies.", // "register-page.registration.error.maildomain": "This email address is not on the list of domains who can register. Allowed domains are {{ domains }}", - "register-page.registration.error.maildomain": "Este endereço de e-mail não consta da lista de domínios que podem ser registados. Os domínios permitidos são {{ domains }}", - + "register-page.registration.error.maildomain": "Este endereço de e-mail não consta da lista de domínios que podem ser registados. Os domínios permitidos são {{ domains }}", + // "register-page.registration.google-recaptcha.open-cookie-settings": "Open cookie settings", "register-page.registration.google-recaptcha.open-cookie-settings": "Configurações de Open cookie", @@ -5046,11 +5046,11 @@ "register-page.registration.google-recaptcha.notification.message.error": "Ocorreu um erro na verificação do reCaptcha", // "register-page.registration.google-recaptcha.notification.message.expired": "Verification expired. Please verify again.", - "register-page.registration.google-recaptcha.notification.message.expired": "Verificação expirou. Por favor verifique novamente.", - + "register-page.registration.google-recaptcha.notification.message.expired": "Verificação expirou. Por favor verifique novamente.", + // "register-page.registration.info.maildomain": "Accounts can be registered for mail addresses of the domains", "register-page.registration.info.maildomain": "As contas podem ser registadas para os endereços de email os domínios", - + // "relationships.add.error.relationship-type.content": "No suitable match could be found for relationship type {{ type }} between the two items", "relationships.add.error.relationship-type.content": "Não foi encontrado uma licação adequada no tipo de relação {{ type }} entre os dois itens", @@ -5080,13 +5080,13 @@ // "relationships.isOrgUnitOf": "Organizational Units", "relationships.isOrgUnitOf": "Unidades organizacionais", - + // "relationships.isPersonOf": "Authors", "relationships.isPersonOf": "Autores", // "relationships.isProjectOf": "Research Projects", "relationships.isProjectOf": "Projetos de investigação", - + // "relationships.isPublicationOf": "Publications", "relationships.isPublicationOf": "Publicações", @@ -5095,31 +5095,31 @@ // "relationships.isSingleJournalOf": "Journal", "relationships.isSingleJournalOf": "Revista", - + // "relationships.isSingleVolumeOf": "Journal Volume", "relationships.isSingleVolumeOf": "Volume de revista", - + // "relationships.isVolumeOf": "Journal Volumes", "relationships.isVolumeOf": "Volumes da revista", - + // "relationships.isContributorOf": "Contributors", "relationships.isContributorOf": "Contribuidores", - + // "relationships.isContributorOf.OrgUnit": "Contributor (Organizational Unit)", "relationships.isContributorOf.OrgUnit": "Colaborador (Unidade organizacional)", // "relationships.isContributorOf.Person": "Contributor", "relationships.isContributorOf.Person": "Contribuidor", - + // "relationships.isFundingAgencyOf.OrgUnit": "Funder", - "relationships.isFundingAgencyOf.OrgUnit": "Financiador", - + "relationships.isFundingAgencyOf.OrgUnit": "Financiador", + // "repository.image.logo": "Repository logo", - "repository.image.logo": "Logótipo do repositório", - + "repository.image.logo": "Logótipo do repositório", + // "repository.title.prefix": "DSpace Angular :: ", - "repository.title.prefix": "Repositório :: ", - + "repository.title.prefix": "Repositório :: ", + // "repository.title.prefixDSpace": "DSpace Angular ::", "repository.title.prefixDSpace": "Repositório ::", @@ -5173,13 +5173,13 @@ // "resource-policies.edit.page.failure.content": "An error occurred while editing the resource policy.", "resource-policies.edit.page.failure.content": "Ocorreu um erro ao editar a política de recurso.", - + // "resource-policies.edit.page.target-failure.content": "An error occurred while editing the target (ePerson or group) of the resource policy.", "resource-policies.edit.page.target-failure.content": "Ocorreu um erro durante a edição da (ePerson ou grupo) da política de recursos.", // "resource-policies.edit.page.other-failure.content": "An error occurred while editing the resource policy. The target (ePerson or group) has been successfully updated.", - "resource-policies.edit.page.other-failure.content": "Ocorreu um erro durante a edição da política de recursos. A (ePerson ou grupo) foi actualizado com sucesso.", - + "resource-policies.edit.page.other-failure.content": "Ocorreu um erro durante a edição da política de recursos. A (ePerson ou grupo) foi actualizado com sucesso.", + // "resource-policies.edit.page.success.content": "Operation successful", "resource-policies.edit.page.success.content": "Operação bem sucedida", @@ -5188,19 +5188,19 @@ // "resource-policies.form.action-type.label": "Select the action type", "resource-policies.form.action-type.label": "Selecione o tipo de ação", - + // "resource-policies.form.action-type.required": "You must select the resource policy action.", "resource-policies.form.action-type.required": "Deve selecionar a ação da política de recurso.", // "resource-policies.form.eperson-group-list.label": "The eperson or group that will be granted the permission", "resource-policies.form.eperson-group-list.label": "O utilizador ou grupo ao qual serão atribuídas as permissões", - + // "resource-policies.form.eperson-group-list.select.btn": "Select", "resource-policies.form.eperson-group-list.select.btn": "Seleccionar", // "resource-policies.form.eperson-group-list.tab.eperson": "Search for a ePerson", "resource-policies.form.eperson-group-list.tab.eperson": "Pesquisar um utilizador", - + // "resource-policies.form.eperson-group-list.tab.group": "Search for a group", "resource-policies.form.eperson-group-list.tab.group": "Pesquisar um grupo", @@ -5209,31 +5209,31 @@ // "resource-policies.form.eperson-group-list.table.headers.id": "ID", "resource-policies.form.eperson-group-list.table.headers.id": "ID", - - // "resource-policies.form.eperson-group-list.table.headers.name": "Name", + + // "resource-policies.form.eperson-group-list.table.headers.name": "Name", "resource-policies.form.eperson-group-list.table.headers.name": "Nome", - + // "resource-policies.form.eperson-group-list.modal.header": "Cannot change type", "resource-policies.form.eperson-group-list.modal.header": "Não pode mudar de tipo", - + // "resource-policies.form.eperson-group-list.modal.text1.toGroup": "It is not possible to replace an ePerson with a group.", "resource-policies.form.eperson-group-list.modal.text1.toGroup": "Não é possível substituir um utilizador por um grupo.", // "resource-policies.form.eperson-group-list.modal.text1.toEPerson": "It is not possible to replace a group with an ePerson.", "resource-policies.form.eperson-group-list.modal.text1.toEPerson": "Não é possível substituir um grupo por uma ePerson.", - + // "resource-policies.form.eperson-group-list.modal.text2": "Delete the current resource policy and create a new one with the desired type.", "resource-policies.form.eperson-group-list.modal.text2": "Eliminar a política actual de recursos e criar uma nova política com o tipo desejado.", // "resource-policies.form.eperson-group-list.modal.close": "Ok", "resource-policies.form.eperson-group-list.modal.close": "Ok", - + // "resource-policies.form.date.end.label": "End Date", "resource-policies.form.date.end.label": "Data de fim", - + // "resource-policies.form.date.start.label": "Start Date", "resource-policies.form.date.start.label": "Data de início", - + // "resource-policies.form.description.label": "Description", "resource-policies.form.description.label": "Descrição", @@ -5242,7 +5242,7 @@ // "resource-policies.form.policy-type.label": "Select the policy type", "resource-policies.form.policy-type.label": "Selecione o tipo de política", - + // "resource-policies.form.policy-type.required": "You must select the resource policy type.", "resource-policies.form.policy-type.required": "Deve selecionar um tipo de política de recurso.", @@ -5251,10 +5251,10 @@ // "resource-policies.table.headers.date.end": "End Date", "resource-policies.table.headers.date.end": "Data de término", - + // "resource-policies.table.headers.date.start": "Start Date", "resource-policies.table.headers.date.start": "Data de início", - + // "resource-policies.table.headers.edit": "Edit", "resource-policies.table.headers.edit": "Editar", @@ -5281,16 +5281,16 @@ // "resource-policies.table.headers.title.for.bitstream": "Policies for Bitstream", "resource-policies.table.headers.title.for.bitstream": "Política de ficheiros", - + // "resource-policies.table.headers.title.for.bundle": "Policies for Bundle", "resource-policies.table.headers.title.for.bundle": "Políticas para pacote", - + // "resource-policies.table.headers.title.for.item": "Policies for Item", "resource-policies.table.headers.title.for.item": "Políticas para item", - + // "resource-policies.table.headers.title.for.community": "Policies for Community", "resource-policies.table.headers.title.for.community": "Políticas para comunidade", - + // "resource-policies.table.headers.title.for.collection": "Policies for Collection", "resource-policies.table.headers.title.for.collection": "Políticas para coleção", @@ -5302,13 +5302,13 @@ // "search.title": "Search", "search.title": "Pesquisa", - + // "search.breadcrumbs": "Search", "search.breadcrumbs": "Pesquisar", - + // "search.search-form.placeholder": "Search the repository ...", "search.search-form.placeholder": "Pesquisar no repositório...", - + // "search.filters.applied.f.author": "Author", "search.filters.applied.f.author": "Autor", @@ -5320,10 +5320,10 @@ // "search.filters.applied.f.dateSubmitted": "Date submitted", "search.filters.applied.f.dateSubmitted": "Data de depósito", - + // "search.filters.applied.f.discoverable": "Non-discoverable", "search.filters.applied.f.discoverable": "Privado", - + // "search.filters.applied.f.entityType": "Item type", "search.filters.applied.f.entityType": "Tipo de item", @@ -5350,10 +5350,10 @@ // "search.filters.applied.f.birthDate.min": "Start birth date", "search.filters.applied.f.birthDate.min": "Início data de nascimento", - + // "search.filters.applied.f.supervisedBy": "Supervised by", "search.filters.applied.f.supervisedBy": "Supervisionado por", - + // "search.filters.applied.f.withdrawn": "Withdrawn", "search.filters.applied.f.withdrawn": "Retirado", @@ -5362,7 +5362,7 @@ // "search.filters.filter.author.placeholder": "Author name", "search.filters.filter.author.placeholder": "Nome do autor", - + // "search.filters.filter.author.label": "Search author name", "search.filters.filter.author.label": "Pesquisar por nome", @@ -5371,28 +5371,28 @@ // "search.filters.filter.birthDate.placeholder": "Birth Date", "search.filters.filter.birthDate.placeholder": "Data de nascimento", - + // "search.filters.filter.birthDate.label": "Search birth date", "search.filters.filter.birthDate.label": "Procurar data de nascimento", - + // "search.filters.filter.collapse": "Collapse filter", "search.filters.filter.collapse": "Fechar filtro", - + // "search.filters.filter.creativeDatePublished.head": "Date Published", "search.filters.filter.creativeDatePublished.head": "Data de publicação", // "search.filters.filter.creativeDatePublished.placeholder": "Date Published", - "search.filters.filter.creativeDatePublished.placeholder": "Data de publicação", - + "search.filters.filter.creativeDatePublished.placeholder": "Data de publicação", + // "search.filters.filter.creativeDatePublished.label": "Search date published", "search.filters.filter.creativeDatePublished.label": "Procurar data de publicação", - + // "search.filters.filter.creativeWorkEditor.head": "Editor", "search.filters.filter.creativeWorkEditor.head": "Editor", // "search.filters.filter.creativeWorkEditor.placeholder": "Editor", "search.filters.filter.creativeWorkEditor.placeholder": "Editor", - + // "search.filters.filter.creativeWorkEditor.label": "Search editor", "search.filters.filter.creativeWorkEditor.label": "Procurar editor", @@ -5401,7 +5401,7 @@ // "search.filters.filter.creativeWorkKeywords.placeholder": "Subject", "search.filters.filter.creativeWorkKeywords.placeholder": "Assunto", - + // "search.filters.filter.creativeWorkKeywords.label": "Search subject", "search.filters.filter.creativeWorkKeywords.label": "Procurar assuntos", @@ -5410,34 +5410,34 @@ // "search.filters.filter.creativeWorkPublisher.placeholder": "Publisher", "search.filters.filter.creativeWorkPublisher.placeholder": "Editora", - + // "search.filters.filter.creativeWorkPublisher.label": "Search publisher", "search.filters.filter.creativeWorkPublisher.label": "Procurar editora", - + // "search.filters.filter.dateIssued.head": "Date", "search.filters.filter.dateIssued.head": "Data", - + // "search.filters.filter.dateIssued.max.placeholder": "Maximum Date", "search.filters.filter.dateIssued.max.placeholder": "Data máxima", - + // "search.filters.filter.dateIssued.max.label": "End", "search.filters.filter.dateIssued.max.label": "Fim", // "search.filters.filter.dateIssued.min.placeholder": "Minimum Date", "search.filters.filter.dateIssued.min.placeholder": "Data mínima", - + // "search.filters.filter.dateIssued.min.label": "Start", "search.filters.filter.dateIssued.min.label": "Início", - + // "search.filters.filter.dateSubmitted.head": "Date submitted", "search.filters.filter.dateSubmitted.head": "Data de depósito", - + // "search.filters.filter.dateSubmitted.placeholder": "Date submitted", "search.filters.filter.dateSubmitted.placeholder": "Data de depósito", - + // "search.filters.filter.dateSubmitted.label": "Search date submitted", "search.filters.filter.dateSubmitted.label": "Procurar data de depósito", - + // "search.filters.filter.discoverable.head": "Non-discoverable", "search.filters.filter.discoverable.head": "Privado", @@ -5446,37 +5446,37 @@ // "search.filters.filter.entityType.head": "Item Type", "search.filters.filter.entityType.head": "Tipo de item", - + // "search.filters.filter.entityType.placeholder": "Item Type", - "search.filters.filter.entityType.placeholder": "Tipo de item", - + "search.filters.filter.entityType.placeholder": "Tipo de item", + // "search.filters.filter.entityType.label": "Search item type", "search.filters.filter.entityType.label": "Pesquisar por tipo", // "search.filters.filter.expand": "Expand filter", - "search.filters.filter.expand": "Expandir filtro", - + "search.filters.filter.expand": "Expandir filtro", + // "search.filters.filter.has_content_in_original_bundle.head": "Has files", "search.filters.filter.has_content_in_original_bundle.head": "Tem ficheiros", - + // "search.filters.filter.itemtype.head": "Type", "search.filters.filter.itemtype.head": "Tipo de item depositado", - + // "search.filters.filter.itemtype.placeholder": "Type", "search.filters.filter.itemtype.placeholder": "Tipo", - + // "search.filters.filter.itemtype.label": "Search type", "search.filters.filter.itemtype.label": "Procurar por tipo", - + // "search.filters.filter.jobTitle.head": "Job Title", "search.filters.filter.jobTitle.head": "Cargo", // "search.filters.filter.jobTitle.placeholder": "Job Title", "search.filters.filter.jobTitle.placeholder": "Cargo", - + // "search.filters.filter.jobTitle.label": "Search job title", "search.filters.filter.jobTitle.label": "Procurar cargo", - + // "search.filters.filter.knowsLanguage.head": "Known language", "search.filters.filter.knowsLanguage.head": "Idioma conhecido", @@ -5485,22 +5485,22 @@ // "search.filters.filter.knowsLanguage.label": "Search known language", "search.filters.filter.knowsLanguage.label": "Procurar idiomas conhecidos", - + // "search.filters.filter.namedresourcetype.head": "Status", "search.filters.filter.namedresourcetype.head": "Estado do depósito", - + // "search.filters.filter.namedresourcetype.placeholder": "Status", "search.filters.filter.namedresourcetype.placeholder": "Estado", - + // "search.filters.filter.namedresourcetype.label": "Search status", "search.filters.filter.namedresourcetype.label": "Pesquisa por estado", - + // "search.filters.filter.objectpeople.head": "People", "search.filters.filter.objectpeople.head": "Pessoas", - + // "search.filters.filter.objectpeople.placeholder": "People", "search.filters.filter.objectpeople.placeholder": "Pessoas", - + // "search.filters.filter.objectpeople.label": "Search people", "search.filters.filter.objectpeople.label": "Procurar pessoas", @@ -5509,7 +5509,7 @@ // "search.filters.filter.organizationAddressCountry.placeholder": "Country", "search.filters.filter.organizationAddressCountry.placeholder": "País", - + // "search.filters.filter.organizationAddressCountry.label": "Search country", "search.filters.filter.organizationAddressCountry.label": "Procurar país", @@ -5518,28 +5518,28 @@ // "search.filters.filter.organizationAddressLocality.placeholder": "City", "search.filters.filter.organizationAddressLocality.placeholder": "Cidade", - + // "search.filters.filter.organizationAddressLocality.label": "Search city", "search.filters.filter.organizationAddressLocality.label": "Procurar cidade", - + // "search.filters.filter.organizationFoundingDate.head": "Date Founded", "search.filters.filter.organizationFoundingDate.head": "Data de fundação", - + // "search.filters.filter.organizationFoundingDate.placeholder": "Date Founded", "search.filters.filter.organizationFoundingDate.placeholder": "Data de fundação", - + // "search.filters.filter.organizationFoundingDate.label": "Search date founded", "search.filters.filter.organizationFoundingDate.label": "Procurar data de fundação", - + // "search.filters.filter.scope.head": "Scope", "search.filters.filter.scope.head": "Âmbito", // "search.filters.filter.scope.placeholder": "Scope filter", "search.filters.filter.scope.placeholder": "Filtrar âmbito", - + // "search.filters.filter.scope.label": "Search scope filter", "search.filters.filter.scope.label": "Filtro do âmbito da pesquisa", - + // "search.filters.filter.show-less": "Collapse", "search.filters.filter.show-less": "Mostrar menos", @@ -5560,7 +5560,7 @@ // "search.filters.filter.submitter.placeholder": "Submitter", "search.filters.filter.submitter.placeholder": "Depositante", - + // "search.filters.filter.submitter.label": "Search submitter", "search.filters.filter.submitter.label": "Procurar depositante", @@ -5575,13 +5575,13 @@ // "search.filters.filter.supervisedBy.label": "search Supervised By", "search.filters.filter.supervisedBy.label": "pesquisar supervisionado por", - + // "search.filters.entityType.JournalIssue": "Journal Issue", "search.filters.entityType.JournalIssue": "Número de revista", - + // "search.filters.entityType.JournalVolume": "Journal Volume", "search.filters.entityType.JournalVolume": "Volume de revista", - + // "search.filters.entityType.OrgUnit": "Organizational Unit", "search.filters.entityType.OrgUnit": "Organização", @@ -5608,22 +5608,22 @@ // "search.filters.reset": "Reset filters", "search.filters.reset": "Limpar filtros", - + // "search.filters.search.submit": "Submit", "search.filters.search.submit": "Enviar", // "search.form.search": "Search", "search.form.search": "Pesquisar", - + // "search.form.search_dspace": "All repository", "search.form.search_dspace": "Pesquisar tudo", - + // "search.form.scope.all": "All of DSpace", "search.form.scope.all": "Pesquisar tudo", - + // "search.results.head": "Search Results", "search.results.head": "Resultados da pesquisa", - + // "search.results.no-results": "Your search returned no results. Having trouble finding what you're looking for? Try putting", "search.results.no-results": "Sua pesquisa não retornou resultados. Tem dificuldade em encontrar o que procura? Tente incluir ", @@ -5632,10 +5632,10 @@ // "search.results.empty": "Your search returned no results.", "search.results.empty": "A sua pesquisa não retornou resultados.", - + // "search.results.view-result": "View", "search.results.view-result": "Ver", - + // "search.results.response.500": "An error occurred during query execution, please try again later", "search.results.response.500": "Ocorreu um erro durante a execução da consulta, por favor tente novamente mais tarde", @@ -5683,16 +5683,16 @@ // "sorting.dc.title.ASC": "Title Ascending", "sorting.dc.title.ASC": "Título ascendente", - + // "sorting.dc.title.DESC": "Title Descending", "sorting.dc.title.DESC": "Título descendente", - + // "sorting.score.ASC": "Least Relevant", "sorting.score.ASC": "Menos relevante", - + // "sorting.score.DESC": "Most Relevant", "sorting.score.DESC": "Mais relevante", - + // "sorting.dc.date.issued.ASC": "Date Issued Ascending", "sorting.dc.date.issued.ASC": "Data de publicação ascendente", @@ -5703,8 +5703,8 @@ "sorting.dc.date.accessioned.ASC": "Data de disponibilização ascendente", // "sorting.dc.date.accessioned.DESC": "Accessioned Date Descending", - "sorting.dc.date.accessioned.DESC": "Data de disponibilização descendente", - + "sorting.dc.date.accessioned.DESC": "Data de disponibilização descendente", + // "sorting.lastModified.ASC": "Last modified Ascending", "sorting.lastModified.ASC": "Última modificação ascendente", @@ -5714,7 +5714,7 @@ // "statistics.title": "Statistics", "statistics.title": "Estatísticas", - // "statistics.header": "Statistics for {{ scope }}", + // "statistics.header": "Statistics for {{ scope }}", "statistics.header": "Estatísticas para {{ scope }}", // "statistics.breadcrumbs": "Statistics", @@ -5728,34 +5728,34 @@ // "statistics.table.title.TotalVisits": "Total visits", "statistics.table.title.TotalVisits": "Total de visitas", - + // "statistics.table.title.TotalVisitsPerMonth": "Total visits per month", "statistics.table.title.TotalVisitsPerMonth": "Total de visitas por mês", - + // "statistics.table.title.TotalDownloads": "File Visits", "statistics.table.title.TotalDownloads": "Downloads", // "statistics.table.title.TopCountries": "Top country views", "statistics.table.title.TopCountries": "Top de consultas por país", - + // "statistics.table.title.TopCities": "Top city views", "statistics.table.title.TopCities": "Top de consultas por cidade", - + // "statistics.table.header.views": "Views", "statistics.table.header.views": "Consultas", - + // "submission.edit.breadcrumbs": "Edit Submission", "submission.edit.breadcrumbs": "Editar depósito", - + // "submission.edit.title": "Edit Submission", "submission.edit.title": "Editar depósito", - + // "submission.general.cancel": "Cancel", "submission.general.cancel": "Cancelar", - + // "submission.general.cannot_submit": "You have not the privilege to make a new submission.", "submission.general.cannot_submit": "Não possui permissões para fazer um novo depósito.", - + // "submission.general.deposit": "Deposit", "submission.general.deposit": "Depositar", @@ -5769,23 +5769,23 @@ "submission.general.discard.confirm.submit": "Sim, tenho certeza", // "submission.general.discard.confirm.title": "Discard submission", - "submission.general.discard.confirm.title": "Cancelar depósito", - + "submission.general.discard.confirm.title": "Cancelar depósito", + // "submission.general.discard.submit": "Discard", "submission.general.discard.submit": "Cancelar", - + // "submission.general.info.saved": "Saved", "submission.general.info.saved": "Informação guardada", - + // "submission.general.info.pending-changes": "Unsaved changes", "submission.general.info.pending-changes": "Alterações não guardadas", - + // "submission.general.save": "Save", "submission.general.save": "Guardar", // "submission.general.save-later": "Save for later", "submission.general.save-later": "Guardar e fechar", - + // "submission.import-external.page.title": "Import metadata from an external source", "submission.import-external.page.title": "Importar metadados de uma fonte externa", @@ -5794,28 +5794,28 @@ // "submission.import-external.title.Journal": "Import a journal from an external source", "submission.import-external.title.Journal": "Importar revista de uma fonte externa", - + // "submission.import-external.title.JournalIssue": "Import a journal issue from an external source", "submission.import-external.title.JournalIssue": "Importar o número de um revista de um fonte externa", - - // "submission.import-external.title.JournalVolume": "Import a journal volume from an external source", - "submission.import-external.title.JournalVolume": "Importar o volume de uma revista de fonte externa", - + + // "submission.import-external.title.JournalVolume": "Import a journal volume from an external source", + "submission.import-external.title.JournalVolume": "Importar o volume de uma revista de fonte externa", + // "submission.import-external.title.OrgUnit": "Import a publisher from an external source", "submission.import-external.title.OrgUnit": "Importar editora de uma fonte externa", - + // "submission.import-external.title.Person": "Import a person from an external source", "submission.import-external.title.Person": "Importar pessoa de uma fonte externa", - + // "submission.import-external.title.Project": "Import a project from an external source", - "submission.import-external.title.Project": "Importar projeto de uma fonte externa", - - // "submission.import-external.title.Publication": "Import a publication from an external source", - "submission.import-external.title.Publication": "Importar uma publicação de uma fonte externa", - + "submission.import-external.title.Project": "Importar projeto de uma fonte externa", + + // "submission.import-external.title.Publication": "Import a publication from an external source", + "submission.import-external.title.Publication": "Importar uma publicação de uma fonte externa", + // "submission.import-external.title.none": "Import metadata from an external source", "submission.import-external.title.none": "Importar metadados de uma fonte externa", - + // "submission.import-external.page.hint": "Enter a query above to find items from the web to import in to DSpace.", "submission.import-external.page.hint": "Pesquise itens abaixo disponíveis na internet para que sejam importados para o repositório.", @@ -5836,7 +5836,7 @@ // "submission.import-external.source.arxiv": "arXiv", "submission.import-external.source.arxiv": "arXiv", - + // "submission.import-external.source.ads": "NASA/ADS", "submission.import-external.source.ads": "NASA/ADS", @@ -5845,7 +5845,7 @@ // "submission.import-external.source.crossref": "CrossRef", "submission.import-external.source.crossref": "CrossRef", - + // "submission.import-external.source.datacite": "DataCite", "submission.import-external.source.datacite": "DataCite", @@ -5865,38 +5865,38 @@ "submission.import-external.source.orcidWorks": "ORCID", // "submission.import-external.source.epo": "European Patent Office (EPO)", - "submission.import-external.source.epo": "European Patent Office (EPO)", - + "submission.import-external.source.epo": "European Patent Office (EPO)", + // "submission.import-external.source.loading": "Loading ...", "submission.import-external.source.loading": "A carregar ...", - + // "submission.import-external.source.sherpaJournal": "SHERPA Journals", "submission.import-external.source.sherpaJournal": "Revistas Sherpa Romeo por nome", - + // "submission.import-external.source.sherpaJournalIssn": "SHERPA Journals by ISSN", "submission.import-external.source.sherpaJournalIssn": "Revistas Sherpa Romeo por ISSN", - + // "submission.import-external.source.sherpaPublisher": "SHERPA Publishers", "submission.import-external.source.sherpaPublisher": "Editoras Sherpa Romeo", - + // "submission.import-external.source.openAIREFunding": "Funding OpenAIRE API", "submission.import-external.source.openAIREFunding": "Financiamento via API OpenAIRE", - + // "submission.import-external.source.orcid": "ORCID", "submission.import-external.source.orcid": "ORCID", - + // "submission.import-external.source.pubmed": "PubMed", "submission.import-external.source.pubmed": "PubMed", - + // "submission.import-external.source.pubmedeu": "PubMed Europe", "submission.import-external.source.pubmedeu": "PubMed Europa", - + // "submission.import-external.source.lcname": "Library of Congress Names", "submission.import-external.source.lcname": "Nomes da Library of Congress", // "submission.import-external.preview.title": "Item Preview", "submission.import-external.preview.title": "Pré-visualização do item", - + // "submission.import-external.preview.title.Publication": "Publication Preview", "submission.import-external.preview.title.Publication": "Pré-visualização da publicação", @@ -5913,17 +5913,17 @@ "submission.import-external.preview.title.Person": "Pré-visualização dos dados pessoais a importar", // "submission.import-external.preview.title.Project": "Project Preview", - "submission.import-external.preview.title.Project": "Pré-visualização do dados do projeto a importar", - + "submission.import-external.preview.title.Project": "Pré-visualização do dados do projeto a importar", + // "submission.import-external.preview.subtitle": "The metadata below was imported from an external source. It will be pre-filled when you start the submission.", "submission.import-external.preview.subtitle": "Os seguintes metadados foram importados de uma fonte externa. Serão pré-preenchidos quando iniciar o depósito.", - + // "submission.import-external.preview.button.import": "Start submission", "submission.import-external.preview.button.import": "Iniciar depósito", - + // "submission.import-external.preview.error.import.title": "Submission error", "submission.import-external.preview.error.import.title": "Erro no depósito", - + // "submission.import-external.preview.error.import.body": "An error occurs during the external source entry import process.", "submission.import-external.preview.error.import.body": "Ocorreu um erro durante o processo de importação de metadados de uma fonte externa.", @@ -5935,19 +5935,19 @@ // "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Import remote author", "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Importar autor remoto", - + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Import remote journal", "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Importar revista remota", - + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Import remote journal issue", "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Importar número de revista remoto", - + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Import remote journal volume", "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Importar volume de revista remoto", // "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Project", "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Projeto", - + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.none": "Import remote item", "submission.sections.describe.relationship-lookup.external-source.import-button-title.none": "Importar item remoto", @@ -5976,20 +5976,20 @@ "submission.sections.describe.relationship-lookup.external-source.import-button-title.Project": "Importar projeto remoto", // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Import remote publication", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Importar publicação remota", - + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Importar publicação remota", + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "New Entity Added!", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "Nova entidade adicionada!", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "Nova entidade adicionada!", // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Project", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Projeto", - + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Projeto", + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Funding OpenAIRE API", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Financiamento API OpenAIRE", - + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Financiamento API OpenAIRE", + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Import Remote Author", "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Importar autor remoto", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Successfully added local author to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Adicionado com sucesso um autor local à seleção", @@ -6007,7 +6007,7 @@ // "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Select a collection to import new entries to", "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Selecione a coleção para onde pretende importar as novas entradas", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Entities", "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Entidades", @@ -6016,40 +6016,40 @@ // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "Importing from LC Name", "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "A importar de LC Name", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "Importing from ORCID", "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "A importar do ORCID", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "Importing from Sherpa Journal", "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "A importar revista do Sherpa", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "Importing from Sherpa Publisher", "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "A importar editora do Sherpa", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "Importing from PubMed", "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "A importar da PubMed", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "Importing from arXiv", "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "A importar do arXiv", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Import", "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Importar", // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Import Remote Journal", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Importar revista remota", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Successfully added local journal to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Revista local adicionada com sucesso à seleção", // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Successfully imported and added external journal to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Importada e adicionada com sucesso uma revista externa à seleção", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title": "Import Remote Journal Issue", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title": "Importar número de revista remota", // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Successfully added local journal issue to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Número de revista local adicionado com sucesso à seleção", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity": "Successfully imported and added external journal issue to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity": "Importado e adicionado um número de revista externa com sucesso à seleção", @@ -6058,31 +6058,31 @@ // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Successfully added local journal volume to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Volume de revista local adicionado com sucesso à seleção", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Successfully imported and added external journal volume to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Importado e adicionado um volume de revista externa com sucesso à seleção", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Select a local match:", "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Selecione uma correspondência local:", - + // "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Deselect all", "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Deselecionar todos", - + // "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Deselect page", "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Deselecionar página", - + // "submission.sections.describe.relationship-lookup.search-tab.loading": "Loading...", "submission.sections.describe.relationship-lookup.search-tab.loading": "A carregar...", - + // "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Search query", "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Termos da pesquisa", // "submission.sections.describe.relationship-lookup.search-tab.search": "Go", "submission.sections.describe.relationship-lookup.search-tab.search": "Pesquisar", - + // "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Search...", - "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Pesquisar...", - + "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Pesquisar...", + // "submission.sections.describe.relationship-lookup.search-tab.select-all": "Select all", "submission.sections.describe.relationship-lookup.search-tab.select-all": "Selecionar todos", @@ -6094,43 +6094,43 @@ // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Local Authors ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Autores locais ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Local Journals ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Revistas locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Local Projects ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Projetos locais ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Local Publications ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Publicações locais ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Local Authors ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Autores locais ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Local Organizational Units ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Unidades organizacionais locais ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Local Data Packages ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Pacotes de dados locais ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Local Data Files ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Ficheiros de dados locais ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Local Journals ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Revistas locais ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Local Journal Issues ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Números de revistas locais ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Local Journal Issues ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Números de revista locais ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Local Journal Volumes ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Volumes de revistas locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Local Journal Volumes ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Volumes de revistas locais ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Sherpa Journals ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Revistas do Sherpa ({{ count }})", @@ -6141,8 +6141,8 @@ "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid": "ORCID ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "LC Names ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "Nomes LC ({{ count }})", - + "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "Nomes LC ({{ count }})", + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", @@ -6153,38 +6153,38 @@ "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Pesquisar por agências de financiamento", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Search for Funding", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Pesquisar por financiamento", - + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Pesquisar por financiamento", + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Search for Organizational Units", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Pesquisar por unidades organizacionais", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Funding OpenAIRE API", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Via API OpenAIRE", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Via API OpenAIRE", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projects", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projetos", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Funder of the Project", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Financiador do projeto", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor": "Publication of the Author", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor": "Publicação do author", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Funding OpenAIRE API", "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Financiamento API OpenAIRE", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Project", "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Projeto", - + // "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projects", "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projetos", - + // "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Funder of the Project", "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Financiador do projeto", - + //"submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Search...", - "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Pesquisar...", - + "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Pesquisar...", + // "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Current Selection ({{ count }})", "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Seleção atual ({{ count }})", @@ -6193,7 +6193,7 @@ // "submission.sections.describe.relationship-lookup.title.JournalIssue": "Journal Issues", "submission.sections.describe.relationship-lookup.title.JournalIssue": "Pesquisar números de revista", - + // "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Journal Volumes", "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Volumes de Revistas", @@ -6211,31 +6211,31 @@ // "submission.sections.describe.relationship-lookup.title.Project": "Projects", "submission.sections.describe.relationship-lookup.title.Project": "Pesquisar projetos", - + // "submission.sections.describe.relationship-lookup.title.Publication": "Publications", "submission.sections.describe.relationship-lookup.title.Publication": "Publicações", // "submission.sections.describe.relationship-lookup.title.Person": "Authors", "submission.sections.describe.relationship-lookup.title.Person": "Pesquisar autores", - + // "submission.sections.describe.relationship-lookup.title.OrgUnit": "Organizational Units", "submission.sections.describe.relationship-lookup.title.OrgUnit": "Pesquisar unidades organizacionais", - + // "submission.sections.describe.relationship-lookup.title.DataPackage": "Data Packages", "submission.sections.describe.relationship-lookup.title.DataPackage": "Pacote de dados", - + // "submission.sections.describe.relationship-lookup.title.DataFile": "Data Files", "submission.sections.describe.relationship-lookup.title.DataFile": "Ficheiros de dados", - + // "submission.sections.describe.relationship-lookup.title.Funding Agency": "Funding Agency", "submission.sections.describe.relationship-lookup.title.Funding Agency": "Agência de financiamento", - + // "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Funding", "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Financiamento", // "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Parent Organizational Unit", "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Organização principal", - + // "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor": "Publication", "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor": "Publicação", @@ -6253,22 +6253,22 @@ // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Selected Journals", "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Revistas selecionadas", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Selected Journal Volume", "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Volume de revistas selecionadas", // "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Selected Projects", "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Projetos selecionados", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Selected Publications", "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Publicações selecionadas", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Selected Authors", "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Autores selecionados", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Selected Organizational Units", "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Unidades organizacionais selecionadas", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Selected Data Packages", "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Pacotes de dados selecionados", @@ -6277,46 +6277,46 @@ // "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Selected Journals", "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Revistas selecionadas", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Selected Issue", "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Número selecionado", // "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Selected Journal Volume", "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Volume de revista selecionado", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Selected Funding Agency", "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Agência de financiamento selecionada", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Selected Funding", "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Financiamento selecionado", // "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Selected Issue", "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Número selecionado", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Selected Organizational Unit", "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Organização selecionada", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Resultados da pesquisa", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Resultados da pesquisa", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Resultados da pesquisa", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Resultados da pesquisa", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Resultados da pesquisa", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Resultados da pesquisa", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Resultados da pesquisa", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Resultados da pesquisa", @@ -6333,11 +6333,11 @@ "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Resultados da pesquisa", // "submission.sections.describe.relationship-lookup.selection-tab.title": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title": "Resultados da pesquisa", - + "submission.sections.describe.relationship-lookup.selection-tab.title": "Resultados da pesquisa", + // "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Would you like to save \"{{ value }}\" as a name variant for this person so you and others can reuse it for future submissions? If you don\'t you can still use it for this submission.", "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Pretende guardar \"{{ value }}\" como um nome alternativo para esta pessoa permitindo a sua reutilização por outros em futuros depósitos? Se não, pode usar apenas neste depósito.", - + // "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Save a new name variant", "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Guardar um Nome alternativo", @@ -6349,10 +6349,10 @@ // "submission.sections.ccLicense.select": "Select a license type…", "submission.sections.ccLicense.select": "Selecionar tipo de licença…", - + // "submission.sections.ccLicense.change": "Change your license type…", "submission.sections.ccLicense.change": "Alterar tipo de licença…", - + // "submission.sections.ccLicense.none": "No licenses available", "submission.sections.ccLicense.none": "Sem licenças disponíveis", @@ -6364,58 +6364,58 @@ // "submission.sections.ccLicense.confirmation": "I grant the license above", "submission.sections.ccLicense.confirmation": "Concedo a licença abaixo indicada", - + // "submission.sections.general.add-more": "Add more", "submission.sections.general.add-more": "Adicionar mais", - + // "submission.sections.general.cannot_deposit": "Deposit cannot be completed due to errors in the form.
    Please fill out all required fields to complete the deposit.", - "submission.sections.general.cannot_deposit": "O depósito não pode ser preenchido devido a erros no formulário.
    Por favor preencha todos os campos necessários para completar o depósito.", - + "submission.sections.general.cannot_deposit": "O depósito não pode ser preenchido devido a erros no formulário.
    Por favor preencha todos os campos necessários para completar o depósito.", + // "submission.sections.general.collection": "Collection", "submission.sections.general.collection": "Coleção", // "submission.sections.general.deposit_error_notice": "There was an issue when submitting the item, please try again later.", "submission.sections.general.deposit_error_notice": "Ocorreu um problema durante o depósito do item, por favor tente novamente mais tarde.", - + // "submission.sections.general.deposit_success_notice": "Submission deposited successfully.", "submission.sections.general.deposit_success_notice": "Depositado com sucesso.", - + // "submission.sections.general.discard_error_notice": "There was an issue when discarding the item, please try again later.", "submission.sections.general.discard_error_notice": "Ocorreu um problema ao cancelar o item, por favor tente novamente mais tarde.", - + // "submission.sections.general.discard_success_notice": "Submission discarded successfully.", "submission.sections.general.discard_success_notice": "Depósito cancelado com sucesso.", - + // "submission.sections.general.metadata-extracted": "New metadata have been extracted and added to the {{sectionId}} section.", "submission.sections.general.metadata-extracted": "Novos metadados foram extraídos e adicionados à secção {{sectionId}}.", - + // "submission.sections.general.metadata-extracted-new-section": "New {{sectionId}} section has been added to submission.", "submission.sections.general.metadata-extracted-new-section": "Nova Secção {{sectionId}} foi adicionada a dubmissão.", // "submission.sections.general.no-collection": "No collection found", "submission.sections.general.no-collection": "Não foi encontrada nenhuma coleção", - + // "submission.sections.general.no-sections": "No options available", "submission.sections.general.no-sections": "Sem opções disponíveis", // "submission.sections.general.save_error_notice": "There was an issue when saving the item, please try again later.", "submission.sections.general.save_error_notice": "Ocorreu um problema ao guardar o item, por favor tente novamente mais tarde.", - + // "submission.sections.general.save_success_notice": "Submission saved successfully.", "submission.sections.general.save_success_notice": "Depósito guardado com sucesso.", - + // "submission.sections.general.search-collection": "Search for a collection", "submission.sections.general.search-collection": "Pesquisar uma coleção", // "submission.sections.general.sections_not_valid": "There are incomplete sections.", "submission.sections.general.sections_not_valid": "Subsistem seções incompletas.", - + // "submission.sections.identifiers.info": "The following identifiers will be created for your item:", "submission.sections.identifiers.info": "Serão criados os seguintes identificadores para o seu item:", // "submission.sections.identifiers.no_handle": "No handles have been minted for this item.", "submission.sections.identifiers.no_handle": "Não foram gerados 'handles' para este item.", - + // "submission.sections.identifiers.no_doi": "No DOIs have been minted for this item.", "submission.sections.identifiers.no_doi": "Não foram gerados DOIs para este item.", @@ -6427,13 +6427,13 @@ // "submission.sections.identifiers.otherIdentifiers_label": "Other identifiers: ", "submission.sections.identifiers.otherIdentifiers_label": "Outros identificadores: ", - - // "submission.sections.submit.progressbar.accessCondition": "Item access conditions", + + // "submission.sections.submit.progressbar.accessCondition": "Item access conditions", "submission.sections.submit.progressbar.accessCondition": "Condições de acesso do item", - + // "submission.sections.submit.progressbar.CClicense": "Creative commons license", "submission.sections.submit.progressbar.CClicense": "Associar uma licença Creative Commons", - + // "submission.sections.submit.progressbar.describe.recycle": "Recycle", "submission.sections.submit.progressbar.describe.recycle": "Reciclar", @@ -6448,25 +6448,25 @@ // "submission.sections.submit.progressbar.detect-duplicate": "Potential duplicates", "submission.sections.submit.progressbar.detect-duplicate": "Potenciais duplicados", - + // "submission.sections.submit.progressbar.identifiers": "Identifiers", "submission.sections.submit.progressbar.identifiers": "Identificadores", - + // "submission.sections.submit.progressbar.license": "Deposit license", "submission.sections.submit.progressbar.license": "Licença de distribuição não-exclusiva do repositório", - + // "submission.sections.submit.progressbar.sherpapolicy": "Sherpa policies", - "submission.sections.submit.progressbar.sherpapolicy": "[Ajuda em contexto] Informação SHERPA sobre políticas de editoras e revistas face ao auto-arquivo em repositórios.", - + "submission.sections.submit.progressbar.sherpapolicy": "[Ajuda em contexto] Informação SHERPA sobre políticas de editoras e revistas face ao auto-arquivo em repositórios.", + // "submission.sections.submit.progressbar.upload": "Upload files", "submission.sections.submit.progressbar.upload": "Carregar ficheiro(s)", - + // "submission.sections.submit.progressbar.sherpaPolicies": "Publisher open access policy information", "submission.sections.submit.progressbar.sherpaPolicies": "Informação sobre a política de auto arquivo dos editores", - + // "submission.sections.sherpa-policy.title-empty": "No publisher policy information available. If your work has an associated ISSN, please enter it above to see any related publisher open access policies.", "submission.sections.sherpa-policy.title-empty": "Não foi encontrada informação disponível sobre política desta editora. Se o seu trabalho tem um ISSN associado, por favor, introduza-o em cima para poder visualizar as políticas de auto arquivo associadas.", - + // "submission.sections.status.errors.title": "Errors", "submission.sections.status.errors.title": "Erros", @@ -6484,12 +6484,12 @@ // "submission.sections.status.warnings.aria": "has warnings", "submission.sections.status.warnings.aria": "tem avisos", - + // "submission.sections.status.info.title": "Additional Information", "submission.sections.status.info.title": "Informação adicional", // "submission.sections.status.info.aria": "Additional Information", - "submission.sections.status.info.aria": "Informação adicional", + "submission.sections.status.info.aria": "Informação adicional", // "submission.sections.toggle.open": "Open section", "submission.sections.toggle.open": "Seção aberta", @@ -6499,10 +6499,10 @@ // "submission.sections.toggle.aria.open": "Expand {{sectionHeader}} section", "submission.sections.toggle.aria.open": "Expandir seção {{sectionHeader}}", - + // "submission.sections.toggle.aria.close": "Collapse {{sectionHeader}} section", "submission.sections.toggle.aria.close": "Fechar seção {{sectionHeader}}", - + // "submission.sections.upload.delete.confirm.cancel": "Cancel", "submission.sections.upload.delete.confirm.cancel": "Cancelar", @@ -6514,40 +6514,40 @@ // "submission.sections.upload.delete.confirm.title": "Delete bitstream", "submission.sections.upload.delete.confirm.title": "Remover ficheiro", - + // "submission.sections.upload.delete.submit": "Delete", "submission.sections.upload.delete.submit": "Remover", - + // "submission.sections.upload.download.title": "Download bitstream", "submission.sections.upload.download.title": "Descarregar ficheiro", - + // "submission.sections.upload.drop-message": "Drop files to attach them to the item", "submission.sections.upload.drop-message": "Arraste para aqui o(s) ficheiro(s) que pretende anexar a este registo", - + // "submission.sections.upload.edit.title": "Edit bitstream", "submission.sections.upload.edit.title": "Editar ficheiro", - + // "submission.sections.upload.form.access-condition-label": "Access condition type", "submission.sections.upload.form.access-condition-label": "Tipo de condição de acesso", - + // "submission.sections.upload.form.access-condition-hint": "Select an access condition to apply on the bitstream once the item is deposited", "submission.sections.upload.form.access-condition-hint": "Selecione um tipo de acesso a aplicar ao ficheiro assim que o item seja depositado", - + // "submission.sections.upload.form.date-required": "Date is required.", - "submission.sections.upload.form.date-required": "Data necessária.", - + "submission.sections.upload.form.date-required": "Data necessária.", + // "submission.sections.upload.form.date-required-from": "Grant access from date is required.", "submission.sections.upload.form.date-required-from": "A data de início é obrigatória.", - - // "submission.sections.upload.form.date-required-until": "Grant access until date is required.", - "submission.sections.upload.form.date-required-until": "A data de fim é obrigatória.", - + + // "submission.sections.upload.form.date-required-until": "Grant access until date is required.", + "submission.sections.upload.form.date-required-until": "A data de fim é obrigatória.", + // "submission.sections.upload.form.from-label": "Grant access from", "submission.sections.upload.form.from-label": "Acesso permitido a partir de", - + // "submission.sections.upload.form.from-hint": "Select the date from which the related access condition is applied", "submission.sections.upload.form.from-hint": "Selecione a data a partir da qual o tipo de acesso é aplicável", - + // "submission.sections.upload.form.from-placeholder": "From", "submission.sections.upload.form.from-placeholder": "De", @@ -6559,28 +6559,28 @@ // "submission.sections.upload.form.until-label": "Grant access until", "submission.sections.upload.form.until-label": "conceder acesso até", - + // "submission.sections.upload.form.until-hint": "Select the date until which the related access condition is applied", "submission.sections.upload.form.until-hint": "Selecione a data até a qual o tipo de acesso será aplicado", - + // "submission.sections.upload.form.until-placeholder": "Until", - "submission.sections.upload.form.until-placeholder": "Até", + "submission.sections.upload.form.until-placeholder": "Até", // "submission.sections.upload.header.policy.default.nolist": "Uploaded files in the {{collectionName}} collection will be accessible according to the following group(s):", "submission.sections.upload.header.policy.default.nolist": "Arquivos enviados na coleção {{collectionName}} serão acessiveis de acordo com o(s) seguinte(s) grupo(s):", // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", "submission.sections.upload.header.policy.default.withlist": "Por favor note que os ficheiros enviados à coleção {{collectionName}} serão acessíveis, de acordo com o que está explicitamente definido no ficheiro, no(s) seguinte(s) grupo(s):", - + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", "submission.sections.upload.info": "Aqui encontra o(s) ficheiro(s) carregado(s) neste registo. Pode atualizar os metadados do(s) ficheiro(s), definir as suas condições de acesso ou carregar ficheiros adicionais arrastando-os em qualquer local da página.", - + // "submission.sections.upload.no-entry": "No", "submission.sections.upload.no-entry": "Não", // "submission.sections.upload.no-file-uploaded": "No file uploaded yet.", "submission.sections.upload.no-file-uploaded": "Nenhum ficheiro carregado!", - + // "submission.sections.upload.save-metadata": "Save metadata", "submission.sections.upload.save-metadata": "Guardar metadados", @@ -6592,19 +6592,19 @@ // "submission.sections.upload.upload-successful": "Upload successful", "submission.sections.upload.upload-successful": "Enviado com sucesso", - + // "submission.sections.accesses.form.discoverable-description": "When checked, this item will be discoverable in search/browse. When unchecked, the item will only be available via a direct link and will never appear in search/browse.", - "submission.sections.accesses.form.discoverable-description": "Quando selecionado, este item será pesquisável na pesquisa/navegação. Se não estiver selecionado, o item apenas estará disponível através uma ligação direta (link) e não aparecerá na pesquisa/navegação.", - + "submission.sections.accesses.form.discoverable-description": "Quando selecionado, este item será pesquisável na pesquisa/navegação. Se não estiver selecionado, o item apenas estará disponível através uma ligação direta (link) e não aparecerá na pesquisa/navegação.", + // "submission.sections.accesses.form.discoverable-label": "Discoverable", "submission.sections.accesses.form.discoverable-label": "Recuperável", - + // "submission.sections.accesses.form.access-condition-label": "Access condition type", "submission.sections.accesses.form.access-condition-label": "Tipo de acesso", - + // "submission.sections.accesses.form.access-condition-hint": "Select an access condition to apply on the item once it is deposited", "submission.sections.accesses.form.access-condition-hint": "Selecione um tipo de acesso para aplicar ao item no momento do seu depósito ", - + // "submission.sections.accesses.form.date-required": "Date is required.", "submission.sections.accesses.form.date-required": "O preenchimento da data é obrigatório.", @@ -6628,16 +6628,16 @@ // "submission.sections.accesses.form.group-required": "Group is required.", "submission.sections.accesses.form.group-required": "A indicação de um grupo é obrigátória.", - + // "submission.sections.accesses.form.until-label": "Grant access until", "submission.sections.accesses.form.until-label": "Conceder acesso até", // "submission.sections.accesses.form.until-hint": "Select the date until which the related access condition is applied", "submission.sections.accesses.form.until-hint": "Selecione a data até a qual o tipo de acesso é aplicável", - + // "submission.sections.accesses.form.until-placeholder": "Until", - "submission.sections.accesses.form.until-placeholder": "Até", - + "submission.sections.accesses.form.until-placeholder": "Até", + // "submission.sections.license.granted-label": "I confirm the license above", "submission.sections.license.granted-label": "Confirmo a licença", @@ -6676,7 +6676,7 @@ // "submission.sections.sherpa.publisher.policy.openaccess": "Open Access pathways permitted by this journal's policy are listed below by article version. Click on a pathway for a more detailed view", "submission.sections.sherpa.publisher.policy.openaccess": "As 'vias' de acesso aberto permitidas pela política desta revista estão listadas em baixo, tendo em consideração as versões do artigo (ex. 'Versão final publicada', 'Versão aceite do autor', 'Versão submetida'). Clique numa via para obter mais detalhes.", - + // "submission.sections.sherpa.publisher.policy.more.information": "For more information, please see the following links:", "submission.sections.sherpa.publisher.policy.more.information": "Para mais informações, consulte por favor os seguintes links:", @@ -6685,25 +6685,25 @@ // "submission.sections.sherpa.publisher.policy.embargo": "Embargo", "submission.sections.sherpa.publisher.policy.embargo": "Embargo", - + // "submission.sections.sherpa.publisher.policy.noembargo": "No Embargo", "submission.sections.sherpa.publisher.policy.noembargo": "Sem embargo", // "submission.sections.sherpa.publisher.policy.nolocation": "None", "submission.sections.sherpa.publisher.policy.nolocation": "Nenhuma", - + // "submission.sections.sherpa.publisher.policy.license": "License", "submission.sections.sherpa.publisher.policy.license": "Licença", // "submission.sections.sherpa.publisher.policy.prerequisites": "Prerequisites", "submission.sections.sherpa.publisher.policy.prerequisites": "Pré-requisitos", - + // "submission.sections.sherpa.publisher.policy.location": "Location", "submission.sections.sherpa.publisher.policy.location": "Localização", // "submission.sections.sherpa.publisher.policy.conditions": "Conditions", "submission.sections.sherpa.publisher.policy.conditions": "Condições", - + // "submission.sections.sherpa.publisher.policy.refresh": "Refresh", "submission.sections.sherpa.publisher.policy.refresh": "Atualizar", @@ -6715,7 +6715,7 @@ // "submission.sections.sherpa.record.information.date.created": "Date Created", "submission.sections.sherpa.record.information.date.created": "Data de Criação", - + // "submission.sections.sherpa.record.information.date.modified": "Last Modified", "submission.sections.sherpa.record.information.date.modified": "Última modificação", @@ -6727,31 +6727,31 @@ // "submission.submit.breadcrumbs": "New submission", "submission.submit.breadcrumbs": "Novos depósitos", - + // "submission.submit.title": "New submission", "submission.submit.title": "Novo depósito", // "submission.workflow.generic.delete": "Delete", "submission.workflow.generic.delete": "Remover", - + // "submission.workflow.generic.delete-help": "If you would to discard this item, select \"Delete\". You will then be asked to confirm it.", "submission.workflow.generic.delete-help": "Se pretende remover definitivamente este item, selecione 'Apagar'. Será solicitada confirmação.", - + // "submission.workflow.generic.edit": "Edit", "submission.workflow.generic.edit": "Editar", // "submission.workflow.generic.edit-help": "Select this option to change the item's metadata.", "submission.workflow.generic.edit-help": "Selecione esta opção para modificar os metadados do item", - + // "submission.workflow.generic.view": "View", "submission.workflow.generic.view": "Visualizar", // "submission.workflow.generic.view-help": "Select this option to view the item's metadata.", - "submission.workflow.generic.view-help": "Visualizar os metadados do item", - + "submission.workflow.generic.view-help": "Visualizar os metadados do item", + // "submission.workflow.generic.submit_select_reviewer": "Select Reviewer", "submission.workflow.generic.submit_select_reviewer": "Selecionar revisor", - + // "submission.workflow.generic.submit_select_reviewer-help": "", "submission.workflow.generic.submit_select_reviewer-help": "", @@ -6766,22 +6766,22 @@ // "submission.workflow.tasks.claimed.approve_help": "If you have reviewed the item and it is suitable for inclusion in the collection, select \"Approve\".", "submission.workflow.tasks.claimed.approve_help": "Se reviu o item e está conformidade para inclusão na coleção, selecione 'Aprovar'.", - + // "submission.workflow.tasks.claimed.edit": "Edit", "submission.workflow.tasks.claimed.edit": "Editar", // "submission.workflow.tasks.claimed.edit_help": "Select this option to change the item's metadata.", "submission.workflow.tasks.claimed.edit_help": "Selecione esta opção para modificar os metadados do item.", - + // "submission.workflow.tasks.claimed.decline": "Decline", "submission.workflow.tasks.claimed.decline": "Declinar", // "submission.workflow.tasks.claimed.decline_help": "", "submission.workflow.tasks.claimed.decline_help": "", - + // "submission.workflow.tasks.claimed.reject.reason.info": "Please enter your reason for rejecting the submission into the box below, indicating whether the submitter may fix a problem and resubmit.", "submission.workflow.tasks.claimed.reject.reason.info": "Informe em seguida o motivo da rejeição do depósito, indicando se o depositante pode corrigir algum problema e reenviar o depósito.", - + // "submission.workflow.tasks.claimed.reject.reason.placeholder": "Describe the reason of reject", "submission.workflow.tasks.claimed.reject.reason.placeholder": "Descreva o motivo da rejeição", @@ -6805,33 +6805,33 @@ // "submission.workflow.tasks.generic.error": "Error occurred during operation...", "submission.workflow.tasks.generic.error": "ocorreu um erro durante a operação...", - + // "submission.workflow.tasks.generic.processing": "Processing...", "submission.workflow.tasks.generic.processing": "A processar...", - + // "submission.workflow.tasks.generic.submitter": "Submitter", "submission.workflow.tasks.generic.submitter": "Depositante", - + // "submission.workflow.tasks.generic.success": "Operation successful", "submission.workflow.tasks.generic.success": "Operação realizada com sucesso", - + // "submission.workflow.tasks.pool.claim": "Claim", "submission.workflow.tasks.pool.claim": "Assumir", - + // "submission.workflow.tasks.pool.claim_help": "Assign this task to yourself.", "submission.workflow.tasks.pool.claim_help": "Assumir esta tarefa", - + // "submission.workflow.tasks.pool.hide-detail": "Hide detail", "submission.workflow.tasks.pool.hide-detail": "Ocultar detalhes", // "submission.workflow.tasks.pool.show-detail": "Show detail", "submission.workflow.tasks.pool.show-detail": "Mostrar detalhes", - + // "submission.workspace.generic.view": "View", "submission.workspace.generic.view": "Ver", // "submission.workspace.generic.view-help": "Select this option to view the item's metadata.", - "submission.workspace.generic.view-help": "Selecione esta opção para ver os metadados do item.", + "submission.workspace.generic.view-help": "Selecione esta opção para ver os metadados do item.", // "subscriptions.title": "subscriptions", "subscriptions.title": "Subscrições de alertas", @@ -6946,16 +6946,16 @@ // "thumbnail.project.alt": "Project Logo", "thumbnail.project.alt": "Logótipo do projeto", - + // "thumbnail.project.placeholder": "Project Placeholder Image", "thumbnail.project.placeholder": "Imagem do projeto", // "thumbnail.orgunit.alt": "OrgUnit Logo", "thumbnail.orgunit.alt": "Logótipo da unidade", - + // "thumbnail.orgunit.placeholder": "OrgUnit Placeholder Image", "thumbnail.orgunit.placeholder": "Imagem da unidade", - + // "thumbnail.person.alt": "Profile Picture", "thumbnail.person.alt": "Foto do perfil", @@ -6976,7 +6976,7 @@ // "vocabulary-treeview.search.form.search": "Search", "vocabulary-treeview.search.form.search": "pesquisar", - + // "vocabulary-treeview.search.no-result": "There were no items to show", "vocabulary-treeview.search.no-result": "Não existem itens para mostrar", @@ -6987,23 +6987,23 @@ "vocabulary-treeview.tree.description.srsc": "Categorias de Assuntos de Investigação", // "vocabulary-treeview.info": "Select a subject to add as search filter", - "vocabulary-treeview.info": "Selecione um assunto para adicionar como filtro de pesquisa", - + "vocabulary-treeview.info": "Selecione um assunto para adicionar como filtro de pesquisa", + // "uploader.browse": "browse", "uploader.browse": "navegue para o(s) carregar.", - + // "uploader.drag-message": "Drag & Drop your files here", "uploader.drag-message": "Clique e arraste o(s) seu(s) ficheiro(s) para aqui", - + // "uploader.delete.btn-title": "Delete", "uploader.delete.btn-title": "Apagar", // "uploader.or": ", or ", "uploader.or": " ou", - + // "uploader.processing": "Processing uploaded file(s)... (it's now safe to close this page)", "uploader.processing": "A processar o(s) ficheiro(s) carregado(s)... (agora é seguro fechar esta página)", - + // "uploader.queue-length": "Queue length", "uploader.queue-length": "Tamanho da fila", @@ -7015,16 +7015,16 @@ // "virtual-metadata.delete-relationship.modal-head": "Select the items for which you want to save the virtual metadata as real metadata", "virtual-metadata.delete-relationship.modal-head": "Selecione os tipos para os quais pretende guardar os metadados virtuais como metadados reais", - + // "supervisedWorkspace.search.results.head": "Supervised Items", "supervisedWorkspace.search.results.head": "Itens supervisionados", - + // "workspace.search.results.head": "Your submissions", "workspace.search.results.head": "Os meus depósitos", - + // "workflowAdmin.search.results.head": "Administer Workflow", "workflowAdmin.search.results.head": "Gestão do workflow", - + // "workflow.search.results.head": "Workflow tasks", "workflow.search.results.head": "Tarefas em workflow", @@ -7036,7 +7036,7 @@ // "workflow-item.edit.title": "Edit workflowitem", "workflow-item.edit.title": "Editar item em processamento", - + // "workflow-item.delete.notification.success.title": "Deleted", "workflow-item.delete.notification.success.title": "Apagado", @@ -7051,10 +7051,10 @@ // "workflow-item.delete.title": "Delete workflow item", "workflow-item.delete.title": "Apagar item do workflow", - + // "workflow-item.delete.header": "Delete workflow item", "workflow-item.delete.header": "Apagar item do workflow", - + // "workflow-item.delete.button.cancel": "Cancel", "workflow-item.delete.button.cancel": "Cancelar", @@ -7081,19 +7081,19 @@ // "workflow-item.send-back.button.cancel": "Cancel", "workflow-item.send-back.button.cancel": "Cancelar", - + // "workflow-item.send-back.button.confirm": "Send back", "workflow-item.send-back.button.confirm": "Devolver", - + // "workflow-item.view.breadcrumbs": "Workflow View", "workflow-item.view.breadcrumbs": "Vista das tarefas", - + // "workspace-item.view.breadcrumbs": "Workspace View", "workspace-item.view.breadcrumbs": "Vista das tarefas", - + // "workspace-item.view.title": "Workspace View", "workspace-item.view.title": "Vista das tarefas", - + // "workflow-item.advanced.title": "Advanced workflow", "workflow-item.advanced.title": "Fluxo de trabalho avançado", @@ -7144,36 +7144,36 @@ // "workflow-item.scorereviewaction.button.confirm": "Confirm", "workflow-item.scorereviewaction.button.confirm": "Confirmar", - + // "idle-modal.header": "Session will expire soon", "idle-modal.header": "A sua sessão vai expirar em breve!", - + // "idle-modal.info": "For security reasons, user sessions expire after {{ timeToExpire }} minutes of inactivity. Your session will expire soon. Would you like to extend it or log out?", "idle-modal.info": "Por razões de segurança, as sessões de utilizador expiram depois de {{ timeToExpire }} minutos de inatividade. A sua sessão expira em breve. Gostaria de a prolongar ou sair?", // "idle-modal.log-out": "Log out", "idle-modal.log-out": "Desligar", - + // "idle-modal.extend-session": "Extend session", "idle-modal.extend-session": "Prolongar sessão", - + // "researcher.profile.action.processing": "Processing...", "researcher.profile.action.processing": "A processar...", // "researcher.profile.associated": "Researcher profile associated", - "researcher.profile.associated": "Perfil do investigador associado", + "researcher.profile.associated": "Perfil do investigador associado", // "researcher.profile.change-visibility.fail": "An unexpected error occurs while changing the profile visibility", - "researcher.profile.change-visibility.fail": "Ocorre um erro inesperado ao alterar a visibilidade do perfil", + "researcher.profile.change-visibility.fail": "Ocorre um erro inesperado ao alterar a visibilidade do perfil", // "researcher.profile.create.new": "Create new", - "researcher.profile.create.new": "Criar novo", + "researcher.profile.create.new": "Criar novo", // "researcher.profile.create.success": "Researcher profile created successfully", - "researcher.profile.create.success": "Perfil do investigador criado com sucesso", + "researcher.profile.create.success": "Perfil do investigador criado com sucesso", // "researcher.profile.create.fail": "An error occurs during the researcher profile creation", - "researcher.profile.create.fail": "Ocorre um erro durante a criação do perfil do investigador", + "researcher.profile.create.fail": "Ocorre um erro durante a criação do perfil do investigador", // "researcher.profile.delete": "Delete", "researcher.profile.delete": "Remover", @@ -7185,47 +7185,47 @@ "researcher.profile.hide": "Esconder", // "researcher.profile.not.associated": "Researcher profile not yet associated", - "researcher.profile.not.associated": "Perfil do investigador ainda não associado", + "researcher.profile.not.associated": "Perfil do investigador ainda não associado", // "researcher.profile.view": "View", "researcher.profile.view": "Ver", - + // "researcher.profile.private.visibility": "PRIVATE", "researcher.profile.private.visibility": "PRIVADO", - + // "researcher.profile.public.visibility": "PUBLIC", "researcher.profile.public.visibility": "PÚBLICO", - + // "researcher.profile.status": "Status:", "researcher.profile.status": "Estado:", // "researcherprofile.claim.not-authorized": "You are not authorized to claim this item. For more details contact the administrator(s).", "researcherprofile.claim.not-authorized": "Não possui autorização para reinvindicar este artigo. Para mais pormenores, contactar o(s) administrador(es).", - + // "researcherprofile.error.claim.body": "An error occurred while claiming the profile, please try again later", "researcherprofile.error.claim.body": "Ocorreu um erro ao reclamar o perfil, por favor tente novamente mais tarde", - + // "researcherprofile.error.claim.title": "Error", - "researcherprofile.error.claim.title": "Erro", + "researcherprofile.error.claim.title": "Erro", // "researcherprofile.success.claim.body": "Profile claimed with success", "researcherprofile.success.claim.body": "Perfil reivindicado com sucesso", // "researcherprofile.success.claim.title": "Success", "researcherprofile.success.claim.title": "Sucesso", - + // "person.page.orcid.create": "Create an ORCID iD", "person.page.orcid.create": "Criar um ORCID iD", // "person.page.orcid.granted-authorizations": "Granted authorizations", - "person.page.orcid.granted-authorizations": "Autorizações concedidas", + "person.page.orcid.granted-authorizations": "Autorizações concedidas", // "person.page.orcid.grant-authorizations": "Grant authorizations", "person.page.orcid.grant-authorizations": "Conceder autorizações", - + // "person.page.orcid.link": "Connect to ORCID iD", "person.page.orcid.link": "Ligar ao ORCID iD", - + // "person.page.orcid.link.processing": "Linking profile to ORCID...", "person.page.orcid.link.processing": "Ligação do perfil ao ORCID...", @@ -7234,9 +7234,9 @@ // "person.page.orcid.orcid-not-linked-message": "The ORCID iD of this profile ({{ orcid }}) has not yet been connected to an account on the ORCID registry or the connection is expired.", "person.page.orcid.orcid-not-linked-message": "O ORCID iD deste perfil ({{{ orcid }}) ainda não foi ligado a uma conta no registo do ORCID ou a ligação está expirada.", - + // "person.page.orcid.unlink": "Disconnect from ORCID", - "person.page.orcid.unlink": "Desligar do ORCID", + "person.page.orcid.unlink": "Desligar do ORCID", // "person.page.orcid.unlink.processing": "Processing...", "person.page.orcid.unlink.processing": "A processar...", @@ -7251,11 +7251,11 @@ "person.page.orcid.no-missing-authorizations-message": "Óptimo! Esta caixa está vazia, pelo que lhe foram concedidas todos as permissões de acesso para utilizar todas as funções oferecidas pela sua instituição.", // "person.page.orcid.no-orcid-message": "No ORCID iD associated yet. By clicking on the button below it is possible to link this profile with an ORCID account.", - "person.page.orcid.no-orcid-message": "Ainda não foi associado nenhum ORCID iD. Ao clicar no botão abaixo, é possível ligar este perfil a uma conta ORCID.", - + "person.page.orcid.no-orcid-message": "Ainda não foi associado nenhum ORCID iD. Ao clicar no botão abaixo, é possível ligar este perfil a uma conta ORCID.", + // "person.page.orcid.profile-preferences": "Profile preferences", "person.page.orcid.profile-preferences": "Preferências de perfil", - + // "person.page.orcid.funding-preferences": "Funding preferences", "person.page.orcid.funding-preferences": "Preferências de financiamento", @@ -7272,14 +7272,14 @@ "person.page.orcid.sync-profile.affiliation": "Afiliação", // "person.page.orcid.sync-profile.biographical": "Biographical data", - "person.page.orcid.sync-profile.biographical": "Dados biográficos", + "person.page.orcid.sync-profile.biographical": "Dados biográficos", // "person.page.orcid.sync-profile.education": "Education", "person.page.orcid.sync-profile.education": "Educação", - + // "person.page.orcid.sync-profile.identifiers": "Identifiers", "person.page.orcid.sync-profile.identifiers": "Identificadores", - + // "person.page.orcid.sync-fundings.all": "All fundings", "person.page.orcid.sync-fundings.all": "Todos financiamentos", @@ -7288,16 +7288,16 @@ // "person.page.orcid.sync-fundings.my_selected": "Selected fundings", "person.page.orcid.sync-fundings.my_selected": "Financiamentos selecionados", - + // "person.page.orcid.sync-fundings.disabled": "Disabled", - "person.page.orcid.sync-fundings.disabled": "Desligado", + "person.page.orcid.sync-fundings.disabled": "Desligado", // "person.page.orcid.sync-publications.all": "All publications", "person.page.orcid.sync-publications.all": "Todas as publicações", - + // "person.page.orcid.sync-publications.mine": "My publications", "person.page.orcid.sync-publications.mine": "As minhas publicações", - + // "person.page.orcid.sync-publications.my_selected": "Selected publications", "person.page.orcid.sync-publications.my_selected": "Publicações selecionadas", @@ -7314,16 +7314,16 @@ "person.page.orcid.sync-queue.discard.success": "O registo da fila do ORCID foi descartado com sucesso", // "person.page.orcid.sync-queue.empty-message": "The ORCID queue registry is empty", - "person.page.orcid.sync-queue.empty-message": "O registo de filas do ORCID está vazio", + "person.page.orcid.sync-queue.empty-message": "O registo de filas do ORCID está vazio", // "person.page.orcid.sync-queue.table.header.type": "Type", - "person.page.orcid.sync-queue.table.header.type": "Tipo", + "person.page.orcid.sync-queue.table.header.type": "Tipo", // "person.page.orcid.sync-queue.table.header.description": "Description", - "person.page.orcid.sync-queue.table.header.description": "Descrição", + "person.page.orcid.sync-queue.table.header.description": "Descrição", // "person.page.orcid.sync-queue.table.header.action": "Action", - "person.page.orcid.sync-queue.table.header.action": "Ação", + "person.page.orcid.sync-queue.table.header.action": "Ação", // "person.page.orcid.sync-queue.description.affiliation": "Affiliations", "person.page.orcid.sync-queue.description.affiliation": "Afiliações", @@ -7342,7 +7342,7 @@ // "person.page.orcid.sync-queue.description.qualification": "Qualifications", "person.page.orcid.sync-queue.description.qualification": "Qualificações", - + // "person.page.orcid.sync-queue.description.researcher_urls": "Researcher urls", "person.page.orcid.sync-queue.description.researcher_urls": "URLS dos investigadores", @@ -7366,15 +7366,15 @@ // "person.page.orcid.sync-queue.tooltip.affiliation": "Affiliation", "person.page.orcid.sync-queue.tooltip.affiliation": "Afiliação", - + // "person.page.orcid.sync-queue.tooltip.education": "Education", "person.page.orcid.sync-queue.tooltip.education": "Educação", // "person.page.orcid.sync-queue.tooltip.qualification": "Qualification", "person.page.orcid.sync-queue.tooltip.qualification": "Qualificação", - + // "person.page.orcid.sync-queue.tooltip.other_names": "Other name", - "person.page.orcid.sync-queue.tooltip.other_names": "Outro nome", + "person.page.orcid.sync-queue.tooltip.other_names": "Outro nome", // "person.page.orcid.sync-queue.tooltip.country": "Country", "person.page.orcid.sync-queue.tooltip.country": "País", @@ -7383,10 +7383,10 @@ "person.page.orcid.sync-queue.tooltip.keywords": "Palavra-chave", // "person.page.orcid.sync-queue.tooltip.external_ids": "External identifier", - "person.page.orcid.sync-queue.tooltip.external_ids": "Identificadores externos", + "person.page.orcid.sync-queue.tooltip.external_ids": "Identificadores externos", // "person.page.orcid.sync-queue.tooltip.researcher_urls": "Researcher url", - "person.page.orcid.sync-queue.tooltip.researcher_urls": "URL do investigador", + "person.page.orcid.sync-queue.tooltip.researcher_urls": "URL do investigador", // "person.page.orcid.sync-queue.send": "Synchronize with ORCID registry", "person.page.orcid.sync-queue.send": "Sincronizar com o registo ORCID", @@ -7399,9 +7399,9 @@ // "person.page.orcid.sync-queue.send.bad-request-error": "The submission to ORCID failed because the resource sent to ORCID registry is not valid", "person.page.orcid.sync-queue.send.bad-request-error": "A submissão ao ORCID falhou porque o recurso enviado para o registo do ORCID não é válido", - + // "person.page.orcid.sync-queue.send.error": "The submission to ORCID failed", - "person.page.orcid.sync-queue.send.error": "A submissão ao ORCID falhou", + "person.page.orcid.sync-queue.send.error": "A submissão ao ORCID falhou", // "person.page.orcid.sync-queue.send.conflict-error": "The submission to ORCID failed because the resource is already present on the ORCID registry", "person.page.orcid.sync-queue.send.conflict-error": "A submissão ao ORCID falhou porque o recurso já existe no registo do ORCID", @@ -7425,22 +7425,22 @@ "person.page.orcid.sync-queue.send.validation-error.title.required": "O título é obrigatório", // "person.page.orcid.sync-queue.send.validation-error.type.required": "The dc.type is required", - "person.page.orcid.sync-queue.send.validation-error.type.required": "O campo 'dc.type' é obrigatório", + "person.page.orcid.sync-queue.send.validation-error.type.required": "O campo 'dc.type' é obrigatório", // "person.page.orcid.sync-queue.send.validation-error.start-date.required": "The start date is required", - "person.page.orcid.sync-queue.send.validation-error.start-date.required": "A data de início é obrigatória", + "person.page.orcid.sync-queue.send.validation-error.start-date.required": "A data de início é obrigatória", // "person.page.orcid.sync-queue.send.validation-error.funder.required": "The funder is required", - "person.page.orcid.sync-queue.send.validation-error.funder.required": "O financiador é obrigatório", + "person.page.orcid.sync-queue.send.validation-error.funder.required": "O financiador é obrigatório", // "person.page.orcid.sync-queue.send.validation-error.country.invalid": "Invalid 2 digits ISO 3166 country", "person.page.orcid.sync-queue.send.validation-error.country.invalid": "País inválido (2 dígitos ISO 3166)", - // "person.page.orcid.sync-queue.send.validation-error.organization.required": "The organization is required", + // "person.page.orcid.sync-queue.send.validation-error.organization.required": "The organization is required", "person.page.orcid.sync-queue.send.validation-error.organization.required": "A organização é obrigatória", - + // "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "The organization's name is required", - "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "O nome da organização é obrigatório", + "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "O nome da organização é obrigatório", // "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "The publication date must be one year after 1900", "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "A data de publicação deve ser um ano após 1900", @@ -7464,23 +7464,23 @@ "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "Os identificadores da organização requerem uma fonte", // "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "The source of one of the organization identifiers is invalid. Supported sources are RINGGOLD, GRID, LEI and FUNDREF", - "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "A fonte de um dos identificadores da organização é inválida. As fontes suportadas são RINGGOLD, GRID, LEI e FUNDREF", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "A fonte de um dos identificadores da organização é inválida. As fontes suportadas são RINGGOLD, GRID, LEI e FUNDREF", // "person.page.orcid.synchronization-mode": "Synchronization mode", - "person.page.orcid.synchronization-mode": "Modo sincronização", + "person.page.orcid.synchronization-mode": "Modo sincronização", // "person.page.orcid.synchronization-mode.batch": "Batch", - "person.page.orcid.synchronization-mode.batch": "Lote", + "person.page.orcid.synchronization-mode.batch": "Lote", // "person.page.orcid.synchronization-mode.label": "Synchronization mode", "person.page.orcid.synchronization-mode.label": "Modo sincronização", - + // "person.page.orcid.synchronization-mode-message": "Please select how you would like synchronization to ORCID to occur. The options include 'Manual' (you must send your data to ORCID manually), or 'Batch' (the system will send your data to ORCID via a scheduled script).", "person.page.orcid.synchronization-mode-message": "Por favor, selecione a forma como deseja que a sincronização com ORCID ocorra. As opções incluem 'Manual' (deve enviar os seus dados para o ORCID manualmente), ou 'Batch' (o sistema enviará os seus dados para o ORCID através de um script agendado).", - + // "person.page.orcid.synchronization-mode-funding-message": "Select whether to send your linked Project entities to your ORCID record's list of funding information.", "person.page.orcid.synchronization-mode-funding-message": "Selecione se pretende enviar as suas entidades ligadas de 'Projeto' para a lista de informação de financiamento do seu registo ORCID.", - + // "person.page.orcid.synchronization-mode-publication-message": "Select whether to send your linked Publication entities to your ORCID record's list of works.", "person.page.orcid.synchronization-mode-publication-message": "Selecione se pretende enviar as suas entidades ligadas de 'Publicação' associadas à lista de obras do seu registo ORCID.", @@ -7494,7 +7494,7 @@ "person.page.orcid.synchronization-settings-update.error": "A atualização das definições de sincronização falhou", // "person.page.orcid.synchronization-mode.manual": "Manual", - "person.page.orcid.synchronization-mode.manual": "Manual", + "person.page.orcid.synchronization-mode.manual": "Manual", // "person.page.orcid.scope.authenticate": "Get your ORCID iD", "person.page.orcid.scope.authenticate": "Obtenha o seu ORCID iD", @@ -7510,22 +7510,22 @@ // "person.page.orcid.unlink.success": "The disconnection between the profile and the ORCID registry was successful", "person.page.orcid.unlink.success": "A desconexão entre o perfil e o registo ORCID foi bem sucedida", - + // "person.page.orcid.unlink.error": "An error occurred while disconnecting between the profile and the ORCID registry. Try again", "person.page.orcid.unlink.error": "Ocorreu um erro ao desligar o perfil e o registo ORCID. Tente novamente.", // "person.orcid.sync.setting": "ORCID Synchronization settings", - "person.orcid.sync.setting": "Definições de sincronização ORCID", - + "person.orcid.sync.setting": "Definições de sincronização ORCID", + // "person.orcid.registry.queue": "ORCID Registry Queue", "person.orcid.registry.queue": "Fila de registo ORCID", - + // "person.orcid.registry.auth": "ORCID Authorizations", - "person.orcid.registry.auth": "Autorizações ORCID", - + "person.orcid.registry.auth": "Autorizações ORCID", + // "home.recent-submissions.head": "Recent Submissions", "home.recent-submissions.head": "Entradas recentes", - + // "listable-notification-object.default-message": "This object couldn't be retrieved", "listable-notification-object.default-message": "Este objeto não pode ser recuperado", @@ -7543,7 +7543,7 @@ // "system-wide-alert-banner.countdown.minutes": "{{minutes}} minute(s):", "system-wide-alert-banner.countdown.minutes": "{{minutos}} minuto(s):", - + // "menu.section.system-wide-alert": "System-wide Alert", "menu.section.system-wide-alert": "Alertas gerais do sistema", @@ -7591,101 +7591,100 @@ // "system-wide-alert.form.create.error": "Something went wrong when creating the system-wide alert", "system-wide-alert.form.create.error": "Algo correu mal ao criar o alerta geral do sistema", - + // "admin.system-wide-alert.breadcrumbs": "System-wide Alerts", "admin.system-wide-alert.breadcrumbs": "Alertas gerais do sistema", - + // "admin.system-wide-alert.title": "System-wide Alerts", - "admin.system-wide-alert.title": "Alertas gerais do sistema", - - - - // Other strings... + "admin.system-wide-alert.title": "Alertas gerais do sistema", + + + + // Other strings... // Missing, Duplicate or Redundant ??? - + // NOT FOUND 30-05-2023 - - + + // "datafile.listelement.badge": "Data file", "datafile.listelement.badge": "Ficheiro de dados", - + // "datapackage.listelement.badge": "Data package", - "datapackage.listelement.badge": "Pacote de dados", + "datapackage.listelement.badge": "Pacote de dados", // "browse.next.button": "Next", "browse.next.button": "Próximo", // "browse.previous.button": "Previous", - "browse.previous.button": "Anterior", - + "browse.previous.button": "Anterior", + // "curation-task.task.registerdoi.label": "DOI check", "curation-task.task.registerdoi.label": "Verificação de DOIs", - + // "mydspace.general.text-here": "here", "mydspace.general.text-here": "aqui", - + // "mydspace.upload.upload-successful": "New workspace item created. Click {{here}} for edit it.", "mydspace.upload.upload-successful": "Novo item de espaço de trabalho criado. Clique {{here}} para o editar.", - + // "profile.security.form.notifications.error.not-long-enough": "The password has to be at least 6 characters long.", "profile.security.form.notifications.error.not-long-enough": "A senha deve ter pelo menos 6 caracteres.", - + // "register-page.create-profile.security.error.password-length": "The password should be at least 6 characters long.", "register-page.create-profile.security.error.password-length": "A senha deve possuir pelo menos 6 caracteres.", - + // "search.form.search_mydspace": "Search MyDSpace", "search.form.search_mydspace": "Pesquisar na Área Pessoal", - + // "forgot-password.form.error.password-length": "The password should be at least 6 characters long.", "forgot-password.form.error.password-length": "A senha deve ter pelo menos 6 caracteres.", - + // "search.filters.entityType.Publication": "Publicação", "search.filters.entityType.Publication": "Publicação", - + // "search.filters.entityType.Person": "Pessoa", "search.filters.entityType.Person": "Pessoa", - + // "search.filters.entityType.Project": "Projecto", "search.filters.entityType.Project": "Projeto", - + // "search.filters.entityType.Journal": "Revista", "search.filters.entityType.Journal": "Revista", - + // "search.filters.entityType.DataFile": "Data File", "search.filters.entityType.DataFile": "Ficheiro de dados", - + // "forgot-email.form.google-recaptcha.must-accept-cookies": "Must accept cookies", - "forgot-email.form.google-recaptcha.must-accept-cookies": "Deve aceitar cookies", - + "forgot-email.form.google-recaptcha.must-accept-cookies": "Deve aceitar cookies", + // "forgot-email.form.google-recaptcha.open-cookie-settings": "Cookie settings", - "forgot-email.form.google-recaptcha.open-cookie-settings": "Configurar cookies", - + "forgot-email.form.google-recaptcha.open-cookie-settings": "Configurar cookies", + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.local-entity": "Successfully imported and added external project to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.local-entity": "Importado com sucesso e adicionado autor à seleção", // "search.filters.namedresourcetype.Archived": "Archived", "search.filters.namedresourcetype.Archived": "Aceites", - + // "search.filters.namedresourcetype.Workspace": "Workspace", "search.filters.namedresourcetype.Workspace": "Por terminar", - + // "search.filters.namedresourcetype.Workflow": "Workflow", "search.filters.namedresourcetype.Workflow": "Em fluxo de trabalho", - + // "search.filters.namedresourcetype.Validation": "Validation", "search.filters.namedresourcetype.Validation": "Em validação", - + // "orgunit.search.results.head": "Organizational Unit Search Results", "orgunit.search.results.head": "Resultados da pesquisa de organizações", - + // "orgunit-relationships.search.results.head": "Organizational Unit Search Results", "orgunit-relationships.search.results.head": "Resultados da pesquisa de organizações", - + // "journalissue.search.results.head": "Journal Issue Search Results", "journalissue.search.results.head": "Resultados da pesquisa de números", - + // "journalissue-relationships.search.results.head": "Journal Issue Search Results", "journalissue-relationships.search.results.head": "Resultados da pesquisa de números", - } From 29f283b35e7ed8f2fae3b451e5f4eccdaaba3310 Mon Sep 17 00:00:00 2001 From: rsaraivac <122451983+rsaraivac@users.noreply.github.com> Date: Wed, 31 May 2023 20:11:38 +0100 Subject: [PATCH 144/425] Update pt-PT.json5 --- src/assets/i18n/pt-PT.json5 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index 8dff07a387..735cb4df4c 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -4261,8 +4261,8 @@ // "menu.section.registries_metadata": "Metadata", "menu.section.registries_metadata": "Metadados", - - // "menu.section.statistics": "Statistics", + + // "menu.section.statistics": "Statistics", "menu.section.statistics": "Estatísticas", // "menu.section.statistics_task": "Statistics Task", From c84db3ce3dabd5fe3b8884d4be9ba6ed1b5be665 Mon Sep 17 00:00:00 2001 From: rsaraivac <122451983+rsaraivac@users.noreply.github.com> Date: Wed, 31 May 2023 20:34:21 +0100 Subject: [PATCH 145/425] Update pt-PT.json5 --- src/assets/i18n/pt-PT.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index 735cb4df4c..74b1ff3e68 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -4261,7 +4261,7 @@ // "menu.section.registries_metadata": "Metadata", "menu.section.registries_metadata": "Metadados", - + // "menu.section.statistics": "Statistics", "menu.section.statistics": "Estatísticas", From 43e1e6d22bf97d94b531abc99e93d7f1440dc7be Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Thu, 1 Jun 2023 10:56:44 +0200 Subject: [PATCH 146/425] add noreferrer to license link --- .../cc-license/submission-section-cc-licenses.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.html b/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.html index bdde0ff470..20743540a8 100644 --- a/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.html +++ b/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.html @@ -128,7 +128,7 @@
    {{ 'submission.sections.ccLicense.link' | translate }}
    - + {{ licenseLink }}
    From d1dff0553d9a2b7b8af1ac9856be4367b8a8cc4a Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Thu, 1 Jun 2023 11:00:26 +0200 Subject: [PATCH 147/425] fix lint error --- src/app/core/services/browser.referrer.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/core/services/browser.referrer.service.ts b/src/app/core/services/browser.referrer.service.ts index 5aae750599..64be95d241 100644 --- a/src/app/core/services/browser.referrer.service.ts +++ b/src/app/core/services/browser.referrer.service.ts @@ -1,7 +1,7 @@ import { ReferrerService } from './referrer.service'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { isEmpty, hasNoValue } from '../../shared/empty.util'; +import { hasNoValue } from '../../shared/empty.util'; import { URLCombiner } from '../url-combiner/url-combiner'; import { Inject, Injectable } from '@angular/core'; import { DOCUMENT } from '@angular/common'; From c1dcebbd049d420f88a2a0b90cca8ae6f33fd340 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Thu, 1 Jun 2023 15:27:11 +0200 Subject: [PATCH 148/425] Fix: fix validation and translation Show/hide the datepicker based on the value --- .../access-control-array-form.component.html | 119 ++++++++------- .../access-control-array-form.component.scss | 7 + ...ccess-control-array-form.component.spec.ts | 53 ++++--- .../access-control-array-form.component.ts | 137 +++++++----------- .../control-max-end-date.pipe.ts | 26 ---- .../control-max-start-date.pipe.ts | 27 ---- .../access-control-array-form/to-date.pipe.ts | 23 +++ ...cess-control-form-container.component.html | 4 +- .../access-control-form.module.ts | 38 +++-- src/assets/i18n/en.json5 | 22 +-- 10 files changed, 214 insertions(+), 242 deletions(-) delete mode 100644 src/app/shared/access-control-form-container/access-control-array-form/control-max-end-date.pipe.ts delete mode 100644 src/app/shared/access-control-form-container/access-control-array-form/control-max-start-date.pipe.ts create mode 100644 src/app/shared/access-control-form-container/access-control-array-form/to-date.pipe.ts diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html index 9460fb4ffe..9158bc3576 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html @@ -1,65 +1,87 @@ - -
    + +
    {{'access-control-no-access-conditions-warning-message' | translate}}
    - -
    + +
    - - - {{'access-control-option-note' | translate}} + + {{'access-control-option-note' | translate}} +
    -
    - - -
    - +
    + +
    + +
    + +
    - {{'access-control-option-start-date-note' | translate}} + + {{'access-control-option-start-date-note' | translate}} +
    -
    - - -
    - +
    + +
    + +
    + +
    - {{'access-control-option-end-date-note' | translate}} + + {{'access-control-option-end-date-note' | translate}} +
    @@ -68,18 +90,17 @@
    - - - - -
    -
    - -
    -
    -
    - - - - - - From 97673471f7aadee954bf4a06cd9038c40d1f8a53 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Thu, 1 Jun 2023 12:20:59 -0400 Subject: [PATCH 154/425] Remove inherited input declarations. --- .../file/section-upload-file.component.ts | 73 +------------------ 1 file changed, 1 insertion(+), 72 deletions(-) diff --git a/src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.ts b/src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.ts index 00431cbbe2..369af4e36c 100644 --- a/src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.ts +++ b/src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.ts @@ -1,13 +1,4 @@ -import { - Component, Input, ViewChild -} from '@angular/core'; - -import { - SubmissionFormsModel -} from 'src/app/core/config/models/config-submission-forms.model'; -import { - SubmissionSectionUploadFileEditComponent -} from 'src/app/submission/sections/upload/file/edit/section-upload-file-edit.component'; +import { Component } from '@angular/core'; import { SubmissionSectionUploadFileComponent as BaseComponent } from 'src/app/submission/sections/upload/file/section-upload-file.component'; @@ -24,66 +15,4 @@ import { }) export class SubmissionSectionUploadFileComponent extends BaseComponent { - - /** - * The list of available access condition - * @type {Array} - */ - @Input() availableAccessConditionOptions: any[]; - - /** - * The submission id - * @type {string} - */ - @Input() collectionId: string; - - /** - * Define if collection access conditions policy type : - * POLICY_DEFAULT_NO_LIST : is not possible to define additional access group/s for the single file - * POLICY_DEFAULT_WITH_LIST : is possible to define additional access group/s for the single file - * @type {number} - */ - @Input() collectionPolicyType: number; - - /** - * The configuration for the bitstream's metadata form - * @type {SubmissionFormsModel} - */ - @Input() configMetadataForm: SubmissionFormsModel; - - /** - * The bitstream id - * @type {string} - */ - @Input() fileId: string; - - /** - * The bitstream array key - * @type {string} - */ - @Input() fileIndex: string; - - /** - * The bitstream id - * @type {string} - */ - @Input() fileName: string; - - /** - * The section id - * @type {string} - */ - @Input() sectionId: string; - - /** - * The submission id - * @type {string} - */ - @Input() submissionId: string; - - /** - * The [[SubmissionSectionUploadFileEditComponent]] reference - * @type {SubmissionSectionUploadFileEditComponent} - */ - @ViewChild(SubmissionSectionUploadFileEditComponent) fileEditComp: SubmissionSectionUploadFileEditComponent; } From 86e1333025a26af288d44b213d1746c335da8930 Mon Sep 17 00:00:00 2001 From: Michael Spalti Date: Fri, 5 May 2023 11:50:45 -0700 Subject: [PATCH 155/425] Possible fix for browse-by-date links --- src/app/shared/starts-with/date/starts-with-date.component.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/shared/starts-with/date/starts-with-date.component.ts b/src/app/shared/starts-with/date/starts-with-date.component.ts index d65d12b413..89d9361b6a 100644 --- a/src/app/shared/starts-with/date/starts-with-date.component.ts +++ b/src/app/shared/starts-with/date/starts-with-date.component.ts @@ -131,7 +131,6 @@ export class StartsWithDateComponent extends StartsWithAbstractComponent { } else { this.startsWithYear = +startsWith; } - this.setStartsWithParam(false); } /** From 8e450402af8ea6af0d038d04af666bdd0b560600 Mon Sep 17 00:00:00 2001 From: Michael Spalti Date: Thu, 1 Jun 2023 08:46:25 -0700 Subject: [PATCH 156/425] Removed unnecessary route navigation. --- src/app/shared/starts-with/starts-with-abstract.component.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/shared/starts-with/starts-with-abstract.component.ts b/src/app/shared/starts-with/starts-with-abstract.component.ts index 26140dcc6d..ad9c56c970 100644 --- a/src/app/shared/starts-with/starts-with-abstract.component.ts +++ b/src/app/shared/starts-with/starts-with-abstract.component.ts @@ -70,7 +70,6 @@ export abstract class StartsWithAbstractComponent implements OnInit, OnDestroy { */ setStartsWith(startsWith: string) { this.startsWith = startsWith; - this.setStartsWithParam(false); } /** From dd548c20e9c9cf0144a5ee60f003f65f36238546 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Thu, 1 Jun 2023 13:48:17 -0400 Subject: [PATCH 157/425] Add blank custom versions to 'custom' theme. --- .../deny-request-copy.component.html | 0 .../deny-request-copy.component.scss | 1 + .../deny-request-copy.component.ts | 15 +++++++++++++++ .../email-request-copy.component.html | 14 ++++++++++++++ .../email-request-copy.component.scss | 0 .../email-request-copy.component.ts | 15 +++++++++++++++ .../grant-request-copy.component.html | 0 .../grant-request-copy.component.scss | 0 .../grant-request-copy.component.ts | 15 +++++++++++++++ src/themes/custom/lazy-theme.module.ts | 12 ++++++++++++ 10 files changed, 72 insertions(+) create mode 100644 src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.html create mode 100644 src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.scss create mode 100644 src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.ts create mode 100644 src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.html create mode 100644 src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.scss create mode 100644 src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.ts create mode 100644 src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.html create mode 100644 src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.scss create mode 100644 src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.ts diff --git a/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.html b/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.scss b/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.scss new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.scss @@ -0,0 +1 @@ + diff --git a/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.ts b/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.ts new file mode 100644 index 0000000000..fb65aae9bc --- /dev/null +++ b/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { + DenyRequestCopyComponent as BaseComponent +} from 'src/app/request-copy/deny-request-copy/deny-request-copy.component'; + +@Component({ + selector: 'ds-deny-request-copy', + // styleUrls: ['./deny-request-copy.component.scss'], + styleUrls: [], + // templateUrl: './deny-request-copy.component.html', + templateUrl: './../../request-copy/deny-request-copy/deny-request-copy.component.html', +}) +export class DenyRequestCopyComponent + extends BaseComponent { +} diff --git a/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.html b/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.html new file mode 100644 index 0000000000..072f4d4a52 --- /dev/null +++ b/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.html @@ -0,0 +1,14 @@ + + + + + TODO supply a title + + + + +
    TODO write content
    + + diff --git a/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.scss b/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.ts b/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.ts new file mode 100644 index 0000000000..d4da93a99f --- /dev/null +++ b/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { + EmailRequestCopyComponent as BaseComponent +} from 'src/app/request-copy/email-request-copy/email-request-copy.component'; + +@Component({ + selector: 'ds-email-request-copy', + // styleUrls: ['./email-request-copy.component.scss'], + styleUrls: [], + // templateUrl: './email-request-copy.component.html', + templateUrl: './../../request-copy/email-request-copy/email-request-copy.component.html', +}) +export class EmailRequestCopyComponent + extends BaseComponent { +} diff --git a/src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.html b/src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.scss b/src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.ts b/src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.ts new file mode 100644 index 0000000000..20d0ae90c1 --- /dev/null +++ b/src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { + GrantRequestCopyComponent as BaseComponent +} from 'src/app/request-copy/grant-request-copy/grant-request-copy.component'; + +@Component({ + selector: 'ds-grant-request-copy', + // styleUrls: ['./grant-request-copy.component.scss'], + styleUrls: [], + // templateUrl: './grant-request-copy.component.html', + templateUrl: './../../request-copy/grant-request-copy/grant-request-copy.component.html', +}) +export class GrantRequestCopyComponent + extends BaseComponent { +} diff --git a/src/themes/custom/lazy-theme.module.ts b/src/themes/custom/lazy-theme.module.ts index b1290cc634..e055018db1 100644 --- a/src/themes/custom/lazy-theme.module.ts +++ b/src/themes/custom/lazy-theme.module.ts @@ -145,6 +145,15 @@ import { MediaViewerVideoComponent } from './app/item-page/media-viewer/media-viewer-video/media-viewer-video.component'; import { NgxGalleryModule } from '@kolkov/ngx-gallery'; +import { + DenyRequestCopyComponent +} from './app/request-copy/deny-request-copy/deny-request-copy.component'; +import { + EmailRequestCopyComponent +} from './app/request-copy/email-request-copy/email-request-copy.component'; +import { + GrantRequestCopyComponent +} from './app/request-copy/grant-request-copy/grant-request-copy.component'; const DECLARATIONS = [ FileSectionComponent, @@ -212,6 +221,9 @@ const DECLARATIONS = [ MediaViewerComponent, MediaViewerImageComponent, MediaViewerVideoComponent, + DenyRequestCopyComponent, + EmailRequestCopyComponent, + GrantRequestCopyComponent, ]; @NgModule({ From da245b88b8bce2bce566b745c7120a816b713dac Mon Sep 17 00:00:00 2001 From: Alan Orth Date: Fri, 2 Jun 2023 12:59:20 +0300 Subject: [PATCH 158/425] src/assets/i18n: fix English permission string The current message is not correct English. Note, there seems to be a mix of "don't" and "do not" language. Perhaps we should harmonize that eventually. --- src/assets/i18n/en.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 93418dc189..b1959c5f95 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -4061,7 +4061,7 @@ "submission.general.cancel": "Cancel", - "submission.general.cannot_submit": "You have not the privilege to make a new submission.", + "submission.general.cannot_submit": "You don't have permission to make a new submission.", "submission.general.deposit": "Deposit", From 9d08cac56603dda7d0271f9af826c12082d85e35 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Fri, 2 Jun 2023 13:31:53 +0200 Subject: [PATCH 159/425] 101623: Reset in Treeview also resets selectedItems + Provide TreeviewService in root --- src/app/browse-by/browse-by-page.module.ts | 2 +- .../vocabularies/vocabulary.service.ts | 6 ++++-- src/app/shared/form/form.module.ts | 2 -- .../vocabulary-treeview.component.html | 2 ++ .../vocabulary-treeview.component.spec.ts | 10 ++++++++++ .../vocabulary-treeview.component.ts | 17 +++++++++++++++-- .../vocabulary-treeview.service.ts | 4 +++- src/modules/app/browser-app.module.ts | 5 ----- 8 files changed, 35 insertions(+), 13 deletions(-) diff --git a/src/app/browse-by/browse-by-page.module.ts b/src/app/browse-by/browse-by-page.module.ts index fea6668b3c..2f4ae433c9 100644 --- a/src/app/browse-by/browse-by-page.module.ts +++ b/src/app/browse-by/browse-by-page.module.ts @@ -13,7 +13,7 @@ import { BrowseByGuard } from './browse-by-guard'; providers: [ ItemDataService, BrowseService, - BrowseByGuard + BrowseByGuard, ] }) export class BrowseByPageModule { diff --git a/src/app/core/submission/vocabularies/vocabulary.service.ts b/src/app/core/submission/vocabularies/vocabulary.service.ts index f2c1747658..1ff5b30ee0 100644 --- a/src/app/core/submission/vocabularies/vocabulary.service.ts +++ b/src/app/core/submission/vocabularies/vocabulary.service.ts @@ -223,13 +223,15 @@ export class VocabularyService { * no valid cached version. Defaults to true * @param reRequestOnStale Whether or not the request should automatically be re- * requested after the response becomes stale + * @param constructId Whether constructing the full vocabularyDetail ID + * ({vocabularyName}:{detailName}) is still necessary * @param linksToFollow List of {@link FollowLinkConfig} that indicate which * {@link HALLink}s should be automatically resolved * @return {Observable>} * Return an observable that emits VocabularyEntryDetail object */ - findEntryDetailById(id: string, name: string, useCachedVersionIfAvailable = true, reRequestOnStale = true, ...linksToFollow: FollowLinkConfig[]): Observable> { - const findId = `${name}:${id}`; + findEntryDetailById(id: string, name: string, useCachedVersionIfAvailable = true, reRequestOnStale = true, constructId: boolean = true, ...linksToFollow: FollowLinkConfig[]): Observable> { + const findId: string = (constructId ? `${name}:${id}` : id); return this.vocabularyEntryDetailDataService.findById(findId, useCachedVersionIfAvailable, reRequestOnStale, ...linksToFollow); } diff --git a/src/app/shared/form/form.module.ts b/src/app/shared/form/form.module.ts index 6e3fc33832..c2fc4c855e 100644 --- a/src/app/shared/form/form.module.ts +++ b/src/app/shared/form/form.module.ts @@ -32,7 +32,6 @@ import { NumberPickerComponent } from './number-picker/number-picker.component'; import { AuthorityConfidenceStateDirective } from './directives/authority-confidence-state.directive'; import { SortablejsModule } from 'ngx-sortablejs'; import { VocabularyTreeviewComponent } from './vocabulary-treeview/vocabulary-treeview.component'; -import { VocabularyTreeviewService } from './vocabulary-treeview/vocabulary-treeview.service'; import { VocabularyTreeviewModalComponent } from './vocabulary-treeview-modal/vocabulary-treeview-modal.component'; import { FormBuilderService } from './builder/form-builder.service'; import { DsDynamicTypeBindRelationService } from './builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service'; @@ -104,7 +103,6 @@ const DIRECTIVES = [ useValue: dsDynamicFormControlMapFn }, ...DYNAMIC_MATCHER_PROVIDERS, - VocabularyTreeviewService, DynamicFormLayoutService, DynamicFormService, DynamicFormValidationService, diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html index 9cbc0146a1..fb7d162008 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html @@ -33,6 +33,7 @@ > @@ -65,6 +66,7 @@ container="body"> diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts index 9ca8d7ab8b..97a21b724b 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts @@ -21,6 +21,7 @@ import { AuthTokenInfo } from '../../../core/auth/models/auth-token-info.model'; import { authReducer } from '../../../core/auth/auth.reducer'; import { storeModuleConfig } from '../../../app.reducer'; import { By } from '@angular/platform-browser'; +import { VocabularyService } from '../../../core/submission/vocabularies/vocabulary.service'; describe('VocabularyTreeviewComponent test suite', () => { @@ -49,6 +50,14 @@ describe('VocabularyTreeviewComponent test suite', () => { restoreNodes: jasmine.createSpy('restoreNodes'), cleanTree: jasmine.createSpy('cleanTree'), }); + const vocabularyServiceStub = jasmine.createSpyObj('VocabularyService', { + getVocabularyEntriesByValue: jasmine.createSpy('getVocabularyEntriesByValue'), + getEntryDetailParent: jasmine.createSpy('getEntryDetailParent'), + findEntryDetailById: jasmine.createSpy('findEntryDetailById'), + searchTopEntries: jasmine.createSpy('searchTopEntries'), + getEntryDetailChildren: jasmine.createSpy('getEntryDetailChildren'), + clearSearchTopRequests: jasmine.createSpy('clearSearchTopRequests') + }); initialState = { core: { @@ -77,6 +86,7 @@ describe('VocabularyTreeviewComponent test suite', () => { ], providers: [ { provide: VocabularyTreeviewService, useValue: vocabularyTreeviewServiceStub }, + { provide: VocabularyService, useValue: vocabularyServiceStub }, { provide: NgbActiveModal, useValue: modalStub }, provideMockStore({ initialState }), ChangeDetectorRef, diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts index 891a825745..017416e8c2 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts @@ -17,6 +17,8 @@ import { VocabularyTreeFlattener } from './vocabulary-tree-flattener'; import { VocabularyTreeFlatDataSource } from './vocabulary-tree-flat-data-source'; import { CoreState } from '../../../core/core-state.model'; import { lowerCase } from 'lodash/string'; +import { VocabularyService } from '../../../core/submission/vocabularies/vocabulary.service'; +import { getFirstSucceededRemoteDataPayload } from '../../../core/shared/operators'; /** * Component that shows a hierarchical vocabulary in a tree view @@ -114,11 +116,13 @@ export class VocabularyTreeviewComponent implements OnDestroy, OnInit { * Initialize instance variables * * @param {VocabularyTreeviewService} vocabularyTreeviewService + * @param {vocabularyService} vocabularyService * @param {Store} store * @param {TranslateService} translate */ constructor( private vocabularyTreeviewService: VocabularyTreeviewService, + private vocabularyService: VocabularyService, private store: Store, private translate: TranslateService ) { @@ -284,13 +288,22 @@ export class VocabularyTreeviewComponent implements OnDestroy, OnInit { * Reset tree resulting from a previous search */ reset() { + this.searchText = ''; + for (const item of this.selectedItems) { + this.subs.push(this.vocabularyService.findEntryDetailById(item, this.vocabularyOptions.name, true, true, false).pipe( + getFirstSucceededRemoteDataPayload(), + ).subscribe((detail: VocabularyEntryDetail) => { + this.deselect.emit(detail); + })); + this.nodeMap.get(item).isSelected = false; + } + this.selectedItems = []; + if (isNotEmpty(this.storedNodeMap)) { this.nodeMap = this.storedNodeMap; this.storedNodeMap = new Map(); this.vocabularyTreeviewService.restoreNodes(); } - - this.searchText = ''; } /** diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.service.ts b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.service.ts index d400615f1e..f524af4c0e 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.service.ts +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.service.ts @@ -25,7 +25,9 @@ import { VocabularyEntryDetail } from '../../../core/submission/vocabularies/mod /** * A service that provides methods to deal with vocabulary tree */ -@Injectable() +@Injectable({ + providedIn: 'root' +}) export class VocabularyTreeviewService { /** diff --git a/src/modules/app/browser-app.module.ts b/src/modules/app/browser-app.module.ts index 4cdf7fbe2f..68e328a8d5 100644 --- a/src/modules/app/browser-app.module.ts +++ b/src/modules/app/browser-app.module.ts @@ -31,7 +31,6 @@ import { GoogleAnalyticsService } from '../../app/statistics/google-analytics.se import { AuthRequestService } from '../../app/core/auth/auth-request.service'; import { BrowserAuthRequestService } from '../../app/core/auth/browser-auth-request.service'; import { BrowserInitService } from './browser-init.service'; -import { VocabularyTreeviewService } from 'src/app/shared/form/vocabulary-treeview/vocabulary-treeview.service'; export const REQ_KEY = makeStateKey('req'); @@ -111,10 +110,6 @@ export function getRequest(transferState: TransferState): any { { provide: LocationToken, useFactory: locationProvider, - }, - { - provide: VocabularyTreeviewService, - useClass: VocabularyTreeviewService, } ] }) From 4cf69eb9c9b1233bbeeb13efcfe271946094add8 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Fri, 2 Jun 2023 19:36:53 +0200 Subject: [PATCH 160/425] 101623: Fix reset emit nog working for BrowseByTaxonomyPage --- .../browse-by-taxonomy-page.component.spec.ts | 2 ++ .../browse-by-taxonomy-page.component.ts | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts index 484992afbf..c724017b1f 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts @@ -47,6 +47,8 @@ describe('BrowseByTaxonomyPageComponent', () => { detail2 = new VocabularyEntryDetail(); detail1.value = 'HUMANITIES and RELIGION'; detail2.value = 'TECHNOLOGY'; + detail1.id = 'id-1'; + detail2.id = 'id-2'; }); it('should create', () => { diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts index d568a97fd7..cf6345bf39 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts @@ -98,7 +98,7 @@ export class BrowseByTaxonomyPageComponent implements OnInit, OnDestroy { * @param detail VocabularyEntryDetail to be removed */ onDeselect(detail: VocabularyEntryDetail): void { - this.selectedItems = this.selectedItems.filter((entry: VocabularyEntryDetail) => { return entry !== detail; }); + this.selectedItems = this.selectedItems.filter((entry: VocabularyEntryDetail) => { return entry.id !== detail.id; }); this.filterValues = this.filterValues.filter((value: string) => { return value !== `${detail.value},equals`; }); this.updateQueryParams(); } From 165bdf77972639cca75776b32cb145feeea42a3d Mon Sep 17 00:00:00 2001 From: Alan Orth Date: Thu, 25 May 2023 15:43:18 +0300 Subject: [PATCH 161/425] src/assets: add i18n string for publisher Add string for publisher in live import item preview. Requires: https://github.com/DSpace/DSpace/pull/8866 --- src/assets/i18n/en.json5 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 88b5e17a01..d9516b22b9 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -2536,6 +2536,8 @@ "item.preview.dc.identifier.doi": "DOI", + "item.preview.dc.publisher": "Publisher:", + "item.preview.person.familyName": "Surname:", "item.preview.person.givenName": "Name:", From 092608f6cbb114a81a34a685fefec8e5cbed2bed Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Mon, 5 Jun 2023 15:11:01 +0200 Subject: [PATCH 162/425] [CST-5729] Remove additional error message --- src/app/core/data/signposting-data.service.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/core/data/signposting-data.service.ts b/src/app/core/data/signposting-data.service.ts index fca22ec383..d051ecf8db 100644 --- a/src/app/core/data/signposting-data.service.ts +++ b/src/app/core/data/signposting-data.service.ts @@ -29,7 +29,6 @@ export class SignpostingDataService { return this.restService.get(`${baseUrl}/signposting/links/${uuid}`).pipe( catchError((err) => { - console.error(err); return observableOf([]); }), map((res: RawRestResponse) => res.statusCode === 200 ? res.payload as SignpostingLink[] : []) From 2824469dc56510027cead4858d22404e07f6cf64 Mon Sep 17 00:00:00 2001 From: Ricardo Saraiva <122451983+rsaraivac@users.noreply.github.com> Date: Mon, 5 Jun 2023 14:41:55 +0100 Subject: [PATCH 163/425] Update pt-PT.json5 --- src/assets/i18n/pt-PT.json5 | 160 +++++++++++++++++++++++++----------- 1 file changed, 110 insertions(+), 50 deletions(-) diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index 74b1ff3e68..e89ff0bc60 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -1,6 +1,6 @@ { - // Dspace v7.5 > i18n pt-PT > reviewed 30-05-2023 + // Dspace v7.x > i18n pt-PT > reviewed 05-06-2023 // "401.help": "You're not authorized to access this page. You can use the button below to get back to the home page.", "401.help": "Não está autorizado a aceder a esta página. Pode utilizar o botão em baixo para voltar à página de início.", @@ -842,7 +842,7 @@ // "admin.batch-import.page.dropMsgReplace": "Drop to replace the batch ZIP to import", "admin.batch-import.page.dropMsgReplace": "Arraste ficheiro .zip para substituir importação em lote", - // "admin.metadata-import.page.button.return": "Return", + // "admin.metadata-import.page.button.return": "Back", "admin.metadata-import.page.button.return": "Voltar", // "admin.metadata-import.page.button.proceed": "Proceed", @@ -1286,7 +1286,7 @@ // "collection.delete.head": "Delete Collection", "collection.delete.head": "Apagar coleção", - // "collection.delete.notification.fail": "collection could not be deleted", + // "collection.delete.notification.fail": "Collection could not be deleted", "collection.delete.notification.fail": "Coleção não pode ser apagada", // "collection.delete.notification.success": "Successfully deleted collection", @@ -1307,13 +1307,13 @@ // "collection.edit.tabs.mapper.head": "Item Mapper", "collection.edit.tabs.mapper.head": "Mapeamentos", - // "collection.edit.tabs.item-mapper.title": "collection Edit - Item Mapper", + // "collection.edit.tabs.item-mapper.title": "Collection Edit - Item Mapper", "collection.edit.tabs.item-mapper.title": "Editar coleção - mapeamentos", // "collection.edit.item-mapper.cancel": "Cancel", "collection.edit.item-mapper.cancel": "Cancelar", - // "collection.edit.item-mapper.collection": "collection: \"{{name}}\"", + // "collection.edit.item-mapper.collection": "Collection: \"{{name}}\"", "collection.edit.item-mapper.collection": "Coleção: \"{{name}}\"", // "collection.edit.item-mapper.confirm": "Map selected items", @@ -1547,8 +1547,8 @@ // "collection.form.entityType": "Entity Type", "collection.form.entityType": "Tipo de entidade", - // "collection.listelement.badge": "collection", - "collection.listelement.badge": "coleção", + // "collection.listelement.badge": "Collection", + "collection.listelement.badge": "Coleção", // "collection.page.browse.recent.head": "Recent Submissions", "collection.page.browse.recent.head": "Entradas recentes", @@ -2074,6 +2074,9 @@ // "dso.name.untitled": "Untitled", "dso.name.untitled": "Sem título", + + // "dso.name.unnamed": "Unnamed", + "dso.name.unnamed": "Sem nome", // "dso-selector.create.collection.head": "New collection", "dso-selector.create.collection.head": "Nova coleção", @@ -2159,7 +2162,7 @@ // "dso-selector.results-could-not-be-retrieved": "Something went wrong, please refresh again", "dso-selector.results-could-not-be-retrieved": "Algo correu mal, por favor repita", - // "supervision-group-selector.header": "supervision Group Selector", + // "supervision-group-selector.header": "Supervision Group Selector", "supervision-group-selector.header": "Seletor de grupos de supervisão", // "supervision-group-selector.select.type-of-order.label": "Select a type of Order", @@ -2192,8 +2195,8 @@ // "supervision-group-selector.notification.create.success.title": "Successfully created supervision order for group {{ name }}", "supervision-group-selector.notification.create.success.title": "Criada com sucesso ordem de supervisão para o grupo {{ name }}", - // "supervision-group-selector.notification.create.failure.title": "error", - "supervision-group-selector.notification.create.failure.title": "erro", + // "supervision-group-selector.notification.create.failure.title": "Error", + "supervision-group-selector.notification.create.failure.title": "Erro", // "supervision-group-selector.notification.create.already-existing": "A supervision order already exists on this item for selected group", "supervision-group-selector.notification.create.already-existing": "Já existe uma ordem de supervisão sobre este item para grupo selecionado", @@ -2491,9 +2494,24 @@ // "form.no-value": "No value entered", "form.no-value": "Nenhum valor informado", + + // "form.other-information.email": "Email", + "form.other-information.email": "Email", + + // "form.other-information.first-name": "First Name", + "form.other-information.first-name": "Nome", + + // "form.other-information.insolr": "In Solr Index", + "form.other-information.insolr": "No índice SOLR", + + // "form.other-information.institution": "Institution", + "form.other-information.institution": "Instituição", + + // "form.other-information.last-name": "Last Name", + "form.other-information.last-name": "Apelido", - // "form.other-information": {}, - "form.other-information": {}, + // "form.other-information.orcid": "ORCID", + "form.other-information.orcid": "ORCID", // "form.remove": "Remove", "form.remove": "Apagar", @@ -2513,6 +2531,9 @@ // "form.submit": "Save", "form.submit": "Guardar", + // "form.create": "Create", + "form.create": "Criar", + // "form.repeatable.sort.tip": "Drop the item in the new position", "form.repeatable.sort.tip": "Largue o item na nova posição", @@ -2741,7 +2762,7 @@ // "item.edit.authorizations.title": "Edit item's Policies", "item.edit.authorizations.title": "Editar políticas dos itens", - // "item.badge.private": "Private", + // "item.badge.private": "Non-discoverable", "item.badge.private": "Privado", // "item.badge.withdrawn": "Withdrawn", @@ -2960,8 +2981,8 @@ // "item.edit.register-doi.success": "DOI queued for registration successfully.", "item.edit.register-doi.success": "DOI colocado em fila de espera para o registo com sucesso.", - // "item.edit.register-doi.error": "error registering DOI", - "item.edit.register-doi.error": "erro ao registar DOI", + // "item.edit.register-doi.error": "Error registering DOI", + "item.edit.register-doi.error": "Erro ao registar DOI", // "item.edit.register-doi.to-update": "The following DOI has already been minted and will be queued for registration online", "item.edit.register-doi.to-update": "O seguinte DOI já foi criado e será colocado em fila de espera para registo online", @@ -3265,6 +3286,9 @@ // "item.edit.tabs.curate.title": "Item Edit - Curate", "item.edit.tabs.curate.title": "Editar item - Curadoria", + + // "item.edit.curate.title": "Curate Item: {{item}}", + "item.edit.curate.title": "Curar item: {{item}}", // "item.edit.tabs.metadata.head": "Metadata", "item.edit.tabs.metadata.head": "Metadados do item", @@ -3836,7 +3860,7 @@ // "itemtemplate.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", "itemtemplate.edit.metadata.notifications.discarded.content": "As sua alterações foram descartadas. Para repor as suas alterações clique no botão 'Desfazer'", - // "itemtemplate.edit.metadata.notifications.discarded.title": "Changed discarded", + // "itemtemplate.edit.metadata.notifications.discarded.title": "Changes discarded", "itemtemplate.edit.metadata.notifications.discarded.title": "Alterações descartadas", // "itemtemplate.edit.metadata.notifications.error.title": "An error occurred", @@ -3851,7 +3875,7 @@ // "itemtemplate.edit.metadata.notifications.outdated.content": "The item template you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", "itemtemplate.edit.metadata.notifications.outdated.content": "O modelo do item que está atualmente a trabalhar foi alterado por outro utilizador. As suas alterações serão descartadas para evitar conflitos", - // "itemtemplate.edit.metadata.notifications.outdated.title": "Changed outdated", + // "itemtemplate.edit.metadata.notifications.outdated.title": "Changes outdated", "itemtemplate.edit.metadata.notifications.outdated.title": "Alterações desatualizadas", // "itemtemplate.edit.metadata.notifications.saved.content": "Your changes to this item template's metadata were saved.", @@ -4217,7 +4241,7 @@ // "menu.section.import": "Import", "menu.section.import": "Importar", - // "menu.section.import_batch": "Batch import (ZIP)", + // "menu.section.import_batch": "Batch Import (ZIP)", "menu.section.import_batch": "Importação em lote (ZIP)", // "menu.section.import_metadata": "Metadata", @@ -4403,20 +4427,20 @@ // "mydspace.show.supervisedWorkspace": "Supervised items", "mydspace.show.supervisedWorkspace": "Itens supervisionados", - // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "Depósito aceite", - - // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "Em validação", - - // "mydspace.status.waiting-for-controller": "Waiting for controller", - "mydspace.status.waiting-for-controller": "Aguarda validador", - - // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "Em fluxo de trabalho", - - // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "Depósito por terminar", + // "mydspace.status.mydspaceArchived": "Archived", + "mydspace.status.mydspaceArchived": "Depósito aceite", + + // "mydspace.status.mydspaceValidation": "Validation", + "mydspace.status.mydspaceValidation": "Em validação", + + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "Aguarda validador", + + // "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "Em fluxo de trabalho", + + // "mydspace.status.mydspaceWorkspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Depósito por terminar", // "mydspace.title": "MyDSpace", "mydspace.title": "Área Pessoal", @@ -4468,6 +4492,9 @@ // "nav.search": "Search", "nav.search": "Pesquisar", + + // "nav.search.button": "Submit search", + "nav.search.button": "Pesquisar", // "nav.statistics.header": "Statistics", "nav.statistics.header": "Estatísticas", @@ -4624,6 +4651,9 @@ // "process.new.notification.error.content": "An error occurred while creating this process", "process.new.notification.error.content": "Ocorreu um erro ao criar este processo", + + // "process.new.notification.error.max-upload.content": "The file exceeds the maximum upload size", + "process.new.notification.error.max-upload.content": "O ficheiro excede o tamanho máximo de carregamento!", // "process.new.header": "Create a new process", "process.new.header": "Criar um novo processo", @@ -5324,7 +5354,7 @@ // "search.filters.applied.f.discoverable": "Non-discoverable", "search.filters.applied.f.discoverable": "Privado", - // "search.filters.applied.f.entityType": "Item type", + // "search.filters.applied.f.entityType": "Item Type", "search.filters.applied.f.entityType": "Tipo de item", // "search.filters.applied.f.has_content_in_original_bundle": "Has files", @@ -5564,7 +5594,7 @@ // "search.filters.filter.submitter.label": "Search submitter", "search.filters.filter.submitter.label": "Procurar depositante", - // "search.filters.filter.show-tree": "browse {{ name }} tree", + // "search.filters.filter.show-tree": "Browse {{ name }} tree", "search.filters.filter.show-tree": "Percorrer por hierarquia de {{ name }}", // "search.filters.filter.supervisedBy.head": "Supervised By", @@ -5573,8 +5603,8 @@ // "search.filters.filter.supervisedBy.placeholder": "Supervised By", "search.filters.filter.supervisedBy.placeholder": "Supervisionado por", - // "search.filters.filter.supervisedBy.label": "search Supervised By", - "search.filters.filter.supervisedBy.label": "pesquisar supervisionado por", + // "search.filters.filter.supervisedBy.label": "Search Supervised By", + "search.filters.filter.supervisedBy.label": "Pesquisar supervisionado por", // "search.filters.entityType.JournalIssue": "Journal Issue", "search.filters.entityType.JournalIssue": "Número de revista", @@ -5743,6 +5773,9 @@ // "statistics.table.header.views": "Views", "statistics.table.header.views": "Consultas", + + // "statistics.table.no-name": "(object name could not be loaded)", + "statistics.table.no-name": "(não foi possível carregar o nome do objeto)", // "submission.edit.breadcrumbs": "Edit Submission", "submission.edit.breadcrumbs": "Editar depósito", @@ -6335,8 +6368,8 @@ // "submission.sections.describe.relationship-lookup.selection-tab.title": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title": "Resultados da pesquisa", - // "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Would you like to save \"{{ value }}\" as a name variant for this person so you and others can reuse it for future submissions? If you don\'t you can still use it for this submission.", - "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Pretende guardar \"{{ value }}\" como um nome alternativo para esta pessoa permitindo a sua reutilização por outros em futuros depósitos? Se não, pode usar apenas neste depósito.", + // "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Would you like to save \"{{ value }}\" as a name variant for this person so you and others can reuse it for future submissions? If you don't you can still use it for this submission.", + "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Pretende guardar \"{{ value }}\" como um nome alternativo para esta pessoa permitindo a sua reutilização por si e outros em futuros depósitos? Se não, pode usar apenas neste depósito.", // "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Save a new name variant", "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Guardar um Nome alternativo", @@ -6733,10 +6766,10 @@ // "submission.workflow.generic.delete": "Delete", "submission.workflow.generic.delete": "Remover", - - // "submission.workflow.generic.delete-help": "If you would to discard this item, select \"Delete\". You will then be asked to confirm it.", - "submission.workflow.generic.delete-help": "Se pretende remover definitivamente este item, selecione 'Apagar'. Será solicitada confirmação.", - + + // "submission.workflow.generic.delete-help": "Select this option to discard this item. You will then be asked to confirm it.", + "submission.workflow.generic.delete-help": "Selecione esta opção para rejeitar este item. Ser-lhe-á pedida confirmação.", + // "submission.workflow.generic.edit": "Edit", "submission.workflow.generic.edit": "Editar", @@ -6832,17 +6865,20 @@ // "submission.workspace.generic.view-help": "Select this option to view the item's metadata.", "submission.workspace.generic.view-help": "Selecione esta opção para ver os metadados do item.", + + // "submitter.empty": "N/A", + "submitter.empty": "N/E", - // "subscriptions.title": "subscriptions", + // "subscriptions.title": "Subscriptions", "subscriptions.title": "Subscrições de alertas", - // "subscriptions.item": "subscriptions for items", + // "subscriptions.item": "Subscriptions for items", "subscriptions.item": "Subscrições para itens", - // "subscriptions.collection": "subscriptions for collections", + // "subscriptions.collection": "Subscriptions for collections", "subscriptions.collection": "Subscrições para coleções", - // "subscriptions.community": "subscriptions for communities", + // "subscriptions.community": "Subscriptions for communities", "subscriptions.community": "Subscrições para comunidades", // "subscriptions.subscription_type": "Subscription type", @@ -6863,7 +6899,7 @@ // "subscriptions.tooltip": "Subscribe", "subscriptions.tooltip": "Subscrever", - // "subscriptions.modal.title": "subscriptions", + // "subscriptions.modal.title": "Subscriptions", "subscriptions.modal.title": "Subscrições de alertas", // "subscriptions.modal.type-frequency": "Type and frequency", @@ -6872,7 +6908,7 @@ // "subscriptions.modal.close": "Close", "subscriptions.modal.close": "Fechar", - // "subscriptions.modal.delete-info": "To remove this subscription, please visit the \// "subscriptions\" page under your user profile", + // "subscriptions.modal.delete-info": "To remove this subscription, please visit the \"Subscriptions\" page under your user profile", "subscriptions.modal.delete-info": "Para remover esta subscrição, por favor aceda à página de 'subscrições' debaixo do seu perfil de utilizador", // "subscriptions.modal.new-subscription-form.type.content": "Content", @@ -6890,7 +6926,7 @@ // "subscriptions.modal.new-subscription-form.submit": "Submit", "subscriptions.modal.new-subscription-form.submit": "Submeter", - // "subscriptions.modal.new-subscription-form.processing": "processing...", + // "subscriptions.modal.new-subscription-form.processing": "Processing...", "subscriptions.modal.new-subscription-form.processing": "A processar...", // "subscriptions.modal.create.success": "Subscribed to {{ type }} successfully.", @@ -7093,6 +7129,30 @@ // "workspace-item.view.title": "Workspace View", "workspace-item.view.title": "Vista das tarefas", + + // "workspace-item.delete.breadcrumbs": "Workspace Delete", + "workspace-item.delete.breadcrumbs": "Apagar da área de trabalho", + + // "workspace-item.delete.header": "Delete workspace item", + "workspace-item.delete.header": "Apagar item da área de trabalho", + + // "workspace-item.delete.button.confirm": "Delete", + "workspace-item.delete.button.confirm": "Apagar", + + // "workspace-item.delete.button.cancel": "Cancel", + "workspace-item.delete.button.cancel": "Cancelar", + + // "workspace-item.delete.notification.success.title": "Deleted", + "workspace-item.delete.notification.success.title": "Apagado", + + // "workspace-item.delete.title": "This workspace item was successfully deleted", + "workspace-item.delete.title": "Este item foi removido da área de trabalho com êxito", + + // "workspace-item.delete.notification.error.title": "Something went wrong", + "workspace-item.delete.notification.error.title": "Ocorreu algum erro!", + + // "workspace-item.delete.notification.error.content": "The workspace item could not be deleted", + "workspace-item.delete.notification.error.content": "Não foi possível remover o item da área de trabalho", // "workflow-item.advanced.title": "Advanced workflow", "workflow-item.advanced.title": "Fluxo de trabalho avançado", @@ -7577,7 +7637,7 @@ // "system-wide-alert.form.label.countdownTo.hint": "Hint: Set a countdown timer. When enabled, a date can be set in the future and the system-wide alert banner will perform a countdown to the set date. When this timer ends, it will disappear from the alert. The server will NOT be automatically stopped.", "system-wide-alert.form.label.countdownTo.hint": "Dica: Defina um temporizador de contagem decrescente. Quando ativado, pode ser definida uma data no futuro e o 'banner' de alerta geral do sistema irá realizar uma contagem decrescente para a data definida. Quando este temporizador terminar, desaparecerá do alerta. O servidor NÃO pára automaticamente.", - // "system-wide-alert.form.label.preview": "system-wide alert preview", + // "system-wide-alert.form.label.preview": "System-wide alert preview", "system-wide-alert.form.label.preview": "Pré-visualização de alerta geral do sistema", // "system-wide-alert.form.update.success": "The system-wide alert was successfully updated", From 3f343dbd60a33100209feca76168168b972d1702 Mon Sep 17 00:00:00 2001 From: Ricardo Saraiva <122451983+rsaraivac@users.noreply.github.com> Date: Tue, 6 Jun 2023 11:29:47 +0100 Subject: [PATCH 164/425] Update pt-PT.json5 --- src/assets/i18n/pt-PT.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index e89ff0bc60..d623b2d431 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -1,6 +1,6 @@ { - // Dspace v7.x > i18n pt-PT > reviewed 05-06-2023 + // Dspace v7.x > i18n pt-PT > last reviewed 05-06-2023 // "401.help": "You're not authorized to access this page. You can use the button below to get back to the home page.", "401.help": "Não está autorizado a aceder a esta página. Pode utilizar o botão em baixo para voltar à página de início.", From 72be58aa2a597bf72bd72f4322b9affe053e06ae Mon Sep 17 00:00:00 2001 From: Ricardo Saraiva <122451983+rsaraivac@users.noreply.github.com> Date: Tue, 6 Jun 2023 11:50:35 +0100 Subject: [PATCH 165/425] Update pt-PT.json5 --- src/assets/i18n/pt-PT.json5 | 52 ++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index d623b2d431..c622c4c257 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -2074,7 +2074,7 @@ // "dso.name.untitled": "Untitled", "dso.name.untitled": "Sem título", - + // "dso.name.unnamed": "Unnamed", "dso.name.unnamed": "Sem nome", @@ -2494,19 +2494,19 @@ // "form.no-value": "No value entered", "form.no-value": "Nenhum valor informado", - + // "form.other-information.email": "Email", "form.other-information.email": "Email", - + // "form.other-information.first-name": "First Name", "form.other-information.first-name": "Nome", - + // "form.other-information.insolr": "In Solr Index", "form.other-information.insolr": "No índice SOLR", - + // "form.other-information.institution": "Institution", - "form.other-information.institution": "Instituição", - + "form.other-information.institution": "Instituição", + // "form.other-information.last-name": "Last Name", "form.other-information.last-name": "Apelido", @@ -2533,7 +2533,7 @@ // "form.create": "Create", "form.create": "Criar", - + // "form.repeatable.sort.tip": "Drop the item in the new position", "form.repeatable.sort.tip": "Largue o item na nova posição", @@ -3286,7 +3286,7 @@ // "item.edit.tabs.curate.title": "Item Edit - Curate", "item.edit.tabs.curate.title": "Editar item - Curadoria", - + // "item.edit.curate.title": "Curate Item: {{item}}", "item.edit.curate.title": "Curar item: {{item}}", @@ -4429,16 +4429,16 @@ // "mydspace.status.mydspaceArchived": "Archived", "mydspace.status.mydspaceArchived": "Depósito aceite", - + // "mydspace.status.mydspaceValidation": "Validation", "mydspace.status.mydspaceValidation": "Em validação", - + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", "mydspace.status.mydspaceWaitingController": "Aguarda validador", - + // "mydspace.status.mydspaceWorkflow": "Workflow", "mydspace.status.mydspaceWorkflow": "Em fluxo de trabalho", - + // "mydspace.status.mydspaceWorkspace": "Workspace", "mydspace.status.mydspaceWorkspace": "Depósito por terminar", @@ -4492,7 +4492,7 @@ // "nav.search": "Search", "nav.search": "Pesquisar", - + // "nav.search.button": "Submit search", "nav.search.button": "Pesquisar", @@ -4651,7 +4651,7 @@ // "process.new.notification.error.content": "An error occurred while creating this process", "process.new.notification.error.content": "Ocorreu um erro ao criar este processo", - + // "process.new.notification.error.max-upload.content": "The file exceeds the maximum upload size", "process.new.notification.error.max-upload.content": "O ficheiro excede o tamanho máximo de carregamento!", @@ -5773,7 +5773,7 @@ // "statistics.table.header.views": "Views", "statistics.table.header.views": "Consultas", - + // "statistics.table.no-name": "(object name could not be loaded)", "statistics.table.no-name": "(não foi possível carregar o nome do objeto)", @@ -6766,10 +6766,10 @@ // "submission.workflow.generic.delete": "Delete", "submission.workflow.generic.delete": "Remover", - + // "submission.workflow.generic.delete-help": "Select this option to discard this item. You will then be asked to confirm it.", "submission.workflow.generic.delete-help": "Selecione esta opção para rejeitar este item. Ser-lhe-á pedida confirmação.", - + // "submission.workflow.generic.edit": "Edit", "submission.workflow.generic.edit": "Editar", @@ -6865,7 +6865,7 @@ // "submission.workspace.generic.view-help": "Select this option to view the item's metadata.", "submission.workspace.generic.view-help": "Selecione esta opção para ver os metadados do item.", - + // "submitter.empty": "N/A", "submitter.empty": "N/E", @@ -7129,28 +7129,28 @@ // "workspace-item.view.title": "Workspace View", "workspace-item.view.title": "Vista das tarefas", - + // "workspace-item.delete.breadcrumbs": "Workspace Delete", "workspace-item.delete.breadcrumbs": "Apagar da área de trabalho", - + // "workspace-item.delete.header": "Delete workspace item", "workspace-item.delete.header": "Apagar item da área de trabalho", // "workspace-item.delete.button.confirm": "Delete", "workspace-item.delete.button.confirm": "Apagar", - + // "workspace-item.delete.button.cancel": "Cancel", "workspace-item.delete.button.cancel": "Cancelar", - + // "workspace-item.delete.notification.success.title": "Deleted", "workspace-item.delete.notification.success.title": "Apagado", - + // "workspace-item.delete.title": "This workspace item was successfully deleted", "workspace-item.delete.title": "Este item foi removido da área de trabalho com êxito", - + // "workspace-item.delete.notification.error.title": "Something went wrong", "workspace-item.delete.notification.error.title": "Ocorreu algum erro!", - + // "workspace-item.delete.notification.error.content": "The workspace item could not be deleted", "workspace-item.delete.notification.error.content": "Não foi possível remover o item da área de trabalho", From dbccda4330eb7ece591cfab4795bfa75e786e958 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Tue, 6 Jun 2023 14:13:13 +0200 Subject: [PATCH 166/425] rollback change for orcid sync settings --- .../orcid-sync-settings/orcid-sync-settings.component.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts b/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts index 1aec416d62..0bcbc295ac 100644 --- a/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts +++ b/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts @@ -156,8 +156,7 @@ export class OrcidSyncSettingsComponent implements OnInit { } }), ).subscribe((remoteData: RemoteData) => { - // hasSucceeded is true if the response is success or successStale - if (remoteData.hasSucceeded) { + if (remoteData.isSuccess) { this.notificationsService.success(this.translateService.get(this.messagePrefix + '.synchronization-settings-update.success')); this.settingsUpdated.emit(); } else { From 3611f375632682fe1137a3b56dbffe903b2577c4 Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Tue, 6 Jun 2023 14:42:49 +0200 Subject: [PATCH 167/425] [DURACOM-151] Fixed EPerson deletion --- .../epeople-registry.component.ts | 17 +++-- .../eperson-form/eperson-form.component.ts | 65 +++++++++++-------- src/app/core/data/request.service.ts | 4 +- 3 files changed, 50 insertions(+), 36 deletions(-) diff --git a/src/app/access-control/epeople-registry/epeople-registry.component.ts b/src/app/access-control/epeople-registry/epeople-registry.component.ts index 706dcab690..fb045ebb88 100644 --- a/src/app/access-control/epeople-registry/epeople-registry.component.ts +++ b/src/app/access-control/epeople-registry/epeople-registry.component.ts @@ -287,14 +287,17 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy { /** * This method will set everything to stale, which will cause the lists on this page to update. */ - reset() { + reset(): void { this.epersonService.getBrowseEndpoint().pipe( - take(1) - ).subscribe((href: string) => { - this.requestService.setStaleByHrefSubstring(href).pipe(take(1)).subscribe(() => { - this.epersonService.cancelEditEPerson(); - this.isEPersonFormShown = false; - }); + take(1), + switchMap((href: string) => { + return this.requestService.setStaleByHrefSubstring(href).pipe( + take(1), + ); + }) + ).subscribe(()=>{ + this.epersonService.cancelEditEPerson(); + this.isEPersonFormShown = false; }); } } diff --git a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts index c60de00aed..1fd0e05ccb 100644 --- a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts +++ b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts @@ -8,7 +8,7 @@ import { } from '@ng-dynamic-forms/core'; import { TranslateService } from '@ngx-translate/core'; import { combineLatest as observableCombineLatest, Observable, of as observableOf, Subscription } from 'rxjs'; -import { debounceTime, switchMap, take } from 'rxjs/operators'; +import { debounceTime, finalize, map, switchMap, take } from 'rxjs/operators'; import { PaginatedList } from '../../../core/data/paginated-list.model'; import { RemoteData } from '../../../core/data/remote-data'; import { EPersonDataService } from '../../../core/eperson/eperson-data.service'; @@ -463,31 +463,43 @@ export class EPersonFormComponent implements OnInit, OnDestroy { * Deletes the EPerson from the Repository. The EPerson will be the only that this form is showing. * It'll either show a success or error message depending on whether the delete was successful or not. */ - delete() { - this.epersonService.getActiveEPerson().pipe(take(1)).subscribe((eperson: EPerson) => { - const modalRef = this.modalService.open(ConfirmationModalComponent); - modalRef.componentInstance.dso = eperson; - modalRef.componentInstance.headerLabel = 'confirmation-modal.delete-eperson.header'; - modalRef.componentInstance.infoLabel = 'confirmation-modal.delete-eperson.info'; - modalRef.componentInstance.cancelLabel = 'confirmation-modal.delete-eperson.cancel'; - modalRef.componentInstance.confirmLabel = 'confirmation-modal.delete-eperson.confirm'; - modalRef.componentInstance.brandColor = 'danger'; - modalRef.componentInstance.confirmIcon = 'fas fa-trash'; - modalRef.componentInstance.response.pipe(take(1)).subscribe((confirm: boolean) => { - if (confirm) { - if (hasValue(eperson.id)) { - this.epersonService.deleteEPerson(eperson).pipe(getFirstCompletedRemoteData()).subscribe((restResponse: RemoteData) => { - if (restResponse.hasSucceeded) { - this.notificationsService.success(this.translateService.get(this.labelPrefix + 'notification.deleted.success', { name: this.dsoNameService.getName(eperson) })); - this.submitForm.emit(); - } else { - this.notificationsService.error('Error occured when trying to delete EPerson with id: ' + eperson.id + ' with code: ' + restResponse.statusCode + ' and message: ' + restResponse.errorMessage); - } - this.cancelForm.emit(); - }); - } - } - }); + delete(): void { + this.epersonService.getActiveEPerson().pipe( + take(1), + switchMap((eperson: EPerson) => { + const modalRef = this.modalService.open(ConfirmationModalComponent); + modalRef.componentInstance.dso = eperson; + modalRef.componentInstance.headerLabel = 'confirmation-modal.delete-eperson.header'; + modalRef.componentInstance.infoLabel = 'confirmation-modal.delete-eperson.info'; + modalRef.componentInstance.cancelLabel = 'confirmation-modal.delete-eperson.cancel'; + modalRef.componentInstance.confirmLabel = 'confirmation-modal.delete-eperson.confirm'; + modalRef.componentInstance.brandColor = 'danger'; + modalRef.componentInstance.confirmIcon = 'fas fa-trash'; + + return modalRef.componentInstance.response.pipe( + take(1), + switchMap((confirm: boolean) => { + if (confirm && hasValue(eperson.id)) { + this.canDelete$ = observableOf(false); + return this.epersonService.deleteEPerson(eperson).pipe( + getFirstCompletedRemoteData(), + map((restResponse: RemoteData) => ({ restResponse, eperson })) + ); + } else { + return observableOf(null); + } + }), + finalize(() => this.canDelete$ = observableOf(true)) + ); + }) + ).subscribe(({ restResponse, eperson }: { restResponse: RemoteData | null, eperson: EPerson }) => { + if (restResponse?.hasSucceeded) { + this.notificationsService.success(this.translateService.get(this.labelPrefix + 'notification.deleted.success', { name: this.dsoNameService.getName(eperson) })); + this.submitForm.emit(); + } else { + this.notificationsService.error(`Error occurred when trying to delete EPerson with id: ${eperson?.id} with code: ${restResponse?.statusCode} and message: ${restResponse?.errorMessage}`); + } + this.cancelForm.emit(); }); } @@ -523,7 +535,6 @@ export class EPersonFormComponent implements OnInit, OnDestroy { * Cancel the current edit when component is destroyed & unsub all subscriptions */ ngOnDestroy(): void { - this.onCancel(); this.subs.filter((sub) => hasValue(sub)).forEach((sub) => sub.unsubscribe()); this.paginationService.clearPagination(this.config.id); if (hasValue(this.emailValueChangeSubscribe)) { diff --git a/src/app/core/data/request.service.ts b/src/app/core/data/request.service.ts index 94a6020975..78f53ffe3a 100644 --- a/src/app/core/data/request.service.ts +++ b/src/app/core/data/request.service.ts @@ -328,10 +328,10 @@ export class RequestService { this.store.dispatch(new RequestStaleAction(uuid)); return this.getByUUID(uuid).pipe( + take(1), map((request: RequestEntry) => isStale(request.state)), filter((stale: boolean) => stale), - take(1), - ); + ); } /** From 1b2d9829edf11c8d4b427981f2e0dad2dbac5abe Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Tue, 6 Jun 2023 15:35:54 +0200 Subject: [PATCH 168/425] [DURACOM-151] unit test fix --- src/app/core/data/request.service.spec.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/app/core/data/request.service.spec.ts b/src/app/core/data/request.service.spec.ts index 108a588881..8509f60eb7 100644 --- a/src/app/core/data/request.service.spec.ts +++ b/src/app/core/data/request.service.spec.ts @@ -627,11 +627,8 @@ describe('RequestService', () => { it('should return an Observable that emits true as soon as the request is stale', fakeAsync(() => { dispatchSpy.and.callFake(() => { /* empty */ }); // don't actually set as stale - getByUUIDSpy.and.returnValue(cold('a-b--c--d-', { // but fake the state in the cache - a: { state: RequestEntryState.ResponsePending }, - b: { state: RequestEntryState.Success }, - c: { state: RequestEntryState.SuccessStale }, - d: { state: RequestEntryState.Error }, + getByUUIDSpy.and.returnValue(cold('-----(a|)', { // but fake the state in the cache + a: { state: RequestEntryState.SuccessStale }, })); const done$ = service.setStaleByUUID('something'); From 3fdef20dc2555d1760e53bdbfe4c37d41055f64e Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Tue, 6 Jun 2023 15:54:57 +0200 Subject: [PATCH 169/425] added unit testing --- .../detail/process-detail.component.html | 2 +- .../detail/process-detail.component.spec.ts | 100 +++++++++++++++++- 2 files changed, 100 insertions(+), 2 deletions(-) diff --git a/src/app/process-page/detail/process-detail.component.html b/src/app/process-page/detail/process-detail.component.html index 9e7a24d3af..5f905cbfff 100644 --- a/src/app/process-page/detail/process-detail.component.html +++ b/src/app/process-page/detail/process-detail.component.html @@ -5,7 +5,7 @@ {{ 'process.detail.title' | translate:{ id: process?.processId, name: process?.scriptName } }}
    -
    +
    Refreshing in {{ seconds }}s
    diff --git a/src/app/process-page/detail/process-detail.component.spec.ts b/src/app/process-page/detail/process-detail.component.spec.ts index 8749553eae..9552f9a092 100644 --- a/src/app/process-page/detail/process-detail.component.spec.ts +++ b/src/app/process-page/detail/process-detail.component.spec.ts @@ -35,6 +35,7 @@ import { NotificationsServiceStub } from '../../shared/testing/notifications-ser import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { NotificationsService } from '../../shared/notifications/notifications.service'; import { getProcessListRoute } from '../process-page-routing.paths'; +import {ProcessStatus} from '../processes/process-status.model'; describe('ProcessDetailComponent', () => { let component: ProcessDetailComponent; @@ -44,6 +45,7 @@ describe('ProcessDetailComponent', () => { let nameService: DSONameService; let bitstreamDataService: BitstreamDataService; let httpClient: HttpClient; + let route: ActivatedRoute; let process: Process; let fileName: string; @@ -106,7 +108,8 @@ describe('ProcessDetailComponent', () => { }); processService = jasmine.createSpyObj('processService', { getFiles: createSuccessfulRemoteDataObject$(createPaginatedList(files)), - delete: createSuccessfulRemoteDataObject$(null) + delete: createSuccessfulRemoteDataObject$(null), + findById: createSuccessfulRemoteDataObject$(process), }); bitstreamDataService = jasmine.createSpyObj('bitstreamDataService', { findByHref: createSuccessfulRemoteDataObject$(logBitstream) @@ -127,6 +130,13 @@ describe('ProcessDetailComponent', () => { router = jasmine.createSpyObj('router', { navigateByUrl:{} }); + + route = jasmine.createSpyObj('route', { + data: observableOf({ process: createSuccessfulRemoteDataObject(process) }), + snapshot: { + params: { id: process.processId } + } + }); } beforeEach(waitForAsync(() => { @@ -263,4 +273,92 @@ describe('ProcessDetailComponent', () => { }); }); + describe('refresh counter', () => { + const queryRefreshCounter = () => fixture.debugElement.query(By.css('.refresh-counter')); + + describe('if process is completed', () => { + beforeEach(() => { + process.processStatus = ProcessStatus.COMPLETED; + route.data = observableOf({process: createSuccessfulRemoteDataObject(process)}); + }); + + it('should not show', () => { + spyOn(component, 'startRefreshTimer'); + + const refreshCounter = queryRefreshCounter(); + expect(refreshCounter).toBeNull(); + + expect(component.startRefreshTimer).not.toHaveBeenCalled(); + }); + }); + + describe('if process is not finished', () => { + beforeEach(() => { + process.processStatus = ProcessStatus.RUNNING; + route.data = observableOf({process: createSuccessfulRemoteDataObject(process)}); + fixture.detectChanges(); + component.stopRefreshTimer(); + }); + + it('should call startRefreshTimer', () => { + spyOn(component, 'startRefreshTimer'); + + component.ngOnInit(); + fixture.detectChanges(); // subscribe to process observable with async pipe + + expect(component.startRefreshTimer).toHaveBeenCalled(); + }); + + it('should call refresh method every 5 seconds, until process is completed', fakeAsync(() => { + spyOn(component, 'refresh'); + spyOn(component, 'stopRefreshTimer'); + + process.processStatus = ProcessStatus.COMPLETED; + // set findbyId to return a completed process + (processService.findById as jasmine.Spy).and.returnValue(observableOf(createSuccessfulRemoteDataObject(process))); + + component.ngOnInit(); + fixture.detectChanges(); // subscribe to process observable with async pipe + + expect(component.refresh).not.toHaveBeenCalled(); + + expect(component.refreshCounter$.value).toBe(0); + + tick(1001); // 1 second + 1 ms by the setTimeout + expect(component.refreshCounter$.value).toBe(5); // 5 - 0 + + tick(2001); // 2 seconds + 1 ms by the setTimeout + expect(component.refreshCounter$.value).toBe(3); // 5 - 2 + + tick(2001); // 2 seconds + 1 ms by the setTimeout + expect(component.refreshCounter$.value).toBe(1); // 3 - 2 + + tick(1001); // 1 second + 1 ms by the setTimeout + expect(component.refreshCounter$.value).toBe(0); // 1 - 1 + + tick(1000); // 1 second + + expect(component.refresh).toHaveBeenCalledTimes(1); + expect(component.stopRefreshTimer).toHaveBeenCalled(); + + expect(component.refreshCounter$.value).toBe(0); + + tick(1001); // 1 second + 1 ms by the setTimeout + // startRefreshTimer not called again + expect(component.refreshCounter$.value).toBe(0); + + discardPeriodicTasks(); // discard any periodic tasks that have not yet executed + })); + + it('should show if refreshCounter is different from 0', () => { + component.refreshCounter$.next(1); + fixture.detectChanges(); + + const refreshCounter = queryRefreshCounter(); + expect(refreshCounter).not.toBeNull(); + }); + + }); + + }); }); From b1aa2f3550b5ab2aa01736a99d3eb307f5e7b004 Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Tue, 6 Jun 2023 16:57:17 +0200 Subject: [PATCH 170/425] [DURACOM-151] reverted setStaleByUUID method as it was --- .../eperson-form/eperson-form.component.ts | 1 - src/app/core/data/request.service.spec.ts | 7 +++++-- src/app/core/data/request.service.ts | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts index 1fd0e05ccb..d009d56058 100644 --- a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts +++ b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts @@ -495,7 +495,6 @@ export class EPersonFormComponent implements OnInit, OnDestroy { ).subscribe(({ restResponse, eperson }: { restResponse: RemoteData | null, eperson: EPerson }) => { if (restResponse?.hasSucceeded) { this.notificationsService.success(this.translateService.get(this.labelPrefix + 'notification.deleted.success', { name: this.dsoNameService.getName(eperson) })); - this.submitForm.emit(); } else { this.notificationsService.error(`Error occurred when trying to delete EPerson with id: ${eperson?.id} with code: ${restResponse?.statusCode} and message: ${restResponse?.errorMessage}`); } diff --git a/src/app/core/data/request.service.spec.ts b/src/app/core/data/request.service.spec.ts index 8509f60eb7..108a588881 100644 --- a/src/app/core/data/request.service.spec.ts +++ b/src/app/core/data/request.service.spec.ts @@ -627,8 +627,11 @@ describe('RequestService', () => { it('should return an Observable that emits true as soon as the request is stale', fakeAsync(() => { dispatchSpy.and.callFake(() => { /* empty */ }); // don't actually set as stale - getByUUIDSpy.and.returnValue(cold('-----(a|)', { // but fake the state in the cache - a: { state: RequestEntryState.SuccessStale }, + getByUUIDSpy.and.returnValue(cold('a-b--c--d-', { // but fake the state in the cache + a: { state: RequestEntryState.ResponsePending }, + b: { state: RequestEntryState.Success }, + c: { state: RequestEntryState.SuccessStale }, + d: { state: RequestEntryState.Error }, })); const done$ = service.setStaleByUUID('something'); diff --git a/src/app/core/data/request.service.ts b/src/app/core/data/request.service.ts index 78f53ffe3a..1f6680203e 100644 --- a/src/app/core/data/request.service.ts +++ b/src/app/core/data/request.service.ts @@ -328,9 +328,9 @@ export class RequestService { this.store.dispatch(new RequestStaleAction(uuid)); return this.getByUUID(uuid).pipe( - take(1), map((request: RequestEntry) => isStale(request.state)), filter((stale: boolean) => stale), + take(1), ); } From 755451191c0dbb571f0af1ad4210518724702325 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Tue, 6 Jun 2023 18:27:07 +0200 Subject: [PATCH 171/425] 100553: Updated form validation errors from metadata schema and field form --- .../metadata-schema-form.component.ts | 10 ++++++++-- .../metadata-field-form.component.ts | 8 ++++++-- src/assets/i18n/en.json5 | 13 ++++++++++--- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts index b7c16bc83f..3be4d80fa9 100644 --- a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts +++ b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts @@ -87,11 +87,13 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { name: 'name', validators: { required: null, - pattern: '^[^. ,_]{1,32}$', + pattern: '^[^. ,]*$', + maxLength: 32, }, required: true, errorMessages: { - pattern: 'error.validation.metadata.namespace.invalid-pattern', + pattern: 'error.validation.metadata.name.invalid-pattern', + maxLength: 'error.validation.metadata.name.max-length', }, }); this.namespace = new DynamicInputModel({ @@ -100,8 +102,12 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { name: 'namespace', validators: { required: null, + maxLength: 256, }, required: true, + errorMessages: { + maxLength: 'error.validation.metadata.namespace.max-length', + }, }); this.formModel = [ new DynamicFormGroupModel( diff --git a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts index 55950a8773..df8373e8d2 100644 --- a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts +++ b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts @@ -109,11 +109,13 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy { name: 'element', validators: { required: null, - pattern: '^[^.]*$', + pattern: '^[^. ,]*$', + maxLength: 64, }, required: true, errorMessages: { pattern: 'error.validation.metadata.element.invalid-pattern', + maxLength: 'error.validation.metadata.element.max-length', }, }); this.qualifier = new DynamicInputModel({ @@ -121,11 +123,13 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy { label: qualifier, name: 'qualifier', validators: { - pattern: '^[^.]*$', + pattern: '^[^. ,]*$', + maxLength: 64, }, required: false, errorMessages: { pattern: 'error.validation.metadata.qualifier.invalid-pattern', + maxLength: 'error.validation.metadata.qualifier.max-length', }, }); this.scopeNote = new DynamicInputModel({ diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index c0edb83a3b..55c788ffac 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -1478,12 +1478,19 @@ "error.validation.groupExists": "This group already exists", - "error.validation.metadata.namespace.invalid-pattern": "This field cannot contain dots, please use the Element & Qualifier fields instead", + "error.validation.metadata.name.invalid-pattern": "This field cannot contain dots, commas or spaces. Please use the Element & Qualifier fields instead", - "error.validation.metadata.element.invalid-pattern": "This field cannot contain dots, please use the Qualifier field instead", + "error.validation.metadata.name.max-length": "This field may not contain more than 32 characters", - "error.validation.metadata.qualifier.invalid-pattern": "This field cannot contain dots", + "error.validation.metadata.namespace.max-length": "This field may not contain more than 256 characters", + "error.validation.metadata.element.invalid-pattern": "This field cannot contain dots, commas or spaces. Please use the Qualifier field instead", + + "error.validation.metadata.element.max-length": "This field may not contain more than 64 characters", + + "error.validation.metadata.qualifier.invalid-pattern": "This field cannot contain dots, commas or spaces", + + "error.validation.metadata.qualifier.max-length": "This field may not contain more than 64 characters", "feed.description": "Syndication feed", From 77a8fde646d22e060d7a44b48e1fa2c0c1875fb9 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Wed, 7 Jun 2023 09:36:01 +0200 Subject: [PATCH 172/425] 101623: Fix Browse By Vocabulary on comcol page --- .../browse-by-taxonomy-page.component.html | 6 +++++- src/assets/i18n/en.json5 | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html index 87c7937b1b..0ae3da6847 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html @@ -6,5 +6,9 @@ (deselect)="onDeselect($event)">
    - {{ 'browse.taxonomy.button' | translate }} + + {{ 'browse.taxonomy.button' | translate }}
    diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 0958fc5d29..33752cbb8a 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -701,6 +701,8 @@ "browse.comcol.by.subject": "By Subject", + "browse.comcol.by.srsc": "By Subject Category", + "browse.comcol.by.title": "By Title", "browse.comcol.head": "Browse", From 47e0314c9b5ebdaf87fdf1d284ac97df3bfe23da Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Wed, 7 Jun 2023 13:00:12 +0200 Subject: [PATCH 173/425] CST-9639: Fixed error on control remove, fixed cancel button behavior, fixed bad state of access control tab on load, fixed translations, added jsdocs --- .../bulk-access/bulk-access.component.html | 2 +- .../access-control-array-form.component.html | 30 ++++---- .../access-control-array-form.component.ts | 70 ++++++++++++++----- ...cess-control-form-container.component.html | 4 +- .../bulk-access-control.service.ts | 21 +++++- src/assets/i18n/en.json5 | 8 ++- 6 files changed, 92 insertions(+), 43 deletions(-) diff --git a/src/app/access-control/bulk-access/bulk-access.component.html b/src/app/access-control/bulk-access/bulk-access.component.html index aa6c82e133..382caf85f4 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.html +++ b/src/app/access-control/bulk-access/bulk-access.component.html @@ -7,7 +7,7 @@
    diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts index 4e2fd55967..f08534e8f9 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts @@ -1,5 +1,5 @@ import {Component, Input, OnInit, ViewChild} from '@angular/core'; -import {NgForm} from '@angular/forms'; +import {NgForm, NgModelGroup} from '@angular/forms'; import {AccessesConditionOption} from '../../../core/config/models/config-accesses-conditions-options.model'; import {dateToISOFormat} from '../../date.util'; @@ -17,14 +17,13 @@ export class AccessControlArrayFormComponent implements OnInit { @ViewChild('ngForm', {static: true}) ngForm!: NgForm; form: { accessControls: AccessControlItem[] } = { - accessControls: [] + accessControls: [emptyAccessControlItem()] // Start with one empty access control item }; - ngOnInit(): void { - this.addAccessControlItem(); + formDisabled = true; - // Disable the form by default - setTimeout(() => this.disable(), 0); + ngOnInit(): void { + this.disable(); // Disable the form by default } get allControlsAreEmpty() { @@ -32,29 +31,31 @@ export class AccessControlArrayFormComponent implements OnInit { .every(x => x.itemName === null || x.itemName === ''); } + get showWarning() { + return this.mode === 'replace' && this.allControlsAreEmpty && !this.formDisabled; + } + /** * Add a new access control item to the form. * Start and end date are disabled by default. * @param itemName The name of the item to add */ addAccessControlItem(itemName: string = null) { - this.form.accessControls.push({ - itemName, - startDate: null, - hasStartDate: false, - maxStartDate: null, - endDate: null, - hasEndDate: false, - maxEndDate: null, - }); + this.form.accessControls = [ + ...this.form.accessControls, + {...emptyAccessControlItem(), itemName} + ]; } /** * Remove an access control item from the form. + * @param ngModelGroup * @param index */ - removeAccessControlItem(index: number) { - this.form.accessControls.splice(index, 1); + removeAccessControlItem(ngModelGroup: NgModelGroup, id: number) { + this.ngForm.removeFormGroup(ngModelGroup); + + this.form.accessControls = this.form.accessControls.filter(item => item.id !== id); } /** @@ -77,19 +78,30 @@ export class AccessControlArrayFormComponent implements OnInit { */ reset() { this.form.accessControls = []; + + // Add an empty access control item by default + this.addAccessControlItem(); + + this.disable(); } /** * Disable the form. * This will be used to disable the form from the parent component. */ - disable = () => this.ngForm.control.disable(); + disable = () => { + this.ngForm.form.disable(); + this.formDisabled = true; + }; /** * Enable the form. * This will be used to enable the form from the parent component. */ - enable = () => this.ngForm.control.enable(); + enable = () => { + this.ngForm.form.enable(); + this.formDisabled = false; + }; accessControlChanged(control: AccessControlItem, selectedItem: string) { const item = this.dropdownOptions @@ -105,9 +117,16 @@ export class AccessControlArrayFormComponent implements OnInit { control.maxEndDate = item?.maxEndDate || null; } + trackById(index: number, item: AccessControlItem) { + return item.id; + } + } + export interface AccessControlItem { + id: number; // will be used only locally + itemName: string | null; hasStartDate?: boolean; @@ -118,3 +137,16 @@ export interface AccessControlItem { endDate: string | null; maxEndDate?: string | null; } + +const emptyAccessControlItem = (): AccessControlItem => ({ + id: randomID(), + itemName: null, + startDate: null, + hasStartDate: false, + maxStartDate: null, + endDate: null, + hasEndDate: false, + maxEndDate: null, +}); + +const randomID = () => Math.floor(Math.random() * 1000000); diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.html b/src/app/shared/access-control-form-container/access-control-form-container.component.html index afee07139f..a5173d10d7 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.html +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.html @@ -153,12 +153,12 @@
    -
    diff --git a/src/app/shared/access-control-form-container/bulk-access-control.service.ts b/src/app/shared/access-control-form-container/bulk-access-control.service.ts index 51eba4275d..6fb6b62532 100644 --- a/src/app/shared/access-control-form-container/bulk-access-control.service.ts +++ b/src/app/shared/access-control-form-container/bulk-access-control.service.ts @@ -21,6 +21,9 @@ export interface BulkAccessPayload { itemAccess: any; } +/** + * This service is used to create a payload file and execute the bulk access control script + */ @Injectable({ providedIn: 'root' }) export class BulkAccessControlService { constructor( @@ -28,10 +31,13 @@ export class BulkAccessControlService { private router: Router, private scriptService: ScriptDataService, private translationService: TranslateService - ) { - - } + ) {} + /** + * Create a payload file from the given payload and return the file and the url to the file + * The created file will be used as input for the bulk access control script + * @param payload The payload to create the file from + */ createPayloadFile(payload: BulkAccessPayload) { const content = convertToBulkAccessControlFileModel(payload); @@ -48,6 +54,11 @@ export class BulkAccessControlService { return { url, file }; } + /** + * Execute the bulk access control script with the given uuids and file + * @param uuids + * @param file + */ executeScript(uuids: string[], file: File): Observable { console.log('execute', { uuids, file }); @@ -80,6 +91,10 @@ export class BulkAccessControlService { } } +/** + * Convert the given payload to a BulkAccessControlFileModel + * @param payload + */ export const convertToBulkAccessControlFileModel = (payload: { state: AccessControlFormState, bitstreamAccess: AccessCondition[], itemAccess: AccessCondition[] }): BulkAccessControlFileModel => { let finalPayload: BulkAccessControlFileModel = {}; diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 223c2fce27..a454131175 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -225,7 +225,9 @@ "admin.registries.schema.title": "Metadata Schema Registry", + "admin.access-control.bulk-access.breadcrumbs": "Bulk Access Management", + "administrativeBulkAccess.search.results.head": "Search Results", "admin.access-control.bulk-access": "Bulk Access Management", @@ -5399,14 +5401,14 @@ "access-control-option-label": "Access condition type", - "access-control-option-note": "Select an access condition to apply on the bitstream once the item is deposited", + "access-control-option-note": "Choose an access condition to apply to selected objects.", "access-control-option-start-date": "Grant access from", - "access-control-option-start-date-note": "Select the date from which the relate access condition is applied", + "access-control-option-start-date-note": "Select the date from which the related access condition is applied", "access-control-option-end-date": "Grant access until", - "access-control-option-end-date-note": "Select the date until which the relate access condition is applied", + "access-control-option-end-date-note": "Select the date until which the related access condition is applied", } From d69adab419cc415295e8240ffa05992701459182 Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Wed, 7 Jun 2023 16:22:57 +0200 Subject: [PATCH 174/425] refactor primarybitstreams to work with DELETE, POST and PUT instead of PATCh --- .../bitstream-page/bitstream-page.resolver.ts | 2 +- .../edit-bitstream-page.component.ts | 96 ++++++++----- .../data/primary-bitstream-data.service.ts | 134 ++++++++++++++++++ src/app/core/shared/bundle.model.ts | 6 - 4 files changed, 197 insertions(+), 41 deletions(-) create mode 100644 src/app/core/data/primary-bitstream-data.service.ts diff --git a/src/app/bitstream-page/bitstream-page.resolver.ts b/src/app/bitstream-page/bitstream-page.resolver.ts index be92041dfc..db2af2d554 100644 --- a/src/app/bitstream-page/bitstream-page.resolver.ts +++ b/src/app/bitstream-page/bitstream-page.resolver.ts @@ -12,7 +12,7 @@ import { getFirstCompletedRemoteData } from '../core/shared/operators'; * Requesting them as embeds will limit the number of requests */ export const BITSTREAM_PAGE_LINKS_TO_FOLLOW: FollowLinkConfig[] = [ - followLink('bundle', {}, followLink('item')), + followLink('bundle', {}, followLink('primaryBitstream'), followLink('item')), followLink('format') ]; diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts index 10d9652a65..8b3dad3c1c 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; import { Bitstream } from '../../core/shared/bitstream.model'; import { ActivatedRoute, Router } from '@angular/router'; -import { map, switchMap, tap } from 'rxjs/operators'; +import { map, switchMap, tap, filter } from 'rxjs/operators'; import { combineLatest, combineLatest as observableCombineLatest, Observable, of as observableOf, Subscription } from 'rxjs'; import { DynamicFormControlModel, DynamicFormGroupModel, DynamicFormLayout, DynamicFormService, DynamicInputModel, DynamicSelectModel } from '@ng-dynamic-forms/core'; import { UntypedFormGroup } from '@angular/forms'; @@ -14,7 +14,7 @@ import { NotificationsService } from '../../shared/notifications/notifications.s import { BitstreamFormatDataService } from '../../core/data/bitstream-format-data.service'; import { BitstreamFormat } from '../../core/shared/bitstream-format.model'; import { BitstreamFormatSupportLevel } from '../../core/shared/bitstream-format-support-level'; -import { hasValue, isEmpty, isNotEmpty } from '../../shared/empty.util'; +import { hasValue, isEmpty, isNotEmpty, hasValueOperator } from '../../shared/empty.util'; import { Metadata } from '../../core/shared/metadata.utils'; import { Location } from '@angular/common'; import { RemoteData } from '../../core/data/remote-data'; @@ -27,6 +27,8 @@ import { DsDynamicInputModel } from '../../shared/form/builder/ds-dynamic-form-u import { DsDynamicTextAreaModel } from '../../shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-textarea.model'; import { BundleDataService } from '../../core/data/bundle-data.service'; import { Operation } from 'fast-json-patch'; +import { PrimaryBitstreamService } from '../../core/data/primary-bitstream-data.service'; +import { hasSucceeded } from '../../core/data/request-entry-state.model'; @Component({ selector: 'ds-edit-bitstream-page', @@ -51,6 +53,11 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { */ bitstreamFormatsRD$: Observable>>; + /** + * The UUID of the primary bitstream for this bundle + */ + primaryBitstreamUUID: string; + /** * The bitstream to edit */ @@ -383,6 +390,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { public dsoNameService: DSONameService, private notificationsService: NotificationsService, private bitstreamFormatService: BitstreamFormatDataService, + private primaryBitstreamService: PrimaryBitstreamService, private bundleService: BundleDataService) { } @@ -414,6 +422,12 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { getFirstSucceededRemoteDataPayload(), ); + const primaryBitstream$ = bundle$.pipe( + hasValueOperator(), + switchMap((bundle: Bundle) => this.bitstreamService.findByHref(bundle._links.primaryBitstream.href)), + getFirstSucceededRemoteDataPayload() + ); + const item$ = bundle$.pipe( switchMap((bundle: Bundle) => bundle.item), getFirstSucceededRemoteDataPayload() @@ -423,12 +437,16 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { bitstream$, allFormats$, bundle$, + primaryBitstream$, item$, ).pipe() - .subscribe(([bitstream, allFormats, bundle, item]) => { + .subscribe(([bitstream, allFormats, bundle, primaryBitstream, item]) => { this.bitstream = bitstream as Bitstream; this.formats = allFormats.page; this.bundle = bundle; + // hasValue(primaryBitstream) because if there's no primaryBitstream on the bundle it will + // be a success response, but empty + this.primaryBitstreamUUID = hasValue(primaryBitstream) ? primaryBitstream.uuid : null; this.itemId = item.uuid; this.setIiifStatus(this.bitstream); }) @@ -460,7 +478,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { this.formGroup.patchValue({ fileNamePrimaryContainer: { fileName: bitstream.name, - primaryBitstream: this.bundle.primaryBitstreamUUID === bitstream.uuid + primaryBitstream: this.primaryBitstreamUUID === bitstream.uuid }, descriptionContainer: { description: bitstream.firstMetadataValue('dc.description') @@ -572,26 +590,52 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { const selectedFormat = this.formats.find((f: BitstreamFormat) => f.id === updatedValues.formatContainer.selectedFormat); const isNewFormat = selectedFormat.id !== this.originalFormat.id; const isPrimary = updatedValues.fileNamePrimaryContainer.primaryBitstream; - const wasPrimary = this.bundle.primaryBitstreamUUID === this.bitstream.uuid; + const wasPrimary = this.primaryBitstreamUUID === this.bitstream.uuid; let bitstream$; let bundle$: Observable; + let errorWhileSaving = false; if (wasPrimary !== isPrimary) { - const patchOperations: Operation[] = this.retrieveBundlePatch(wasPrimary); - bundle$ = this.bundleService.patch(this.bundle, patchOperations).pipe( - getFirstCompletedRemoteData(), - map((bundleResponse: RemoteData) => { - if (hasValue(bundleResponse) && bundleResponse.hasFailed) { - this.notificationsService.error( - this.translate.instant(this.NOTIFICATIONS_PREFIX + 'error.primaryBitstream.title'), - bundleResponse.errorMessage - ); + let bundleRd$: Observable>; + if (wasPrimary) { + bundleRd$ = this.primaryBitstreamService.delete(this.bundle); + } else if (hasValue(this.primaryBitstreamUUID)) { + bundleRd$ = this.primaryBitstreamService.put(this.bitstream, this.bundle); + } else { + bundleRd$ = this.primaryBitstreamService.create(this.bitstream, this.bundle); + } + + const completedBundleRd$ = bundleRd$.pipe(getFirstCompletedRemoteData()); + + this.subs.push(completedBundleRd$.pipe( + filter((bundleRd: RemoteData) => bundleRd.hasFailed) + ).subscribe((bundleRd: RemoteData) => { + this.notificationsService.error( + this.translate.instant(this.NOTIFICATIONS_PREFIX + 'error.primaryBitstream.title'), + bundleRd.errorMessage + ); + errorWhileSaving = true; + })); + + bundle$ = completedBundleRd$.pipe( + map((bundleRd: RemoteData) => { + if (bundleRd.hasSucceeded) { + return bundleRd.payload } else { - return bundleResponse.payload; + return this.bundle; } }) ); + + this.subs.push(bundle$.pipe( + hasValueOperator(), + switchMap((bundle: Bundle) => this.bitstreamService.findByHref(bundle._links.primaryBitstream.href, false)), + getFirstSucceededRemoteDataPayload() + ).subscribe((bitstream: Bitstream) => { + this.primaryBitstreamUUID = hasValue(bitstream) ? bitstream.uuid : null; + })); + } else { bundle$ = observableOf(this.bundle); } @@ -626,28 +670,12 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { this.translate.instant(this.NOTIFICATIONS_PREFIX + 'saved.title'), this.translate.instant(this.NOTIFICATIONS_PREFIX + 'saved.content') ); - this.navigateToItemEditBitstreams(); + if (!errorWhileSaving) { + this.navigateToItemEditBitstreams(); + } }); } - private retrieveBundlePatch(wasPrimary: boolean): Operation[] { - // No longer primary bitstream: remove - if (wasPrimary) { - return [{ - path: this.primaryBitstreamPath, - op: 'remove' - }]; - } else { - // Has become primary bitstream - // If it already had a value: replace, otherwise: add - return [{ - path: this.primaryBitstreamPath, - op: hasValue(this.bundle.primaryBitstreamUUID) ? 'replace' : 'add', - value: this.bitstream.uuid - }]; - } - } - /** * Parse form data to an updated bitstream object * @param rawForm Raw form data diff --git a/src/app/core/data/primary-bitstream-data.service.ts b/src/app/core/data/primary-bitstream-data.service.ts new file mode 100644 index 0000000000..6380a6f148 --- /dev/null +++ b/src/app/core/data/primary-bitstream-data.service.ts @@ -0,0 +1,134 @@ +import { Bitstream } from '../shared/bitstream.model'; +import { DeleteDataImpl } from './base/delete-data'; +import { PutDataImpl } from './base/put-data'; +import { CreateDataImpl } from './base/create-data'; +import { Injectable } from '@angular/core'; +import { RequestService } from './request.service'; +import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; +import { ObjectCacheService } from '../cache/object-cache.service'; +import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { Observable, switchMap } from 'rxjs'; +import { RemoteData } from './remote-data'; +import { Bundle } from '../shared/bundle.model'; +import { NotificationsService } from '../../shared/notifications/notifications.service'; +import { constructIdEndpointDefault } from './base/identifiable-data.service'; +import { HttpOptions } from '../dspace-rest/dspace-rest.service'; +import { HttpHeaders } from '@angular/common/http'; +import { GenericConstructor } from '../shared/generic-constructor'; +import { PutRequest, PostRequest, DeleteRequest } from './request.models'; +import { getAllCompletedRemoteData } from '../shared/operators'; +import { NoContent } from '../shared/NoContent.model'; +import { BundleDataService } from './bundle-data.service'; + +@Injectable({ + providedIn: 'root', +}) +export class PrimaryBitstreamService { + private createData: CreateDataImpl; + private putData: PutDataImpl; + private deleteData: DeleteDataImpl; + + constructor( + protected requestService: RequestService, + protected rdbService: RemoteDataBuildService, + protected objectCache: ObjectCacheService, + protected halService: HALEndpointService, + protected notificationsService: NotificationsService, + protected bundleDataService: BundleDataService, + ) { + // linkPath can be undefined because we'll only use them to do things "byHref" + this.createData = new CreateDataImpl(undefined, requestService, rdbService, objectCache, halService, notificationsService, undefined); + this.putData = new PutDataImpl(undefined, requestService, rdbService, objectCache, halService, undefined); + this.deleteData = new DeleteDataImpl(undefined, requestService, rdbService, objectCache, halService, notificationsService, undefined, constructIdEndpointDefault); + } + + /** + * Returns the type of HttpOptions object needed from primary bitstream requests. + * i.e. with a Content-Type header set to `text/uri-list` + * @protected + */ + protected getHttpOptions(): HttpOptions { + const options: HttpOptions = Object.create({}); + let headers = new HttpHeaders(); + headers = headers.append('Content-Type', 'text/uri-list'); + options.headers = headers; + return options; + } + + /** + * Send a request of the given type to the endpointURL with an optional primaryBitstreamSelfLink + * as payload, and return the resulting Observable + * + * @param requestType The type of request: PostRequest, PutRequest, or DeleteRequest + * @param endpointURL The endpoint URL + * @param primaryBitstreamSelfLink + * @protected + */ + protected createAndSendRequest( + requestType: GenericConstructor, + endpointURL: string, + primaryBitstreamSelfLink?: string, + ): Observable> { + const requestId = this.requestService.generateRequestId(); + const request = new requestType( + requestId, + endpointURL, + primaryBitstreamSelfLink, + this.getHttpOptions() + ); + + this.requestService.send(request); + + return this.rdbService.buildFromRequestUUID(requestId); + } + + /** + * Create a new primaryBitstream + * + * @param primaryBitstream The object to create + * @param bundle The bundle to create it on + */ + create(primaryBitstream: Bitstream, bundle: Bundle): Observable> { + return this.createAndSendRequest( + PostRequest, + bundle._links.primaryBitstream.href, + primaryBitstream.self + ) as Observable>; + } + + /** + * Update an exiting primaryBitstream + * + * @param primaryBitstream The object to update + * @param bundle The bundle to update it on + */ + put(primaryBitstream: Bitstream, bundle: Bundle): Observable> { + return this.createAndSendRequest( + PutRequest, + bundle._links.primaryBitstream.href, + primaryBitstream.self + ) as Observable>; + } + + /** + * Delete an exiting primaryBitstream + * + * @param bundle The bundle to delete it from + */ + delete(bundle: Bundle): Observable> { + return this.createAndSendRequest( + DeleteRequest, + bundle._links.primaryBitstream.href + ).pipe( + getAllCompletedRemoteData(), + switchMap((rd: RemoteData) => { + if (rd.hasSucceeded) { + return this.bundleDataService.findByHref(bundle.self, false); + } else { + [bundle]; + } + }) + ); + } + +} diff --git a/src/app/core/shared/bundle.model.ts b/src/app/core/shared/bundle.model.ts index bcaa582703..f37cd96545 100644 --- a/src/app/core/shared/bundle.model.ts +++ b/src/app/core/shared/bundle.model.ts @@ -29,12 +29,6 @@ export class Bundle extends DSpaceObject { item: HALLink; }; - /** - * The UUID of the primaryBitstream of this Bundle - */ - @autoserialize - primaryBitstreamUUID: string; - /** * The primary Bitstream of this Bundle * Will be undefined unless the primaryBitstream {@link HALLink} has been resolved. From 12b3eb839ba63032d715bb4c25ac1a2ce00f492e Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Wed, 7 Jun 2023 17:29:05 +0200 Subject: [PATCH 175/425] CST-9639: Added and fixed unit tests --- .../access-control-array-form.component.html | 4 +- ...ccess-control-array-form.component.spec.ts | 32 ++- .../access-control-array-form.component.ts | 6 +- ...s-control-form-container.component.spec.ts | 187 ++++++++++++++---- ...access-control-form-container.component.ts | 2 +- 5 files changed, 178 insertions(+), 53 deletions(-) diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html index 963ae165e7..efe2259328 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html @@ -4,7 +4,7 @@
    -
    +
    @@ -91,7 +91,7 @@
    diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.spec.ts b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.spec.ts index 88d462ad79..964eb30de2 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.spec.ts +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.spec.ts @@ -45,12 +45,14 @@ describe('AccessControlArrayFormComponent', () => { }); it('should remove access control item', () => { - component.removeAccessControlItem(0); - expect(component.form.accessControls.length).toEqual(0); + expect(component.form.accessControls.length).toEqual(1); component.addAccessControlItem(); - component.removeAccessControlItem(0); - expect(component.form.accessControls.length).toEqual(0); + expect(component.form.accessControls.length).toEqual(2); + + const id = component.form.accessControls[0].id; + component.removeAccessControlItem(id); + expect(component.form.accessControls.length).toEqual(1); }); it('should reset form value', () => { @@ -69,7 +71,12 @@ describe('AccessControlArrayFormComponent', () => { it('should display a select dropdown with options', () => { - const selectElement: DebugElement = fixture.debugElement.query(By.css('select#accesscontroloption-0')); + component.enable(); + fixture.detectChanges(); + + const id = component.form.accessControls[0].id; + + const selectElement: DebugElement = fixture.debugElement.query(By.css(`select#accesscontroloption-${id}`)); expect(selectElement).toBeTruthy(); const options = selectElement.nativeElement.querySelectorAll('option'); @@ -81,6 +88,9 @@ describe('AccessControlArrayFormComponent', () => { }); it('should add new access control items when clicking "Add more" button', () => { + component.enable(); + fixture.detectChanges(); + const addButton: DebugElement = fixture.debugElement.query(By.css(`button#add-btn-${component.type}`)); addButton.nativeElement.click(); fixture.detectChanges(); @@ -90,11 +100,17 @@ describe('AccessControlArrayFormComponent', () => { }); it('should remove access control items when clicking remove button', () => { - const removeButton: DebugElement = fixture.debugElement.query(By.css('button.btn-outline-danger')); - removeButton.nativeElement.click(); + component.enable(); + + component.addAccessControlItem('test'); + + fixture.detectChanges(); + + const removeButton: DebugElement[] = fixture.debugElement.queryAll(By.css('button.btn-outline-danger')); + removeButton[1].nativeElement.click(); fixture.detectChanges(); const accessControlItems = fixture.debugElement.queryAll(By.css('.access-control-item')); - expect(accessControlItems.length).toEqual(0); + expect(accessControlItems.length).toEqual(1); }); }); diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts index f08534e8f9..227de596ff 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts @@ -1,5 +1,5 @@ import {Component, Input, OnInit, ViewChild} from '@angular/core'; -import {NgForm, NgModelGroup} from '@angular/forms'; +import {NgForm} from '@angular/forms'; import {AccessesConditionOption} from '../../../core/config/models/config-accesses-conditions-options.model'; import {dateToISOFormat} from '../../date.util'; @@ -52,9 +52,7 @@ export class AccessControlArrayFormComponent implements OnInit { * @param ngModelGroup * @param index */ - removeAccessControlItem(ngModelGroup: NgModelGroup, id: number) { - this.ngForm.removeFormGroup(ngModelGroup); - + removeAccessControlItem(id: number) { this.form.accessControls = this.form.accessControls.filter(item => item.id !== id); } diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts index 66ef20444e..4d02f7a52d 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts @@ -1,38 +1,149 @@ -// -// describe('AccessControlFormContainerComponent', () => { -// let component: AccessControlFormContainerComponent; -// let fixture: ComponentFixture>; -// -// let bulkAccessConfigDataServiceMock: BulkAccessConfigDataService; -// -// beforeEach(async () => { -// -// bulkAccessConfigDataServiceMock = jasmine.createSpyObj('BulkAccessConfigDataService', { -// findByName: jasmine.createSpy('findByName'), -// }); -// -// -// await TestBed.configureTestingModule({ -// declarations: [ AccessControlFormContainerComponent ], -// imports: [ CommonModule, ReactiveFormsModule, SharedBrowseByModule, TranslateModule, NgbDatepickerModule ], -// providers: [ -// { provide: BulkAccessConfigDataService, useValue: bulkAccessConfigDataServiceMock }, -// // private bulkAccessControlService: BulkAccessControlService, -// // private selectableListService: SelectableListService, -// // protected modalService: NgbModal, -// // private cdr: ChangeDetectorRef -// ] -// }) -// .compileComponents(); -// }); -// -// beforeEach(() => { -// fixture = TestBed.createComponent(AccessControlFormContainerComponent); -// component = fixture.componentInstance; -// fixture.detectChanges(); -// }); -// -// it('should create', () => { -// expect(component).toBeTruthy(); -// }); -// }); +import {ComponentFixture, fakeAsync, TestBed} from '@angular/core/testing'; +import {NgbDatepickerModule, NgbModal, NgbModalRef} from '@ng-bootstrap/ng-bootstrap'; +import {Component} from '@angular/core'; +import {of} from 'rxjs'; +import {AccessControlFormContainerComponent} from './access-control-form-container.component'; +import {BulkAccessControlService} from './bulk-access-control.service'; +import {BulkAccessConfigDataService} from '../../core/config/bulk-access-config-data.service'; +import {Item} from '../../core/shared/item.model'; +import {SelectableListService} from '../object-list/selectable-list/selectable-list.service'; +import {createAccessControlInitialFormState} from './access-control-form-container-intial-state'; +import {CommonModule} from '@angular/common'; +import {SharedBrowseByModule} from '../browse-by/shared-browse-by.module'; +import {TranslateModule} from '@ngx-translate/core'; +import {FormsModule} from '@angular/forms'; +import {UiSwitchModule} from 'ngx-ui-switch'; +import { + ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID +} from './item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component'; +import {AccessControlFormModule} from './access-control-form.module'; + + +describe('AccessControlFormContainerComponent', () => { + let component: AccessControlFormContainerComponent; + let fixture: ComponentFixture>; + + +// Mock NgbModal + @Component({selector: 'ds-ngb-modal', template: ''}) + class MockNgbModalComponent { + } + +// Mock dependencies + const mockBulkAccessControlService = { + createPayloadFile: jasmine.createSpy('createPayloadFile').and.returnValue({file: 'mocked-file'}), + executeScript: jasmine.createSpy('executeScript').and.returnValue(of('success')), + }; + + const mockBulkAccessConfigDataService = { + findByName: jasmine.createSpy('findByName').and.returnValue(of({payload: {options: []}})), + }; + + const mockSelectableListService = { + getSelectableList: jasmine.createSpy('getSelectableList').and.returnValue(of({selection: []})), + deselectAll: jasmine.createSpy('deselectAll'), + }; + + const mockNgbModal = { + open: jasmine.createSpy('open').and.returnValue( + { componentInstance: {}, closed: of({})} as NgbModalRef + ) + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [AccessControlFormContainerComponent, MockNgbModalComponent], + imports: [ + CommonModule, + FormsModule, + SharedBrowseByModule, + AccessControlFormModule, + TranslateModule.forRoot(), + NgbDatepickerModule, + UiSwitchModule + ], + providers: [ + {provide: BulkAccessControlService, useValue: mockBulkAccessControlService}, + {provide: BulkAccessConfigDataService, useValue: mockBulkAccessConfigDataService}, + {provide: SelectableListService, useValue: mockSelectableListService}, + {provide: NgbModal, useValue: mockNgbModal}, + ], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AccessControlFormContainerComponent); + component = fixture.componentInstance; + component.state = createAccessControlInitialFormState(); + fixture.detectChanges(); + }); + + it('should create the component', () => { + expect(component).toBeTruthy(); + }); + + it('should reset the form', fakeAsync(() => { + fixture.detectChanges(); + const resetSpy = spyOn(component.bitstreamAccessCmp, 'reset'); + spyOn(component.itemAccessCmp, 'reset'); + + component.reset(); + + expect(resetSpy).toHaveBeenCalled(); + expect(component.itemAccessCmp.reset).toHaveBeenCalled(); + expect(component.state).toEqual(createAccessControlInitialFormState()); + })); + + it('should submit the form', () => { + const bitstreamAccess = 'bitstreamAccess'; + const itemAccess = 'itemAccess'; + component.bitstreamAccessCmp.getValue = jasmine.createSpy('getValue').and.returnValue(bitstreamAccess); + component.itemAccessCmp.getValue = jasmine.createSpy('getValue').and.returnValue(itemAccess); + component.itemRD = {payload: {uuid: 'item-uuid'}} as any; + + component.submit(); + + expect(mockBulkAccessControlService.createPayloadFile).toHaveBeenCalledWith({ + bitstreamAccess, + itemAccess, + state: createAccessControlInitialFormState(), + }); + expect(mockBulkAccessControlService.executeScript).toHaveBeenCalledWith(['item-uuid'], 'mocked-file'); + }); + + it('should handle the status change for bitstream access', () => { + component.bitstreamAccessCmp.enable = jasmine.createSpy('enable'); + component.bitstreamAccessCmp.disable = jasmine.createSpy('disable'); + + component.handleStatusChange('bitstream', true); + expect(component.bitstreamAccessCmp.enable).toHaveBeenCalled(); + + component.handleStatusChange('bitstream', false); + expect(component.bitstreamAccessCmp.disable).toHaveBeenCalled(); + }); + + it('should handle the status change for item access', () => { + component.itemAccessCmp.enable = jasmine.createSpy('enable'); + component.itemAccessCmp.disable = jasmine.createSpy('disable'); + + component.handleStatusChange('item', true); + expect(component.itemAccessCmp.enable).toHaveBeenCalled(); + + component.handleStatusChange('item', false); + expect(component.itemAccessCmp.disable).toHaveBeenCalled(); + }); + + it('should open the select bitstreams modal', () => { + const modalService = TestBed.inject(NgbModal); + + component.openSelectBitstreamsModal(new Item()); + expect(modalService.open).toHaveBeenCalled(); + }); + + it('should unsubscribe and deselect all on component destroy', () => { + component.ngOnDestroy(); + expect(component.selectableListService.deselectAll).toHaveBeenCalledWith( + ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID + ); + }); +}); diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index a97859a599..b13943e07a 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -58,7 +58,7 @@ export class AccessControlFormContainerComponent impleme constructor( private bulkAccessConfigService: BulkAccessConfigDataService, private bulkAccessControlService: BulkAccessControlService, - private selectableListService: SelectableListService, + public selectableListService: SelectableListService, protected modalService: NgbModal, private cdr: ChangeDetectorRef ) {} From 5331b43a62b15a8e86dab4e0a4afae381179c411 Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Wed, 7 Jun 2023 18:08:21 +0200 Subject: [PATCH 176/425] [DURACOM-152] Fixed read-only visibility for submission form fields --- .../models/ds-dynamic-input.model.ts | 1 + .../onebox/dynamic-onebox.component.html | 2 ++ .../models/onebox/dynamic-onebox.component.ts | 3 +++ ...dynamic-scrollable-dropdown.component.html | 7 ++++-- ...dynamic-scrollable-dropdown.component.scss | 4 +++ .../form/builder/models/form-field.model.ts | 4 +++ .../builder/parsers/concat-field-parser.ts | 6 +++++ .../form/builder/parsers/field-parser.ts | 17 +++++++++++-- .../builder/parsers/onebox-field-parser.ts | 11 ++++---- .../shared/form/builder/parsers/row-parser.ts | 25 ++++++++++++++++--- 10 files changed, 67 insertions(+), 13 deletions(-) diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model.ts index edbd5710d2..3c6abaa851 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model.ts @@ -55,6 +55,7 @@ export class DsDynamicInputModel extends DynamicInputModel { this.metadataFields = config.metadataFields; this.hint = config.hint; this.readOnly = config.readOnly; + this.disabled = config.readOnly; this.value = config.value; this.relationship = config.relationship; this.submissionId = config.submissionId; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.html b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.html index e6b0cf508f..3c19ecda13 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.html +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.html @@ -39,6 +39,7 @@ [ngbTypeahead]="search" [placeholder]="model.placeholder" [readonly]="model.readOnly" + [disabled]="model.readOnly" [resultTemplate]="rt" [type]="model.inputType" [(ngModel)]="currentValue" @@ -63,6 +64,7 @@ [name]="model.name" [placeholder]="model.placeholder" [readonly]="true" + [disabled]="model.readOnly" [type]="model.inputType" [value]="currentValue?.display" (focus)="onFocus($event)" diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts index db278716e1..2ff4256404 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts @@ -216,6 +216,9 @@ export class DsDynamicOneboxComponent extends DsDynamicVocabularyComponent imple * @param event The click event fired */ openTree(event) { + if (this.model.readOnly) { + return; + } event.preventDefault(); event.stopImmediatePropagation(); this.subs.push(this.vocabulary$.pipe( diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.html b/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.html index 8a4d502287..3a75fe1037 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.html +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.html @@ -3,8 +3,10 @@ role="combobox" [attr.aria-label]="model.label" [attr.aria-owns]="'combobox_' + id + '_listbox'"> - + + = this.initModel(newId + QUALDROP_METADATA_SUFFIX, label, false, false); selectModelConfig.hint = null; this.setOptions(selectModelConfig); if (isNotEmpty(fieldValue)) { selectModelConfig.value = fieldValue.metadata; } - inputSelectGroup.group.push(new DynamicSelectModel(selectModelConfig, clsSelect)); - - const inputModelConfig: DsDynamicInputModelConfig = this.initModel(newId + QUALDROP_VALUE_SUFFIX, label, false, false); - inputModelConfig.hint = null; - this.setValues(inputModelConfig, fieldValue); + selectModelConfig.disabled = inputModelConfig.readOnly; inputSelectGroup.readOnly = selectModelConfig.disabled && inputModelConfig.readOnly; + inputSelectGroup.group.push(new DynamicSelectModel(selectModelConfig, clsSelect)); inputSelectGroup.group.push(new DsDynamicInputModel(inputModelConfig, clsInput)); return new DynamicQualdropModel(inputSelectGroup, clsGroup); diff --git a/src/app/shared/form/builder/parsers/row-parser.ts b/src/app/shared/form/builder/parsers/row-parser.ts index 2818e37b25..6602e53714 100644 --- a/src/app/shared/form/builder/parsers/row-parser.ts +++ b/src/app/shared/form/builder/parsers/row-parser.ts @@ -1,9 +1,10 @@ +import { SectionVisibility } from './../../../../submission/objects/section-visibility.model'; import { Injectable, Injector } from '@angular/core'; import { DYNAMIC_FORM_CONTROL_TYPE_ARRAY, DynamicFormGroupModelConfig } from '@ng-dynamic-forms/core'; import uniqueId from 'lodash/uniqueId'; -import { isEmpty } from '../../../empty.util'; +import { isEmpty, isNotEmpty } from '../../../empty.util'; import { DynamicRowGroupModel } from '../ds-dynamic-form-ui/models/ds-dynamic-row-group-model'; import { FormFieldModel } from '../models/form-field.model'; import { CONFIG_DATA, FieldParser, INIT_FORM_VALUES, PARSER_OPTIONS, SUBMISSION_ID } from './field-parser'; @@ -12,6 +13,7 @@ import { ParserOptions } from './parser-options'; import { ParserType } from './parser-type'; import { setLayout } from './parser.utils'; import { DYNAMIC_FORM_CONTROL_TYPE_RELATION_GROUP } from '../ds-dynamic-form-ui/ds-dynamic-form-constants'; +import { VisibilityType } from '../../../../submission/sections/visibility-type'; export const ROW_ID_PREFIX = 'df-row-group-config-'; @@ -118,15 +120,30 @@ export class RowParser { return parsedResult; } - checksFieldScope(fieldScope, submissionScope) { - return (isEmpty(fieldScope) || isEmpty(submissionScope) || fieldScope === submissionScope); + checksFieldScope(fieldScope, submissionScope, visibility: SectionVisibility) { + return (isEmpty(fieldScope) || !this.isHidden(visibility, fieldScope, submissionScope)); + } + + /** + * Check if the field is hidden or not, based on the visibility and the submission scope + * @param visibility The visibility of the field + * @param scope the scope of the field + * @param submissionScope the scope of the submission + * @returns If the field is hidden or not + */ + private isHidden(visibility: SectionVisibility, scope: string, submissionScope: string): boolean { + return isEmpty(visibility) + || (isNotEmpty(visibility) && visibility.main !== VisibilityType.READONLY) + && isNotEmpty(submissionScope) + && (isNotEmpty(scope) + && scope !== submissionScope); } filterScopedFields(fields: FormFieldModel[], submissionScope): FormFieldModel[] { const filteredFields: FormFieldModel[] = []; fields.forEach((field: FormFieldModel) => { // Whether field scope doesn't match the submission scope, skip it - if (this.checksFieldScope(field.scope, submissionScope)) { + if (this.checksFieldScope(field.scope, submissionScope, field.visibility)) { filteredFields.push(field); } }); From 50acff1b598e912fa9b46748b99cad0ec5471e63 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Wed, 7 Jun 2023 12:22:37 -0400 Subject: [PATCH 177/425] Empty the template of local content. --- .../email-request-copy.component.html | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.html b/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.html index 072f4d4a52..e69de29bb2 100644 --- a/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.html +++ b/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.html @@ -1,14 +0,0 @@ - - - - - TODO supply a title - - - - -
    TODO write content
    - - From b44acd68eea20ce3876edecf6962e342dfe63b3e Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Thu, 8 Jun 2023 09:52:25 +0200 Subject: [PATCH 178/425] CST-9639: Fix maxStartDate issue --- .../access-control-array-form.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html index efe2259328..117cc8d388 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html @@ -39,7 +39,7 @@ placeholder="yyyy-mm-dd" [(ngModel)]="control.startDate" name="startDate-{{control.id}}" - [minDate]="control.maxStartDate | toDate" + [maxDate]="control.maxStartDate | toDate" ngbDatepicker #d="ngbDatepicker" /> From 16ff75c92e60e1073f1a9d846e97d23044a73a07 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Thu, 8 Jun 2023 10:23:33 +0200 Subject: [PATCH 179/425] CST-9639: Fix calendar placement --- .../access-control-array-form.component.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html index 117cc8d388..cd56904bd7 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html @@ -41,6 +41,7 @@ name="startDate-{{control.id}}" [maxDate]="control.maxStartDate | toDate" ngbDatepicker + placement="top-start top-end bottom-start bottom-end" #d="ngbDatepicker" />
    @@ -69,6 +70,7 @@ name="endDate-{{control.id}}" [maxDate]="control.maxEndDate | toDate" ngbDatepicker + placement="top-start top-end bottom-start bottom-end" #d1="ngbDatepicker" />
    From 02bb7db1190c54be1f2a00608c624fdf67804f23 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Thu, 8 Jun 2023 13:15:02 +0200 Subject: [PATCH 180/425] [CST-5729] Fix issue with undefined link type --- .../bitstream-download-page.component.ts | 1 + .../item-page/simple/item-page.component.spec.ts | 13 +++++++++---- src/app/item-page/simple/item-page.component.ts | 15 ++++++++++----- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts index 4d05511ca0..cf8d8e7767 100644 --- a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts +++ b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts @@ -107,6 +107,7 @@ export class BitstreamDownloadPageComponent implements OnInit { let links = ''; signpostingLinks.forEach((link: SignpostingLink) => { + links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}"` + (isNotEmpty(link.type) ? ` ; type="${link.type}" ` : ' '); links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}" ; type="${link.type}" `; }); diff --git a/src/app/item-page/simple/item-page.component.spec.ts b/src/app/item-page/simple/item-page.component.spec.ts index dfba4bd235..b3202108f4 100644 --- a/src/app/item-page/simple/item-page.component.spec.ts +++ b/src/app/item-page/simple/item-page.component.spec.ts @@ -49,7 +49,7 @@ const mocklink = { const mocklink2 = { href: 'http://test2.org', rel: 'rel2', - type: 'type2' + type: undefined }; const mockSignpostingLinks: SignpostingLink[] = [mocklink, mocklink2]; @@ -176,13 +176,18 @@ describe('ItemPageComponent', () => { // Check if linkHeadService.addTag() was called with the correct arguments expect(linkHeadService.addTag).toHaveBeenCalledTimes(mockSignpostingLinks.length); - expect(linkHeadService.addTag).toHaveBeenCalledWith(mockSignpostingLinks[0] as LinkDefinition); - expect(linkHeadService.addTag).toHaveBeenCalledWith(mockSignpostingLinks[1] as LinkDefinition); + let expected: LinkDefinition = mockSignpostingLinks[0] as LinkDefinition; + expect(linkHeadService.addTag).toHaveBeenCalledWith(expected); + expected = { + href: 'http://test2.org', + rel: 'rel2' + }; + expect(linkHeadService.addTag).toHaveBeenCalledWith(expected); }); it('should set Link header on the server', () => { - expect(serverResponseService.setHeader).toHaveBeenCalledWith('Link', ' ; rel="rel1" ; type="type1" , ; rel="rel2" ; type="type2" '); + expect(serverResponseService.setHeader).toHaveBeenCalledWith('Link', ' ; rel="rel1" ; type="type1" , ; rel="rel2" '); }); }); diff --git a/src/app/item-page/simple/item-page.component.ts b/src/app/item-page/simple/item-page.component.ts index a11cb22883..b9be6bebfb 100644 --- a/src/app/item-page/simple/item-page.component.ts +++ b/src/app/item-page/simple/item-page.component.ts @@ -20,7 +20,7 @@ import { ServerResponseService } from '../../core/services/server-response.servi import { SignpostingDataService } from '../../core/data/signposting-data.service'; import { SignpostingLink } from '../../core/data/signposting-links.model'; import { isNotEmpty } from '../../shared/empty.util'; -import { LinkHeadService } from '../../core/services/link-head.service'; +import { LinkDefinition, LinkHeadService } from '../../core/services/link-head.service'; /** * This component renders a simple item page. @@ -111,12 +111,17 @@ export class ItemPageComponent implements OnInit, OnDestroy { this.signpostingLinks = signpostingLinks; signpostingLinks.forEach((link: SignpostingLink) => { - links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}" ; type="${link.type}" `; - this.linkHeadService.addTag({ + links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}"` + (isNotEmpty(link.type) ? ` ; type="${link.type}" ` : ' '); + let tag: LinkDefinition = { href: link.href, - type: link.type, rel: link.rel - }); + }; + if (isNotEmpty(link.type)) { + tag = Object.assign(tag, { + type: link.type + }); + } + this.linkHeadService.addTag(tag); }); if (isPlatformServer(this.platformId)) { From 56cba82c2df9e2fd2cd9816db7c5fe7a2dfe419a Mon Sep 17 00:00:00 2001 From: lotte Date: Thu, 8 Jun 2023 14:16:04 +0200 Subject: [PATCH 181/425] 101289: intermediate commit for test issues --- .../edit-bitstream-page.component.spec.ts | 140 ++++++++++-------- .../edit-bitstream-page.component.ts | 31 ++-- 2 files changed, 91 insertions(+), 80 deletions(-) diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts index 04ab4e47b0..3be3297880 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts @@ -24,8 +24,7 @@ import { createPaginatedList } from '../../shared/testing/utils.test'; import { Item } from '../../core/shared/item.model'; import { MetadataValueFilter } from '../../core/shared/metadata.models'; import { DSONameService } from '../../core/breadcrumbs/dso-name.service'; -import { Bundle } from '../../core/shared/bundle.model'; -import { BundleDataService } from '../../core/data/bundle-data.service'; +import { PrimaryBitstreamService } from '../../core/data/primary-bitstream-data.service'; const infoNotification: INotification = new Notification('id', NotificationType.Info, 'info'); const warningNotification: INotification = new Notification('id', NotificationType.Warning, 'warning'); @@ -34,6 +33,7 @@ const successNotification: INotification = new Notification('id', NotificationTy let notificationsService: NotificationsService; let formService: DynamicFormService; let bitstreamService: BitstreamDataService; +let primaryBitstreamService: PrimaryBitstreamService; let bitstreamFormatService: BitstreamFormatDataService; let dsoNameService: DSONameService; let bitstream: Bitstream; @@ -41,23 +41,19 @@ let bitstreamID: string; let selectedFormat: BitstreamFormat; let allFormats: BitstreamFormat[]; let router: Router; -let bundleDataService; -let bundleWithCurrentPrimary: Bundle; -let bundleWithDifferentPrimary: Bundle; -let bundleWithNoPrimary: Bundle; - +let currentPrimary: string; +let differentPrimary: string; +let bundle; let comp: EditBitstreamPageComponent; let fixture: ComponentFixture; -describe('EditBitstreamPageComponent', () => { +fdescribe('EditBitstreamPageComponent', () => { beforeEach(() => { bitstreamID = 'current-bitstream-id'; - bundleWithCurrentPrimary = Object.assign(new Bundle(), { 'primaryBitstreamUUID': bitstreamID }); - bundleWithDifferentPrimary = Object.assign(new Bundle(), { 'primaryBitstreamUUID': '12345-abcde-54321-edcba' }); - bundleWithNoPrimary = Object.assign(new Bundle(), { 'primaryBitstreamUUID': null }); - bundleDataService = jasmine.createSpyObj('BundleDataService', ['patch']); - bundleDataService.patch.and.callFake((a, b) => createSuccessfulRemoteDataObject$(a)); + currentPrimary = bitstreamID; + differentPrimary = '12345-abcde-54321-edcba'; + allFormats = [ Object.assign({ id: '1', @@ -116,12 +112,47 @@ describe('EditBitstreamPageComponent', () => { success: successNotification } ); + + bundle = { + _links: { + primaryBitstream: { + href: 'bundle-selflink' + } + }, + item: createSuccessfulRemoteDataObject$(Object.assign(new Item(), { + uuid: 'some-uuid', + firstMetadataValue(keyOrKeys: string | string[], valueFilter?: MetadataValueFilter): string { + return undefined; + }, + })) + }; + + const result = createSuccessfulRemoteDataObject$(bundle); + primaryBitstreamService = jasmine.createSpyObj('PrimaryBitstreamService', + { + put: result, + create: result, + delete: result, + }); + }); describe('EditBitstreamPageComponent no IIIF fields', () => { beforeEach(waitForAsync(() => { - + bundle = { + _links: { + primaryBitstream: { + href: 'bundle-selflink' + } + }, + item: createSuccessfulRemoteDataObject$(Object.assign(new Item(), { + uuid: 'some-uuid', + firstMetadataValue(keyOrKeys: string | string[], valueFilter?: MetadataValueFilter): string { + return undefined; + }, + })) + }; const bundleName = 'ORIGINAL'; bitstream = Object.assign(new Bitstream(), { @@ -143,17 +174,11 @@ describe('EditBitstreamPageComponent', () => { _links: { self: 'bitstream-selflink' }, - bundle: createSuccessfulRemoteDataObject$({ - item: createSuccessfulRemoteDataObject$(Object.assign(new Item(), { - uuid: 'some-uuid', - firstMetadataValue(keyOrKeys: string | string[], valueFilter?: MetadataValueFilter): string { - return undefined; - }, - })) - }) + bundle: createSuccessfulRemoteDataObject$(bundle) }); bitstreamService = jasmine.createSpyObj('bitstreamService', { findById: createSuccessfulRemoteDataObject$(bitstream), + findByHref: createSuccessfulRemoteDataObject$(bitstream), update: createSuccessfulRemoteDataObject$(bitstream), updateFormat: createSuccessfulRemoteDataObject$(bitstream), commitUpdates: {}, @@ -182,7 +207,7 @@ describe('EditBitstreamPageComponent', () => { { provide: BitstreamDataService, useValue: bitstreamService }, { provide: DSONameService, useValue: dsoNameService }, { provide: BitstreamFormatDataService, useValue: bitstreamFormatService }, - { provide: BundleDataService, useValue: bundleDataService }, + { provide: PrimaryBitstreamService, useValue: primaryBitstreamService }, ChangeDetectorRef ], schemas: [NO_ERRORS_SCHEMA] @@ -198,7 +223,7 @@ describe('EditBitstreamPageComponent', () => { spyOn(router, 'navigate'); }); - describe('on startup', () => { + fdescribe('on startup', () => { let rawForm; beforeEach(() => { @@ -222,7 +247,7 @@ describe('EditBitstreamPageComponent', () => { }); describe('when the bitstream is the primary bitstream on the bundle', () => { beforeEach(() => { - (comp as any).bundle = bundleWithCurrentPrimary; + (comp as any).primaryBitstreamUUID = currentPrimary; comp.setForm(); rawForm = comp.formGroup.getRawValue(); @@ -233,7 +258,7 @@ describe('EditBitstreamPageComponent', () => { }); describe('when the bitstream is not the primary bitstream on the bundle', () => { beforeEach(() => { - (comp as any).bundle = bundleWithDifferentPrimary; + (comp as any).primaryBitstreamUUID = differentPrimary; comp.setForm(); rawForm = comp.formGroup.getRawValue(); }); @@ -263,38 +288,23 @@ describe('EditBitstreamPageComponent', () => { describe('from a different primary bitstream', () => { beforeEach(() => { - (comp as any).bundle = bundleWithDifferentPrimary; + (comp as any).primaryBitstreamUUID = differentPrimary; comp.onSubmit(); }); - it('should call patch with a replace operation', () => { - expect(bundleDataService.patch).toHaveBeenCalledWith(bundleWithDifferentPrimary, [jasmine.objectContaining({ - op: 'replace' - })]); - }); - - it('should call patch with the correct bitstream uuid', () => { - expect(bundleDataService.patch).toHaveBeenCalledWith(bundleWithDifferentPrimary, [jasmine.objectContaining({ - value: bitstreamID - })]); + it('should call put with the correct bitstream on the PrimaryBitstreamService', () => { + expect(primaryBitstreamService.put).toHaveBeenCalledWith(jasmine.objectContaining({uuid: currentPrimary}), bundle); }); }); + describe('from no primary bitstream', () => { beforeEach(() => { - (comp as any).bundle = bundleWithNoPrimary; + (comp as any).primaryBitstreamUUID = null; comp.onSubmit(); }); - it('should call patch with an add operation', () => { - expect(bundleDataService.patch).toHaveBeenCalledWith(bundleWithNoPrimary, [jasmine.objectContaining({ - op: 'add' - })]); - }); - - it('should call patch with the correct bitstream uuid', () => { - expect(bundleDataService.patch).toHaveBeenCalledWith(bundleWithNoPrimary, [jasmine.objectContaining({ - value: bitstreamID - })]); + it('should call create with the correct bitstream on the PrimaryBitstreamService', () => { + expect(primaryBitstreamService.create).toHaveBeenCalledWith(jasmine.objectContaining({uuid: currentPrimary}), bundle); }); }); }); @@ -306,39 +316,42 @@ describe('EditBitstreamPageComponent', () => { describe('from the current bitstream', () => { beforeEach(() => { - (comp as any).bundle = bundleWithCurrentPrimary; + (comp as any).primaryBitstreamUUID = currentPrimary; comp.onSubmit(); }); - it('should call patch with a remove operation', () => { - expect(bundleDataService.patch).toHaveBeenCalledWith(bundleWithCurrentPrimary, [jasmine.objectContaining({ - op: 'remove' - })]); + it('should call delete on the PrimaryBitstreamService', () => { + expect(primaryBitstreamService.delete).toHaveBeenCalledWith(jasmine.objectContaining(bundle)); }); }); }); }); - describe('when the primaryBitstream did not changed', () => { + describe('when the primaryBitstream did not change', () => { describe('the current bitstream stayed the primary bitstream', () => { beforeEach(() => { const rawValue = Object.assign(comp.formGroup.getRawValue(), { fileNamePrimaryContainer: { primaryBitstream: true } }); spyOn(comp.formGroup, 'getRawValue').and.returnValue(rawValue); - (comp as any).bundle = bundleWithCurrentPrimary; + (comp as any).primaryBitstreamUUID = currentPrimary; comp.onSubmit(); }); - it('should not call patch on the bundle data service', () => { - expect(bundleDataService.patch).not.toHaveBeenCalled(); + it('should not call anything on the PrimaryBitstreamService', () => { + expect(primaryBitstreamService.put).not.toHaveBeenCalled(); + expect(primaryBitstreamService.delete).not.toHaveBeenCalled(); + expect(primaryBitstreamService.create).not.toHaveBeenCalled(); }); }); + describe('the bitstream was not and did not become the primary bitstream', () => { beforeEach(() => { const rawValue = Object.assign(comp.formGroup.getRawValue(), { fileNamePrimaryContainer: { primaryBitstream: false } }); spyOn(comp.formGroup, 'getRawValue').and.returnValue(rawValue); - (comp as any).bundle = bundleWithDifferentPrimary; + (comp as any).primaryBitstreamUUID = differentPrimary; comp.onSubmit(); }); - it('should not call patch on the bundle data service', () => { - expect(bundleDataService.patch).not.toHaveBeenCalled(); + it('should not call anything on the PrimaryBitstreamService', () => { + expect(primaryBitstreamService.put).not.toHaveBeenCalled(); + expect(primaryBitstreamService.delete).not.toHaveBeenCalled(); + expect(primaryBitstreamService.create).not.toHaveBeenCalled(); }); }); }); @@ -451,6 +464,7 @@ describe('EditBitstreamPageComponent', () => { }); bitstreamService = jasmine.createSpyObj('bitstreamService', { findById: createSuccessfulRemoteDataObject$(bitstream), + findByHref: createSuccessfulRemoteDataObject$(bitstream), update: createSuccessfulRemoteDataObject$(bitstream), updateFormat: createSuccessfulRemoteDataObject$(bitstream), commitUpdates: {}, @@ -477,7 +491,7 @@ describe('EditBitstreamPageComponent', () => { {provide: BitstreamDataService, useValue: bitstreamService}, {provide: DSONameService, useValue: dsoNameService}, {provide: BitstreamFormatDataService, useValue: bitstreamFormatService}, - { provide: BundleDataService, useValue: bundleDataService }, + { provide: PrimaryBitstreamService, useValue: primaryBitstreamService }, ChangeDetectorRef ], schemas: [NO_ERRORS_SCHEMA] @@ -595,7 +609,7 @@ describe('EditBitstreamPageComponent', () => { {provide: BitstreamDataService, useValue: bitstreamService}, {provide: DSONameService, useValue: dsoNameService}, {provide: BitstreamFormatDataService, useValue: bitstreamFormatService}, - { provide: BundleDataService, useValue: bundleDataService }, + { provide: PrimaryBitstreamService, useValue: primaryBitstreamService }, ChangeDetectorRef ], schemas: [NO_ERRORS_SCHEMA] @@ -617,7 +631,7 @@ describe('EditBitstreamPageComponent', () => { rawForm = comp.formGroup.getRawValue(); }); - it('should NOT set isIIIF to true', () => { + it('should NOT set is IIIF to true', () => { expect(comp.isIIIF).toBeFalse(); }); it('should put the \"IIIF Label\" input not to be shown', () => { diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts index 8b3dad3c1c..25c7f41868 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; import { Bitstream } from '../../core/shared/bitstream.model'; import { ActivatedRoute, Router } from '@angular/router'; -import { map, switchMap, tap, filter } from 'rxjs/operators'; +import { filter, map, switchMap, tap } from 'rxjs/operators'; import { combineLatest, combineLatest as observableCombineLatest, Observable, of as observableOf, Subscription } from 'rxjs'; import { DynamicFormControlModel, DynamicFormGroupModel, DynamicFormLayout, DynamicFormService, DynamicInputModel, DynamicSelectModel } from '@ng-dynamic-forms/core'; import { UntypedFormGroup } from '@angular/forms'; @@ -14,7 +14,7 @@ import { NotificationsService } from '../../shared/notifications/notifications.s import { BitstreamFormatDataService } from '../../core/data/bitstream-format-data.service'; import { BitstreamFormat } from '../../core/shared/bitstream-format.model'; import { BitstreamFormatSupportLevel } from '../../core/shared/bitstream-format-support-level'; -import { hasValue, isEmpty, isNotEmpty, hasValueOperator } from '../../shared/empty.util'; +import { hasValue, hasValueOperator, isEmpty, isNotEmpty } from '../../shared/empty.util'; import { Metadata } from '../../core/shared/metadata.utils'; import { Location } from '@angular/common'; import { RemoteData } from '../../core/data/remote-data'; @@ -25,10 +25,7 @@ import { DSONameService } from '../../core/breadcrumbs/dso-name.service'; import { Item } from '../../core/shared/item.model'; import { DsDynamicInputModel } from '../../shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model'; import { DsDynamicTextAreaModel } from '../../shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-textarea.model'; -import { BundleDataService } from '../../core/data/bundle-data.service'; -import { Operation } from 'fast-json-patch'; import { PrimaryBitstreamService } from '../../core/data/primary-bitstream-data.service'; -import { hasSucceeded } from '../../core/data/request-entry-state.model'; @Component({ selector: 'ds-edit-bitstream-page', @@ -374,12 +371,6 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { */ private bundle: Bundle; - /** - * Path to patch primary bitstream on the bundle - * @private - */ - private readonly primaryBitstreamPath = '/primaryBitstreamUUID'; - constructor(private route: ActivatedRoute, private router: Router, private changeDetectorRef: ChangeDetectorRef, @@ -391,7 +382,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { private notificationsService: NotificationsService, private bitstreamFormatService: BitstreamFormatDataService, private primaryBitstreamService: PrimaryBitstreamService, - private bundleService: BundleDataService) { + ) { } /** @@ -404,33 +395,39 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { this.itemId = this.route.snapshot.queryParams.itemId; this.entityType = this.route.snapshot.queryParams.entityType; - this.bitstreamRD$ = this.route.data.pipe(map((data) => data.bitstream)); + this.bitstreamRD$ = this.route.data.pipe(map((data: any) => data.bitstream)); this.bitstreamFormatsRD$ = this.bitstreamFormatService.findAll(this.findAllOptions); const bitstream$ = this.bitstreamRD$.pipe( getFirstSucceededRemoteData(), - getRemoteDataPayload() + getRemoteDataPayload(), + tap(t => console.log(t)), ); const allFormats$ = this.bitstreamFormatsRD$.pipe( getFirstSucceededRemoteData(), - getRemoteDataPayload() + getRemoteDataPayload(), + tap(t => console.log(t)), ); const bundle$ = bitstream$.pipe( switchMap((bitstream: Bitstream) => bitstream.bundle), getFirstSucceededRemoteDataPayload(), + tap(t => console.log(t)), ); const primaryBitstream$ = bundle$.pipe( hasValueOperator(), + tap(t => console.log(t._links.primaryBitstream.href)), switchMap((bundle: Bundle) => this.bitstreamService.findByHref(bundle._links.primaryBitstream.href)), - getFirstSucceededRemoteDataPayload() + getFirstSucceededRemoteDataPayload(), + tap(t => console.log(t)), ); const item$ = bundle$.pipe( switchMap((bundle: Bundle) => bundle.item), - getFirstSucceededRemoteDataPayload() + getFirstSucceededRemoteDataPayload(), + tap(t => console.log(t)), ); this.subs.push( observableCombineLatest( From 84f4f017fbb5068292dc68eb6f2efa4c5bdc33f3 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Thu, 8 Jun 2023 14:52:29 +0200 Subject: [PATCH 182/425] CST-9639: Fix error when modal closes --- .../access-control-form-container.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index b13943e07a..69a598f7ce 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -147,7 +147,7 @@ export class AccessControlFormContainerComponent impleme concatMap(() => this.selectableListService.getSelectableList(ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID)), take(1) ).subscribe((list) => { - this.state.bitstream.selectedBitstreams = list.selection; + this.state.bitstream.selectedBitstreams = list?.selection || []; this.cdr.detectChanges(); }); } From d4491083954ab4419a93e8a04318c58ac4f2c09f Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Thu, 8 Jun 2023 15:23:02 +0200 Subject: [PATCH 183/425] [CST-9636] revert changes to object-list.component --- .../browse/bulk-access-browse.component.html | 34 +++++++---- .../object-list/object-list.component.html | 58 ++++++------------- .../object-list/object-list.component.ts | 5 -- .../themed-object-list.component.ts | 6 -- 4 files changed, 41 insertions(+), 62 deletions(-) diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html index 6ef45cdd5b..c716aedb8b 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html @@ -34,16 +34,30 @@ {{'admin.access-control.bulk-access-browse.selected.header' | translate: {number: ((objectsSelected$ | async)?.payload?.totalElements) ? (objectsSelected$ | async)?.payload?.totalElements : '0'} }} - + +
      +
    • + + +
    • +
    +
    diff --git a/src/app/shared/object-list/object-list.component.html b/src/app/shared/object-list/object-list.component.html index 541a4794b0..b8712b85c5 100644 --- a/src/app/shared/object-list/object-list.component.html +++ b/src/app/shared/object-list/object-list.component.html @@ -16,46 +16,22 @@ (prev)="goPrev()" (next)="goNext()">
      - -
    • - - - -
    • -
      - -
    • - - - -
    • -
      +
    • + + + +
    diff --git a/src/app/shared/object-list/object-list.component.ts b/src/app/shared/object-list/object-list.component.ts index 72bff54f59..5161b75459 100644 --- a/src/app/shared/object-list/object-list.component.ts +++ b/src/app/shared/object-list/object-list.component.ts @@ -76,11 +76,6 @@ export class ObjectListComponent { */ @Input() importConfig: { buttonLabel: string }; - /** - * If true the object list provided needs to be paginated using the `paginate` pipe - */ - @Input() listToPaginate = false; - /** * Whether or not the pagination should be rendered as simple previous and next buttons instead of the normal pagination */ diff --git a/src/app/shared/object-list/themed-object-list.component.ts b/src/app/shared/object-list/themed-object-list.component.ts index 04a95de1cb..14ddf474ad 100644 --- a/src/app/shared/object-list/themed-object-list.component.ts +++ b/src/app/shared/object-list/themed-object-list.component.ts @@ -44,11 +44,6 @@ export class ThemedObjectListComponent extends ThemedComponent Date: Thu, 8 Jun 2023 15:44:30 +0200 Subject: [PATCH 184/425] fix issue where iiif tests would fail --- .../edit-bitstream-page.component.spec.ts | 19 +++++++++++++++---- .../edit-bitstream-page.component.ts | 6 ------ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts index 3be3297880..2e8c6368c1 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts @@ -47,7 +47,7 @@ let bundle; let comp: EditBitstreamPageComponent; let fixture: ComponentFixture; -fdescribe('EditBitstreamPageComponent', () => { +describe('EditBitstreamPageComponent', () => { beforeEach(() => { bitstreamID = 'current-bitstream-id'; @@ -223,7 +223,7 @@ fdescribe('EditBitstreamPageComponent', () => { spyOn(router, 'navigate'); }); - fdescribe('on startup', () => { + describe('on startup', () => { let rawForm; beforeEach(() => { @@ -454,13 +454,18 @@ fdescribe('EditBitstreamPageComponent', () => { self: 'bitstream-selflink' }, bundle: createSuccessfulRemoteDataObject$({ + _links: { + primaryBitstream: { + href: 'bundle-selflink' + } + }, item: createSuccessfulRemoteDataObject$(Object.assign(new Item(), { uuid: 'some-uuid', firstMetadataValue(keyOrKeys: string | string[], valueFilter?: MetadataValueFilter): string { return 'True'; } })) - }) + }), }); bitstreamService = jasmine.createSpyObj('bitstreamService', { findById: createSuccessfulRemoteDataObject$(bitstream), @@ -574,16 +579,22 @@ fdescribe('EditBitstreamPageComponent', () => { self: 'bitstream-selflink' }, bundle: createSuccessfulRemoteDataObject$({ + _links: { + primaryBitstream: { + href: 'bundle-selflink' + } + }, item: createSuccessfulRemoteDataObject$(Object.assign(new Item(), { uuid: 'some-uuid', firstMetadataValue(keyOrKeys: string | string[], valueFilter?: MetadataValueFilter): string { return 'True'; } })) - }) + }), }); bitstreamService = jasmine.createSpyObj('bitstreamService', { findById: createSuccessfulRemoteDataObject$(bitstream), + findByHref: createSuccessfulRemoteDataObject$(bitstream), update: createSuccessfulRemoteDataObject$(bitstream), updateFormat: createSuccessfulRemoteDataObject$(bitstream), commitUpdates: {}, diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts index 25c7f41868..0d5e1eecc1 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts @@ -401,33 +401,27 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { const bitstream$ = this.bitstreamRD$.pipe( getFirstSucceededRemoteData(), getRemoteDataPayload(), - tap(t => console.log(t)), ); const allFormats$ = this.bitstreamFormatsRD$.pipe( getFirstSucceededRemoteData(), getRemoteDataPayload(), - tap(t => console.log(t)), ); const bundle$ = bitstream$.pipe( switchMap((bitstream: Bitstream) => bitstream.bundle), getFirstSucceededRemoteDataPayload(), - tap(t => console.log(t)), ); const primaryBitstream$ = bundle$.pipe( hasValueOperator(), - tap(t => console.log(t._links.primaryBitstream.href)), switchMap((bundle: Bundle) => this.bitstreamService.findByHref(bundle._links.primaryBitstream.href)), getFirstSucceededRemoteDataPayload(), - tap(t => console.log(t)), ); const item$ = bundle$.pipe( switchMap((bundle: Bundle) => bundle.item), getFirstSucceededRemoteDataPayload(), - tap(t => console.log(t)), ); this.subs.push( observableCombineLatest( From a936878c9673dc79d98404939595cf5c6b2f3ded Mon Sep 17 00:00:00 2001 From: lotte Date: Thu, 8 Jun 2023 16:02:33 +0200 Subject: [PATCH 185/425] 101289: tests --- .../edit-bitstream-page.component.spec.ts | 2 +- .../edit-bitstream-page.component.ts | 2 +- .../data/primary-bitstream.service.spec.ts | 158 ++++++++++++++++++ ...ervice.ts => primary-bitstream.service.ts} | 6 +- 4 files changed, 163 insertions(+), 5 deletions(-) create mode 100644 src/app/core/data/primary-bitstream.service.spec.ts rename src/app/core/data/{primary-bitstream-data.service.ts => primary-bitstream.service.ts} (97%) diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts index 2e8c6368c1..b83f2b9664 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts @@ -24,7 +24,7 @@ import { createPaginatedList } from '../../shared/testing/utils.test'; import { Item } from '../../core/shared/item.model'; import { MetadataValueFilter } from '../../core/shared/metadata.models'; import { DSONameService } from '../../core/breadcrumbs/dso-name.service'; -import { PrimaryBitstreamService } from '../../core/data/primary-bitstream-data.service'; +import { PrimaryBitstreamService } from '../../core/data/primary-bitstream.service'; const infoNotification: INotification = new Notification('id', NotificationType.Info, 'info'); const warningNotification: INotification = new Notification('id', NotificationType.Warning, 'warning'); diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts index 0d5e1eecc1..cdc905d456 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts @@ -25,7 +25,7 @@ import { DSONameService } from '../../core/breadcrumbs/dso-name.service'; import { Item } from '../../core/shared/item.model'; import { DsDynamicInputModel } from '../../shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model'; import { DsDynamicTextAreaModel } from '../../shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-textarea.model'; -import { PrimaryBitstreamService } from '../../core/data/primary-bitstream-data.service'; +import { PrimaryBitstreamService } from '../../core/data/primary-bitstream.service'; @Component({ selector: 'ds-edit-bitstream-page', diff --git a/src/app/core/data/primary-bitstream.service.spec.ts b/src/app/core/data/primary-bitstream.service.spec.ts new file mode 100644 index 0000000000..93e9882d04 --- /dev/null +++ b/src/app/core/data/primary-bitstream.service.spec.ts @@ -0,0 +1,158 @@ +import { ObjectCacheService } from '../cache/object-cache.service'; +import { RequestService } from './request.service'; +import { Bitstream } from '../shared/bitstream.model'; +import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { getMockRequestService } from '../../shared/mocks/request.service.mock'; +import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; +import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; +import { getMockRemoteDataBuildService } from '../../shared/mocks/remote-data-build.service.mock'; +import { PrimaryBitstreamService } from './primary-bitstream.service'; +import { BundleDataService } from './bundle-data.service'; +import { NotificationsService } from '../../shared/notifications/notifications.service'; +import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; +import { CreateRequest, DeleteRequest, PostRequest, PutRequest } from './request.models'; +import { createFailedRemoteDataObject, createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; +import { Bundle } from '../shared/bundle.model'; +import { getTestScheduler } from 'jasmine-marbles'; +import { of as observableOf } from 'rxjs'; + +fdescribe('PrimaryBitstreamService', () => { + let service: PrimaryBitstreamService; + let objectCache: ObjectCacheService; + let requestService: RequestService; + let halService: HALEndpointService; + let rdbService: RemoteDataBuildService; + let notificationService: NotificationsService; + let bundleDataService: BundleDataService; + + const bitstream = Object.assign(new Bitstream(), { + uuid: 'fake-bitstream', + _links: { + self: { href: 'fake-bitstream-self' } + } + }); + + const bundle = Object.assign(new Bundle(), { + uuid: 'fake-bundle', + _links: { + self: { href: 'fake-bundle-self' }, + primaryBitstream: { href: 'fake-primary-bitstream-self' }, + } + }); + + const url = 'fake-bitstream-url'; + + beforeEach(() => { + objectCache = jasmine.createSpyObj('objectCache', { + remove: jasmine.createSpy('remove') + }); + requestService = getMockRequestService(); + halService = Object.assign(new HALEndpointServiceStub(url)); + + rdbService = getMockRemoteDataBuildService(); + notificationService = new NotificationsServiceStub() as any; + bundleDataService = jasmine.createSpyObj('bundleDataService', {'findByHref': createSuccessfulRemoteDataObject$(bundle)}); + service = new PrimaryBitstreamService(requestService, rdbService, objectCache, halService, notificationService, bundleDataService); + }); + + describe('getHttpOptions', () => { + it('should return a HttpOptions object with text/url-list Context-Type header', () => { + const result = (service as any).getHttpOptions() + expect(result.headers.get('Content-Type')).toEqual('text/uri-list'); + }); + }); + + describe('createAndSendRequest', () => { + const testId = '12345-12345'; + const options = {}; + const testResult = createSuccessfulRemoteDataObject(new Bundle()); + + beforeEach(() => { + spyOn(service as any, 'getHttpOptions').and.returnValue(options); + (requestService.generateRequestId as jasmine.Spy).and.returnValue(testId); + spyOn(rdbService, 'buildFromRequestUUID').and.returnValue(observableOf(testResult)); + }); + + it('should return a Request object with the given constructor and the given parameters', () => { + const result = (service as any).createAndSendRequest(CreateRequest, url, bitstream.self); + const request = new CreateRequest(testId, url, bitstream.self, options); + getTestScheduler().expectObservable(result).toBe('(a|)', { a: testResult }); + + expect(requestService.send).toHaveBeenCalledWith(request); + expect(rdbService.buildFromRequestUUID).toHaveBeenCalledWith(testId); + }); + }); + + describe('create', () => { + const testResult = createSuccessfulRemoteDataObject(new Bundle()); + beforeEach(() => { + spyOn((service as any), 'createAndSendRequest').and.returnValue(observableOf(testResult)); + }); + + it('should delegate the call to createAndSendRequest', () => { + const result = service.create(bitstream, bundle); + getTestScheduler().expectObservable(result).toBe('(a|)', { a: testResult }); + + expect((service as any).createAndSendRequest).toHaveBeenCalledWith( + PostRequest, + bundle._links.primaryBitstream.href, + bitstream.self + ); + }); + }); + describe('put', () => { + const testResult = createSuccessfulRemoteDataObject(new Bundle()); + beforeEach(() => { + spyOn((service as any), 'createAndSendRequest').and.returnValue(observableOf(testResult)); + }); + + it('should delegate the call to createAndSendRequest and return the requested bundle', () => { + const result = service.put(bitstream, bundle); + getTestScheduler().expectObservable(result).toBe('(a|)', { a: testResult }); + + expect((service as any).createAndSendRequest).toHaveBeenCalledWith( + PutRequest, + bundle._links.primaryBitstream.href, + bitstream.self + ); + }); + }); + describe('delete', () => { + describe('when the delete request succeeds', () => { + const testResult = createSuccessfulRemoteDataObject(new Bundle()); + const bundleServiceResult = createSuccessfulRemoteDataObject(bundle); + + beforeEach(() => { + spyOn((service as any), 'createAndSendRequest').and.returnValue(observableOf(testResult)); + (bundleDataService.findByHref as jasmine.Spy).and.returnValue(observableOf(bundleServiceResult)); + }); + + it('should delegate the call to createAndSendRequest', () => { + const result = service.delete(bundle); + getTestScheduler().expectObservable(result).toBe('(a|)', { a: testResult }); + + expect((service as any).createAndSendRequest).toHaveBeenCalledWith( + DeleteRequest, + bundle._links.primaryBitstream.href, + ); + }); + }); + describe('when the delete request fails', () => { + const testResult = createFailedRemoteDataObject(); + + beforeEach(() => { + spyOn((service as any), 'createAndSendRequest').and.returnValue(observableOf(testResult)); + }); + + it('should delegate the call to createAndSendRequest and retrieve the bundle from the rdbService', () => { + const result = service.delete(bundle); + getTestScheduler().expectObservable(result).toBe('(a|)', { a: bundle }); + + expect((service as any).createAndSendRequest).toHaveBeenCalledWith( + DeleteRequest, + bundle._links.primaryBitstream.href, + ); + }); + }); + }); +}); diff --git a/src/app/core/data/primary-bitstream-data.service.ts b/src/app/core/data/primary-bitstream.service.ts similarity index 97% rename from src/app/core/data/primary-bitstream-data.service.ts rename to src/app/core/data/primary-bitstream.service.ts index 6380a6f148..5c1c3c52ac 100644 --- a/src/app/core/data/primary-bitstream-data.service.ts +++ b/src/app/core/data/primary-bitstream.service.ts @@ -97,7 +97,7 @@ export class PrimaryBitstreamService { } /** - * Update an exiting primaryBitstream + * Update an existing primaryBitstream * * @param primaryBitstream The object to update * @param bundle The bundle to update it on @@ -111,7 +111,7 @@ export class PrimaryBitstreamService { } /** - * Delete an exiting primaryBitstream + * Delete an existing primaryBitstream * * @param bundle The bundle to delete it from */ @@ -125,7 +125,7 @@ export class PrimaryBitstreamService { if (rd.hasSucceeded) { return this.bundleDataService.findByHref(bundle.self, false); } else { - [bundle]; + return this.rdbService.buildSingle(bundle.self); } }) ); From 9d2fed4186186e22fab2b72a07e200c8c6a004de Mon Sep 17 00:00:00 2001 From: lotte Date: Thu, 8 Jun 2023 16:42:25 +0200 Subject: [PATCH 186/425] 101289: Fixed test issues --- .../edit-bitstream-page.component.ts | 2 +- .../data/primary-bitstream.service.spec.ts | 45 ++++++++++++++----- .../core/data/primary-bitstream.service.ts | 6 +-- src/app/core/shared/bundle.model.ts | 2 +- 4 files changed, 37 insertions(+), 18 deletions(-) diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts index cdc905d456..b77d2151a9 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts @@ -612,7 +612,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { bundle$ = completedBundleRd$.pipe( map((bundleRd: RemoteData) => { if (bundleRd.hasSucceeded) { - return bundleRd.payload + return bundleRd.payload; } else { return this.bundle; } diff --git a/src/app/core/data/primary-bitstream.service.spec.ts b/src/app/core/data/primary-bitstream.service.spec.ts index 93e9882d04..00d6d7f03c 100644 --- a/src/app/core/data/primary-bitstream.service.spec.ts +++ b/src/app/core/data/primary-bitstream.service.spec.ts @@ -16,7 +16,7 @@ import { Bundle } from '../shared/bundle.model'; import { getTestScheduler } from 'jasmine-marbles'; import { of as observableOf } from 'rxjs'; -fdescribe('PrimaryBitstreamService', () => { +describe('PrimaryBitstreamService', () => { let service: PrimaryBitstreamService; let objectCache: ObjectCacheService; let requestService: RequestService; @@ -57,7 +57,7 @@ fdescribe('PrimaryBitstreamService', () => { describe('getHttpOptions', () => { it('should return a HttpOptions object with text/url-list Context-Type header', () => { - const result = (service as any).getHttpOptions() + const result = (service as any).getHttpOptions(); expect(result.headers.get('Content-Type')).toEqual('text/uri-list'); }); }); @@ -118,9 +118,20 @@ fdescribe('PrimaryBitstreamService', () => { }); }); describe('delete', () => { + const testBundle = Object.assign(new Bundle(), { + _links: { + self: { + href: 'test-href' + }, + primaryBitstream: { + href: 'test-primaryBitstream-href' + } + } + }); + describe('when the delete request succeeds', () => { const testResult = createSuccessfulRemoteDataObject(new Bundle()); - const bundleServiceResult = createSuccessfulRemoteDataObject(bundle); + const bundleServiceResult = createSuccessfulRemoteDataObject(testBundle); beforeEach(() => { spyOn((service as any), 'createAndSendRequest').and.returnValue(observableOf(testResult)); @@ -128,30 +139,42 @@ fdescribe('PrimaryBitstreamService', () => { }); it('should delegate the call to createAndSendRequest', () => { - const result = service.delete(bundle); - getTestScheduler().expectObservable(result).toBe('(a|)', { a: testResult }); + const result = service.delete(testBundle); + getTestScheduler().expectObservable(result).toBe('(a|)', { a: bundleServiceResult }); + + result.subscribe(); + + expect(bundleDataService.findByHref).toHaveBeenCalledWith(testBundle.self, false); expect((service as any).createAndSendRequest).toHaveBeenCalledWith( DeleteRequest, - bundle._links.primaryBitstream.href, + testBundle._links.primaryBitstream.href, ); }); }); describe('when the delete request fails', () => { const testResult = createFailedRemoteDataObject(); + const bundleServiceResult = createSuccessfulRemoteDataObject(testBundle); beforeEach(() => { spyOn((service as any), 'createAndSendRequest').and.returnValue(observableOf(testResult)); + (bundleDataService.findByHref as jasmine.Spy).and.returnValue(observableOf(bundleServiceResult)); }); - it('should delegate the call to createAndSendRequest and retrieve the bundle from the rdbService', () => { - const result = service.delete(bundle); - getTestScheduler().expectObservable(result).toBe('(a|)', { a: bundle }); - + it('should delegate the call to createAndSendRequest and request the bundle from the bundleDataService', () => { + const result = service.delete(testBundle); + result.subscribe(); expect((service as any).createAndSendRequest).toHaveBeenCalledWith( DeleteRequest, - bundle._links.primaryBitstream.href, + testBundle._links.primaryBitstream.href, ); + expect(bundleDataService.findByHref).toHaveBeenCalledWith(testBundle.self, true); + + }); + + it('should delegate the call to createAndSendRequest and', () => { + const result = service.delete(bundle); + getTestScheduler().expectObservable(result).toBe('(a|)', { a: bundleServiceResult }); }); }); }); diff --git a/src/app/core/data/primary-bitstream.service.ts b/src/app/core/data/primary-bitstream.service.ts index 5c1c3c52ac..646e8271e8 100644 --- a/src/app/core/data/primary-bitstream.service.ts +++ b/src/app/core/data/primary-bitstream.service.ts @@ -122,11 +122,7 @@ export class PrimaryBitstreamService { ).pipe( getAllCompletedRemoteData(), switchMap((rd: RemoteData) => { - if (rd.hasSucceeded) { - return this.bundleDataService.findByHref(bundle.self, false); - } else { - return this.rdbService.buildSingle(bundle.self); - } + return this.bundleDataService.findByHref(bundle.self, rd.hasFailed); }) ); } diff --git a/src/app/core/shared/bundle.model.ts b/src/app/core/shared/bundle.model.ts index f37cd96545..36b7012e47 100644 --- a/src/app/core/shared/bundle.model.ts +++ b/src/app/core/shared/bundle.model.ts @@ -1,4 +1,4 @@ -import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; +import { deserialize, inheritSerialization } from 'cerialize'; import { Observable } from 'rxjs'; From daf297b94b61556ddb697b440a35f1a941b127e1 Mon Sep 17 00:00:00 2001 From: lotte Date: Fri, 9 Jun 2023 11:17:00 +0200 Subject: [PATCH 187/425] 101289: Removed unnecessary data services from primary bitstream service --- src/app/core/data/primary-bitstream.service.ts | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/app/core/data/primary-bitstream.service.ts b/src/app/core/data/primary-bitstream.service.ts index 646e8271e8..488cb5d22e 100644 --- a/src/app/core/data/primary-bitstream.service.ts +++ b/src/app/core/data/primary-bitstream.service.ts @@ -1,7 +1,4 @@ import { Bitstream } from '../shared/bitstream.model'; -import { DeleteDataImpl } from './base/delete-data'; -import { PutDataImpl } from './base/put-data'; -import { CreateDataImpl } from './base/create-data'; import { Injectable } from '@angular/core'; import { RequestService } from './request.service'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; @@ -11,7 +8,6 @@ import { Observable, switchMap } from 'rxjs'; import { RemoteData } from './remote-data'; import { Bundle } from '../shared/bundle.model'; import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { constructIdEndpointDefault } from './base/identifiable-data.service'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; import { HttpHeaders } from '@angular/common/http'; import { GenericConstructor } from '../shared/generic-constructor'; @@ -24,9 +20,6 @@ import { BundleDataService } from './bundle-data.service'; providedIn: 'root', }) export class PrimaryBitstreamService { - private createData: CreateDataImpl; - private putData: PutDataImpl; - private deleteData: DeleteDataImpl; constructor( protected requestService: RequestService, @@ -36,10 +29,6 @@ export class PrimaryBitstreamService { protected notificationsService: NotificationsService, protected bundleDataService: BundleDataService, ) { - // linkPath can be undefined because we'll only use them to do things "byHref" - this.createData = new CreateDataImpl(undefined, requestService, rdbService, objectCache, halService, notificationsService, undefined); - this.putData = new PutDataImpl(undefined, requestService, rdbService, objectCache, halService, undefined); - this.deleteData = new DeleteDataImpl(undefined, requestService, rdbService, objectCache, halService, notificationsService, undefined, constructIdEndpointDefault); } /** From c4b25653733323812b4531952d0fd98acb906208 Mon Sep 17 00:00:00 2001 From: Yury Bondarenko Date: Fri, 9 Jun 2023 13:39:28 +0200 Subject: [PATCH 188/425] Workaround: don't use form-global data for check Note: we're balancing multiple bugs against eachother here, not ideal! - the diff doesn't catch removed Relationship fields; instead, form reload is triggered by a dspace.entity.type change - if we add the original `this.sectionMetadata.includes(key)` check, we filter out this change and the form fails to update - if we add `relation.*` fields to `this.sectionMetadata`, newly added Relationship entries are duplicated As of this commit, the form _seems_ to work in a stable way, but these issues shoud really investigated in more detail. --- src/app/submission/sections/form/section-form.component.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/app/submission/sections/form/section-form.component.ts b/src/app/submission/sections/form/section-form.component.ts index 9612db523c..3fa9000039 100644 --- a/src/app/submission/sections/form/section-form.component.ts +++ b/src/app/submission/sections/form/section-form.component.ts @@ -229,8 +229,10 @@ export class SubmissionSectionFormComponent extends SectionModelComponent { const sectionDataToCheck = {}; Object.keys(sectionData).forEach((key) => { - if (this.sectionData.data && hasValue(this.sectionData.data[key]) && this.inCurrentSubmissionScope(key)) { - sectionDataToCheck[key] = this.sectionData.data[key]; + // todo: removing Relationships works due to a bug -- dspace.entity.type is included in sectionData, which is what triggers the update; + // if we use this.sectionMetadata.includes(key), this field is filtered out and removed Relationships won't disappear from the form. + if (this.inCurrentSubmissionScope(key)) { + sectionDataToCheck[key] = sectionData[key]; } }); From 8cc96060ff6b9e8ee59f39f3b2ba8144403f161c Mon Sep 17 00:00:00 2001 From: damian Date: Fri, 9 Jun 2023 16:44:29 +0200 Subject: [PATCH 189/425] Variable name change. --- .../community-list/community-list.component.html | 2 +- src/app/core/shared/collection.model.ts | 4 ++-- src/app/core/shared/community.model.ts | 2 +- .../collection-list-element.component.html | 2 +- .../collection-list-element.component.spec.ts | 8 ++++---- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/app/community-list-page/community-list/community-list.component.html b/src/app/community-list-page/community-list/community-list.component.html index 5f940b4405..7f8dcf0c45 100644 --- a/src/app/community-list-page/community-list/community-list.component.html +++ b/src/app/community-list-page/community-list/community-list.component.html @@ -37,7 +37,7 @@ {{node.name}} - [{{node.payload.archivedItems}}] + [{{node.payload.archivedItemsCount}}]
    diff --git a/src/app/core/shared/collection.model.ts b/src/app/core/shared/collection.model.ts index 81efc33510..c97c61eceb 100644 --- a/src/app/core/shared/collection.model.ts +++ b/src/app/core/shared/collection.model.ts @@ -16,7 +16,7 @@ import { COMMUNITY } from './community.resource-type'; import { Community } from './community.model'; import { ChildHALResource } from './child-hal-resource.model'; import { HandleObject } from './handle-object.model'; -import {excludeFromEquals} from '../utilities/equals.decorators'; +import { excludeFromEquals } from '../utilities/equals.decorators'; @typedObject @inheritSerialization(DSpaceObject) @@ -25,7 +25,7 @@ export class Collection extends DSpaceObject implements ChildHALResource, Handle @excludeFromEquals @autoserialize - archivedItems: number; + archivedItemsCount: number; /** * The {@link HALLink}s for this Collection diff --git a/src/app/core/shared/community.model.ts b/src/app/core/shared/community.model.ts index 0bab8cfa22..03b47fb024 100644 --- a/src/app/core/shared/community.model.ts +++ b/src/app/core/shared/community.model.ts @@ -21,7 +21,7 @@ export class Community extends DSpaceObject implements ChildHALResource, HandleO @excludeFromEquals @autoserialize - archivedItems: number; + archivedItemsCount: number; /** * The {@link HALLink}s for this Community diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html index 1fdb97f17b..68a84a88e5 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html @@ -4,7 +4,7 @@ {{object.name}} -[{{object.archivedItems}}] +[{{object.archivedItemsCount}}]
    {{object.shortDescription}}
    diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts b/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts index c1d9665bc3..b911bdd2eb 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts @@ -15,7 +15,7 @@ const mockCollectionWithArchivedItems: Collection = Object.assign(new Collection value: 'Test title' } ] - }, archivedItems: 1 + }, archivedItemsCount: 1 }); const mockCollectionWithoutArchivedItems: Collection = Object.assign(new Collection(), { @@ -26,7 +26,7 @@ const mockCollectionWithoutArchivedItems: Collection = Object.assign(new Collect value: 'Test title' } ] - }, archivedItems: 0 + }, archivedItemsCount: 0 }); @@ -38,7 +38,7 @@ const mockCollectionWithAbstract: Collection = Object.assign(new Collection(), { value: 'Short description' } ] - }, archivedItems: 1 + }, archivedItemsCount: 1 }); const mockCollectionWithoutAbstract: Collection = Object.assign(new Collection(), { @@ -49,7 +49,7 @@ const mockCollectionWithoutAbstract: Collection = Object.assign(new Collection() value: 'Test title' } ] - }, archivedItems: 1 + }, archivedItemsCount: 1 }); describe('CollectionListElementComponent', () => { From 96903d89dedfc6191fc71b5b1b81253783459d74 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Fri, 9 Jun 2023 19:24:16 +0200 Subject: [PATCH 190/425] [CST-5729] fix signposting proxy url --- server.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server.ts b/server.ts index 282b1ce29a..d64b80b4ab 100644 --- a/server.ts +++ b/server.ts @@ -182,8 +182,8 @@ export function app() { /** * Proxy the linksets */ - router.use('/links**', createProxyMiddleware({ - target: `${environment.rest.baseUrl}/signposting`, + router.use('/signposting**', createProxyMiddleware({ + target: `${environment.rest.baseUrl}`, pathRewrite: path => path.replace(environment.ui.nameSpace, '/'), changeOrigin: true })); From b8d282ebe4ba14765e2cb5d38817934e12f1bb98 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Sun, 11 Jun 2023 16:17:14 +0200 Subject: [PATCH 191/425] Fix proxy timeout error for browse by pages --- src/app/browse-by/browse-by-guard.spec.ts | 35 +++++++++++++++-- src/app/browse-by/browse-by-guard.ts | 48 ++++++++++++++--------- 2 files changed, 62 insertions(+), 21 deletions(-) diff --git a/src/app/browse-by/browse-by-guard.spec.ts b/src/app/browse-by/browse-by-guard.spec.ts index fc483d87e2..7f57c17ac1 100644 --- a/src/app/browse-by/browse-by-guard.spec.ts +++ b/src/app/browse-by/browse-by-guard.spec.ts @@ -1,10 +1,10 @@ import { first } from 'rxjs/operators'; import { BrowseByGuard } from './browse-by-guard'; import { of as observableOf } from 'rxjs'; -import { BrowseDefinitionDataService } from '../core/browse/browse-definition-data.service'; -import { createSuccessfulRemoteDataObject$ } from '../shared/remote-data.utils'; +import { createFailedRemoteDataObject$, createSuccessfulRemoteDataObject$ } from '../shared/remote-data.utils'; import { BrowseDefinition } from '../core/shared/browse-definition.model'; import { BrowseByDataType } from './browse-by-switcher/browse-by-decorator'; +import { RouterStub } from '../shared/testing/router.stub'; describe('BrowseByGuard', () => { describe('canActivate', () => { @@ -12,6 +12,7 @@ describe('BrowseByGuard', () => { let dsoService: any; let translateService: any; let browseDefinitionService: any; + let router: any; const name = 'An interesting DSO'; const title = 'Author'; @@ -34,7 +35,9 @@ describe('BrowseByGuard', () => { findById: () => createSuccessfulRemoteDataObject$(browseDefinition) }; - guard = new BrowseByGuard(dsoService, translateService, browseDefinitionService); + router = new RouterStub() as any; + + guard = new BrowseByGuard(dsoService, translateService, browseDefinitionService, router); }); it('should return true, and sets up the data correctly, with a scope and value', () => { @@ -64,6 +67,7 @@ describe('BrowseByGuard', () => { value: '"' + value + '"' }; expect(scopedRoute.data).toEqual(result); + expect(router.navigate).not.toHaveBeenCalled(); expect(canActivate).toEqual(true); } ); @@ -96,6 +100,7 @@ describe('BrowseByGuard', () => { value: '' }; expect(scopedNoValueRoute.data).toEqual(result); + expect(router.navigate).not.toHaveBeenCalled(); expect(canActivate).toEqual(true); } ); @@ -127,9 +132,33 @@ describe('BrowseByGuard', () => { value: '"' + value + '"' }; expect(route.data).toEqual(result); + expect(router.navigate).not.toHaveBeenCalled(); expect(canActivate).toEqual(true); } ); }); + + it('should return false, and sets up the data correctly, without a scope and with a value', () => { + jasmine.getEnv().allowRespy(true); + spyOn(browseDefinitionService, 'findById').and.returnValue(createFailedRemoteDataObject$()); + const scopedRoute = { + data: { + title: field, + }, + params: { + id, + }, + queryParams: { + scope, + value + } + }; + guard.canActivate(scopedRoute as any, undefined) + .pipe(first()) + .subscribe((canActivate) => { + expect(router.navigate).toHaveBeenCalled(); + expect(canActivate).toEqual(false); + }); + }); }); }); diff --git a/src/app/browse-by/browse-by-guard.ts b/src/app/browse-by/browse-by-guard.ts index e4582cb77a..ed6a627558 100644 --- a/src/app/browse-by/browse-by-guard.ts +++ b/src/app/browse-by/browse-by-guard.ts @@ -1,13 +1,15 @@ -import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router'; +import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router'; import { Injectable } from '@angular/core'; import { DSpaceObjectDataService } from '../core/data/dspace-object-data.service'; import { hasNoValue, hasValue } from '../shared/empty.util'; import { map, switchMap } from 'rxjs/operators'; -import { getFirstSucceededRemoteData, getFirstSucceededRemoteDataPayload } from '../core/shared/operators'; +import { getFirstCompletedRemoteData, getFirstSucceededRemoteData, } from '../core/shared/operators'; import { TranslateService } from '@ngx-translate/core'; import { Observable, of as observableOf } from 'rxjs'; import { BrowseDefinitionDataService } from '../core/browse/browse-definition-data.service'; import { BrowseDefinition } from '../core/shared/browse-definition.model'; +import { RemoteData } from '../core/data/remote-data'; +import { PAGE_NOT_FOUND_PATH } from '../app-routing-paths'; @Injectable() /** @@ -17,15 +19,20 @@ export class BrowseByGuard implements CanActivate { constructor(protected dsoService: DSpaceObjectDataService, protected translate: TranslateService, - protected browseDefinitionService: BrowseDefinitionDataService) { + protected browseDefinitionService: BrowseDefinitionDataService, + protected router: Router, + ) { } - canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { const title = route.data.title; const id = route.params.id || route.queryParams.id || route.data.id; - let browseDefinition$: Observable; + let browseDefinition$: Observable; if (hasNoValue(route.data.browseDefinition) && hasValue(id)) { - browseDefinition$ = this.browseDefinitionService.findById(id).pipe(getFirstSucceededRemoteDataPayload()); + browseDefinition$ = this.browseDefinitionService.findById(id).pipe( + getFirstCompletedRemoteData(), + map((browseDefinitionRD: RemoteData) => browseDefinitionRD.payload), + ); } else { browseDefinition$ = observableOf(route.data.browseDefinition); } @@ -33,19 +40,24 @@ export class BrowseByGuard implements CanActivate { const value = route.queryParams.value; const metadataTranslated = this.translate.instant('browse.metadata.' + id); return browseDefinition$.pipe( - switchMap((browseDefinition) => { - if (hasValue(scope)) { - const dsoAndMetadata$ = this.dsoService.findById(scope).pipe(getFirstSucceededRemoteData()); - return dsoAndMetadata$.pipe( - map((dsoRD) => { - const name = dsoRD.payload.name; - route.data = this.createData(title, id, browseDefinition, name, metadataTranslated, value, route); - return true; - }) - ); + switchMap((browseDefinition: BrowseDefinition | undefined) => { + if (hasValue(browseDefinition)) { + if (hasValue(scope)) { + const dsoAndMetadata$ = this.dsoService.findById(scope).pipe(getFirstSucceededRemoteData()); + return dsoAndMetadata$.pipe( + map((dsoRD) => { + const name = dsoRD.payload.name; + route.data = this.createData(title, id, browseDefinition, name, metadataTranslated, value, route); + return true; + }) + ); + } else { + route.data = this.createData(title, id, browseDefinition, '', metadataTranslated, value, route); + return observableOf(true); + } } else { - route.data = this.createData(title, id, browseDefinition, '', metadataTranslated, value, route); - return observableOf(true); + void this.router.navigate([PAGE_NOT_FOUND_PATH]); + return observableOf(false); } }) ); From 58a3ec397293b57b030f15ffc4d89bbc7ef3f89d Mon Sep 17 00:00:00 2001 From: enea4science <127771679+enea4science@users.noreply.github.com> Date: Mon, 12 Jun 2023 09:50:26 +0200 Subject: [PATCH 192/425] Update orcid-sync-settings.component.ts --- .../orcid-sync-settings/orcid-sync-settings.component.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts b/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts index 1aec416d62..0bcbc295ac 100644 --- a/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts +++ b/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts @@ -156,8 +156,7 @@ export class OrcidSyncSettingsComponent implements OnInit { } }), ).subscribe((remoteData: RemoteData) => { - // hasSucceeded is true if the response is success or successStale - if (remoteData.hasSucceeded) { + if (remoteData.isSuccess) { this.notificationsService.success(this.translateService.get(this.messagePrefix + '.synchronization-settings-update.success')); this.settingsUpdated.emit(); } else { From e85f9f2b255ccbd6169b6394d93efe692917dd95 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Mon, 12 Jun 2023 14:40:21 +0200 Subject: [PATCH 193/425] [CST-5729] fix issue with signposting endpoint url replace --- src/app/core/data/signposting-data.service.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/core/data/signposting-data.service.ts b/src/app/core/data/signposting-data.service.ts index d051ecf8db..34d3ffdab9 100644 --- a/src/app/core/data/signposting-data.service.ts +++ b/src/app/core/data/signposting-data.service.ts @@ -25,7 +25,8 @@ export class SignpostingDataService { * @param uuid */ getLinks(uuid: string): Observable { - const baseUrl = this.halService.getRootHref().replace('/api', ''); + const regex = /\/api$/gm; + const baseUrl = this.halService.getRootHref().replace(regex, ''); return this.restService.get(`${baseUrl}/signposting/links/${uuid}`).pipe( catchError((err) => { From 5d6edade22ff116c980465bc322ef4bf56772475 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Mon, 12 Jun 2023 15:22:33 +0200 Subject: [PATCH 194/425] [CST-5729] turn to use app config baseurl --- .../data/signposting-data.service.spec.ts | 26 +++++++++---------- src/app/core/data/signposting-data.service.ts | 9 +++---- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/app/core/data/signposting-data.service.spec.ts b/src/app/core/data/signposting-data.service.spec.ts index c76899221e..f34ce6538f 100644 --- a/src/app/core/data/signposting-data.service.spec.ts +++ b/src/app/core/data/signposting-data.service.spec.ts @@ -1,14 +1,16 @@ import { fakeAsync, TestBed, tick } from '@angular/core/testing'; + +import { of } from 'rxjs'; + import { SignpostingDataService } from './signposting-data.service'; import { DspaceRestService } from '../dspace-rest/dspace-rest.service'; -import { HALEndpointService } from '../shared/hal-endpoint.service'; -import { of } from 'rxjs'; import { SignpostingLink } from './signposting-links.model'; +import { APP_CONFIG } from '../../../config/app-config.interface'; describe('SignpostingDataService', () => { let service: SignpostingDataService; let restServiceSpy: jasmine.SpyObj; - let halServiceSpy: jasmine.SpyObj; + const mocklink = { href: 'http://test.org', rel: 'test', @@ -30,21 +32,25 @@ describe('SignpostingDataService', () => { statusCode: 500 }; + const environmentRest = { + rest: { + baseUrl: 'http://localhost:8080' + } + }; + beforeEach(() => { const restSpy = jasmine.createSpyObj('DspaceRestService', ['get', 'getWithHeaders']); - const halSpy = jasmine.createSpyObj('HALEndpointService', ['getRootHref']); TestBed.configureTestingModule({ providers: [ SignpostingDataService, - { provide: DspaceRestService, useValue: restSpy }, - { provide: HALEndpointService, useValue: halSpy } + { provide: APP_CONFIG, useValue: environmentRest }, + { provide: DspaceRestService, useValue: restSpy } ] }); service = TestBed.inject(SignpostingDataService); restServiceSpy = TestBed.inject(DspaceRestService) as jasmine.SpyObj; - halServiceSpy = TestBed.inject(HALEndpointService) as jasmine.SpyObj; }); it('should be created', () => { @@ -55,8 +61,6 @@ describe('SignpostingDataService', () => { const uuid = '123'; const baseUrl = 'http://localhost:8080'; - halServiceSpy.getRootHref.and.returnValue(`${baseUrl}/api`); - restServiceSpy.get.and.returnValue(of(mockResponse)); let result: SignpostingLink[]; @@ -70,7 +74,6 @@ describe('SignpostingDataService', () => { tick(); expect(result).toEqual(expectedResult); - expect(halServiceSpy.getRootHref).toHaveBeenCalled(); expect(restServiceSpy.get).toHaveBeenCalledWith(`${baseUrl}/signposting/links/${uuid}`); })); @@ -78,8 +81,6 @@ describe('SignpostingDataService', () => { const uuid = '123'; const baseUrl = 'http://localhost:8080'; - halServiceSpy.getRootHref.and.returnValue(`${baseUrl}/api`); - restServiceSpy.get.and.returnValue(of(mockErrResponse)); let result: any; @@ -91,7 +92,6 @@ describe('SignpostingDataService', () => { tick(); expect(result).toEqual([]); - expect(halServiceSpy.getRootHref).toHaveBeenCalled(); expect(restServiceSpy.get).toHaveBeenCalledWith(`${baseUrl}/signposting/links/${uuid}`); })); }); diff --git a/src/app/core/data/signposting-data.service.ts b/src/app/core/data/signposting-data.service.ts index 34d3ffdab9..638b04dfdd 100644 --- a/src/app/core/data/signposting-data.service.ts +++ b/src/app/core/data/signposting-data.service.ts @@ -1,12 +1,12 @@ -import { Injectable } from '@angular/core'; +import { Inject, Injectable } from '@angular/core'; import { catchError, map } from 'rxjs/operators'; import { Observable, of as observableOf } from 'rxjs'; import { DspaceRestService } from '../dspace-rest/dspace-rest.service'; -import { HALEndpointService } from '../shared/hal-endpoint.service'; import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; import { SignpostingLink } from './signposting-links.model'; +import { APP_CONFIG, AppConfig } from '../../../config/app-config.interface'; /** * Service responsible for handling requests related to the Signposting endpoint @@ -16,7 +16,7 @@ import { SignpostingLink } from './signposting-links.model'; }) export class SignpostingDataService { - constructor(private restService: DspaceRestService, protected halService: HALEndpointService) { + constructor(@Inject(APP_CONFIG) protected appConfig: AppConfig, private restService: DspaceRestService) { } /** @@ -25,8 +25,7 @@ export class SignpostingDataService { * @param uuid */ getLinks(uuid: string): Observable { - const regex = /\/api$/gm; - const baseUrl = this.halService.getRootHref().replace(regex, ''); + const baseUrl = `${this.appConfig.rest.baseUrl}`; return this.restService.get(`${baseUrl}/signposting/links/${uuid}`).pipe( catchError((err) => { From de0d7bf33ae0fb59c971f88da037f7e8d948af04 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Thu, 4 May 2023 15:01:23 -0500 Subject: [PATCH 195/425] Replace lorem ipsum with text donated by DSpaceDirect --- .../end-user-agreement-content.component.html | 132 +++++++++++++----- .../privacy-content.component.html | 128 ++++++++++++----- src/assets/i18n/en.json5 | 6 +- 3 files changed, 190 insertions(+), 76 deletions(-) diff --git a/src/app/info/end-user-agreement/end-user-agreement-content/end-user-agreement-content.component.html b/src/app/info/end-user-agreement/end-user-agreement-content/end-user-agreement-content.component.html index 1ee8712444..3ae0d0efbe 100644 --- a/src/app/info/end-user-agreement/end-user-agreement-content/end-user-agreement-content.component.html +++ b/src/app/info/end-user-agreement/end-user-agreement-content/end-user-agreement-content.component.html @@ -1,37 +1,95 @@ -

    {{ 'info.end-user-agreement.head' | translate }}

    -

    - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nunc sed velit dignissim sodales ut eu. In ante metus dictum at tempor. Diam phasellus vestibulum lorem sed risus. Sed cras ornare arcu dui vivamus. Sit amet consectetur adipiscing elit pellentesque. Id velit ut tortor pretium viverra suspendisse potenti. Sed euismod nisi porta lorem mollis aliquam ut. Justo laoreet sit amet cursus sit amet dictum sit. Ullamcorper morbi tincidunt ornare massa eget egestas. -

    -

    - In iaculis nunc sed augue lacus. Curabitur vitae nunc sed velit dignissim sodales ut eu sem. Tellus id interdum velit laoreet id donec ultrices tincidunt arcu. Quis vel eros donec ac odio tempor. Viverra accumsan in nisl nisi scelerisque eu ultrices vitae. Varius quam quisque id diam vel quam. Nisl tincidunt eget nullam non nisi est sit. Nunc aliquet bibendum enim facilisis. Aenean sed adipiscing diam donec adipiscing. Convallis tellus id interdum velit laoreet. Massa placerat duis ultricies lacus sed turpis tincidunt. Sed cras ornare arcu dui vivamus arcu. Egestas integer eget aliquet nibh praesent tristique. Sit amet purus gravida quis blandit turpis cursus in hac. Porta non pulvinar neque laoreet suspendisse. Quis risus sed vulputate odio ut. Dignissim enim sit amet venenatis urna cursus. -

    -

    - Interdum velit laoreet id donec ultrices tincidunt arcu non sodales. Massa sapien faucibus et molestie. Dictumst vestibulum rhoncus est pellentesque elit ullamcorper. Metus dictum at tempor commodo ullamcorper. Tincidunt lobortis feugiat vivamus at augue eget. Non diam phasellus vestibulum lorem sed risus ultricies. Neque aliquam vestibulum morbi blandit cursus risus at ultrices mi. Euismod lacinia at quis risus sed. Lorem mollis aliquam ut porttitor leo a diam. Ipsum dolor sit amet consectetur. Ante in nibh mauris cursus mattis molestie a iaculis at. Commodo ullamcorper a lacus vestibulum. Pellentesque elit eget gravida cum sociis. Sit amet commodo nulla facilisi nullam vehicula. Vehicula ipsum a arcu cursus vitae congue mauris rhoncus aenean. -

    -

    - Ac turpis egestas maecenas pharetra convallis. Lacus sed viverra tellus in. Nullam eget felis eget nunc lobortis mattis aliquam faucibus purus. Id aliquet risus feugiat in ante metus dictum at. Quis enim lobortis scelerisque fermentum dui faucibus. Eu volutpat odio facilisis mauris sit amet massa vitae tortor. Tellus elementum sagittis vitae et leo. Cras sed felis eget velit aliquet sagittis. Proin fermentum leo vel orci porta non pulvinar neque laoreet. Dui sapien eget mi proin sed libero enim. Ultrices mi tempus imperdiet nulla malesuada. Mattis molestie a iaculis at. Turpis massa sed elementum tempus egestas. -

    -

    - Dui faucibus in ornare quam viverra orci sagittis eu volutpat. Cras adipiscing enim eu turpis. Ac felis donec et odio pellentesque. Iaculis nunc sed augue lacus viverra vitae congue eu consequat. Posuere lorem ipsum dolor sit amet consectetur adipiscing elit duis. Elit eget gravida cum sociis natoque penatibus. Id faucibus nisl tincidunt eget nullam non. Sagittis aliquam malesuada bibendum arcu vitae. Fermentum leo vel orci porta. Aliquam ultrices sagittis orci a scelerisque purus semper. Diam maecenas sed enim ut sem viverra aliquet eget sit. Et ultrices neque ornare aenean euismod. Eu mi bibendum neque egestas congue quisque egestas diam. Eget lorem dolor sed viverra. Ut lectus arcu bibendum at. Rutrum tellus pellentesque eu tincidunt tortor. Vitae congue eu consequat ac. Elit ullamcorper dignissim cras tincidunt. Sit amet volutpat consequat mauris nunc congue nisi. -

    -

    - Cursus in hac habitasse platea dictumst quisque sagittis purus. Placerat duis ultricies lacus sed turpis tincidunt. In egestas erat imperdiet sed euismod nisi porta lorem mollis. Non nisi est sit amet facilisis magna. In massa tempor nec feugiat nisl pretium fusce. Pulvinar neque laoreet suspendisse interdum consectetur. Ullamcorper morbi tincidunt ornare massa eget egestas purus viverra accumsan. Fringilla urna porttitor rhoncus dolor purus non enim. Mauris nunc congue nisi vitae suscipit. Commodo elit at imperdiet dui accumsan sit amet nulla. Tempor id eu nisl nunc mi ipsum faucibus. Porta non pulvinar neque laoreet suspendisse. Nec nam aliquam sem et tortor consequat. -

    -

    - Eget nunc lobortis mattis aliquam faucibus purus. Odio tempor orci dapibus ultrices. Sed nisi lacus sed viverra tellus. Elit ullamcorper dignissim cras tincidunt. Porttitor rhoncus dolor purus non enim praesent elementum facilisis. Viverra orci sagittis eu volutpat odio. Pharetra massa massa ultricies mi quis. Lectus vestibulum mattis ullamcorper velit sed ullamcorper. Pulvinar neque laoreet suspendisse interdum consectetur. Vitae auctor eu augue ut. Arcu dictum varius duis at consectetur lorem donec. Massa sed elementum tempus egestas sed sed. Risus viverra adipiscing at in tellus integer. Vulputate enim nulla aliquet porttitor lacus luctus accumsan. Pharetra massa massa ultricies mi. Elementum eu facilisis sed odio morbi quis commodo odio. Tincidunt lobortis feugiat vivamus at. Felis donec et odio pellentesque diam volutpat commodo sed. Risus feugiat in ante metus dictum at tempor commodo ullamcorper. Fringilla phasellus faucibus scelerisque eleifend donec pretium vulputate. -

    -

    - Lectus proin nibh nisl condimentum id venenatis a condimentum. Id consectetur purus ut faucibus pulvinar elementum integer enim. Non pulvinar neque laoreet suspendisse interdum consectetur. Est pellentesque elit ullamcorper dignissim cras tincidunt lobortis feugiat vivamus. Suscipit tellus mauris a diam maecenas sed enim ut sem. Dolor purus non enim praesent elementum facilisis. Non enim praesent elementum facilisis leo vel. Ultricies leo integer malesuada nunc vel risus commodo viverra maecenas. Nulla porttitor massa id neque aliquam vestibulum. Erat velit scelerisque in dictum non consectetur. Amet cursus sit amet dictum. Nec tincidunt praesent semper feugiat nibh. Rutrum quisque non tellus orci ac auctor. Sagittis aliquam malesuada bibendum arcu vitae elementum. Massa tincidunt dui ut ornare lectus sit amet est. Aliquet porttitor lacus luctus accumsan tortor posuere ac. Quis hendrerit dolor magna eget est lorem ipsum dolor sit. Lectus mauris ultrices eros in. -

    -

    - Massa massa ultricies mi quis hendrerit dolor magna. Est ullamcorper eget nulla facilisi etiam dignissim diam. Vulputate sapien nec sagittis aliquam malesuada. Nisi porta lorem mollis aliquam ut porttitor leo a diam. Tempus quam pellentesque nec nam. Faucibus vitae aliquet nec ullamcorper sit amet risus nullam eget. Gravida arcu ac tortor dignissim convallis aenean et tortor. A scelerisque purus semper eget duis at tellus at. Viverra ipsum nunc aliquet bibendum enim. Semper feugiat nibh sed pulvinar proin gravida hendrerit. Et ultrices neque ornare aenean euismod. Consequat semper viverra nam libero justo laoreet. Nunc mattis enim ut tellus elementum sagittis. Consectetur lorem donec massa sapien faucibus et. Vel risus commodo viverra maecenas accumsan lacus vel facilisis. Diam sollicitudin tempor id eu nisl nunc. Dolor magna eget est lorem ipsum dolor. Adipiscing elit pellentesque habitant morbi tristique. -

    -

    - Nec sagittis aliquam malesuada bibendum arcu vitae elementum curabitur. Egestas fringilla phasellus faucibus scelerisque eleifend donec pretium vulputate sapien. Porttitor leo a diam sollicitudin tempor. Pellentesque dignissim enim sit amet venenatis urna cursus eget nunc. Posuere sollicitudin aliquam ultrices sagittis orci a scelerisque. Vehicula ipsum a arcu cursus vitae congue mauris rhoncus. Leo urna molestie at elementum. Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Libero id faucibus nisl tincidunt eget nullam. Tellus elementum sagittis vitae et leo duis ut diam. Sodales ut etiam sit amet nisl purus in mollis. Ipsum faucibus vitae aliquet nec ullamcorper sit amet risus. Lacus laoreet non curabitur gravida arcu ac tortor dignissim convallis. Aliquam malesuada bibendum arcu vitae elementum. Leo vel orci porta non pulvinar neque laoreet. Ipsum suspendisse ultrices gravida dictum fusce. -

    -

    - Egestas erat imperdiet sed euismod nisi porta lorem. Venenatis a condimentum vitae sapien pellentesque habitant. Sit amet luctus venenatis lectus magna fringilla urna porttitor. Orci sagittis eu volutpat odio facilisis mauris sit amet massa. Ut enim blandit volutpat maecenas volutpat blandit aliquam. Libero volutpat sed cras ornare. Molestie ac feugiat sed lectus vestibulum mattis ullamcorper velit sed. Diam quis enim lobortis scelerisque fermentum dui. Pellentesque habitant morbi tristique senectus et netus. Auctor urna nunc id cursus metus aliquam eleifend. Elit scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique. Sed risus ultricies tristique nulla aliquet enim tortor. Tincidunt arcu non sodales neque sodales ut. Sed lectus vestibulum mattis ullamcorper velit sed ullamcorper morbi tincidunt. -

    -

    - Pulvinar etiam non quam lacus suspendisse faucibus. Eu mi bibendum neque egestas congue. Egestas purus viverra accumsan in nisl nisi scelerisque eu. Vulputate enim nulla aliquet porttitor lacus luctus accumsan. Eu non diam phasellus vestibulum. Semper feugiat nibh sed pulvinar. Ante in nibh mauris cursus mattis molestie a. Maecenas accumsan lacus vel facilisis volutpat. Non quam lacus suspendisse faucibus. Quis commodo odio aenean sed adipiscing. Vel elit scelerisque mauris pellentesque pulvinar pellentesque habitant morbi. Sed cras ornare arcu dui vivamus arcu felis. Tortor vitae purus faucibus ornare suspendisse sed. Morbi tincidunt ornare massa eget egestas purus viverra. Nibh cras pulvinar mattis nunc. Luctus venenatis lectus magna fringilla urna porttitor. Enim blandit volutpat maecenas volutpat blandit aliquam etiam erat. Malesuada pellentesque elit eget gravida cum sociis natoque penatibus et. Felis eget nunc lobortis mattis aliquam faucibus purus in. Vivamus arcu felis bibendum ut. -

    +

    {{ 'info.end-user-agreement.head' | translate }}

    +

    Last updated May 4, 2023

    + +

    Agreement to terms

    +

    These Terms of Use constitute a legally binding agreement made between you, whether personally or on behalf of an entity ("you") and {{ 'repository.title' | translate }} ("Company", "we", "us", or "our"), concerning your access to and use of this website as well as any other media form, media channel, mobile website or mobile application related, linked, or otherwise connected thereto (collectively, the "Site"). You agree that by accessing the Site, you have read, understood, and agreed to be bound by all of these Terms of Use and any future amendments thereof.

    +

    Supplemental terms and conditions or documents that may be posted on the Site from time to time are hereby expressly incorporated herein by reference. We reserve the right, in our sole discretion, to make changes or modifications to these Terms of Use at any time and for any reason. We will alert you about any changes by updating the "Last updated" date of these Terms of Use, and you waive any right to receive specific notice of each such change. Please ensure that you check the applicable Terms every time you use our Site so that you understand which Terms apply. You will be subject to, and will be deemed to have been made aware of and to have accepted, the changes in any revised Terms of Use by your continued use of the Site after the date such revised Terms of Use are posted.

    +

    The information provided on the Site is not intended for distribution to or use by any person or entity in any jurisdiction or country where such distribution or use would be contrary to law or regulation or which would subject us to any registration requirement within such jurisdiction or country. Accordingly, those persons who choose to access the Site from other locations do so on their own initiative and are solely responsible for compliance with local laws, if and to the extent local laws are applicable.

    + +

    Intellectual property rights

    +

    Unless otherwise indicated, the Site is our proprietary property and all source code, databases, functionality, software, website designs, audio, video, text, photographs, and graphics on the Site (collectively, the "Content") and the trademarks, service marks, and logos contained therein (the "Marks") are owned or controlled by us or licensed to us, and are protected by copyright and trademark laws and various other intellectual property rights and unfair competition laws of {{ 'info.end-user-agreement.hosting-country' | translate }}, international copyright laws, and international conventions. The Content and the Marks are provided on the Site "AS IS" for your information and personal use only. Except as expressly provided in these Terms of Use, no part of the Site and no Content[a] or Marks may be copied, reproduced, aggregated, republished, uploaded, posted, publicly displayed, encoded, translated, transmitted, distributed, sold, licensed, or otherwise exploited for any commercial purpose whatsoever, without our express prior written permission.

    +

    Provided that you are eligible to use the Site, you are granted a limited license to access and use the Site and to download or print a copy of any portion of the Content to which you have properly gained access solely for your personal, non-commercial use. We reserve all rights not expressly granted to you in and to the Site, the Content and the Marks.

    + +

    User representations

    +

    By using the Site, you represent and warrant that: (1) all registration information you submit will be true, accurate, current, and complete; (2) you will maintain the accuracy of such information and promptly update such registration information as necessary; (3) you have the legal capacity and you agree to comply with these Terms of Use; (4) you will not use the Site for any illegal or unauthorized purpose; and (5) your use of the Site will not violate any applicable law or regulation.

    +

    If you provide any information that is untrue, inaccurate, not current, or incomplete, we have the right to suspend or terminate your account and refuse any and all current or future use of the Site (or any portion thereof).

    + +

    User registration

    +

    You may be required to register with the Site. You agree to keep your password confidential and will be responsible for all use of your account and password. We reserve the right to remove, reclaim, or change a username you select if we determine, in our sole discretion, that such username is inappropriate, obscene, or otherwise objectionable.

    + +

    Prohibited activities

    +

    You may not access or use the Site for any purpose other than that for which we make the Site available. The Site may not be used in connection with any commercial endeavors except those that are specifically endorsed or approved by us.

    +

    As a user of the Site, you agree not to:

    +
      +
    • Systematically retrieve data or other content from the Site to create or compile, directly or indirectly, a collection, compilation, database, or directory without written permission from us.
    • +
    • Trick, defraud, or mislead us and other users, especially in any attempt to learn sensitive account information such as user passwords.
    • +
    • Circumvent, disable, or otherwise interfere with security-related features of the Site, including features that prevent or restrict the use or copying of any Content or enforce limitations on the use of the Site and/or the Content contained therein.
    • +
    • Disparage, tarnish, or otherwise harm, in our opinion, us and/or the Site.
    • +
    • Use any information obtained from the Site in order to harass, abuse, or harm another person.
    • +
    • Make improper use of our support services or submit false reports of abuse or misconduct.
    • +
    • Use the Site in a manner inconsistent with any applicable laws or regulations.
    • +
    • Engage in unauthorized framing of or linking to the Site.
    • +
    • Upload or transmit (or attempt to upload or to transmit) viruses, Trojan horses, or other material, including excessive use of capital letters and spamming (continuous posting of repetitive text), that interferes with any party's uninterrupted use and enjoyment of the Site or modifies, impairs, disrupts, alters, or interferes with the use, features, functions, operation, or maintenance of the Site.
    • +
    • Delete the copyright or other proprietary rights notice from any Content.
    • +
    • Attempt to impersonate another user or person or use the username and password of another user.
    • +
    • Upload or transmit (or attempt to upload or to transmit) any material that acts as a passive or active information collection or transmission mechanism, including without limitation, clear graphics interchange formats ("gifs"), 1x1 pixels, web bugs, cookies, or other similar devices (sometimes referred to as "spyware" or "passive collection mechanisms" or "pcms").
    • +
    • Interfere with, disrupt, or create an undue burden on the Site or the networks or services connected to the Site.
    • +
    • Harass, annoy, intimidate, or threaten any of our employees or agents engaged in providing any portion of the Site to you.
    • +
    • Attempt to bypass any measures of the Site designed to prevent or restrict access to the Site, or any portion of the Site.
    • +
    • Make any unauthorized use of the Site, including collecting usernames and/or email addresses of users by electronic or other means for the purpose of sending unsolicited email or other forms of electronic communication, or creating user accounts by automated means or under false pretenses.
    • +
    • Use the Site as part of any effort to compete with us or otherwise use the Site and/or the Content for any revenue-generating endeavor or commercial enterprise.
    • +
    + +

    User generated contributions

    +

    The Site may provide you with the opportunity to create, submit, post, display, transmit, perform, publish, distribute, or broadcast content and materials to us or on the Site, including but not limited to text, writings, video, audio, photographs, graphics, comments, suggestions, or personal information or other material (collectively, "Contributions"). Contributions may be viewable by other users of the Site and through third-party websites. As such, any Contributions you transmit may be treated as non-confidential and non-proprietary. When you create or make available any Contributions, you thereby represent and warrant that:

    +
      +
    • The creation, distribution, transmission, public display, or performance, and the accessing, downloading, or copying of your Contributions do not and will not infringe the proprietary rights, including but not limited to the copyright, patent, trademark, trade secret, or moral rights of any third party.
    • +
    • You are the creator and owner of or have the necessary licenses, rights, consents, releases, and permissions to use and to authorize us, the Site, and other users of the Site to use your Contributions in any manner contemplated by the Site and these Terms of Use.
    • +
    • You have the written consent, release, and/or permission of each and every identifiable individual person in your Contributions to use the name or likeness of each and every such identifiable individual person to enable inclusion and use of your Contributions in any manner contemplated by the Site and these Terms of Use.
    • +
    • Your Contributions are not false, inaccurate, or misleading.
    • +
    • Your Contributions are not unsolicited or unauthorized advertising, promotional materials, pyramid schemes, chain letters, spam, mass mailings, or other forms of solicitation.
    • +
    • Your Contributions are not obscene, lewd, lascivious, filthy, violent, harassing, libelous, slanderous, or otherwise objectionable (as determined by us).
    • +
    • Your Contributions do not ridicule, mock, disparage, intimidate, or abuse anyone.
    • +
    • Your Contributions are not used to harass or threaten (in the legal sense of those terms) any other person, do not create and are not used to promote violence against a specific person or class of people.
    • +
    • Your Contributions do not violate any applicable law, regulation, or rule.
    • +
    • Your Contributions do not violate the privacy or publicity rights of any third party.
    • +
    • Your Contributions do not violate any applicable law concerning child pornography, or otherwise intended to protect the health or well-being of minors.
    • +
    • Your Contributions do not include any offensive comments that are connected to race, national origin, gender, sexual preference, colour, religion, creed or physical handicap.
    • +
    • Your Contributions do not otherwise violate, or link to material that violates, any provision of these Terms of Use, or any applicable law or regulation.
    • +
    +

    Any use of the Site in violation of the foregoing violates these Terms of Use and may result in, among other things, termination or suspension of your rights to use the Site.

    + +

    Site management

    +

    We reserve the right, but not the obligation, to: (1) monitor the Site for violations of these Terms of Use; (2) take appropriate legal action against anyone who, in our sole discretion, violates the law or these Terms of Use, including without limitation, reporting such user to law enforcement authorities; (3) in our sole discretion and without limitation, refuse, restrict access to, limit the availability of, or disable (to the extent technologically feasible) any of your Contributions or any portion thereof; (4) in our sole discretion and without limitation, notice, or liability, to remove from the Site or otherwise disable all files and content that are excessive in size or are in any way burdensome to our systems; and (5) otherwise manage the Site in a manner designed to protect our rights and property and to facilitate the proper functioning of the Site.

    + +

    Privacy policy

    +

    We care about data privacy and security. Please review our Privacy Policy. By using the Site, you agree to be bound by our Privacy Policy, which is incorporated into these Terms of Use.

    +

    Please be advised the Site is hosted in {{ 'info.end-user-agreement.hosting-country' | translate }}. If you access the Site from any other region of the world with laws or other requirements governing personal data collection, use, or disclosure that differ from applicable laws in {{ 'info.end-user-agreement.hosting-country' | translate }}, then through your continued use of the Site, you are transferring your data to {{ 'info.end-user-agreement.hosting-country' | translate }}, and you agree to have your data transferred to and processed in {{ 'info.end-user-agreement.hosting-country' | translate }}.

    + +

    Term and termination

    +

    These Terms of Use shall remain in full force and effect while you use the Site. WITHOUT LIMITING ANY OTHER PROVISION OF THESE TERMS OF USE, WE RESERVE THE RIGHT TO, IN OUR SOLE DISCRETION AND WITHOUT NOTICE OR LIABILITY, DENY ACCESS TO AND USE OF THE SITE (INCLUDING BLOCKING CERTAIN IP ADDRESSES), TO ANY PERSON FOR ANY REASON OR FOR NO REASON, INCLUDING WITHOUT LIMITATION FOR BREACH OF ANY REPRESENTATION, WARRANTY, OR COVENANT CONTAINED IN THESE TERMS OF USE OR OF ANY APPLICABLE LAW OR REGULATION. WE MAY TERMINATE YOUR USE OR PARTICIPATION IN THE SITE OR DELETE YOUR ACCOUNT AND ANY CONTENT OR INFORMATION THAT YOU POSTED AT ANY TIME, WITHOUT WARNING, IN OUR SOLE DISCRETION.

    +

    If we terminate or suspend your account for any reason, you are prohibited from registering and creating a new account under your name, a fake or borrowed name, or the name of any third party, even if you may be acting on behalf of the third party. In addition to terminating or suspending your account, we reserve the right to take appropriate legal action, including without limitation pursuing civil, criminal, and injunctive redress.

    + +

    Modifications and interruptions

    +

    We reserve the right to change, modify, or remove the contents of the Site at any time or for any reason at our sole discretion without notice. However, we have no obligation to update any information on our Site. We also reserve the right to modify or discontinue all or part of the Site without notice at any time. We will not be liable to you or any third party for any modification, change, suspension, or discontinuance of the Site.

    +

    We cannot guarantee the Site will be available at all times. We may experience hardware, software, or other problems or need to perform maintenance related to the Site, resulting in interruptions, delays, or errors. We reserve the right to change, revise, update, suspend, discontinue, or otherwise modify the Site at any time or for any reason without notice to you. You agree that we have no liability whatsoever for any loss, damage, or inconvenience caused by your inability to access or use the Site during any downtime or discontinuance of the Site. Nothing in these Terms of Use will be construed to obligate us to maintain and support the Site or to supply any corrections, updates, or releases in connection therewith.

    + +

    Corrections

    +

    There may be information on the Site that contains typographical errors, inaccuracies, or omissions. We reserve the right to correct any errors, inaccuracies, or omissions and to change or update the information on the Site at any time, without prior notice.

    + +

    Disclaimer

    +

    THE SITE IS PROVIDED ON AN AS-IS AND AS-AVAILABLE BASIS. YOU AGREE THAT YOUR USE OF THE SITE AND OUR SERVICES WILL BE AT YOUR SOLE RISK. TO THE FULLEST EXTENT PERMITTED BY LAW, WE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, IN CONNECTION WITH THE SITE AND YOUR USE THEREOF, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. WE MAKE NO WARRANTIES OR REPRESENTATIONS ABOUT THE ACCURACY OR COMPLETENESS OF THE SITE'S CONTENT OR THE CONTENT OF ANY WEBSITES LINKED TO THE SITE AND WE WILL ASSUME NO LIABILITY OR RESPONSIBILITY FOR ANY (1) ERRORS, MISTAKES, OR INACCURACIES OF CONTENT AND MATERIALS, (2) PERSONAL INJURY OR PROPERTY DAMAGE, OF ANY NATURE WHATSOEVER, RESULTING FROM YOUR ACCESS TO AND USE OF THE SITE, (3) ANY UNAUTHORIZED ACCESS TO OR USE OF OUR SECURE SERVERS AND/OR ANY AND ALL PERSONAL INFORMATION AND/OR FINANCIAL INFORMATION STORED THEREIN, (4) ANY INTERRUPTION OR CESSATION OF TRANSMISSION TO OR FROM THE SITE, (5) ANY BUGS, VIRUSES, TROJAN HORSES, OR THE LIKE WHICH MAY BE TRANSMITTED TO OR THROUGH THE SITE BY ANY THIRD PARTY, AND/OR (6) ANY ERRORS OR OMISSIONS IN ANY CONTENT AND MATERIALS OR FOR ANY LOSS OR DAMAGE OF ANY KIND INCURRED AS A RESULT OF THE USE OF ANY CONTENT POSTED, TRANSMITTED, OR OTHERWISE MADE AVAILABLE VIA THE SITE. WE DO NOT WARRANT, ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY FOR ANY PRODUCT OR SERVICE ADVERTISED OR OFFERED BY A THIRD PARTY THROUGH THE SITE, ANY HYPERLINKED WEBSITE, OR ANY WEBSITE OR MOBILE APPLICATION FEATURED IN ANY BANNER OR OTHER ADVERTISING, AND WE WILL NOT BE A PARTY TO OR IN ANY WAY BE RESPONSIBLE FOR MONITORING ANY TRANSACTION BETWEEN YOU AND ANY THIRD-PARTY PROVIDERS OF PRODUCTS OR SERVICES. AS WITH THE PURCHASE OF A PRODUCT OR SERVICE THROUGH ANY MEDIUM OR IN ANY ENVIRONMENT, YOU SHOULD USE YOUR BEST JUDGMENT AND EXERCISE CAUTION WHERE APPROPRIATE.

    + +

    Limitations of liability

    +

    IN NO EVENT WILL WE OR OUR DIRECTORS, EMPLOYEES, OR AGENTS BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, EXEMPLARY, INCIDENTAL, SPECIAL, OR PUNITIVE DAMAGES, INCLUDING LOST PROFIT, LOST REVENUE, LOSS OF DATA, OR OTHER DAMAGES ARISING FROM YOUR USE OF THE SITE, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

    + +

    Indemnification

    +

    You agree to defend, indemnify, and hold us harmless, including our subsidiaries, affiliates, and all of our respective officers, agents, partners, and employees, from and against any loss, damage, liability, claim, or demand, including reasonable attorneys' fees and expenses, made by any third party due to or arising out of: (1) your Contributions; (2) use of the Site; (3) breach of these Terms of Use; (4) any breach of your representations and warranties set forth in these Terms of Use; (5) your violation of the rights of a third party, including but not limited to intellectual property rights; or (6) any overt harmful act toward any other user of the Site with whom you connected via the Site. Notwithstanding the foregoing, we reserve the right, at your expense, to assume the exclusive defense and control of any matter for which you are required to indemnify us, and you agree to cooperate, at your expense, with our defense of such claims. We will use reasonable efforts to notify you of any such claim, action, or proceeding which is subject to this indemnification upon becoming aware of it.

    + +

    User Data

    +

    We will maintain certain data that you transmit to the Site for the purpose of managing the performance of the Site, as well as data relating to your use of the Site. Although we perform regular routine backups of data, you are solely responsible for all data that you transmit or that relates to any activity you have undertaken using the Site. You agree that we shall have no liability to you for any loss or corruption of any such data, and you hereby waive any right of action against us arising from any such loss or corruption of such data.

    + +

    Miscellaneous

    +

    These Terms of Use and any policies or operating rules posted by us on the Site or in respect to the Site constitute the entire agreement and understanding between you and us. Our failure to exercise or enforce any right or provision of these Terms of Use shall not operate as a waiver of such right or provision. These Terms of Use operate to the fullest extent permissible by law. We may assign any or all of our rights and obligations to others at any time. We shall not be responsible or liable for any loss, damage, delay, or failure to act caused by any cause beyond our reasonable control. If any provision or part of a provision of these Terms of Use is determined to be unlawful, void, or unenforceable, that provision or part of the provision is deemed severable from these Terms of Use and does not affect the validity and enforceability of any remaining provisions. There is no joint venture, partnership, employment or agency relationship created between you and us as a result of these Terms of Use or use of the Site. You agree that these Terms of Use will not be construed against us by virtue of having drafted them. You hereby waive any and all defenses you may have based on the electronic form of these Terms of Use and the lack of signing by the parties hereto to execute these Terms of Use.

    + +

    [a] The DSpace software used to run this site is open source. Options for reuse and reproduction of the DSpace software is governed by its open source license: https://github.com/DSpace/DSpace/blob/main/LICENSE

    \ No newline at end of file diff --git a/src/app/info/privacy/privacy-content/privacy-content.component.html b/src/app/info/privacy/privacy-content/privacy-content.component.html index a5bbb3fe10..33504b1522 100644 --- a/src/app/info/privacy/privacy-content/privacy-content.component.html +++ b/src/app/info/privacy/privacy-content/privacy-content.component.html @@ -1,37 +1,91 @@ -

    {{ 'info.privacy.head' | translate }}

    -

    - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nunc sed velit dignissim sodales ut eu. In ante metus dictum at tempor. Diam phasellus vestibulum lorem sed risus. Sed cras ornare arcu dui vivamus. Sit amet consectetur adipiscing elit pellentesque. Id velit ut tortor pretium viverra suspendisse potenti. Sed euismod nisi porta lorem mollis aliquam ut. Justo laoreet sit amet cursus sit amet dictum sit. Ullamcorper morbi tincidunt ornare massa eget egestas. -

    -

    - In iaculis nunc sed augue lacus. Curabitur vitae nunc sed velit dignissim sodales ut eu sem. Tellus id interdum velit laoreet id donec ultrices tincidunt arcu. Quis vel eros donec ac odio tempor. Viverra accumsan in nisl nisi scelerisque eu ultrices vitae. Varius quam quisque id diam vel quam. Nisl tincidunt eget nullam non nisi est sit. Nunc aliquet bibendum enim facilisis. Aenean sed adipiscing diam donec adipiscing. Convallis tellus id interdum velit laoreet. Massa placerat duis ultricies lacus sed turpis tincidunt. Sed cras ornare arcu dui vivamus arcu. Egestas integer eget aliquet nibh praesent tristique. Sit amet purus gravida quis blandit turpis cursus in hac. Porta non pulvinar neque laoreet suspendisse. Quis risus sed vulputate odio ut. Dignissim enim sit amet venenatis urna cursus. -

    -

    - Interdum velit laoreet id donec ultrices tincidunt arcu non sodales. Massa sapien faucibus et molestie. Dictumst vestibulum rhoncus est pellentesque elit ullamcorper. Metus dictum at tempor commodo ullamcorper. Tincidunt lobortis feugiat vivamus at augue eget. Non diam phasellus vestibulum lorem sed risus ultricies. Neque aliquam vestibulum morbi blandit cursus risus at ultrices mi. Euismod lacinia at quis risus sed. Lorem mollis aliquam ut porttitor leo a diam. Ipsum dolor sit amet consectetur. Ante in nibh mauris cursus mattis molestie a iaculis at. Commodo ullamcorper a lacus vestibulum. Pellentesque elit eget gravida cum sociis. Sit amet commodo nulla facilisi nullam vehicula. Vehicula ipsum a arcu cursus vitae congue mauris rhoncus aenean. -

    -

    - Ac turpis egestas maecenas pharetra convallis. Lacus sed viverra tellus in. Nullam eget felis eget nunc lobortis mattis aliquam faucibus purus. Id aliquet risus feugiat in ante metus dictum at. Quis enim lobortis scelerisque fermentum dui faucibus. Eu volutpat odio facilisis mauris sit amet massa vitae tortor. Tellus elementum sagittis vitae et leo. Cras sed felis eget velit aliquet sagittis. Proin fermentum leo vel orci porta non pulvinar neque laoreet. Dui sapien eget mi proin sed libero enim. Ultrices mi tempus imperdiet nulla malesuada. Mattis molestie a iaculis at. Turpis massa sed elementum tempus egestas. -

    -

    - Dui faucibus in ornare quam viverra orci sagittis eu volutpat. Cras adipiscing enim eu turpis. Ac felis donec et odio pellentesque. Iaculis nunc sed augue lacus viverra vitae congue eu consequat. Posuere lorem ipsum dolor sit amet consectetur adipiscing elit duis. Elit eget gravida cum sociis natoque penatibus. Id faucibus nisl tincidunt eget nullam non. Sagittis aliquam malesuada bibendum arcu vitae. Fermentum leo vel orci porta. Aliquam ultrices sagittis orci a scelerisque purus semper. Diam maecenas sed enim ut sem viverra aliquet eget sit. Et ultrices neque ornare aenean euismod. Eu mi bibendum neque egestas congue quisque egestas diam. Eget lorem dolor sed viverra. Ut lectus arcu bibendum at. Rutrum tellus pellentesque eu tincidunt tortor. Vitae congue eu consequat ac. Elit ullamcorper dignissim cras tincidunt. Sit amet volutpat consequat mauris nunc congue nisi. -

    -

    - Cursus in hac habitasse platea dictumst quisque sagittis purus. Placerat duis ultricies lacus sed turpis tincidunt. In egestas erat imperdiet sed euismod nisi porta lorem mollis. Non nisi est sit amet facilisis magna. In massa tempor nec feugiat nisl pretium fusce. Pulvinar neque laoreet suspendisse interdum consectetur. Ullamcorper morbi tincidunt ornare massa eget egestas purus viverra accumsan. Fringilla urna porttitor rhoncus dolor purus non enim. Mauris nunc congue nisi vitae suscipit. Commodo elit at imperdiet dui accumsan sit amet nulla. Tempor id eu nisl nunc mi ipsum faucibus. Porta non pulvinar neque laoreet suspendisse. Nec nam aliquam sem et tortor consequat. -

    -

    - Eget nunc lobortis mattis aliquam faucibus purus. Odio tempor orci dapibus ultrices. Sed nisi lacus sed viverra tellus. Elit ullamcorper dignissim cras tincidunt. Porttitor rhoncus dolor purus non enim praesent elementum facilisis. Viverra orci sagittis eu volutpat odio. Pharetra massa massa ultricies mi quis. Lectus vestibulum mattis ullamcorper velit sed ullamcorper. Pulvinar neque laoreet suspendisse interdum consectetur. Vitae auctor eu augue ut. Arcu dictum varius duis at consectetur lorem donec. Massa sed elementum tempus egestas sed sed. Risus viverra adipiscing at in tellus integer. Vulputate enim nulla aliquet porttitor lacus luctus accumsan. Pharetra massa massa ultricies mi. Elementum eu facilisis sed odio morbi quis commodo odio. Tincidunt lobortis feugiat vivamus at. Felis donec et odio pellentesque diam volutpat commodo sed. Risus feugiat in ante metus dictum at tempor commodo ullamcorper. Fringilla phasellus faucibus scelerisque eleifend donec pretium vulputate. -

    -

    - Lectus proin nibh nisl condimentum id venenatis a condimentum. Id consectetur purus ut faucibus pulvinar elementum integer enim. Non pulvinar neque laoreet suspendisse interdum consectetur. Est pellentesque elit ullamcorper dignissim cras tincidunt lobortis feugiat vivamus. Suscipit tellus mauris a diam maecenas sed enim ut sem. Dolor purus non enim praesent elementum facilisis. Non enim praesent elementum facilisis leo vel. Ultricies leo integer malesuada nunc vel risus commodo viverra maecenas. Nulla porttitor massa id neque aliquam vestibulum. Erat velit scelerisque in dictum non consectetur. Amet cursus sit amet dictum. Nec tincidunt praesent semper feugiat nibh. Rutrum quisque non tellus orci ac auctor. Sagittis aliquam malesuada bibendum arcu vitae elementum. Massa tincidunt dui ut ornare lectus sit amet est. Aliquet porttitor lacus luctus accumsan tortor posuere ac. Quis hendrerit dolor magna eget est lorem ipsum dolor sit. Lectus mauris ultrices eros in. -

    -

    - Massa massa ultricies mi quis hendrerit dolor magna. Est ullamcorper eget nulla facilisi etiam dignissim diam. Vulputate sapien nec sagittis aliquam malesuada. Nisi porta lorem mollis aliquam ut porttitor leo a diam. Tempus quam pellentesque nec nam. Faucibus vitae aliquet nec ullamcorper sit amet risus nullam eget. Gravida arcu ac tortor dignissim convallis aenean et tortor. A scelerisque purus semper eget duis at tellus at. Viverra ipsum nunc aliquet bibendum enim. Semper feugiat nibh sed pulvinar proin gravida hendrerit. Et ultrices neque ornare aenean euismod. Consequat semper viverra nam libero justo laoreet. Nunc mattis enim ut tellus elementum sagittis. Consectetur lorem donec massa sapien faucibus et. Vel risus commodo viverra maecenas accumsan lacus vel facilisis. Diam sollicitudin tempor id eu nisl nunc. Dolor magna eget est lorem ipsum dolor. Adipiscing elit pellentesque habitant morbi tristique. -

    -

    - Nec sagittis aliquam malesuada bibendum arcu vitae elementum curabitur. Egestas fringilla phasellus faucibus scelerisque eleifend donec pretium vulputate sapien. Porttitor leo a diam sollicitudin tempor. Pellentesque dignissim enim sit amet venenatis urna cursus eget nunc. Posuere sollicitudin aliquam ultrices sagittis orci a scelerisque. Vehicula ipsum a arcu cursus vitae congue mauris rhoncus. Leo urna molestie at elementum. Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Libero id faucibus nisl tincidunt eget nullam. Tellus elementum sagittis vitae et leo duis ut diam. Sodales ut etiam sit amet nisl purus in mollis. Ipsum faucibus vitae aliquet nec ullamcorper sit amet risus. Lacus laoreet non curabitur gravida arcu ac tortor dignissim convallis. Aliquam malesuada bibendum arcu vitae elementum. Leo vel orci porta non pulvinar neque laoreet. Ipsum suspendisse ultrices gravida dictum fusce. -

    -

    - Egestas erat imperdiet sed euismod nisi porta lorem. Venenatis a condimentum vitae sapien pellentesque habitant. Sit amet luctus venenatis lectus magna fringilla urna porttitor. Orci sagittis eu volutpat odio facilisis mauris sit amet massa. Ut enim blandit volutpat maecenas volutpat blandit aliquam. Libero volutpat sed cras ornare. Molestie ac feugiat sed lectus vestibulum mattis ullamcorper velit sed. Diam quis enim lobortis scelerisque fermentum dui. Pellentesque habitant morbi tristique senectus et netus. Auctor urna nunc id cursus metus aliquam eleifend. Elit scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique. Sed risus ultricies tristique nulla aliquet enim tortor. Tincidunt arcu non sodales neque sodales ut. Sed lectus vestibulum mattis ullamcorper velit sed ullamcorper morbi tincidunt. -

    -

    - Pulvinar etiam non quam lacus suspendisse faucibus. Eu mi bibendum neque egestas congue. Egestas purus viverra accumsan in nisl nisi scelerisque eu. Vulputate enim nulla aliquet porttitor lacus luctus accumsan. Eu non diam phasellus vestibulum. Semper feugiat nibh sed pulvinar. Ante in nibh mauris cursus mattis molestie a. Maecenas accumsan lacus vel facilisis volutpat. Non quam lacus suspendisse faucibus. Quis commodo odio aenean sed adipiscing. Vel elit scelerisque mauris pellentesque pulvinar pellentesque habitant morbi. Sed cras ornare arcu dui vivamus arcu felis. Tortor vitae purus faucibus ornare suspendisse sed. Morbi tincidunt ornare massa eget egestas purus viverra. Nibh cras pulvinar mattis nunc. Luctus venenatis lectus magna fringilla urna porttitor. Enim blandit volutpat maecenas volutpat blandit aliquam etiam erat. Malesuada pellentesque elit eget gravida cum sociis natoque penatibus et. Felis eget nunc lobortis mattis aliquam faucibus purus in. Vivamus arcu felis bibendum ut. -

    +

    {{ 'info.privacy.head' | translate }}

    +

    Last updated May 4, 2023

    + +

    Introduction

    +

    {{ 'repository.title' | translate }} ("Company" or "We") respects your privacy and is committed to protecting it through our compliance with this policy.

    +

    This policy describes the types of information we may collect from you or that you may provide when you visit this website (our "Website") and our practices for collecting, using, maintaining, protecting, and disclosing that information.

    +

    This policy applies to information we collect:

    +
      +
    • On this Website.
    • +
    • In email, text, and other electronic messages between you and this Website.
    • +
    +

    It does not apply to information collected by:

    +
      +
    • us offline or through any other means, including on any other website operated by Company or any third party; or
    • +
    • any third party, including through any application or content (including advertising) that may link to or be accessible from or on the Website.
    • +
    +

    Please read this policy carefully to understand our policies and practices regarding your information and how we will treat it. If you do not agree with our policies and practices, your choice is not to use our Website. By accessing or using this Website, you agree to this privacy policy. This policy may change from time to time. Your continued use of this Website after we make changes is deemed to be acceptance of those changes, so please check the policy periodically for updates.

    + +

    Children under the age of 13

    +

    Our Website is not intended for children under 13 years of age. No one under age 13 may provide any personal information to or on the Website. We do not knowingly collect personal information from children under 13. If you are under 13, do not use or provide any information on this Website or provide any information about yourself to us, including your name, address, telephone number, email address, or any screen name or username you may use. If we learn we have collected or received personal information from a child under 13 without verification of parental consent, we will delete that information.

    + +

    Information we collect about you and how we collect it

    +

    We collect several types of information from and about users of our Website, including information:

    +
      +
    • by which you may be personally identified, such as name, e-mail address, telephone number, or any other identifier by which you may be contacted online or offline ("personal information"); and/or
    • +
    • about your internet connection, the equipment you use to access our Website and usage details.
    • +
    +

    We collect this information:

    +
      +
    • directly from you when you provide it to us.
    • +
    • automatically as you navigate through the site. Information collected automatically may include usage details, IP addresses, and information collected through cookies, web beacons, and other tracking technologies; and/or
    • +
    • from third parties, for example, our business partners.
    • +
    + +

    Information you provide to us

    +

    The information we collect on or through our Website may include:

    +
      +
    • Information that you provide by filling in forms on our Website. We may also ask you for information when you report a problem with our Website.
    • +
    • Records and copies of your correspondence (including email addresses), if you contact us.
    • +
    • Your responses to surveys that we might ask you to complete for research purpose.
    • +
    + +

    Information we collect through automatic data collection technologies

    +

    As you navigate through and interact with our Website, we may use automatic data collection technologies to collect certain information about your equipment, browsing actions, and patterns, including:

    +
      +
    • Details of your visits to our Website, including traffic data, location data, logs, and other communication data and the resources that you access and use on the Website.
    • +
    • Information about your computer and internet connection, including your IP address, operating system, and browser type.
    • +
    +

    The information we collect automatically is statistical data and does not include personal information, but we may maintain it or associate it with personal information we collect in other ways or receive from third parties. It helps us to improve our Website and to deliver a better and more personalized service, including by enabling us to:

    +
      +
    • Estimate our audience size and usage patterns.
    • +
    • Store information about your preferences, allowing us to customize our Website according to your individual interests.
    • +
    • Speed up your searches.
    • +
    • Recognize you when you return to our Website.
    • +
    +

    The technologies we use for this automatic data collection may include:

    +
      +
    • Cookies (or browser cookies). A cookie is a small file placed on the hard drive of your computer. You may refuse to accept browser cookies by activating the appropriate setting on your browser. However, if you select this setting you may be unable to access certain parts of our Website. Unless you have adjusted your browser setting so that it will refuse cookies, our system will issue cookies when you direct your browser to our Website.
    • +
    + +

    How we use your information

    +

    We use information that we collect about you or that you provide to us, including any personal information:

    +
      +
    • To present our Website and its contents to you.
    • +
    • To provide you with information, products, or services that you request from us.
    • +
    • To fulfill any other purpose for which you provide it.
    • +
    • To carry out our obligations and enforce our rights arising from any contracts entered into between you and us, including for billing and collection.
    • +
    • To notify you about changes to our Website or any products or services we offer or provide through it.
    • +
    • In any other way we may describe when you provide the information.
    • +
    • For any other purpose with your consent.
    • +
    + +

    Disclosure of your information

    +

    We may disclose aggregated information about our users, and information that does not identify any individual, without restriction.

    +

    We may disclose personal information that we collect or you provide as described in this privacy policy:

    +
      +
    • To contractors, service providers, and other third parties we use to support our business and who are bound by contractual obligations to keep personal information confidential and use it only for the purposes for which we disclose it to them.
    • +
    • To a buyer or other successor in the event of a merger, divestiture, restructuring, reorganization, dissolution, or other sale or transfer of some or all of Company's assets, whether as a going concern or as part of bankruptcy, liquidation, or similar proceeding, in which personal information held by Company about our Website users is among the assets transferred.
    • +
    • To fulfill the purpose for which you provide it.
    • +
    • For any other purpose disclosed by us when you provide the information.
    • +
    • With your consent.
    • +
    +

    We may also disclose your personal information:

    +
      +
    • To comply with any court order, law, or legal process, including to respond to any government or regulatory request.
    • +
    • To enforce or apply our End User Agreement and other agreements, including for billing and collection purposes.
    • +
    • If we believe disclosure is necessary or appropriate to protect the rights, property, or safety of the Company, our customers, or others.
    • +
    + +

    Changes to our privacy policy

    +

    It is our policy to post any changes we make to our privacy policy on this page. The date the privacy policy was last revised is identified at the top of the page. You are responsible for periodically visiting our Website and this privacy policy to check for any changes.

    \ No newline at end of file diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 2df03302d7..b8dbd20459 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -1916,6 +1916,8 @@ "info.end-user-agreement.title": "End User Agreement", + "info.end-user-agreement.hosting-country": "the United States", + "info.privacy.breadcrumbs": "Privacy Statement", "info.privacy.head": "Privacy Statement", @@ -3649,9 +3651,9 @@ "repository.image.logo": "Repository logo", - "repository.title.prefix": "DSpace Angular :: ", + "repository.title": "DSpace Repository", - "repository.title.prefixDSpace": "DSpace Angular ::", + "repository.title.prefix": "DSpace Repository :: ", "resource-policies.add.button": "Add", From c3854355fd4150c93349d998e0fad3edbbc047d1 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Thu, 4 May 2023 16:02:04 -0500 Subject: [PATCH 196/425] Fix e2e test to check for new title prefix --- cypress/e2e/homepage.cy.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cypress/e2e/homepage.cy.ts b/cypress/e2e/homepage.cy.ts index 8fdf61dbf7..a387c31a2a 100644 --- a/cypress/e2e/homepage.cy.ts +++ b/cypress/e2e/homepage.cy.ts @@ -6,8 +6,8 @@ describe('Homepage', () => { cy.visit('/'); }); - it('should display translated title "DSpace Angular :: Home"', () => { - cy.title().should('eq', 'DSpace Angular :: Home'); + it('should display translated title "DSpace Repository :: Home"', () => { + cy.title().should('eq', 'DSpace Repository :: Home'); }); it('should contain a news section', () => { From 685fbf630a7e6c5dbeadc99df52ae9c7fac63e9b Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Mon, 12 Jun 2023 17:04:02 -0500 Subject: [PATCH 197/425] Address feedback: Make links open in new window/tab. --- .../end-user-agreement-content.component.html | 4 ++-- .../privacy/privacy-content/privacy-content.component.html | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/info/end-user-agreement/end-user-agreement-content/end-user-agreement-content.component.html b/src/app/info/end-user-agreement/end-user-agreement-content/end-user-agreement-content.component.html index 3ae0d0efbe..d5e6de85d4 100644 --- a/src/app/info/end-user-agreement/end-user-agreement-content/end-user-agreement-content.component.html +++ b/src/app/info/end-user-agreement/end-user-agreement-content/end-user-agreement-content.component.html @@ -63,7 +63,7 @@

    We reserve the right, but not the obligation, to: (1) monitor the Site for violations of these Terms of Use; (2) take appropriate legal action against anyone who, in our sole discretion, violates the law or these Terms of Use, including without limitation, reporting such user to law enforcement authorities; (3) in our sole discretion and without limitation, refuse, restrict access to, limit the availability of, or disable (to the extent technologically feasible) any of your Contributions or any portion thereof; (4) in our sole discretion and without limitation, notice, or liability, to remove from the Site or otherwise disable all files and content that are excessive in size or are in any way burdensome to our systems; and (5) otherwise manage the Site in a manner designed to protect our rights and property and to facilitate the proper functioning of the Site.

    Privacy policy

    -

    We care about data privacy and security. Please review our Privacy Policy. By using the Site, you agree to be bound by our Privacy Policy, which is incorporated into these Terms of Use.

    +

    We care about data privacy and security. Please review our Privacy Policy. By using the Site, you agree to be bound by our Privacy Policy, which is incorporated into these Terms of Use.

    Please be advised the Site is hosted in {{ 'info.end-user-agreement.hosting-country' | translate }}. If you access the Site from any other region of the world with laws or other requirements governing personal data collection, use, or disclosure that differ from applicable laws in {{ 'info.end-user-agreement.hosting-country' | translate }}, then through your continued use of the Site, you are transferring your data to {{ 'info.end-user-agreement.hosting-country' | translate }}, and you agree to have your data transferred to and processed in {{ 'info.end-user-agreement.hosting-country' | translate }}.

    Term and termination

    @@ -92,4 +92,4 @@

    Miscellaneous

    These Terms of Use and any policies or operating rules posted by us on the Site or in respect to the Site constitute the entire agreement and understanding between you and us. Our failure to exercise or enforce any right or provision of these Terms of Use shall not operate as a waiver of such right or provision. These Terms of Use operate to the fullest extent permissible by law. We may assign any or all of our rights and obligations to others at any time. We shall not be responsible or liable for any loss, damage, delay, or failure to act caused by any cause beyond our reasonable control. If any provision or part of a provision of these Terms of Use is determined to be unlawful, void, or unenforceable, that provision or part of the provision is deemed severable from these Terms of Use and does not affect the validity and enforceability of any remaining provisions. There is no joint venture, partnership, employment or agency relationship created between you and us as a result of these Terms of Use or use of the Site. You agree that these Terms of Use will not be construed against us by virtue of having drafted them. You hereby waive any and all defenses you may have based on the electronic form of these Terms of Use and the lack of signing by the parties hereto to execute these Terms of Use.

    -

    [a] The DSpace software used to run this site is open source. Options for reuse and reproduction of the DSpace software is governed by its open source license: https://github.com/DSpace/DSpace/blob/main/LICENSE

    \ No newline at end of file +

    [a] The DSpace software used to run this site is open source. Options for reuse and reproduction of the DSpace software is governed by its open source license: https://github.com/DSpace/DSpace/blob/main/LICENSE

    \ No newline at end of file diff --git a/src/app/info/privacy/privacy-content/privacy-content.component.html b/src/app/info/privacy/privacy-content/privacy-content.component.html index 33504b1522..f29a786e8b 100644 --- a/src/app/info/privacy/privacy-content/privacy-content.component.html +++ b/src/app/info/privacy/privacy-content/privacy-content.component.html @@ -83,7 +83,7 @@

    We may also disclose your personal information:

    • To comply with any court order, law, or legal process, including to respond to any government or regulatory request.
    • -
    • To enforce or apply our End User Agreement and other agreements, including for billing and collection purposes.
    • +
    • To enforce or apply our End User Agreement and other agreements, including for billing and collection purposes.
    • If we believe disclosure is necessary or appropriate to protect the rights, property, or safety of the Company, our customers, or others.
    From ff85422bb3c6a3167a8728ae48285b7119889ad9 Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Tue, 13 Jun 2023 16:46:26 +0200 Subject: [PATCH 198/425] [DURACOM-155] Edit item / collection / community in sidebar menu --- .../collection-form.component.ts | 20 ++++-- .../collection-metadata.component.ts | 22 +++++-- .../community-form.component.ts | 11 +++- .../item-status/item-status.component.ts | 1 - .../comcol-form/comcol-form.component.ts | 66 ++++++++++--------- .../comcol-metadata.component.ts | 4 +- .../edit-comcol-page.component.ts | 4 +- 7 files changed, 80 insertions(+), 48 deletions(-) diff --git a/src/app/collection-page/collection-form/collection-form.component.ts b/src/app/collection-page/collection-form/collection-form.component.ts index 23698de84e..84223d260a 100644 --- a/src/app/collection-page/collection-form/collection-form.component.ts +++ b/src/app/collection-page/collection-form/collection-form.component.ts @@ -1,4 +1,4 @@ -import { Component, Input, OnInit } from '@angular/core'; +import { ChangeDetectorRef, Component, Input, OnChanges, OnInit, SimpleChange, SimpleChanges } from '@angular/core'; import { Observable } from 'rxjs'; import { TranslateService } from '@ngx-translate/core'; @@ -31,7 +31,7 @@ import { NONE_ENTITY_TYPE } from '../../core/shared/item-relationships/item-type styleUrls: ['../../shared/comcol/comcol-forms/comcol-form/comcol-form.component.scss'], templateUrl: '../../shared/comcol/comcol-forms/comcol-form/comcol-form.component.html' }) -export class CollectionFormComponent extends ComColFormComponent implements OnInit { +export class CollectionFormComponent extends ComColFormComponent implements OnInit, OnChanges { /** * @type {Collection} A new collection when a collection is being created, an existing Input collection when a collection is being edited */ @@ -61,12 +61,23 @@ export class CollectionFormComponent extends ComColFormComponent imp protected dsoService: CommunityDataService, protected requestService: RequestService, protected objectCache: ObjectCacheService, - protected entityTypeService: EntityTypeDataService) { + protected entityTypeService: EntityTypeDataService, + protected chd: ChangeDetectorRef) { super(formService, translate, notificationsService, authService, requestService, objectCache); } - ngOnInit() { + /** + * Detect changes to the dso and initialize the form, + * if the dso changes, exists and it is not the first change + */ + ngOnChanges(changes: SimpleChanges) { + const dsoChange: SimpleChange = changes.dso; + if (this.dso && dsoChange && !dsoChange.isFirstChange()) { + this.initializeForm(); + } + } + initializeForm() { let currentRelationshipValue: MetadataValue[]; if (this.dso && this.dso.metadata) { currentRelationshipValue = this.dso.metadata['dspace.entity.type']; @@ -96,6 +107,7 @@ export class CollectionFormComponent extends ComColFormComponent imp this.formModel = [...collectionFormModels, this.entityTypeSelection]; super.ngOnInit(); + this.chd.detectChanges(); }); } diff --git a/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.ts b/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.ts index 8e534a0829..7603b9960a 100644 --- a/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.ts +++ b/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.ts @@ -1,8 +1,8 @@ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; import { ComcolMetadataComponent } from '../../../shared/comcol/comcol-forms/edit-comcol-page/comcol-metadata/comcol-metadata.component'; import { Collection } from '../../../core/shared/collection.model'; import { CollectionDataService } from '../../../core/data/collection-data.service'; -import { ActivatedRoute, Router } from '@angular/router'; +import { ActivatedRoute, NavigationEnd, Router, Scroll } from '@angular/router'; import { ItemTemplateDataService } from '../../../core/data/item-template-data.service'; import { combineLatest as combineLatestObservable, Observable } from 'rxjs'; import { RemoteData } from '../../../core/data/remote-data'; @@ -23,7 +23,7 @@ import { hasValue } from '../../../shared/empty.util'; selector: 'ds-collection-metadata', templateUrl: './collection-metadata.component.html', }) -export class CollectionMetadataComponent extends ComcolMetadataComponent { +export class CollectionMetadataComponent extends ComcolMetadataComponent implements OnInit { protected frontendURL = '/collections/'; protected type = Collection.type; @@ -44,9 +44,21 @@ export class CollectionMetadataComponent extends ComcolMetadataComponent { + if ( + event instanceof NavigationEnd || + (event instanceof Scroll && event.routerEvent instanceof NavigationEnd) + ) { + super.ngOnInit(); + this.initTemplateItem(); + } + }); } /** diff --git a/src/app/community-page/community-form/community-form.component.ts b/src/app/community-page/community-form/community-form.component.ts index c6dd1147c3..fa4809738d 100644 --- a/src/app/community-page/community-form/community-form.component.ts +++ b/src/app/community-page/community-form/community-form.component.ts @@ -1,4 +1,4 @@ -import { Component, Input } from '@angular/core'; +import { Component, Input, OnChanges, SimpleChange, SimpleChanges } from '@angular/core'; import { DynamicFormControlModel, DynamicFormService, @@ -23,7 +23,7 @@ import { environment } from '../../../environments/environment'; styleUrls: ['../../shared/comcol/comcol-forms/comcol-form/comcol-form.component.scss'], templateUrl: '../../shared/comcol/comcol-forms/comcol-form/comcol-form.component.html' }) -export class CommunityFormComponent extends ComColFormComponent { +export class CommunityFormComponent extends ComColFormComponent implements OnChanges { /** * @type {Community} A new community when a community is being created, an existing Input community when a community is being edited */ @@ -81,4 +81,11 @@ export class CommunityFormComponent extends ComColFormComponent { protected objectCache: ObjectCacheService) { super(formService, translate, notificationsService, authService, requestService, objectCache); } + + ngOnChanges(changes: SimpleChanges) { + const dsoChange: SimpleChange = changes.dso; + if (this.dso && dsoChange && !dsoChange.isFirstChange()) { + super.ngOnInit(); + } + } } diff --git a/src/app/item-page/edit-item-page/item-status/item-status.component.ts b/src/app/item-page/edit-item-page/item-status/item-status.component.ts index ce84786304..27bc86d33e 100644 --- a/src/app/item-page/edit-item-page/item-status/item-status.component.ts +++ b/src/app/item-page/edit-item-page/item-status/item-status.component.ts @@ -82,7 +82,6 @@ export class ItemStatusComponent implements OnInit { ngOnInit(): void { this.itemRD$ = this.route.parent.data.pipe(map((data) => data.dso)); this.itemRD$.pipe( - first(), map((data: RemoteData) => data.payload) ).subscribe((item: Item) => { this.statusData = Object.assign({ diff --git a/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.ts b/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.ts index bbd8b01257..631a9f0b19 100644 --- a/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.ts +++ b/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.ts @@ -127,39 +127,41 @@ export class ComColFormComponent implements On } ngOnInit(): void { - this.formModel.forEach( - (fieldModel: DynamicInputModel) => { - fieldModel.value = this.dso.firstMetadataValue(fieldModel.name); - } - ); - this.formGroup = this.formService.createFormGroup(this.formModel); - - this.updateFieldTranslations(); - this.translate.onLangChange - .subscribe(() => { - this.updateFieldTranslations(); - }); - - if (hasValue(this.dso.id)) { - this.subs.push( - observableCombineLatest([ - this.dsoService.getLogoEndpoint(this.dso.id), - this.dso.logo - ]).subscribe(([href, logoRD]: [string, RemoteData]) => { - this.uploadFilesOptions.url = href; - this.uploadFilesOptions.authToken = this.authService.buildAuthHeader(); - // If the object already contains a logo, send out a PUT request instead of POST for setting a new logo - if (hasValue(logoRD.payload)) { - this.uploadFilesOptions.method = RestRequestMethod.PUT; - } - this.initializedUploaderOptions.next(true); - }) + if (hasValue(this.formModel)) { + this.formModel.forEach( + (fieldModel: DynamicInputModel) => { + fieldModel.value = this.dso.firstMetadataValue(fieldModel.name); + } ); - } else { - // Set a placeholder URL to not break the uploader component. This will be replaced once the object is created. - this.uploadFilesOptions.url = 'placeholder'; - this.uploadFilesOptions.authToken = this.authService.buildAuthHeader(); - this.initializedUploaderOptions.next(true); + this.formGroup = this.formService.createFormGroup(this.formModel); + + this.updateFieldTranslations(); + this.translate.onLangChange + .subscribe(() => { + this.updateFieldTranslations(); + }); + + if (hasValue(this.dso.id)) { + this.subs.push( + observableCombineLatest([ + this.dsoService.getLogoEndpoint(this.dso.id), + this.dso.logo + ]).subscribe(([href, logoRD]: [string, RemoteData]) => { + this.uploadFilesOptions.url = href; + this.uploadFilesOptions.authToken = this.authService.buildAuthHeader(); + // If the object already contains a logo, send out a PUT request instead of POST for setting a new logo + if (hasValue(logoRD.payload)) { + this.uploadFilesOptions.method = RestRequestMethod.PUT; + } + this.initializedUploaderOptions.next(true); + }) + ); + } else { + // Set a placeholder URL to not break the uploader component. This will be replaced once the object is created. + this.uploadFilesOptions.url = 'placeholder'; + this.uploadFilesOptions.authToken = this.authService.buildAuthHeader(); + this.initializedUploaderOptions.next(true); + } } } diff --git a/src/app/shared/comcol/comcol-forms/edit-comcol-page/comcol-metadata/comcol-metadata.component.ts b/src/app/shared/comcol/comcol-forms/edit-comcol-page/comcol-metadata/comcol-metadata.component.ts index 5bd51ea650..d59030251d 100644 --- a/src/app/shared/comcol/comcol-forms/edit-comcol-page/comcol-metadata/comcol-metadata.component.ts +++ b/src/app/shared/comcol/comcol-forms/edit-comcol-page/comcol-metadata/comcol-metadata.component.ts @@ -3,7 +3,7 @@ import { DSpaceObject } from '../../../../../core/shared/dspace-object.model'; import { Observable } from 'rxjs'; import { RemoteData } from '../../../../../core/data/remote-data'; import { ActivatedRoute, Router } from '@angular/router'; -import { first, map, take } from 'rxjs/operators'; +import { map, take } from 'rxjs/operators'; import { getFirstCompletedRemoteData, getFirstSucceededRemoteData } from '../../../../../core/shared/operators'; import { hasValue, isEmpty } from '../../../../empty.util'; import { ResourceType } from '../../../../../core/shared/resource-type'; @@ -42,7 +42,7 @@ export class ComcolMetadataComponent imp } ngOnInit(): void { - this.dsoRD$ = this.route.parent.data.pipe(first(), map((data) => data.dso)); + this.dsoRD$ = this.route.parent.data.pipe(map((data) => data.dso)); } /** diff --git a/src/app/shared/comcol/comcol-forms/edit-comcol-page/edit-comcol-page.component.ts b/src/app/shared/comcol/comcol-forms/edit-comcol-page/edit-comcol-page.component.ts index 48eb9aec96..e4d6c9c8a7 100644 --- a/src/app/shared/comcol/comcol-forms/edit-comcol-page/edit-comcol-page.component.ts +++ b/src/app/shared/comcol/comcol-forms/edit-comcol-page/edit-comcol-page.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; -import { first, map } from 'rxjs/operators'; +import { map } from 'rxjs/operators'; import { ActivatedRoute, Router } from '@angular/router'; import { RemoteData } from '../../../../core/data/remote-data'; @@ -53,7 +53,7 @@ export class EditComColPageComponent implements On this.pages = this.route.routeConfig.children .map((child: any) => child.path) .filter((path: string) => isNotEmpty(path)); // ignore reroutes - this.dsoRD$ = this.route.data.pipe(first(), map((data) => data.dso)); + this.dsoRD$ = this.route.data.pipe(map((data) => data.dso)); } /** From ec8470de06d4adfbfd947cea6bece1e05cf47efb Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Tue, 13 Jun 2023 18:41:11 +0200 Subject: [PATCH 199/425] [DURACOM-155] --- .../collection-metadata.component.spec.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.spec.ts b/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.spec.ts index 79e7a465e1..7cc54bd994 100644 --- a/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.spec.ts +++ b/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.spec.ts @@ -4,7 +4,7 @@ import { SharedModule } from '../../../shared/shared.module'; import { CommonModule } from '@angular/common'; import { RouterTestingModule } from '@angular/router/testing'; import { CollectionDataService } from '../../../core/data/collection-data.service'; -import { ActivatedRoute, Router } from '@angular/router'; +import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; import { of as observableOf } from 'rxjs'; import { NO_ERRORS_SCHEMA } from '@angular/core'; import { CollectionMetadataComponent } from './collection-metadata.component'; @@ -52,6 +52,11 @@ describe('CollectionMetadataComponent', () => { setStaleByHrefSubstring: {} }); + const routerMock = { + events: observableOf(new NavigationEnd(1, 'url', 'url')), + navigate: jasmine.createSpy('navigate'), + }; + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [TranslateModule.forRoot(), SharedModule, CommonModule, RouterTestingModule], @@ -62,6 +67,7 @@ describe('CollectionMetadataComponent', () => { { provide: ActivatedRoute, useValue: { parent: { data: observableOf({ dso: createSuccessfulRemoteDataObject(collection) }) } } }, { provide: NotificationsService, useValue: notificationsService }, { provide: RequestService, useValue: requestService }, + { provide: Router, useValue: routerMock} ], schemas: [NO_ERRORS_SCHEMA] }).compileComponents(); @@ -70,8 +76,11 @@ describe('CollectionMetadataComponent', () => { beforeEach(() => { fixture = TestBed.createComponent(CollectionMetadataComponent); comp = fixture.componentInstance; - router = (comp as any).router; itemTemplateService = (comp as any).itemTemplateService; + spyOn(comp, 'ngOnInit'); + spyOn(comp, 'initTemplateItem'); + + routerMock.events = observableOf(new NavigationEnd(1, 'url', 'url')); fixture.detectChanges(); }); @@ -83,9 +92,8 @@ describe('CollectionMetadataComponent', () => { describe('addItemTemplate', () => { it('should navigate to the collection\'s itemtemplate page', () => { - spyOn(router, 'navigate'); comp.addItemTemplate(); - expect(router.navigate).toHaveBeenCalledWith([getCollectionItemTemplateRoute(collection.uuid)]); + expect(routerMock.navigate).toHaveBeenCalledWith([getCollectionItemTemplateRoute(collection.uuid)]); }); }); From 486aefebc7b3b3ac729ec4de35ebad017d179dc0 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Tue, 13 Jun 2023 19:00:33 +0200 Subject: [PATCH 200/425] [CST-5729] Add possibility to store response's headers into the SSR cache --- server.ts | 18 +++++++++++++----- src/config/cache-config.interface.ts | 2 ++ src/config/default-app-config.ts | 2 ++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/server.ts b/server.ts index d64b80b4ab..791baf7236 100644 --- a/server.ts +++ b/server.ts @@ -53,7 +53,7 @@ import { buildAppConfig } from './src/config/config.server'; import { APP_CONFIG, AppConfig } from './src/config/app-config.interface'; import { extendEnvironmentWithAppConfig } from './src/config/config.util'; import { logStartupMessage } from './startup-message'; -import { TOKENITEM } from 'src/app/core/auth/models/auth-token-info.model'; +import { TOKENITEM } from './src/app/core/auth/models/auth-token-info.model'; /* @@ -374,9 +374,15 @@ function cacheCheck(req, res, next) { } // If cached copy exists, return it to the user. - if (cachedCopy) { + if (cachedCopy && cachedCopy.page) { + if (cachedCopy.headers && Array.isArray(environment.cache.serverSide.headers) && environment.cache.serverSide.headers.length > 0) { + environment.cache.serverSide.headers.forEach((header) => { + if (environment.cache.serverSide.debug) { console.log(`Restore cached ${header} header`); } + res.setHeader(header, cachedCopy.headers[header.toLowerCase()]); + }); + } res.locals.ssr = true; // mark response as SSR-generated (enables text compression) - res.send(cachedCopy); + res.send(cachedCopy.page); // Tell Express to skip all other handlers for this path // This ensures we don't try to re-render the page since we've already returned the cached copy @@ -452,16 +458,18 @@ function saveToCache(req, page: any) { // Avoid caching "/reload/[random]" paths (these are hard refreshes after logout) if (key.startsWith('/reload')) { return; } + // Retrieve response headers + const headers = req.res.getHeaders(); // If bot cache is enabled, save it to that cache if it doesn't exist or is expired // (NOTE: has() will return false if page is expired in cache) if (botCacheEnabled() && !botCache.has(key)) { - botCache.set(key, page); + botCache.set(key, { page, headers }); if (environment.cache.serverSide.debug) { console.log(`CACHE SAVE FOR ${key} in bot cache.`); } } // If anonymous cache is enabled, save it to that cache if it doesn't exist or is expired if (anonymousCacheEnabled() && !anonymousCache.has(key)) { - anonymousCache.set(key, page); + anonymousCache.set(key, { page, headers }); if (environment.cache.serverSide.debug) { console.log(`CACHE SAVE FOR ${key} in anonymous cache.`); } } } diff --git a/src/config/cache-config.interface.ts b/src/config/cache-config.interface.ts index 9560fe46a5..14af509bbf 100644 --- a/src/config/cache-config.interface.ts +++ b/src/config/cache-config.interface.ts @@ -13,6 +13,8 @@ export interface CacheConfig extends Config { serverSide: { // Debug server-side caching. Set to true to see cache hits/misses/refreshes in console logs. debug: boolean, + // List of headers to restore from the cache hit + headers: string[], // Cache specific to known bots. Allows you to serve cached contents to bots only. botCache: { // Maximum number of pages (rendered via SSR) to cache. Setting max=0 disables the cache. diff --git a/src/config/default-app-config.ts b/src/config/default-app-config.ts index 80420407c7..a6e9e092e4 100644 --- a/src/config/default-app-config.ts +++ b/src/config/default-app-config.ts @@ -78,6 +78,8 @@ export class DefaultAppConfig implements AppConfig { // In-memory cache of server-side rendered content serverSide: { debug: false, + // Link header is used for signposting functionality + headers: ['Link'], // Cache specific to known bots. Allows you to serve cached contents to bots only. // Defaults to caching 1,000 pages. Each page expires after 1 day botCache: { From ac9be25faf9135424f4c201a24472c1d24b5f7f7 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Tue, 13 Jun 2023 19:30:40 +0200 Subject: [PATCH 201/425] [CST-5729] check if header exists --- server.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/server.ts b/server.ts index 791baf7236..f73bd1b774 100644 --- a/server.ts +++ b/server.ts @@ -377,8 +377,12 @@ function cacheCheck(req, res, next) { if (cachedCopy && cachedCopy.page) { if (cachedCopy.headers && Array.isArray(environment.cache.serverSide.headers) && environment.cache.serverSide.headers.length > 0) { environment.cache.serverSide.headers.forEach((header) => { - if (environment.cache.serverSide.debug) { console.log(`Restore cached ${header} header`); } - res.setHeader(header, cachedCopy.headers[header.toLowerCase()]); + if (cachedCopy.headers[header.toLowerCase()]) { + if (environment.cache.serverSide.debug) { + console.log(`Restore cached ${header} header`); + } + res.setHeader(header, cachedCopy.headers[header.toLowerCase()]); + } }); } res.locals.ssr = true; // mark response as SSR-generated (enables text compression) From 8bcceff085825c7aad27a099c7b426b67ba0e4fe Mon Sep 17 00:00:00 2001 From: damian Date: Tue, 13 Jun 2023 19:57:30 +0200 Subject: [PATCH 202/425] Empty communities and collections items count are now shown. Show communities items count at the home page. --- .../community-list/community-list.component.html | 2 +- .../collection-list-element.component.html | 2 +- .../collection-list-element.component.spec.ts | 8 ++++---- .../community-list-element.component.html | 1 + 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/app/community-list-page/community-list/community-list.component.html b/src/app/community-list-page/community-list/community-list.component.html index 7f8dcf0c45..55b043f8e8 100644 --- a/src/app/community-list-page/community-list/community-list.component.html +++ b/src/app/community-list-page/community-list/community-list.component.html @@ -37,7 +37,7 @@ {{node.name}} - [{{node.payload.archivedItemsCount}}] + [{{node.payload.archivedItemsCount}}]
    diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html index 68a84a88e5..b007db510e 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html @@ -4,7 +4,7 @@ {{object.name}} -[{{object.archivedItemsCount}}] +[{{object.archivedItemsCount}}]
    {{object.shortDescription}}
    diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts b/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts index b911bdd2eb..2324cc3c1f 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts @@ -18,7 +18,7 @@ const mockCollectionWithArchivedItems: Collection = Object.assign(new Collection }, archivedItemsCount: 1 }); -const mockCollectionWithoutArchivedItems: Collection = Object.assign(new Collection(), { +const mockCollectionWithArchivedItemsDisabledAtBackend: Collection = Object.assign(new Collection(), { metadata: { 'dc.title': [ { @@ -26,7 +26,7 @@ const mockCollectionWithoutArchivedItems: Collection = Object.assign(new Collect value: 'Test title' } ] - }, archivedItemsCount: 0 + }, archivedItemsCount: -1 }); @@ -108,9 +108,9 @@ describe('CollectionListElementComponent', () => { }); }); - describe('When the collection has no archived items', () => { + describe('When the collection archived items are disabled at backend', () => { beforeEach(() => { - collectionListElementComponent.object = mockCollectionWithoutArchivedItems; + collectionListElementComponent.object = mockCollectionWithArchivedItemsDisabledAtBackend; fixture.detectChanges(); }); diff --git a/src/app/shared/object-list/community-list-element/community-list-element.component.html b/src/app/shared/object-list/community-list-element/community-list-element.component.html index af01999ca7..26ff040dd6 100644 --- a/src/app/shared/object-list/community-list-element/community-list-element.component.html +++ b/src/app/shared/object-list/community-list-element/community-list-element.component.html @@ -4,6 +4,7 @@ {{object.name}} +[{{object.archivedItemsCount}}]
    {{object.shortDescription}}
    From 3b93f5bd234ed0eb1e9f598b8df29bf755e743c9 Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Wed, 14 Jun 2023 09:44:58 +0200 Subject: [PATCH 203/425] [DURACOM-155] small fix --- .../collection-metadata/collection-metadata.component.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.ts b/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.ts index 7603b9960a..634363527f 100644 --- a/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.ts +++ b/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { ChangeDetectorRef, Component, OnInit } from '@angular/core'; import { ComcolMetadataComponent } from '../../../shared/comcol/comcol-forms/edit-comcol-page/comcol-metadata/comcol-metadata.component'; import { Collection } from '../../../core/shared/collection.model'; import { CollectionDataService } from '../../../core/data/collection-data.service'; @@ -40,6 +40,7 @@ export class CollectionMetadataComponent extends ComcolMetadataComponent Date: Wed, 14 Jun 2023 10:49:49 +0300 Subject: [PATCH 204/425] src/assets/i18n/en.json5: lint Normalize whitespace in i18n/en.json5. This file should be clean, as it is the "upstream" of all other language assets and produces a lot of whitespace changes every time strings are merged. --- src/assets/i18n/en.json5 | 362 +++++++-------------------------------- 1 file changed, 65 insertions(+), 297 deletions(-) diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index b8dbd20459..480bf8834e 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -6,8 +6,6 @@ "401.unauthorized": "unauthorized", - - "403.help": "You don't have permission to access this page. You can use the button below to get back to the home page.", "403.link.home-page": "Take me to the home page", @@ -20,7 +18,6 @@ "500.link.home-page": "Take me to the home page", - "404.help": "We can't find the page you're looking for. The page may have been moved or deleted. You can use the button below to get back to the home page. ", "404.link.home-page": "Take me to the home page", @@ -130,6 +127,7 @@ "admin.registries.bitstream-formats.table.mimetype": "MIME Type", "admin.registries.bitstream-formats.table.name": "Name", + "admin.registries.bitstream-formats.table.id": "ID", "admin.registries.bitstream-formats.table.return": "Back", @@ -144,8 +142,6 @@ "admin.registries.bitstream-formats.title": "Bitstream Format Registry", - - "admin.registries.metadata.breadcrumbs": "Metadata registry", "admin.registries.metadata.description": "The metadata registry maintains a list of all metadata fields available in the repository. These fields may be divided amongst multiple schemas. However, DSpace requires the qualified Dublin Core schema.", @@ -172,8 +168,6 @@ "admin.registries.metadata.title": "Metadata Registry", - - "admin.registries.schema.breadcrumbs": "Metadata schema", "admin.registries.schema.description": "This is the metadata schema for \"{{namespace}}\".", @@ -185,6 +179,7 @@ "admin.registries.schema.fields.table.delete": "Delete selected", "admin.registries.schema.fields.table.field": "Field", + "admin.registries.schema.fields.table.id": "ID", "admin.registries.schema.fields.table.scopenote": "Scope Note", @@ -225,8 +220,6 @@ "admin.registries.schema.title": "Metadata Schema Registry", - - "admin.access-control.epeople.actions.delete": "Delete EPerson", "admin.access-control.epeople.actions.impersonate": "Impersonate EPerson", @@ -321,8 +314,6 @@ "admin.access-control.epeople.notification.deleted.success": "Successfully deleted EPerson: \"{{name}}\"", - - "admin.access-control.groups.title": "Groups", "admin.access-control.groups.breadcrumbs": "Groups", @@ -369,8 +360,6 @@ "admin.access-control.groups.notification.deleted.failure.content": "Cause: \"{{cause}}\"", - - "admin.access-control.groups.form.alert.permanent": "This group is permanent, so it can't be edited or deleted. You can still add and remove group members using this page.", "admin.access-control.groups.form.alert.workflowGroup": "This group can’t be modified or deleted because it corresponds to a role in the submission and workflow process in the \"{{name}}\" {{comcol}}. You can delete it from the \"assign roles\" tab on the edit {{comcol}} page. You can still add and remove group members using this page.", @@ -531,9 +520,6 @@ "administrativeView.search.results.head": "Administrative Search", - - - "admin.workflow.breadcrumbs": "Administer Workflow", "admin.workflow.title": "Administer Workflow", @@ -550,8 +536,6 @@ "admin.workflow.item.supervision": "Supervision", - - "admin.metadata-import.breadcrumbs": "Import Metadata", "admin.batch-import.breadcrumbs": "Import Batch", @@ -612,12 +596,10 @@ "advanced-workflow-action.rating.description-requiredDescription": "Please select a rating below and also add a review", - "advanced-workflow-action.select-reviewer.description-single": "Please select a single reviewer below before submitting", "advanced-workflow-action.select-reviewer.description-multiple": "Please select one or more reviewers below before submitting", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.head": "EPeople", "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.head": "Add EPeople", @@ -674,12 +656,9 @@ "auth.messages.token-refresh-failed": "Refreshing your session token failed. Please log in again.", + "bitstream.download.page": "Now downloading {{bitstream}}...", - - "bitstream.download.page": "Now downloading {{bitstream}}..." , - - "bitstream.download.page.back": "Back" , - + "bitstream.download.page.back": "Back", "bitstream.edit.authorizations.link": "Edit bitstream's Policies", @@ -731,7 +710,6 @@ "bitstream.edit.form.iiifHeight.hint": "The canvas height should usually match the image height.", - "bitstream.edit.notifications.saved.content": "Your changes to this bitstream were saved.", "bitstream.edit.notifications.saved.title": "Bitstream saved", @@ -747,6 +725,7 @@ "bitstream-request-a-copy.intro": "Enter the following information to request a copy for the following item: ", "bitstream-request-a-copy.intro.bitstream.one": "Requesting the following file: ", + "bitstream-request-a-copy.intro.bitstream.all": "Requesting all files. ", "bitstream-request-a-copy.name.label": "Name *", @@ -775,8 +754,6 @@ "bitstream-request-a-copy.submit.error": "Something went wrong with submitting the item request.", - - "browse.back.all-results": "All browse results", "browse.comcol.by.author": "By Author", @@ -871,20 +848,16 @@ "browse.title.page": "Browsing {{ collection }} by {{ field }} {{ value }}", - "search.browse.item-back": "Back to Results", - "chips.remove": "Remove chip", - "claimed-approved-search-result-list-element.title": "Approved", "claimed-declined-search-result-list-element.title": "Rejected, sent back to submitter", "claimed-declined-task-search-result-list-element.title": "Declined, sent back to Review Manager's workflow", - "collection.create.head": "Create a Collection", "collection.create.notifications.success": "Successfully created the Collection", @@ -907,16 +880,12 @@ "collection.delete.text": "Are you sure you want to delete collection \"{{ dso }}\"", - - "collection.edit.delete": "Delete this collection", "collection.edit.head": "Edit Collection", "collection.edit.breadcrumbs": "Edit Collection", - - "collection.edit.tabs.mapper.head": "Item Mapper", "collection.edit.tabs.item-mapper.title": "Collection Edit - Item Mapper", @@ -957,7 +926,6 @@ "collection.edit.item-mapper.tabs.map": "Map new items", - "collection.edit.logo.delete.title": "Delete logo", "collection.edit.logo.delete-undo.title": "Undo delete", @@ -976,14 +944,10 @@ "collection.edit.logo.upload": "Drop a Collection Logo to upload", - - "collection.edit.notifications.success": "Successfully edited the Collection", "collection.edit.return": "Back", - - "collection.edit.tabs.curate.head": "Curate", "collection.edit.tabs.curate.title": "Collection Edit - Curate", @@ -1042,8 +1006,6 @@ "collection.edit.tabs.source.title": "Collection Edit - Content Source", - - "collection.edit.template.add-button": "Add", "collection.edit.template.breadcrumbs": "Item template", @@ -1068,8 +1030,6 @@ "collection.edit.template.title": "Edit Template Item", - - "collection.form.abstract": "Short Description", "collection.form.description": "Introductory text (HTML)", @@ -1088,12 +1048,8 @@ "collection.form.entityType": "Entity Type", - - "collection.listelement.badge": "Collection", - - "collection.page.browse.recent.head": "Recent Submissions", "collection.page.browse.recent.empty": "No items to show", @@ -1106,46 +1062,62 @@ "collection.page.news": "News", - - "collection.select.confirm": "Confirm selected", "collection.select.empty": "No collections to show", "collection.select.table.title": "Title", - "collection.source.controls.head": "Harvest Controls", - "collection.source.controls.test.submit.error": "Something went wrong with initiating the testing of the settings", - "collection.source.controls.test.failed": "The script to test the settings has failed", - "collection.source.controls.test.completed": "The script to test the settings has successfully finished", - "collection.source.controls.test.submit": "Test configuration", - "collection.source.controls.test.running": "Testing configuration...", - "collection.source.controls.import.submit.success": "The import has been successfully initiated", - "collection.source.controls.import.submit.error": "Something went wrong with initiating the import", - "collection.source.controls.import.submit": "Import now", - "collection.source.controls.import.running": "Importing...", - "collection.source.controls.import.failed": "An error occurred during the import", - "collection.source.controls.import.completed": "The import completed", - "collection.source.controls.reset.submit.success": "The reset and reimport has been successfully initiated", - "collection.source.controls.reset.submit.error": "Something went wrong with initiating the reset and reimport", - "collection.source.controls.reset.failed": "An error occurred during the reset and reimport", - "collection.source.controls.reset.completed": "The reset and reimport completed", - "collection.source.controls.reset.submit": "Reset and reimport", - "collection.source.controls.reset.running": "Resetting and reimporting...", - "collection.source.controls.harvest.status": "Harvest status:", - "collection.source.controls.harvest.start": "Harvest start time:", - "collection.source.controls.harvest.last": "Last time harvested:", - "collection.source.controls.harvest.message": "Harvest info:", - "collection.source.controls.harvest.no-information": "N/A", + "collection.source.controls.test.submit.error": "Something went wrong with initiating the testing of the settings", + + "collection.source.controls.test.failed": "The script to test the settings has failed", + + "collection.source.controls.test.completed": "The script to test the settings has successfully finished", + + "collection.source.controls.test.submit": "Test configuration", + + "collection.source.controls.test.running": "Testing configuration...", + + "collection.source.controls.import.submit.success": "The import has been successfully initiated", + + "collection.source.controls.import.submit.error": "Something went wrong with initiating the import", + + "collection.source.controls.import.submit": "Import now", + + "collection.source.controls.import.running": "Importing...", + + "collection.source.controls.import.failed": "An error occurred during the import", + + "collection.source.controls.import.completed": "The import completed", + + "collection.source.controls.reset.submit.success": "The reset and reimport has been successfully initiated", + + "collection.source.controls.reset.submit.error": "Something went wrong with initiating the reset and reimport", + + "collection.source.controls.reset.failed": "An error occurred during the reset and reimport", + + "collection.source.controls.reset.completed": "The reset and reimport completed", + + "collection.source.controls.reset.submit": "Reset and reimport", + + "collection.source.controls.reset.running": "Resetting and reimporting...", + + "collection.source.controls.harvest.status": "Harvest status:", + + "collection.source.controls.harvest.start": "Harvest start time:", + + "collection.source.controls.harvest.last": "Last time harvested:", + + "collection.source.controls.harvest.message": "Harvest info:", + + "collection.source.controls.harvest.no-information": "N/A", "collection.source.update.notifications.error.content": "The provided settings have been tested and didn't work.", "collection.source.update.notifications.error.title": "Server Error", - - "communityList.breadcrumbs": "Community List", "communityList.tabTitle": "Community List", @@ -1154,8 +1126,6 @@ "communityList.showMore": "Show More", - - "community.create.head": "Create a Community", "community.create.notifications.success": "Successfully created the Community", @@ -1184,7 +1154,6 @@ "community.edit.breadcrumbs": "Edit Community", - "community.edit.logo.delete.title": "Delete logo", "community.edit.logo.delete-undo.title": "Undo delete", @@ -1203,8 +1172,6 @@ "community.edit.logo.upload": "Drop a Community Logo to upload", - - "community.edit.notifications.success": "Successfully edited the Community", "community.edit.notifications.unauthorized": "You do not have privileges to make this change", @@ -1213,8 +1180,6 @@ "community.edit.return": "Back", - - "community.edit.tabs.curate.head": "Curate", "community.edit.tabs.curate.title": "Community Edit - Curate", @@ -1231,12 +1196,8 @@ "community.edit.tabs.authorizations.title": "Community Edit - Authorizations", - - "community.listelement.badge": "Community", - - "comcol-role.edit.no-group": "None", "comcol-role.edit.create": "Create", @@ -1249,57 +1210,46 @@ "comcol-role.edit.delete.error.title": "Failed to delete the '{{ role }}' role's group", - "comcol-role.edit.community-admin.name": "Administrators", "comcol-role.edit.collection-admin.name": "Administrators", - "comcol-role.edit.community-admin.description": "Community administrators can create sub-communities or collections, and manage or assign management for those sub-communities or collections. In addition, they decide who can submit items to any sub-collections, edit item metadata (after submission), and add (map) existing items from other collections (subject to authorization).", "comcol-role.edit.collection-admin.description": "Collection administrators decide who can submit items to the collection, edit item metadata (after submission), and add (map) existing items from other collections to this collection (subject to authorization for that collection).", - "comcol-role.edit.submitters.name": "Submitters", "comcol-role.edit.submitters.description": "The E-People and Groups that have permission to submit new items to this collection.", - "comcol-role.edit.item_read.name": "Default item read access", "comcol-role.edit.item_read.description": "E-People and Groups that can read new items submitted to this collection. Changes to this role are not retroactive. Existing items in the system will still be viewable by those who had read access at the time of their addition.", "comcol-role.edit.item_read.anonymous-group": "Default read for incoming items is currently set to Anonymous.", - "comcol-role.edit.bitstream_read.name": "Default bitstream read access", "comcol-role.edit.bitstream_read.description": "Community administrators can create sub-communities or collections, and manage or assign management for those sub-communities or collections. In addition, they decide who can submit items to any sub-collections, edit item metadata (after submission), and add (map) existing items from other collections (subject to authorization).", "comcol-role.edit.bitstream_read.anonymous-group": "Default read for incoming bitstreams is currently set to Anonymous.", - "comcol-role.edit.editor.name": "Editors", "comcol-role.edit.editor.description": "Editors are able to edit the metadata of incoming submissions, and then accept or reject them.", - "comcol-role.edit.finaleditor.name": "Final editors", "comcol-role.edit.finaleditor.description": "Final editors are able to edit the metadata of incoming submissions, but will not be able to reject them.", - "comcol-role.edit.reviewer.name": "Reviewers", "comcol-role.edit.reviewer.description": "Reviewers are able to accept or reject incoming submissions. However, they are not able to edit the submission's metadata.", - "comcol-role.edit.scorereviewers.name": "Score Reviewers", "comcol-role.edit.scorereviewers.description": "Reviewers are able to give a score to incoming submissions, this will define whether the submission will be rejected or not.", - - "community.form.abstract": "Short Description", "community.form.description": "Introductory text (HTML)", @@ -1326,8 +1276,6 @@ "community.sub-community-list.head": "Communities of this Community", - - "cookies.consent.accept-all": "Accept all", "cookies.consent.accept-selected": "Accept selected", @@ -1380,30 +1328,22 @@ "cookies.consent.app.description.authentication": "Required for signing you in", - "cookies.consent.app.title.preferences": "Preferences", "cookies.consent.app.description.preferences": "Required for saving your preferences", - - "cookies.consent.app.title.acknowledgement": "Acknowledgement", "cookies.consent.app.description.acknowledgement": "Required for saving your acknowledgements and consents", - - "cookies.consent.app.title.google-analytics": "Google Analytics", "cookies.consent.app.description.google-analytics": "Allows us to track statistical data", - - "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", "cookies.consent.app.description.google-recaptcha": "We use google reCAPTCHA service during registration and password recovery", - "cookies.consent.purpose.functional": "Functional", "cookies.consent.purpose.statistical": "Statistical", @@ -1428,8 +1368,6 @@ "curation-task.task.register-doi.label": "Register DOI", - - "curation.form.task-select.label": "Task:", "curation.form.submit": "Start", @@ -1448,8 +1386,6 @@ "curation.form.handle.hint": "Hint: Enter [your-handle-prefix]/0 to run a task across entire site (not all tasks may support this capability)", - - "deny-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I regret to inform you that it's not possible to send you a copy of the file(s) you have requested, concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", "deny-request-copy.email.subject": "Request copy of document", @@ -1462,14 +1398,10 @@ "deny-request-copy.success": "Successfully denied item request", - - "dso.name.untitled": "Untitled", "dso.name.unnamed": "Unnamed", - - "dso-selector.create.collection.head": "New collection", "dso-selector.create.collection.sub-level": "Create a new collection in", @@ -1656,11 +1588,8 @@ "feed.description": "Syndication feed", - "file-section.error.header": "Error obtaining files for this item", - - "footer.copyright": "copyright © 2002-{{ year }}", "footer.link.dspace": "DSpace software", @@ -1675,8 +1604,6 @@ "footer.link.feedback": "Send Feedback", - - "forgot-email.form.header": "Forgot Password", "forgot-email.form.info": "Enter the email address associated with the account.", @@ -1699,8 +1626,6 @@ "forgot-email.form.error.content": "An error occured when attempting to reset the password for the account associated with the following email address: {{ email }}", - - "forgot-password.title": "Forgot Password", "forgot-password.form.head": "Forgot Password", @@ -1729,7 +1654,6 @@ "forgot-password.form.submit": "Submit password", - "form.add": "Add more", "form.add-help": "Click here to add the current entry and to add another one", @@ -1798,8 +1722,6 @@ "form.repeatable.sort.tip": "Drop the item in the new position", - - "grant-deny-request-copy.deny": "Don't send copy", "grant-deny-request-copy.email.back": "Back", @@ -1830,8 +1752,6 @@ "grant-deny-request-copy.processed": "This request has already been processed. You can use the button below to get back to the home page.", - - "grant-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I have the pleasure to send you in attachment a copy of the file(s) concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", "grant-request-copy.email.subject": "Request copy of document", @@ -1844,7 +1764,6 @@ "grant-request-copy.success": "Successfully granted item request", - "health.breadcrumbs": "Health", "health-page.heading": "Health", @@ -1885,7 +1804,6 @@ "health-page.section.no-issues": "No issues detected", - "home.description": "", "home.breadcrumbs": "Home", @@ -1898,8 +1816,6 @@ "home.top-level-communities.help": "Select a community to browse its collections.", - - "info.end-user-agreement.accept": "I have read and I agree to the End User Agreement", "info.end-user-agreement.accept.error": "An error occurred accepting the End User Agreement", @@ -1950,26 +1866,18 @@ "info.feedback.page_help": "Tha page related to your feedback", - - "item.alerts.private": "This item is non-discoverable", "item.alerts.withdrawn": "This item has been withdrawn", - - "item.edit.authorizations.heading": "With this editor you can view and alter the policies of an item, plus alter policies of individual item components: bundles and bitstreams. Briefly, an item is a container of bundles, and bundles are containers of bitstreams. Containers usually have ADD/REMOVE/READ/WRITE policies, while bitstreams only have READ/WRITE policies.", "item.edit.authorizations.title": "Edit item's Policies", - - "item.badge.private": "Non-discoverable", "item.badge.withdrawn": "Withdrawn", - - "item.bitstreams.upload.bundle": "Bundle", "item.bitstreams.upload.bundle.placeholder": "Select a bundle or input new bundle name", @@ -1992,8 +1900,6 @@ "item.bitstreams.upload.title": "Upload bitstream", - - "item.edit.bitstreams.bundle.edit.buttons.upload": "Upload", "item.edit.bitstreams.bundle.displaying": "Currently displaying {{ amount }} bitstreams of {{ total }}.", @@ -2054,8 +1960,6 @@ "item.edit.bitstreams.upload-button": "Upload", - - "item.edit.delete.cancel": "Cancel", "item.edit.delete.confirm": "Delete", @@ -2074,7 +1978,6 @@ "item.edit.tabs.disabled.tooltip": "You're not authorized to access this tab", - "item.edit.tabs.mapper.head": "Collection Mapper", "item.edit.tabs.item-mapper.title": "Item Edit - Collection Mapper", @@ -2157,8 +2060,6 @@ "item.edit.item-mapper.tabs.map": "Map new collections", - - "item.edit.metadata.add-button": "Add", "item.edit.metadata.discard-button": "Discard", @@ -2215,16 +2116,12 @@ "item.edit.metadata.save-button": "Save", - - "item.edit.modify.overview.field": "Field", "item.edit.modify.overview.language": "Language", "item.edit.modify.overview.value": "Value", - - "item.edit.move.cancel": "Back", "item.edit.move.save-button": "Save", @@ -2251,8 +2148,6 @@ "item.edit.move.title": "Move item", - - "item.edit.private.cancel": "Cancel", "item.edit.private.confirm": "Make it non-discoverable", @@ -2265,8 +2160,6 @@ "item.edit.private.success": "The item is now non-discoverable", - - "item.edit.public.cancel": "Cancel", "item.edit.public.confirm": "Make it discoverable", @@ -2279,8 +2172,6 @@ "item.edit.public.success": "The item is now discoverable", - - "item.edit.reinstate.cancel": "Cancel", "item.edit.reinstate.confirm": "Reinstate", @@ -2293,8 +2184,6 @@ "item.edit.reinstate.success": "The item was reinstated successfully", - - "item.edit.relationships.discard-button": "Discard", "item.edit.relationships.edit.buttons.add": "Add", @@ -2325,10 +2214,8 @@ "item.edit.relationships.no-entity-type": "Add 'dspace.entity.type' metadata to enable relationships for this item", - "item.edit.return": "Back", - "item.edit.tabs.bitstreams.head": "Bitstreams", "item.edit.tabs.bitstreams.title": "Item Edit - Bitstreams", @@ -2336,6 +2223,7 @@ "item.edit.tabs.curate.head": "Curate", "item.edit.tabs.curate.title": "Item Edit - Curate", + "item.edit.curate.title": "Curate Item: {{item}}", "item.edit.tabs.metadata.head": "Metadata", @@ -2404,8 +2292,6 @@ "item.edit.tabs.view.title": "Item Edit - View", - - "item.edit.withdraw.cancel": "Cancel", "item.edit.withdraw.confirm": "Withdraw", @@ -2420,7 +2306,6 @@ "item.orcid.return": "Back", - "item.listelement.badge": "Item", "item.page.description": "Description", @@ -2459,8 +2344,6 @@ "workflow-item.search.result.list.element.supervised.remove-tooltip": "Remove supervision group", - - "item.page.abstract": "Abstract", "item.page.author": "Authors", @@ -2587,8 +2470,6 @@ "item.preview.oaire.fundingStream": "Funding Stream:", - - "item.select.confirm": "Confirm selected", "item.select.empty": "No items to show", @@ -2599,7 +2480,6 @@ "item.select.table.title": "Title", - "item.version.history.empty": "There are no other versions for this item yet.", "item.version.history.head": "Version History", @@ -2640,10 +2520,8 @@ "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", - "item.version.notice": "This is not the latest version of this item. The latest version can be found here.", - "item.version.create.modal.header": "New version", "item.version.create.modal.text": "Create a new version for this item", @@ -2672,7 +2550,6 @@ "item.version.create.notification.inProgress": "A new version cannot be created because there is an inprogress submission in the version history", - "item.version.delete.modal.header": "Delete version", "item.version.delete.modal.text": "Do you want to delete version {{version}}?", @@ -2689,13 +2566,10 @@ "item.version.delete.notification.failure": "Version number {{version}} has not been deleted", - "item.version.edit.notification.success": "The summary of version number {{version}} has been changed", "item.version.edit.notification.failure": "The summary of version number {{version}} has not been changed", - - "itemtemplate.edit.metadata.add-button": "Add", "itemtemplate.edit.metadata.discard-button": "Discard", @@ -2750,8 +2624,6 @@ "itemtemplate.edit.metadata.save-button": "Save", - - "journal.listelement.badge": "Journal", "journal.page.description": "Description", @@ -2772,8 +2644,6 @@ "journal.search.title": "Journal Search", - - "journalissue.listelement.badge": "Journal Issue", "journalissue.page.description": "Description", @@ -2792,8 +2662,6 @@ "journalissue.page.titleprefix": "Journal Issue: ", - - "journalvolume.listelement.badge": "Journal Volume", "journalvolume.page.description": "Description", @@ -2806,7 +2674,6 @@ "journalvolume.page.volume": "Volume", - "iiifsearchable.listelement.badge": "Document Media", "iiifsearchable.page.titleprefix": "Document: ", @@ -2829,7 +2696,6 @@ "iiif.page.description": "Description: ", - "loading.bitstream": "Loading bitstream...", "loading.bitstreams": "Loading bitstreams...", @@ -2866,8 +2732,6 @@ "loading.top-level-communities": "Loading top-level communities...", - - "login.form.email": "Email address", "login.form.forgot-password": "Have you forgotten your password?", @@ -2892,24 +2756,18 @@ "login.breadcrumbs": "Login", - - "logout.form.header": "Log out from DSpace", "logout.form.submit": "Log out", "logout.title": "Logout", - - "menu.header.admin": "Management", "menu.header.image.logo": "Repository logo", "menu.header.admin.description": "Management menu", - - "menu.section.access_control": "Access Control", "menu.section.access_control_authorizations": "Authorizations", @@ -2918,12 +2776,8 @@ "menu.section.access_control_people": "People", - - "menu.section.admin_search": "Admin Search", - - "menu.section.browse_community": "This Community", "menu.section.browse_community_by_author": "By Author", @@ -2946,14 +2800,10 @@ "menu.section.browse_global_communities_and_collections": "Communities & Collections", - - "menu.section.control_panel": "Control Panel", "menu.section.curation_task": "Curation Task", - - "menu.section.edit": "Edit", "menu.section.edit_collection": "Collection", @@ -2962,8 +2812,6 @@ "menu.section.edit_item": "Item", - - "menu.section.export": "Export", "menu.section.export_collection": "Collection", @@ -2976,7 +2824,6 @@ "menu.section.export_batch": "Batch Export (ZIP)", - "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.admin_search": "Admin search menu section", @@ -3009,16 +2856,12 @@ "menu.section.icon.unpin": "Unpin sidebar", - - "menu.section.import": "Import", "menu.section.import_batch": "Batch Import (ZIP)", "menu.section.import_metadata": "Metadata", - - "menu.section.new": "New", "menu.section.new_collection": "Collection", @@ -3031,34 +2874,24 @@ "menu.section.new_process": "Process", - - "menu.section.pin": "Pin sidebar", "menu.section.unpin": "Unpin sidebar", - - "menu.section.processes": "Processes", "menu.section.health": "Health", - - "menu.section.registries": "Registries", "menu.section.registries_format": "Format", "menu.section.registries_metadata": "Metadata", - - "menu.section.statistics": "Statistics", "menu.section.statistics_task": "Statistics Task", - - "menu.section.toggle.access_control": "Toggle Access Control section", "menu.section.toggle.control_panel": "Toggle Control Panel section", @@ -3079,14 +2912,13 @@ "menu.section.toggle.statistics_task": "Toggle Statistics Task section", - "menu.section.workflow": "Administer Workflow", - "metadata-export-search.tooltip": "Export search results as CSV", - "metadata-export-search.submit.success": "The export was started successfully", - "metadata-export-search.submit.error": "Starting the export has failed", + "metadata-export-search.submit.success": "The export was started successfully", + + "metadata-export-search.submit.error": "Starting the export has failed", "mydspace.breadcrumbs": "MyDSpace", @@ -3172,8 +3004,6 @@ "mydspace.view-btn": "View", - - "nav.browse.header": "All of DSpace", "nav.community-browse.header": "By Community", @@ -3198,7 +3028,6 @@ "nav.search.button": "Submit search", - "nav.statistics.header": "Statistics", "nav.stop-impersonating": "Stop impersonating EPerson", @@ -3211,7 +3040,6 @@ "none.listelement.badge": "Item", - "orgunit.listelement.badge": "Organizational Unit", "orgunit.listelement.no-title": "Untitled", @@ -3230,8 +3058,6 @@ "orgunit.page.titleprefix": "Organizational Unit: ", - - "pagination.options.description": "Pagination options", "pagination.results-per-page": "Results Per Page", @@ -3242,8 +3068,6 @@ "pagination.sort-direction": "Sort Options", - - "person.listelement.badge": "Person", "person.listelement.no-title": "No name found", @@ -3276,8 +3100,6 @@ "person.search.title": "Person Search", - - "process.new.select-parameters": "Parameters", "process.new.cancel": "Cancel", @@ -3318,8 +3140,6 @@ "process.new.breadcrumbs": "Create a new process", - - "process.detail.arguments": "Arguments", "process.detail.arguments.empty": "This process doesn't contain any arguments", @@ -3366,8 +3186,6 @@ "process.detail.delete.error": "Something went wrong when deleting the process", - - "process.overview.table.finish": "Finish time (UTC)", "process.overview.table.id": "Process ID", @@ -3404,8 +3222,6 @@ "process.bulk.delete.success": "{{count}} process(es) have been succesfully deleted", - - "profile.breadcrumbs": "Update Profile", "profile.card.identify": "Identify", @@ -3492,8 +3308,6 @@ "project-relationships.search.results.head": "Project Search Results", - - "publication.listelement.badge": "Publication", "publication.page.description": "Description", @@ -3516,14 +3330,12 @@ "publication.search.title": "Publication Search", - "media-viewer.next": "Next", "media-viewer.previous": "Previous", "media-viewer.playlist": "Playlist", - "register-email.title": "New user registration", "register-page.create-profile.header": "Create Profile", @@ -3566,7 +3378,6 @@ "register-page.create-profile.submit.success.head": "Registration completed", - "register-page.registration.header": "New user registration", "register-page.registration.info": "Register an account to subscribe to collections for email updates, and submit new items to DSpace.", @@ -3594,8 +3405,8 @@ "register-page.registration.error.recaptcha": "Error when trying to authenticate with recaptcha", "register-page.registration.google-recaptcha.must-accept-cookies": "In order to register you must accept the Registration and Password recovery (Google reCaptcha) cookies.", - "register-page.registration.error.maildomain": "This email address is not on the list of domains who can register. Allowed domains are {{ domains }}", + "register-page.registration.error.maildomain": "This email address is not on the list of domains who can register. Allowed domains are {{ domains }}", "register-page.registration.google-recaptcha.open-cookie-settings": "Open cookie settings", @@ -3604,6 +3415,7 @@ "register-page.registration.google-recaptcha.notification.message.error": "An error occurred during reCaptcha verification", "register-page.registration.google-recaptcha.notification.message.expired": "Verification expired. Please verify again.", + "register-page.registration.info.maildomain": "Accounts can be registered for mail addresses of the domains", "relationships.add.error.relationship-type.content": "No suitable match could be found for relationship type {{ type }} between the two items", @@ -3648,14 +3460,12 @@ "relationships.isFundingAgencyOf.OrgUnit": "Funder", - "repository.image.logo": "Repository logo", "repository.title": "DSpace Repository", "repository.title.prefix": "DSpace Repository :: ", - "resource-policies.add.button": "Add", "resource-policies.add.for.": "Add a new policy", @@ -3770,8 +3580,6 @@ "resource-policies.table.headers.title.for.collection": "Policies for Collection", - - "search.description": "", "search.switch-configuration.title": "Show", @@ -3782,7 +3590,6 @@ "search.search-form.placeholder": "Search the repository ...", - "search.filters.applied.f.author": "Author", "search.filters.applied.f.dateIssued.max": "End date", @@ -3815,8 +3622,6 @@ "search.filters.applied.f.withdrawn": "Withdrawn", - - "search.filters.filter.author.head": "Author", "search.filters.filter.author.placeholder": "Author name", @@ -3963,8 +3768,6 @@ "search.filters.filter.supervisedBy.label": "Search Supervised By", - - "search.filters.entityType.JournalIssue": "Journal Issue", "search.filters.entityType.JournalVolume": "Journal Volume", @@ -3983,23 +3786,18 @@ "search.filters.withdrawn.false": "No", - "search.filters.head": "Filters", "search.filters.reset": "Reset filters", "search.filters.search.submit": "Submit", - - "search.form.search": "Search", "search.form.search_dspace": "All repository", "search.form.scope.all": "All of DSpace", - - "search.results.head": "Search Results", "search.results.no-results": "Your search returned no results. Having trouble finding what you're looking for? Try putting", @@ -4016,7 +3814,6 @@ "default-relationships.search.results.head": "Search Results", - "search.sidebar.close": "Back to results", "search.sidebar.filters.title": "Filters", @@ -4031,16 +3828,12 @@ "search.sidebar.settings.title": "Settings", - - "search.view-switch.show-detail": "Show detail", "search.view-switch.show-grid": "Show as grid", "search.view-switch.show-list": "Show as list", - - "sorting.ASC": "Ascending", "sorting.DESC": "Descending", @@ -4065,7 +3858,6 @@ "sorting.lastModified.DESC": "Last modified Descending", - "statistics.title": "Statistics", "statistics.header": "Statistics for {{ scope }}", @@ -4090,8 +3882,6 @@ "statistics.table.no-name": "(object name could not be loaded)", - - "submission.edit.breadcrumbs": "Edit Submission", "submission.edit.title": "Edit Submission", @@ -4120,7 +3910,6 @@ "submission.general.save-later": "Save for later", - "submission.import-external.page.title": "Import metadata from an external source", "submission.import-external.title": "Import metadata from an external source", @@ -4328,6 +4117,7 @@ "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Local Authors ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Local Journals ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Local Projects ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Local Publications ({{ count }})", @@ -4343,9 +4133,11 @@ "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Local Journals ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Local Journal Issues ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Local Journal Issues ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Local Journal Volumes ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Local Journal Volumes ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Sherpa Journals ({{ count }})", @@ -4382,17 +4174,16 @@ "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Funder of the Project", - - - "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Search...", "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Current Selection ({{ count }})", "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Journal Issues", + "submission.sections.describe.relationship-lookup.title.JournalIssue": "Journal Issues", "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Journal Volumes", + "submission.sections.describe.relationship-lookup.title.JournalVolume": "Journal Volumes", "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Journals", @@ -4400,6 +4191,7 @@ "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication": "Authors", "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Funding Agency", + "submission.sections.describe.relationship-lookup.title.Project": "Projects", "submission.sections.describe.relationship-lookup.title.Publication": "Publications", @@ -4431,6 +4223,7 @@ "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Selected Journals", "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Selected Journal Volume", + "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Selected Projects", "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Selected Publications", @@ -4446,11 +4239,13 @@ "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Selected Journals", "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Selected Issue", + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Selected Journal Volume", "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Selected Funding Agency", "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Selected Funding", + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Selected Issue", "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Selected Organizational Unit", @@ -4567,7 +4362,6 @@ "submission.sections.submit.progressbar.sherpaPolicies": "Publisher open access policy information", - "submission.sections.sherpa-policy.title-empty": "No publisher policy information available. If your work has an associated ISSN, please enter it above to see any related publisher open access policies.", "submission.sections.status.errors.title": "Errors", @@ -4690,7 +4484,6 @@ "submission.sections.license.notgranted": "You must accept the license", - "submission.sections.sherpa.publication.information": "Publication information", "submission.sections.sherpa.publication.information.title": "Title", @@ -4743,14 +4536,10 @@ "submission.sections.sherpa.error.message": "There was an error retrieving sherpa informations", - - "submission.submit.breadcrumbs": "New submission", "submission.submit.title": "New submission", - - "submission.workflow.generic.delete": "Delete", "submission.workflow.generic.delete-help": "Select this option to discard this item. You will then be asked to confirm it.", @@ -4763,17 +4552,14 @@ "submission.workflow.generic.view-help": "Select this option to view the item's metadata.", - "submission.workflow.generic.submit_select_reviewer": "Select Reviewer", "submission.workflow.generic.submit_select_reviewer-help": "", - "submission.workflow.generic.submit_score": "Rate", "submission.workflow.generic.submit_score-help": "", - "submission.workflow.tasks.claimed.approve": "Approve", "submission.workflow.tasks.claimed.approve_help": "If you have reviewed the item and it is suitable for inclusion in the collection, select \"Approve\".", @@ -4802,8 +4588,6 @@ "submission.workflow.tasks.claimed.return_help": "Return the task to the pool so that another user may perform the task.", - - "submission.workflow.tasks.generic.error": "Error occurred during operation...", "submission.workflow.tasks.generic.processing": "Processing...", @@ -4812,8 +4596,6 @@ "submission.workflow.tasks.generic.success": "Operation successful", - - "submission.workflow.tasks.pool.claim": "Claim", "submission.workflow.tasks.pool.claim_help": "Assign this task to yourself.", @@ -4822,7 +4604,6 @@ "submission.workflow.tasks.pool.show-detail": "Show detail", - "submission.workspace.generic.view": "View", "submission.workspace.generic.view-help": "Select this option to view the item's metadata.", @@ -4899,7 +4680,6 @@ "subscriptions.table.empty.message": "You do not have any subscriptions at this time. To subscribe to email updates for a Community or Collection, use the subscription button on the object's page.", - "thumbnail.default.alt": "Thumbnail Image", "thumbnail.default.placeholder": "No Thumbnail Available", @@ -4916,12 +4696,8 @@ "thumbnail.person.placeholder": "No Profile Picture Available", - - "title": "DSpace", - - "vocabulary-treeview.header": "Hierarchical tree view", "vocabulary-treeview.load-more": "Load more", @@ -4956,8 +4732,6 @@ "virtual-metadata.delete-relationship.modal-head": "Select the items for which you want to save the virtual metadata as real metadata", - - "supervisedWorkspace.search.results.head": "Supervised Items", "workspace.search.results.head": "Your submissions", @@ -4968,8 +4742,6 @@ "supervision.search.results.head": "Workflow and Workspace tasks", - - "workflow-item.edit.breadcrumbs": "Edit workflowitem", "workflow-item.edit.title": "Edit workflowitem", @@ -4990,7 +4762,6 @@ "workflow-item.delete.button.confirm": "Delete", - "workflow-item.send-back.notification.success.title": "Sent back to submitter", "workflow-item.send-back.notification.success.content": "This workflow item was successfully sent back to the submitter", @@ -5047,7 +4818,6 @@ "workflow-item.selectrevieweraction.button.confirm": "Confirm", - "workflow-item.scorereviewaction.notification.success.title": "Rating review", "workflow-item.scorereviewaction.notification.success.content": "The rating for this item workflow item has been successfully submitted", @@ -5315,11 +5085,11 @@ "person.orcid.registry.queue": "ORCID Registry Queue", "person.orcid.registry.auth": "ORCID Authorizations", + "home.recent-submissions.head": "Recent Submissions", "listable-notification-object.default-message": "This object couldn't be retrieved", - "system-wide-alert-banner.retrieval.error": "Something went wrong retrieving the system-wide alert banner", "system-wide-alert-banner.countdown.prefix": "In", @@ -5330,8 +5100,6 @@ "system-wide-alert-banner.countdown.minutes": "{{minutes}} minute(s):", - - "menu.section.system-wide-alert": "System-wide Alert", "system-wide-alert.form.header": "System-wide Alert", @@ -5367,4 +5135,4 @@ "admin.system-wide-alert.breadcrumbs": "System-wide Alerts", "admin.system-wide-alert.title": "System-wide Alerts", -} +} \ No newline at end of file From 134eac5f39791db671bca4460f973cbbb7b622ed Mon Sep 17 00:00:00 2001 From: Alan Orth Date: Wed, 14 Jun 2023 08:53:41 +0300 Subject: [PATCH 205/425] src/assets: update fi.json5 Add a few Finnish language UI strings. --- src/assets/i18n/fi.json5 | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/assets/i18n/fi.json5 b/src/assets/i18n/fi.json5 index ca41138eda..62e7e6bffe 100644 --- a/src/assets/i18n/fi.json5 +++ b/src/assets/i18n/fi.json5 @@ -1922,6 +1922,9 @@ // "home.breadcrumbs": "Home", "home.breadcrumbs": "Etusivu", + // "home.search-form.placeholder": "Search the repository ...", + "home.search-form.placeholder": "Hae julkaisuarkistosta ...", + // "home.title": "DSpace Angular :: Home", "home.title": "DSpace Angular :: Etusivu", @@ -4020,6 +4023,8 @@ // "search.breadcrumbs": "Search", "search.breadcrumbs": "Hae", + // "search.search-form.placeholder": "Search the repository ...", + "search.search-form.placeholder": "Hae julkaisuarkistosta ...", // "search.filters.applied.f.author": "Author", "search.filters.applied.f.author": "Tekijä", From ce517adf7d340f4e3043868877d595d782426483 Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Wed, 14 Jun 2023 13:18:33 +0200 Subject: [PATCH 206/425] [DURACOM-155] lint fix --- .../edit-item-page/item-status/item-status.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/item-page/edit-item-page/item-status/item-status.component.ts b/src/app/item-page/edit-item-page/item-status/item-status.component.ts index 27bc86d33e..828f8d7439 100644 --- a/src/app/item-page/edit-item-page/item-status/item-status.component.ts +++ b/src/app/item-page/edit-item-page/item-status/item-status.component.ts @@ -3,7 +3,7 @@ import { fadeIn, fadeInOut } from '../../../shared/animations/fade'; import { Item } from '../../../core/shared/item.model'; import { ActivatedRoute } from '@angular/router'; import { ItemOperation } from '../item-operation/itemOperation.model'; -import { distinctUntilChanged, first, map, mergeMap, switchMap, toArray } from 'rxjs/operators'; +import { distinctUntilChanged, map, mergeMap, switchMap, toArray } from 'rxjs/operators'; import { BehaviorSubject, Observable, Subscription } from 'rxjs'; import { RemoteData } from '../../../core/data/remote-data'; import { getItemEditRoute, getItemPageRoute } from '../../item-page-routing-paths'; From 93fcbe79aa2bdd9e41f8d6a22c455e211d227f50 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Thu, 11 May 2023 12:50:47 -0400 Subject: [PATCH 207/425] Make grant message an optional addition; main text is in backend. --- .../email-request-copy.component.html | 5 +--- .../grant-request-copy.component.ts | 30 ------------------- src/assets/i18n/en.json5 | 6 ++-- 3 files changed, 3 insertions(+), 38 deletions(-) diff --git a/src/app/request-copy/email-request-copy/email-request-copy.component.html b/src/app/request-copy/email-request-copy/email-request-copy.component.html index d7633b0334..70146ab52c 100644 --- a/src/app/request-copy/email-request-copy/email-request-copy.component.html +++ b/src/app/request-copy/email-request-copy/email-request-copy.component.html @@ -8,10 +8,7 @@
    - -
    - {{ 'grant-deny-request-copy.email.message.empty' | translate }} -
    +
    diff --git a/src/app/request-copy/grant-request-copy/grant-request-copy.component.ts b/src/app/request-copy/grant-request-copy/grant-request-copy.component.ts index 79bae360a0..3f0fd74bc7 100644 --- a/src/app/request-copy/grant-request-copy/grant-request-copy.component.ts +++ b/src/app/request-copy/grant-request-copy/grant-request-copy.component.ts @@ -9,12 +9,8 @@ import { import { RemoteData } from '../../core/data/remote-data'; import { AuthService } from '../../core/auth/auth.service'; import { TranslateService } from '@ngx-translate/core'; -import { combineLatest as observableCombineLatest } from 'rxjs'; import { ItemDataService } from '../../core/data/item-data.service'; -import { EPerson } from '../../core/eperson/models/eperson.model'; import { DSONameService } from '../../core/breadcrumbs/dso-name.service'; -import { Item } from '../../core/shared/item.model'; -import { isNotEmpty } from '../../shared/empty.util'; import { ItemRequestDataService } from '../../core/data/item-request-data.service'; import { RequestCopyEmail } from '../email-request-copy/request-copy-email.model'; import { NotificationsService } from '../../shared/notifications/notifications.service'; @@ -54,8 +50,6 @@ export class GrantRequestCopyComponent implements OnInit { private route: ActivatedRoute, private authService: AuthService, private translateService: TranslateService, - private itemDataService: ItemDataService, - private nameService: DSONameService, private itemRequestService: ItemRequestDataService, private notificationsService: NotificationsService, ) { @@ -69,31 +63,7 @@ export class GrantRequestCopyComponent implements OnInit { redirectOn4xx(this.router, this.authService), ); - const msgParams$ = observableCombineLatest([ - this.itemRequestRD$.pipe(getFirstSucceededRemoteDataPayload()), - this.authService.getAuthenticatedUserFromStore(), - ]).pipe( - switchMap(([itemRequest, user]: [ItemRequest, EPerson]) => { - return this.itemDataService.findById(itemRequest.itemId).pipe( - getFirstSucceededRemoteDataPayload(), - map((item: Item) => { - const uri = item.firstMetadataValue('dc.identifier.uri'); - return Object.assign({ - recipientName: itemRequest.requestName, - itemUrl: isNotEmpty(uri) ? uri : item.handle, - itemName: this.nameService.getName(item), - authorName: this.nameService.getName(user), - authorEmail: user.email, - }); - }), - ); - }), - ); - this.subject$ = this.translateService.get('grant-request-copy.email.subject'); - this.message$ = msgParams$.pipe( - switchMap((params) => this.translateService.get('grant-request-copy.email.message', params)), - ); } /** diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 480bf8834e..b1bb88fce6 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -1726,7 +1726,7 @@ "grant-deny-request-copy.email.back": "Back", - "grant-deny-request-copy.email.message": "Message", + "grant-deny-request-copy.email.message": "Optional additional message", "grant-deny-request-copy.email.message.empty": "Please enter a message", @@ -1752,15 +1752,13 @@ "grant-deny-request-copy.processed": "This request has already been processed. You can use the button below to get back to the home page.", - "grant-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I have the pleasure to send you in attachment a copy of the file(s) concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", - "grant-request-copy.email.subject": "Request copy of document", "grant-request-copy.error": "An error occurred", "grant-request-copy.header": "Grant document copy request", - "grant-request-copy.intro": "This message will be sent to the applicant of the request. The requested document(s) will be attached.", + "grant-request-copy.intro": "A message will be sent to the applicant of the request. The requested document(s) will be attached.", "grant-request-copy.success": "Successfully granted item request", From 004645b5e44a10b93aa26b9b6bbd59c0e0400f28 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Thu, 11 May 2023 13:28:30 -0400 Subject: [PATCH 208/425] Remove lint. --- .../grant-request-copy/grant-request-copy.component.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/app/request-copy/grant-request-copy/grant-request-copy.component.ts b/src/app/request-copy/grant-request-copy/grant-request-copy.component.ts index 3f0fd74bc7..baf078df76 100644 --- a/src/app/request-copy/grant-request-copy/grant-request-copy.component.ts +++ b/src/app/request-copy/grant-request-copy/grant-request-copy.component.ts @@ -9,8 +9,6 @@ import { import { RemoteData } from '../../core/data/remote-data'; import { AuthService } from '../../core/auth/auth.service'; import { TranslateService } from '@ngx-translate/core'; -import { ItemDataService } from '../../core/data/item-data.service'; -import { DSONameService } from '../../core/breadcrumbs/dso-name.service'; import { ItemRequestDataService } from '../../core/data/item-request-data.service'; import { RequestCopyEmail } from '../email-request-copy/request-copy-email.model'; import { NotificationsService } from '../../shared/notifications/notifications.service'; From 2d716c7630b03be67d1df950baa808f8a07fbb96 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Thu, 11 May 2023 13:57:38 -0400 Subject: [PATCH 209/425] Remove test which is no longer valid. --- .../grant-request-copy.component.spec.ts | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/app/request-copy/grant-request-copy/grant-request-copy.component.spec.ts b/src/app/request-copy/grant-request-copy/grant-request-copy.component.spec.ts index b9d51f710d..32fef125ea 100644 --- a/src/app/request-copy/grant-request-copy/grant-request-copy.component.spec.ts +++ b/src/app/request-copy/grant-request-copy/grant-request-copy.component.spec.ts @@ -123,19 +123,6 @@ describe('GrantRequestCopyComponent', () => { spyOn(translateService, 'get').and.returnValue(observableOf('translated-message')); }); - it('message$ should be parameterized correctly', (done) => { - component.message$.subscribe(() => { - expect(translateService.get).toHaveBeenCalledWith(jasmine.anything(), Object.assign({ - recipientName: itemRequest.requestName, - itemUrl: itemUrl, - itemName: itemName, - authorName: user.name, - authorEmail: user.email, - })); - done(); - }); - }); - describe('grant', () => { let email: RequestCopyEmail; From 2f06a7cb17a3ede463789cba27f47858bb8961c2 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Wed, 14 Jun 2023 18:26:55 +0200 Subject: [PATCH 210/425] [CST-5729] Change in order to save header only if configured and existing --- server.ts | 27 +++++++++++++++++++++------ src/config/cache-config.interface.ts | 2 +- src/environments/environment.test.ts | 1 + 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/server.ts b/server.ts index f73bd1b774..3bbb28820a 100644 --- a/server.ts +++ b/server.ts @@ -375,13 +375,13 @@ function cacheCheck(req, res, next) { // If cached copy exists, return it to the user. if (cachedCopy && cachedCopy.page) { - if (cachedCopy.headers && Array.isArray(environment.cache.serverSide.headers) && environment.cache.serverSide.headers.length > 0) { - environment.cache.serverSide.headers.forEach((header) => { - if (cachedCopy.headers[header.toLowerCase()]) { + if (cachedCopy.headers) { + Object.keys(cachedCopy.headers).forEach((header) => { + if (cachedCopy.headers[header]) { if (environment.cache.serverSide.debug) { console.log(`Restore cached ${header} header`); } - res.setHeader(header, cachedCopy.headers[header.toLowerCase()]); + res.setHeader(header, cachedCopy.headers[header]); } }); } @@ -462,8 +462,8 @@ function saveToCache(req, page: any) { // Avoid caching "/reload/[random]" paths (these are hard refreshes after logout) if (key.startsWith('/reload')) { return; } - // Retrieve response headers - const headers = req.res.getHeaders(); + // Retrieve response headers to save, if any + const headers = retrieveHeaders(req.res); // If bot cache is enabled, save it to that cache if it doesn't exist or is expired // (NOTE: has() will return false if page is expired in cache) if (botCacheEnabled() && !botCache.has(key)) { @@ -479,6 +479,21 @@ function saveToCache(req, page: any) { } } +function retrieveHeaders(response) { + const headers = Object.create({}); + if (Array.isArray(environment.cache.serverSide.headers) && environment.cache.serverSide.headers.length > 0) { + environment.cache.serverSide.headers.forEach((header) => { + if (response.hasHeader(header)) { + if (environment.cache.serverSide.debug) { + console.log(`Save ${header} header to cache`); + } + headers[header] = response.getHeader(header); + } + }); + } + + return headers; +} /** * Whether a user is authenticated or not */ diff --git a/src/config/cache-config.interface.ts b/src/config/cache-config.interface.ts index 14af509bbf..73520c95ea 100644 --- a/src/config/cache-config.interface.ts +++ b/src/config/cache-config.interface.ts @@ -13,7 +13,7 @@ export interface CacheConfig extends Config { serverSide: { // Debug server-side caching. Set to true to see cache hits/misses/refreshes in console logs. debug: boolean, - // List of headers to restore from the cache hit + // List of response headers to save into the cache headers: string[], // Cache specific to known bots. Allows you to serve cached contents to bots only. botCache: { diff --git a/src/environments/environment.test.ts b/src/environments/environment.test.ts index 9fe58f868c..cb9d2c7130 100644 --- a/src/environments/environment.test.ts +++ b/src/environments/environment.test.ts @@ -59,6 +59,7 @@ export const environment: BuildConfig = { // In-memory cache of server-side rendered pages. Disabled in test environment (max=0) serverSide: { debug: false, + headers: ['Link'], botCache: { max: 0, timeToLive: 24 * 60 * 60 * 1000, // 1 day From fda4ef77e49b5eee2cafdbf8eec553c60b21a64b Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Thu, 15 Jun 2023 12:42:29 +0200 Subject: [PATCH 211/425] [DURACOM-152] Section visibility read-only --- .../sections/form/section-form.component.spec.ts | 2 ++ .../sections/form/section-form.component.ts | 16 ++++++++++++---- src/app/submission/sections/sections.service.ts | 5 +++-- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/app/submission/sections/form/section-form.component.spec.ts b/src/app/submission/sections/form/section-form.component.spec.ts index 889f17c393..346a22fa84 100644 --- a/src/app/submission/sections/form/section-form.component.spec.ts +++ b/src/app/submission/sections/form/section-form.component.spec.ts @@ -249,6 +249,8 @@ describe('SubmissionSectionFormComponent test suite', () => { formConfigService.findByHref.and.returnValue(createSuccessfulRemoteDataObject$(testFormConfiguration)); sectionsServiceStub.getSectionData.and.returnValue(observableOf(sectionData)); sectionsServiceStub.getSectionServerErrors.and.returnValue(observableOf([])); + sectionsServiceStub.isSectionReadOnly.and.returnValue(observableOf(false)); + spyOn(comp, 'initForm'); spyOn(comp, 'subscriptions'); diff --git a/src/app/submission/sections/form/section-form.component.ts b/src/app/submission/sections/form/section-form.component.ts index 326d277ffb..a89a9aa886 100644 --- a/src/app/submission/sections/form/section-form.component.ts +++ b/src/app/submission/sections/form/section-form.component.ts @@ -118,6 +118,12 @@ export class SubmissionSectionFormComponent extends SectionModelComponent { protected subs: Subscription[] = []; protected submissionObject: SubmissionObject; + + /** + * A flag representing if this section is readonly + */ + protected isSectionReadonly = false; + /** * The FormComponent reference */ @@ -175,13 +181,15 @@ export class SubmissionSectionFormComponent extends SectionModelComponent { this.sectionService.getSectionData(this.submissionId, this.sectionData.id, this.sectionData.sectionType), this.submissionObjectService.findById(this.submissionId, true, false, followLink('item')).pipe( getFirstSucceededRemoteData(), - getRemoteDataPayload()) + getRemoteDataPayload()), + this.sectionService.isSectionReadOnly(this.submissionId, this.sectionData.id, this.submissionService.getSubmissionScope()) ])), take(1)) - .subscribe(([sectionData, submissionObject]: [WorkspaceitemSectionFormObject, SubmissionObject]) => { + .subscribe(([sectionData, submissionObject, isSectionReadOnly]: [WorkspaceitemSectionFormObject, SubmissionObject, boolean]) => { if (isUndefined(this.formModel)) { // this.sectionData.errorsToShow = []; this.submissionObject = submissionObject; + this.isSectionReadonly = isSectionReadOnly; // Is the first loading so init form this.initForm(sectionData); this.sectionData.data = sectionData; @@ -286,11 +294,11 @@ export class SubmissionSectionFormComponent extends SectionModelComponent { this.formConfig, this.collectionId, sectionData, - this.submissionService.getSubmissionScope() + this.submissionService.getSubmissionScope(), + this.isSectionReadonly ); const sectionMetadata = this.sectionService.computeSectionConfiguredMetadata(this.formConfig); this.sectionService.updateSectionData(this.submissionId, this.sectionData.id, sectionData, this.sectionData.errorsToShow, this.sectionData.serverValidationErrors, sectionMetadata); - } catch (e) { const msg: string = this.translate.instant('error.submission.sections.init-form-error') + e.toString(); const sectionError: SubmissionSectionError = { diff --git a/src/app/submission/sections/sections.service.ts b/src/app/submission/sections/sections.service.ts index cc2802dba7..0ea6232237 100644 --- a/src/app/submission/sections/sections.service.ts +++ b/src/app/submission/sections/sections.service.ts @@ -334,8 +334,9 @@ export class SectionsService { filter((sectionObj) => hasValue(sectionObj)), map((sectionObj: SubmissionSectionObject) => { return isNotEmpty(sectionObj.visibility) - && sectionObj.visibility.other === 'READONLY' - && submissionScope !== SubmissionScopeType.WorkspaceItem; + && ((sectionObj.visibility.other === 'READONLY' && submissionScope !== SubmissionScopeType.WorkspaceItem) + || (sectionObj.visibility.main === 'READONLY' && submissionScope === SubmissionScopeType.WorkspaceItem) + ); }), distinctUntilChanged()); } From 47543b42373a7c0a95600a7e8ef2943dcbc3ef51 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Thu, 15 Jun 2023 17:18:00 +0200 Subject: [PATCH 212/425] [CST-5729] Fix duplicate links for download page --- .../bitstream-download-page/bitstream-download-page.component.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts index cf8d8e7767..0b8e6a66e5 100644 --- a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts +++ b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts @@ -108,7 +108,6 @@ export class BitstreamDownloadPageComponent implements OnInit { signpostingLinks.forEach((link: SignpostingLink) => { links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}"` + (isNotEmpty(link.type) ? ` ; type="${link.type}" ` : ' '); - links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}" ; type="${link.type}" `; }); this.responseService.setHeader('Link', links); From 4c6cae911bcf7e55484c2d7411161f4e2c567272 Mon Sep 17 00:00:00 2001 From: Davide Negretti Date: Wed, 14 Jun 2023 12:03:11 +0200 Subject: [PATCH 213/425] [DURACOM-157] Multiple uploaders in the same page don't work --- src/app/shared/upload/uploader/uploader.component.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/shared/upload/uploader/uploader.component.html b/src/app/shared/upload/uploader/uploader.component.html index c55a3eee1a..88dc5926e4 100644 --- a/src/app/shared/upload/uploader/uploader.component.html +++ b/src/app/shared/upload/uploader/uploader.component.html @@ -22,10 +22,10 @@ {{dropMsg | translate}}{{'uploader.or' | translate}} -
    From d00ad0cd0e33e8eb3590768e56e64f1e24e694ba Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Fri, 16 Jun 2023 13:27:51 +0200 Subject: [PATCH 214/425] [DURACOM-152] Field visibility --- .../submission/submission-field-scope-type.ts | 4 ++++ .../core/submission/submission-scope-type.ts | 2 +- .../form/builder/parsers/field-parser.ts | 22 ++++++++++++++----- .../shared/form/builder/parsers/row-parser.ts | 22 +++++++++++++------ 4 files changed, 37 insertions(+), 13 deletions(-) create mode 100644 src/app/core/submission/submission-field-scope-type.ts diff --git a/src/app/core/submission/submission-field-scope-type.ts b/src/app/core/submission/submission-field-scope-type.ts new file mode 100644 index 0000000000..4a9292ec3d --- /dev/null +++ b/src/app/core/submission/submission-field-scope-type.ts @@ -0,0 +1,4 @@ +export enum SubmissionFieldScopeType { + WorkspaceItem = 'SUBMISSION', + WorkflowItem = 'WORKFLOW', +} diff --git a/src/app/core/submission/submission-scope-type.ts b/src/app/core/submission/submission-scope-type.ts index 6ed32d3b4e..f319e5c473 100644 --- a/src/app/core/submission/submission-scope-type.ts +++ b/src/app/core/submission/submission-scope-type.ts @@ -1,4 +1,4 @@ export enum SubmissionScopeType { WorkspaceItem = 'WORKSPACE', - WorkflowItem = 'WORKFLOW' + WorkflowItem = 'WORKFLOW', } diff --git a/src/app/shared/form/builder/parsers/field-parser.ts b/src/app/shared/form/builder/parsers/field-parser.ts index e118ca7add..7ea55d4454 100644 --- a/src/app/shared/form/builder/parsers/field-parser.ts +++ b/src/app/shared/form/builder/parsers/field-parser.ts @@ -24,6 +24,7 @@ import { RelationshipOptions } from '../models/relationship-options.model'; import { VocabularyOptions } from '../../../../core/submission/vocabularies/models/vocabulary-options.model'; import { ParserType } from './parser-type'; import { isNgbDateStruct } from '../../../date.util'; +import { SubmissionScopeType } from '../../../../core/submission/submission-scope-type'; export const SUBMISSION_ID: InjectionToken = new InjectionToken('submissionId'); export const CONFIG_DATA: InjectionToken = new InjectionToken('configData'); @@ -282,7 +283,7 @@ export abstract class FieldParser { controlModel.id = (this.fieldId).replace(/\./g, '_'); // Set read only option - controlModel.readOnly = this.parserOptions.readOnly || this.isFieldReadOnly(this.configData.visibility, this.parserOptions.submissionScope); + controlModel.readOnly = this.parserOptions.readOnly || this.isFieldReadOnly(this.configData.visibility, this.configData.scope, this.parserOptions.submissionScope); controlModel.disabled = controlModel.readOnly; if (hasValue(this.configData.selectableRelationship)) { controlModel.relationship = Object.assign(new RelationshipOptions(), this.configData.selectableRelationship); @@ -322,14 +323,25 @@ export abstract class FieldParser { } /** - * Check if a field is read-only with the given scope + * Checks if a field is read-only with the given scope. + * The field is readonly when submissionScope is WORKSPACE and the main visibility is READONLY + * or when submissionScope is WORKFLOW and the other visibility is READONLY * @param visibility * @param submissionScope */ - private isFieldReadOnly(visibility: SectionVisibility, submissionScope: string) { + private isFieldReadOnly(visibility: SectionVisibility, fieldScope: string, submissionScope: string) { return isNotEmpty(submissionScope) - && isNotEmpty(visibility) - && visibility.main === VisibilityType.READONLY; + && isNotEmpty(fieldScope) + && isNotEmpty(visibility) + && (( + submissionScope === SubmissionScopeType.WorkspaceItem + && visibility.main === VisibilityType.READONLY + ) + || + (visibility.other === VisibilityType.READONLY + && submissionScope === SubmissionScopeType.WorkflowItem + ) + ); } /** diff --git a/src/app/shared/form/builder/parsers/row-parser.ts b/src/app/shared/form/builder/parsers/row-parser.ts index 6602e53714..3f5b4a04c6 100644 --- a/src/app/shared/form/builder/parsers/row-parser.ts +++ b/src/app/shared/form/builder/parsers/row-parser.ts @@ -1,3 +1,4 @@ +import { SubmissionFieldScopeType } from './../../../../core/submission/submission-field-scope-type'; import { SectionVisibility } from './../../../../submission/objects/section-visibility.model'; import { Injectable, Injector } from '@angular/core'; @@ -13,7 +14,7 @@ import { ParserOptions } from './parser-options'; import { ParserType } from './parser-type'; import { setLayout } from './parser.utils'; import { DYNAMIC_FORM_CONTROL_TYPE_RELATION_GROUP } from '../ds-dynamic-form-ui/ds-dynamic-form-constants'; -import { VisibilityType } from '../../../../submission/sections/visibility-type'; +import { SubmissionScopeType } from '../../../../core/submission/submission-scope-type'; export const ROW_ID_PREFIX = 'df-row-group-config-'; @@ -125,18 +126,25 @@ export class RowParser { } /** - * Check if the field is hidden or not, based on the visibility and the submission scope + * Check if the field is hidden or not. + * It is hidden when we do have the scope, + * but we do not have the visibility, + * also the field scope should be different from the submissionScope. * @param visibility The visibility of the field * @param scope the scope of the field * @param submissionScope the scope of the submission * @returns If the field is hidden or not */ private isHidden(visibility: SectionVisibility, scope: string, submissionScope: string): boolean { - return isEmpty(visibility) - || (isNotEmpty(visibility) && visibility.main !== VisibilityType.READONLY) - && isNotEmpty(submissionScope) - && (isNotEmpty(scope) - && scope !== submissionScope); + return isNotEmpty(scope) + && ( + isEmpty(visibility) + && ( + submissionScope === SubmissionScopeType.WorkspaceItem && scope !== SubmissionFieldScopeType.WorkspaceItem + || + submissionScope === SubmissionScopeType.WorkflowItem && scope !== SubmissionFieldScopeType.WorkflowItem + ) + ); } filterScopedFields(fields: FormFieldModel[], submissionScope): FormFieldModel[] { From 69726f6fa0f1347158ae336abaf2a7188c7eb421 Mon Sep 17 00:00:00 2001 From: Sascha Szott Date: Fri, 16 Jun 2023 15:00:52 +0200 Subject: [PATCH 215/425] resolve German translation differences --- src/assets/i18n/de.json5 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/assets/i18n/de.json5 b/src/assets/i18n/de.json5 index 71dfabb1c0..b03dc21e5a 100644 --- a/src/assets/i18n/de.json5 +++ b/src/assets/i18n/de.json5 @@ -262,7 +262,7 @@ "admin.registries.schema.fields.table.id": "ID", // "admin.registries.schema.fields.table.scopenote": "Scope Note", - "admin.registries.schema.fields.table.scopenote": "Gültigkeitsbereich", + "admin.registries.schema.fields.table.scopenote": "Geltungs- bzw. Gültigkeitsbereich", // "admin.registries.schema.form.create": "Create metadata field", "admin.registries.schema.form.create": "Metadatenfeld anlegen", @@ -277,7 +277,7 @@ "admin.registries.schema.form.qualifier": "Qualifizierer", // "admin.registries.schema.form.scopenote": "Scope Note", - "admin.registries.schema.form.scopenote": "Geltungsbereich", + "admin.registries.schema.form.scopenote": "Geltungs- bzw. Gültigkeitsbereich", // "admin.registries.schema.head": "Metadata Schema", "admin.registries.schema.head": "Metadatenschema", From 42026b36d52b4468cc93b6e1f0ad8c108bad9211 Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Fri, 16 Jun 2023 15:31:45 +0200 Subject: [PATCH 216/425] [DURACOM-152] refactored concatenated fields visibility --- .../ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts | 2 ++ src/app/shared/form/builder/parsers/concat-field-parser.ts | 6 +----- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts index 1d6037a409..dc7c796648 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts @@ -46,6 +46,7 @@ export class DynamicConcatModel extends DynamicFormGroupModel { @serializable() submissionId: string; @serializable() hasSelectableMetadata: boolean; @serializable() metadataValue: MetadataValue; + @serializable() readOnly?: boolean; isCustomGroup = true; valueUpdates: Subject; @@ -65,6 +66,7 @@ export class DynamicConcatModel extends DynamicFormGroupModel { this.valueUpdates = new Subject(); this.valueUpdates.subscribe((value: string) => this.value = value); this.typeBindRelations = config.typeBindRelations ? config.typeBindRelations : []; + this.readOnly = config.disabled; } get value() { diff --git a/src/app/shared/form/builder/parsers/concat-field-parser.ts b/src/app/shared/form/builder/parsers/concat-field-parser.ts index b849698857..e86de70c81 100644 --- a/src/app/shared/form/builder/parsers/concat-field-parser.ts +++ b/src/app/shared/form/builder/parsers/concat-field-parser.ts @@ -19,8 +19,6 @@ import { SUBMISSION_ID } from './field-parser'; import { DsDynamicInputModel, DsDynamicInputModelConfig } from '../ds-dynamic-form-ui/models/ds-dynamic-input.model'; -import { VisibilityType } from '../../../../submission/sections/visibility-type'; -import isEqual from 'lodash/isEqual'; export class ConcatFieldParser extends FieldParser { @@ -85,9 +83,7 @@ export class ConcatFieldParser extends FieldParser { input1ModelConfig.required = true; } - if (isNotEmpty(this.configData.visibility) && isEqual(this.configData.visibility.main, VisibilityType.READONLY)) { - concatGroup.disabled = true; - } + concatGroup.disabled = input1ModelConfig.readOnly; if (isNotEmpty(this.firstPlaceholder)) { input1ModelConfig.placeholder = this.firstPlaceholder; From adf8cc7bc5a6a69a8ab9d7fc16507e84a1c0ba37 Mon Sep 17 00:00:00 2001 From: Ricardo Saraiva <122451983+rsaraivac@users.noreply.github.com> Date: Fri, 16 Jun 2023 17:18:34 +0100 Subject: [PATCH 217/425] Update pt-PT.json5 Incorporates some revised translations, adds and updates newly introduced translation keys. --- src/assets/i18n/pt-PT.json5 | 280 +++++++++++++++++++++++------------- 1 file changed, 177 insertions(+), 103 deletions(-) diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index c622c4c257..a187ff927c 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -1,6 +1,6 @@ { - // Dspace v7.x > i18n pt-PT > last reviewed 05-06-2023 + // Dspace v7.x > i18n pt-PT > last reviewed 16-06-2023 // "401.help": "You're not authorized to access this page. You can use the button below to get back to the home page.", "401.help": "Não está autorizado a aceder a esta página. Pode utilizar o botão em baixo para voltar à página de início.", @@ -336,13 +336,13 @@ "admin.access-control.epeople.actions.delete": "Apagar utilizador", // "admin.access-control.epeople.actions.impersonate": "Impersonate EPerson", - "admin.access-control.epeople.actions.impersonate": "Assumir o papel do Utilizador", + "admin.access-control.epeople.actions.impersonate": "Assumir papel de utilizador", // "admin.access-control.epeople.actions.reset": "Reset password", "admin.access-control.epeople.actions.reset": "Redefinir password", // "admin.access-control.epeople.actions.stop-impersonating": "Stop impersonating EPerson", - "admin.access-control.epeople.actions.stop-impersonating": "Deixar de assumir o papel do utilizador", + "admin.access-control.epeople.actions.stop-impersonating": "Deixar de assumir o papel de utilizador", // "admin.access-control.epeople.breadcrumbs": "EPeople", "admin.access-control.epeople.breadcrumbs": "Utilizadores", @@ -777,19 +777,19 @@ "admin.search.item.withdraw": "Retirar", // "admin.search.title": "Administrative Search", - "admin.search.title": "Pesquisa Administrativa", + "admin.search.title": "Pesquisa administrativa", // "administrativeView.search.results.head": "Administrative Search", "administrativeView.search.results.head": "Pesquisa administrativa", // "admin.workflow.breadcrumbs": "Administer Workflow", - "admin.workflow.breadcrumbs": "Gestão do workflow", + "admin.workflow.breadcrumbs": "Gestão do fluxo de trabalho", // "admin.workflow.title": "Administer Workflow", - "admin.workflow.title": "Gestão do workflow", + "admin.workflow.title": "Gestão do fluxo de trabalho", // "admin.workflow.item.workflow": "Workflow", - "admin.workflow.item.workflow": "Workflow", + "admin.workflow.item.workflow": "Fluxo de trabalho", // "admin.workflow.item.workspace": "Workspace", "admin.workflow.item.workspace": "Área de trabalho", @@ -825,11 +825,14 @@ "admin.batch-import.page.header": "Importação em lote (batch)", // "admin.metadata-import.page.help": "You can drop or browse CSV files that contain batch metadata operations on files here", - "admin.metadata-import.page.help": "Pode arrastar ou procurar ficheiros .csv que contenham operações em lote de metadados", + "admin.metadata-import.page.help": "Pode arrastar ou procurar ficheiros .csv que contenham 'revisões' de metadados em lote", // "admin.batch-import.page.help": "Select the Collection to import into. Then, drop or browse to a Simple Archive Format (SAF) zip file that includes the Items to import", "admin.batch-import.page.help": "Selecione a coleção para a qual pretende importar. Em seguida, largue ou selecione ficheiro .zip em formato Simple Archive Format (SAF) que inclua os itens a importar.", + // "admin.batch-import.page.toggle.help": "It is possible to perform import either with file upload or via URL, use above toggle to set the input source", + "admin.batch-import.page.toggle.help": "É possível efetuar a importação com o carregamento de ficheiros ou através de URL. Utilize o botão de seleção em cima para definir a fonte de entrada", + // "admin.metadata-import.page.dropMsg": "Drop a metadata CSV to import", "admin.metadata-import.page.dropMsg": "Arraste ficheiro .csv para importar metadados", @@ -854,9 +857,21 @@ // "admin.metadata-import.page.error.addFile": "Select file first!", "admin.metadata-import.page.error.addFile": "Selecione um ficheiro!", + // "admin.metadata-import.page.error.addFileUrl": "Insert file url first!", + "admin.metadata-import.page.error.addFileUrl": "Insira primeiro o URL do ficheiro!", + // "admin.batch-import.page.error.addFile": "Select Zip file first!", "admin.batch-import.page.error.addFile": "Selecione primeiro o ficheiro .zip!", + // "admin.metadata-import.page.toggle.upload": "Upload", + "admin.metadata-import.page.toggle.upload": "Carregar", + + // "admin.metadata-import.page.toggle.url": "URL", + "admin.metadata-import.page.toggle.url": "URL", + + // "admin.metadata-import.page.urlMsg": "Insert the batch ZIP url to import", + "admin.metadata-import.page.urlMsg": "Insira o URL do lote ZIP a importar", + // "admin.metadata-import.page.validateOnly": "Validate Only", "admin.metadata-import.page.validateOnly": "Validar", @@ -1028,6 +1043,9 @@ // "bitstream.edit.notifications.error.format.title": "An error occurred saving the bitstream's format", "bitstream.edit.notifications.error.format.title": "Ocorreu um erro ao guardar o formato do ficheiro", + // "bitstream.edit.notifications.error.primaryBitstream.title": "An error occurred saving the primary bitstream", + "bitstream.edit.notifications.error.primaryBitstream.title": "Ocorreu um erro ao guardar o ficheiro primário", + // "bitstream.edit.form.iiifLabel.label": "IIIF Label", "bitstream.edit.form.iiifLabel.label": "IIIF Label", @@ -1130,6 +1148,9 @@ // "browse.comcol.by.subject": "By Subject", "browse.comcol.by.subject": "Por assunto", + // "browse.comcol.by.srsc": "By Subject Category", + "browse.comcol.by.srsc": "Por vocabulário controlado (SRSC)", + // "browse.comcol.by.title": "By Title", "browse.comcol.by.title": "Por título", @@ -1160,6 +1181,9 @@ // "browse.metadata.subject.breadcrumbs": "Browse by Subject", "browse.metadata.subject.breadcrumbs": "Percorrer por assunto", + // "browse.metadata.srsc.breadcrumbs": "Browse by Subject Category", + "browse.metadata.srsc.breadcrumbs": "Percorrer por vocabulário controlado (SRSC)", + // "browse.metadata.title.breadcrumbs": "Browse by Title", "browse.metadata.title.breadcrumbs": "Percorrer por título", @@ -1241,6 +1265,12 @@ // "browse.startsWith.type_text": "Filter results by typing the first few letters", "browse.startsWith.type_text": "Filtrar resultados inserindo as primeiras letras", + // "browse.startsWith.input": "Filter", + "browse.startsWith.input": "Filtrar", + + // "browse.taxonomy.button": "Browse", + "browse.taxonomy.button": "Pesquisar", + // "browse.title": "Browsing {{ collection }} by {{ field }}{{ startsWith }} {{ value }}", "browse.title": "Percorrer {{ collection }} por {{ field }}{{ startsWith }} {{ value }}", @@ -1287,7 +1317,7 @@ "collection.delete.head": "Apagar coleção", // "collection.delete.notification.fail": "Collection could not be deleted", - "collection.delete.notification.fail": "Coleção não pode ser apagada", + "collection.delete.notification.fail": "Não foi possível apagar a coleção", // "collection.delete.notification.success": "Successfully deleted collection", "collection.delete.notification.success": "Apagou a coleção com sucesso", @@ -1437,7 +1467,7 @@ "collection.edit.tabs.source.form.errors.oaiSource.required": "Deve indicar o identificador da coleção a ser agregado (set).", // "collection.edit.tabs.source.form.harvestType": "Content being harvested", - "collection.edit.tabs.source.form.harvestType": "Os conteúdo estão a ser agregados", + "collection.edit.tabs.source.form.harvestType": "Os conteúdos estão a ser agregados", // "collection.edit.tabs.source.form.head": "Configure an external source", "collection.edit.tabs.source.form.head": "Configure uma fonte externa", @@ -1559,7 +1589,7 @@ // "collection.page.edit": "Edit this collection", "collection.page.edit": "Editar esta coleção", - // "collection.page.handle": "Permanent URI for this collection:", + // "collection.page.handle": "Permanent URI for this collection", "collection.page.handle": "URI permanente para esta coleção:", // "collection.page.license": "License", @@ -1955,11 +1985,11 @@ // "cookies.consent.content-modal.title": "Information that we collect", "cookies.consent.content-modal.title": "Informação que recolhemos", - // "cookies.consent.content-modal.services": "Services", - "cookies.consent.content-modal.services": "Serviços", + // "cookies.consent.content-modal.services": "services", + "cookies.consent.content-modal.services": "serviços", - // "cookies.consent.content-modal.service": "Service", - "cookies.consent.content-modal.service": "Serviço", + // "cookies.consent.content-modal.service": "service", + "cookies.consent.content-modal.service": "serviço", // "cookies.consent.app.title.authentication": "Authentication", "cookies.consent.app.title.authentication": "Autenticação", @@ -1977,7 +2007,7 @@ "cookies.consent.app.title.acknowledgement": "Termos de Uso", // "cookies.consent.app.description.acknowledgement": "Required for saving your acknowledgements and consents", - "cookies.consent.app.description.acknowledgement": "Obrigatório para guardar os 'Termos de Uso' e 'Consentimentos'", + "cookies.consent.app.description.acknowledgement": "Obrigatório para guardar os nossos 'Termos de Uso' e 'Consentimentos'", // "cookies.consent.app.title.google-analytics": "Google Analytics", "cookies.consent.app.title.google-analytics": "Google Analytics", @@ -2333,6 +2363,26 @@ // "error.validation.groupExists": "This group already exists", "error.validation.groupExists": "Este grupo já existe!", + // "error.validation.metadata.name.invalid-pattern": "This field cannot contain dots, commas or spaces. Please use the Element & Qualifier fields instead", + + // "error.validation.metadata.name.max-length": "This field may not contain more than 32 characters", + "error.validation.metadata.name.max-length": "Este campo não pode conter mais de 32 caracteres", + + // "error.validation.metadata.namespace.max-length": "This field may not contain more than 256 characters", + "error.validation.metadata.namespace.max-length": "Este campo não pode conter mais de 256 caracteres", + + // "error.validation.metadata.element.invalid-pattern": "This field cannot contain dots, commas or spaces. Please use the Qualifier field instead", + "error.validation.metadata.element.invalid-pattern": "Este campo não pode conter pontos, vírgulas ou espaços. Ao invés, utilize o campo 'Qualificador'", + + // "error.validation.metadata.element.max-length": "This field may not contain more than 64 characters", + "error.validation.metadata.element.max-length": "Este campo não pode conter mais de 64 caracteres", + + // "error.validation.metadata.qualifier.invalid-pattern": "This field cannot contain dots, commas or spaces", + "error.validation.metadata.qualifier.invalid-pattern": "Este campo não pode conter pontos, vírgulas ou espaços.", + + // "error.validation.metadata.qualifier.max-length": "This field may not contain more than 64 characters", + "error.validation.metadata.qualifier.max-length": "Este campo não pode conter mais de 64 caracteres.", + // "feed.description": "Syndication feed", "feed.description": "Feed", @@ -2343,7 +2393,7 @@ "footer.copyright": "Copyright © 2003-{{ year }}", // "footer.link.dspace": "DSpace software", - "footer.link.dspace": "Software DSpace", + "footer.link.dspace": "Powered by DSpace", // "footer.link.lyrasis": "LYRASIS", "footer.link.lyrasis": "LYRASIS", @@ -2543,8 +2593,8 @@ // "grant-deny-request-copy.email.back": "Back", "grant-deny-request-copy.email.back": "Voltar", - // "grant-deny-request-copy.email.message": "Message", - "grant-deny-request-copy.email.message": "Mensagem", + // "grant-deny-request-copy.email.message": "Optional additional message", + "grant-deny-request-copy.email.message": "Mensagem adicional opcional", // "grant-deny-request-copy.email.message.empty": "Please enter a message", "grant-deny-request-copy.email.message.empty": "Por favor insira uma mensagem", @@ -2582,9 +2632,6 @@ // "grant-deny-request-copy.processed": "This request has already been processed. You can use the button below to get back to the home page.", "grant-deny-request-copy.processed": "Este pedido já foi processado. Pode utilizar o botão em baixo para voltar para a página principal.", - // "grant-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I have the pleasure to send you in attachment a copy of the file(s) concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", - "grant-request-copy.email.message": "Caro {{ recipientName }},\nEm resposta ao seu pedido de cópia, tenho o prazer de lhe enviar em anexo uma cópia do(s) ficheiro(s) relativo(s) ao documento: \"{{ itemUrl }}\" ({{ itemName }}), do qual sou autor.\n\nCom os melhores cumprimentos,\n{{ authorName }} <{{ authorEmail }}>", - // "grant-request-copy.email.subject": "Request copy of document", "grant-request-copy.email.subject": "Pedido de cópia de documento", @@ -2594,7 +2641,7 @@ // "grant-request-copy.header": "Grant document copy request", "grant-request-copy.header": "Conceder cópia de documento", - // "grant-request-copy.intro": "This message will be sent to the applicant of the request. The requested document(s) will be attached.", + // "grant-request-copy.intro": "A message will be sent to the applicant of the request. The requested document(s) will be attached.", "grant-request-copy.intro": "Esta mensagem será enviada ao requerente do pedido de cópia. Os ficheiros solicitado(s) serão anexado(s) à mensagem.", // "grant-request-copy.success": "Successfully granted item request", @@ -2702,6 +2749,9 @@ // "info.end-user-agreement.title": "End User Agreement", "info.end-user-agreement.title": "Termos de Uso", + // "info.end-user-agreement.hosting-country": "the United States", + "info.end-user-agreement.hosting-country": "Portugal", + // "info.privacy.breadcrumbs": "Privacy Statement", "info.privacy.breadcrumbs": "Política de Privacidade", @@ -3613,19 +3663,8 @@ // "item.preview.dc.relation.issn": "ISSN", "item.preview.dc.relation.issn": "ISSN", - - // "item.preview.dc.relation.eissn": "EISSN", - "item.preview.dc.relation.eissn": "EISSN", - // "item.preview.dc.identifier.isbn": "ISBN", "item.preview.dc.identifier.isbn": "ISBN", - - // "item.preview.dc.identifier.eisbn": "EISBN", - "item.preview.dc.identifier.eisbn": "EISBN", - - // "item.preview.dc.identifier.tid": "TID", - "item.preview.dc.identifier.tid": "TID", - // "item.preview.dc.identifier": "Identifier:", "itemm.preview.dc.identifier": "Identificador:", @@ -3635,6 +3674,9 @@ // "item.preview.dc.identifier.doi": "DOI", "item.preview.dc.identifier.doi": "DOI", + // "item.preview.dc.publisher": "Publisher:", + "item.preview.dc.publisher": "Editora:", + // "item.preview.person.familyName": "Surname:", "item.preview.person.familyName": "Apelido:", @@ -3711,7 +3753,7 @@ "item.version.history.table.workspaceItem": "Área de trabalho do item", // "item.version.history.table.workflowItem": "Workflow item", - "item.version.history.table.workflowItem": "Área de trabalho do item", + "item.version.history.table.workflowItem": "Fluxo de trabalho do item", // "item.version.history.table.actions": "Action", "item.version.history.table.actions": "Ação", @@ -4148,6 +4190,9 @@ // "menu.section.browse_global_by_subject": "By Subject", "menu.section.browse_global_by_subject": "Por assunto", + // "menu.section.browse_global_by_srsc": "By Subject Category", + "menu.section.browse_global_by_srsc": "Por vocabulário controlado (SRSC)", + // "menu.section.browse_global_by_title": "By Title", "menu.section.browse_global_by_title": "Por título", @@ -4191,34 +4236,34 @@ "menu.section.export_batch": "Importação em lote (ZIP)", // "menu.section.icon.access_control": "Access Control menu section", - "menu.section.icon.access_control": "Secção do menu Controle de Acesso", + "menu.section.icon.access_control": "Secção do menu controle de acesso", // "menu.section.icon.admin_search": "Admin search menu section", - "menu.section.icon.admin_search": "Secção do menu de Pesquisa Administrativa", + "menu.section.icon.admin_search": "Secção do menu pesquisa administrativa", // "menu.section.icon.control_panel": "Control Panel menu section", - "menu.section.icon.control_panel": "Secção do menu Painel de Controlo", + "menu.section.icon.control_panel": "Secção do menu painel de controlo", // "menu.section.icon.curation_tasks": "Curation Task menu section", "menu.section.icon.curation_tasks": "Secção do menu tarefas de curadoria", // "menu.section.icon.edit": "Edit menu section", - "menu.section.icon.edit": "Secção do menu Editar", + "menu.section.icon.edit": "Secção do menu editar", // "menu.section.icon.export": "Export menu section", - "menu.section.icon.export": "Secção do menu Exportar", + "menu.section.icon.export": "Secção do menu exportar", // "menu.section.icon.find": "Find menu section", - "menu.section.icon.find": "Secção do menu Pesquisar", + "menu.section.icon.find": "Secção do menu pesquisar", // "menu.section.icon.health": "Health check menu section", - "menu.section.icon.health": "Seção do menu Diagnóstico do sistema", + "menu.section.icon.health": "Seção do menu diagnóstico do sistema", // "menu.section.icon.import": "Import menu section", - "menu.section.icon.import": "Secção do menu Importar", + "menu.section.icon.import": "Secção do menu importar", // "menu.section.icon.new": "New menu section", - "menu.section.icon.new": "Secção do menu Novo", + "menu.section.icon.new": "Secção do menu novo", // "menu.section.icon.pin": "Pin sidebar", "menu.section.icon.pin": "Fixar barra lateral", @@ -4227,13 +4272,13 @@ "menu.section.icon.processes": "Processos diagnóstico", // "menu.section.icon.registries": "Registries menu section", - "menu.section.icon.registries": "Secção do menu Registos", + "menu.section.icon.registries": "Secção do menu registos", // "menu.section.icon.statistics_task": "Statistics Task menu section", - "menu.section.icon.statistics_task": "Secção do menu Tarefas de Estatísticas", + "menu.section.icon.statistics_task": "Secção do menu tarefas de estatísticas", // "menu.section.icon.workflow": "Administer workflow menu section", - "menu.section.icon.workflow": "Menu administração de tarefas", + "menu.section.icon.workflow": "Secção do menu de administração do fluxo de trabalho", // "menu.section.icon.unpin": "Unpin sidebar", "menu.section.icon.unpin": "Soltar barra lateral", @@ -4323,7 +4368,7 @@ "menu.section.toggle.statistics_task": "Alternar secção tarefas de estatísticas", // "menu.section.workflow": "Administer Workflow", - "menu.section.workflow": "Gestão do workflow", + "menu.section.workflow": "Gestão do fluxo de trabalho", // "metadata-export-search.tooltip": "Export search results as CSV", "metadata-export-search.tooltip": "Exportar resultados de pesquisa em CSV", @@ -4335,7 +4380,7 @@ "metadata-export-search.submit.error": "O início da exportação falhou!", // "mydspace.breadcrumbs": "MyDSpace", - "mydspace.breadcrumbs": "Área Pessoal", + "mydspace.breadcrumbs": "Área pessoal", // "mydspace.description": "", "mydspace.description": "", @@ -4416,7 +4461,7 @@ "mydspace.results.no-uri": "Sem URI", // "mydspace.search-form.placeholder": "Search in mydspace...", - "mydspace.search-form.placeholder": "Pesquisar na Área Pessoal...", + "mydspace.search-form.placeholder": "Pesquisar na área pessoal...", // "mydspace.show.workflow": "Workflow tasks", "mydspace.show.workflow": "Todas as tarefas", @@ -4443,7 +4488,7 @@ "mydspace.status.mydspaceWorkspace": "Depósito por terminar", // "mydspace.title": "MyDSpace", - "mydspace.title": "Área Pessoal", + "mydspace.title": "Área pessoal", // "mydspace.upload.upload-failed": "Error creating new workspace. Please verify the content uploaded before retry.", "mydspace.upload.upload-failed": "Erro ao criar novo espaço de trabalho. Por favor verifique o conteúdo enviado antes de tentar novamente.", @@ -4485,7 +4530,7 @@ "nav.main.description": "Barra de naveção principal", // "nav.mydspace": "MyDSpace", - "nav.mydspace": "Área Pessoal", + "nav.mydspace": "Área pessoal", // "nav.profile": "Profile", "nav.profile": "Perfil", @@ -5147,11 +5192,11 @@ // "repository.image.logo": "Repository logo", "repository.image.logo": "Logótipo do repositório", - // "repository.title.prefix": "DSpace Angular :: ", - "repository.title.prefix": "Repositório :: ", + // "repository.title": "DSpace Repository", + "repository.title": "Repositório :: ", - // "repository.title.prefixDSpace": "DSpace Angular ::", - "repository.title.prefixDSpace": "Repositório ::", + // "repository.title.prefix": "DSpace Repository :: ", + "repository.title.prefix": "Repositório :: ", // "resource-policies.add.button": "Add", "resource-policies.add.button": "Adicionar", @@ -5724,22 +5769,22 @@ "sorting.score.DESC": "Mais relevante", // "sorting.dc.date.issued.ASC": "Date Issued Ascending", - "sorting.dc.date.issued.ASC": "Data de publicação ascendente", + "sorting.dc.date.issued.ASC": "Data publicação ascendente", // "sorting.dc.date.issued.DESC": "Date Issued Descending", - "sorting.dc.date.issued.DESC": "Data de publicação descendente", + "sorting.dc.date.issued.DESC": "Data publicação descendente", // "sorting.dc.date.accessioned.ASC": "Accessioned Date Ascending", - "sorting.dc.date.accessioned.ASC": "Data de disponibilização ascendente", + "sorting.dc.date.accessioned.ASC": "Data depósito ascendente", // "sorting.dc.date.accessioned.DESC": "Accessioned Date Descending", - "sorting.dc.date.accessioned.DESC": "Data de disponibilização descendente", + "sorting.dc.date.accessioned.DESC": "Data depósito descendente", // "sorting.lastModified.ASC": "Last modified Ascending", - "sorting.lastModified.ASC": "Última modificação ascendente", + "sorting.lastModified.ASC": "Última alteração ascendente", // "sorting.lastModified.DESC": "Last modified Descending", - "sorting.lastModified.DESC": "Última modificação descendente", + "sorting.lastModified.DESC": "Última alteração descendente", // "statistics.title": "Statistics", "statistics.title": "Estatísticas", @@ -5786,7 +5831,7 @@ // "submission.general.cancel": "Cancel", "submission.general.cancel": "Cancelar", - // "submission.general.cannot_submit": "You have not the privilege to make a new submission.", + // "submission.general.cannot_submit": "You don't have permission to make a new submission.", "submission.general.cannot_submit": "Não possui permissões para fazer um novo depósito.", // "submission.general.deposit": "Deposit", @@ -6828,13 +6873,13 @@ "submission.workflow.tasks.claimed.reject.submit": "Rejeitar", // "submission.workflow.tasks.claimed.reject_help": "If you have reviewed the item and found it is not suitable for inclusion in the collection, select \"Reject\". You will then be asked to enter a message indicating why the item is unsuitable, and whether the submitter should change something and resubmit.", - "submission.workflow.tasks.claimed.reject_help": "Se reviu o item e achou que ele não é adequado para inclusão na coleção, selecione \"Rejeitar\". Deverá indicar numa mensagem o motivo da rejeição e se o depositante deve modificar algo e reenviar.", + "submission.workflow.tasks.claimed.reject_help": "Se reviu o item e acha que não está em conformidade para inclusão na coleção, clique em 'Rejeitar'. Deverá indicar o motivo da rejeição e/ou se o depositante pode rever algo para o reenviar.", // "submission.workflow.tasks.claimed.return": "Return to pool", - "submission.workflow.tasks.claimed.return": "Voltar para a listagem", + "submission.workflow.tasks.claimed.return": "Libertar tarefa", // "submission.workflow.tasks.claimed.return_help": "Return the task to the pool so that another user may perform the task.", - "submission.workflow.tasks.claimed.return_help": "Enviar a tarefa para a lista para que outra pessoa possa executar.", + "submission.workflow.tasks.claimed.return_help": "Libertar esta tarefa para que outra pessoa a possa executar.", // "submission.workflow.tasks.generic.error": "Error occurred during operation...", "submission.workflow.tasks.generic.error": "ocorreu um erro durante a operação...", @@ -6849,7 +6894,7 @@ "submission.workflow.tasks.generic.success": "Operação realizada com sucesso", // "submission.workflow.tasks.pool.claim": "Claim", - "submission.workflow.tasks.pool.claim": "Assumir", + "submission.workflow.tasks.pool.claim": "Assumir tarefa", // "submission.workflow.tasks.pool.claim_help": "Assign this task to yourself.", "submission.workflow.tasks.pool.claim_help": "Assumir esta tarefa", @@ -7059,37 +7104,37 @@ "workspace.search.results.head": "Os meus depósitos", // "workflowAdmin.search.results.head": "Administer Workflow", - "workflowAdmin.search.results.head": "Gestão do workflow", + "workflowAdmin.search.results.head": "Gestão do fluxo de trabalho", // "workflow.search.results.head": "Workflow tasks", - "workflow.search.results.head": "Tarefas em workflow", + "workflow.search.results.head": "Tarefas em fluxo de trabalho", // "supervision.search.results.head": "Workflow and Workspace tasks", - "supervision.search.results.head": "Workflow e tarefas na área de trabalho", + "supervision.search.results.head": "Depósitos e tarefas em áreas de trabalho", // "workflow-item.edit.breadcrumbs": "Edit workflowitem", - "workflow-item.edit.breadcrumbs": "Editar item em processamento", + "workflow-item.edit.breadcrumbs": "Editar item em fluxo de trabalho", // "workflow-item.edit.title": "Edit workflowitem", - "workflow-item.edit.title": "Editar item em processamento", + "workflow-item.edit.title": "Editar item em em fluxo de trabalho", // "workflow-item.delete.notification.success.title": "Deleted", "workflow-item.delete.notification.success.title": "Apagado", // "workflow-item.delete.notification.success.content": "This workflow item was successfully deleted", - "workflow-item.delete.notification.success.content": "Este item do workflow foi apagado com sucesso", + "workflow-item.delete.notification.success.content": "Este item em fluxo de trabalho foi apagado com sucesso", // "workflow-item.delete.notification.error.title": "Something went wrong", "workflow-item.delete.notification.error.title": "Algo correu mal", // "workflow-item.delete.notification.error.content": "The workflow item could not be deleted", - "workflow-item.delete.notification.error.content": "Não foi possível apagar o item do workflow", + "workflow-item.delete.notification.error.content": "Não foi possível apagar o item do fluxo de trabalho", // "workflow-item.delete.title": "Delete workflow item", - "workflow-item.delete.title": "Apagar item do workflow", + "workflow-item.delete.title": "Apagar item do fluxo de trabalho", // "workflow-item.delete.header": "Delete workflow item", - "workflow-item.delete.header": "Apagar item do workflow", + "workflow-item.delete.header": "Apagar item do fluxo de trabalho", // "workflow-item.delete.button.cancel": "Cancel", "workflow-item.delete.button.cancel": "Cancelar", @@ -7107,13 +7152,13 @@ "workflow-item.send-back.notification.error.title": "Algo correu mal", // "workflow-item.send-back.notification.error.content": "The workflow item could not be sent back to the submitter", - "workflow-item.send-back.notification.error.content": "Não foi pos´sivel enviar ao depositante este item do workflow", + "workflow-item.send-back.notification.error.content": "Não foi possível reenviar ao depositante este item em workflow", // "workflow-item.send-back.title": "Send workflow item back to submitter", - "workflow-item.send-back.title": "Enviar item do workflow para o depositante", + "workflow-item.send-back.title": "Enviar item em fluxo de trabalho para o depositante", // "workflow-item.send-back.header": "Send workflow item back to submitter", - "workflow-item.send-back.header": "Enviar item do workflow para o depositante", + "workflow-item.send-back.header": "Enviar item em fluxo de trabalho para o depositante", // "workflow-item.send-back.button.cancel": "Cancel", "workflow-item.send-back.button.cancel": "Cancelar", @@ -7146,10 +7191,10 @@ "workspace-item.delete.notification.success.title": "Apagado", // "workspace-item.delete.title": "This workspace item was successfully deleted", - "workspace-item.delete.title": "Este item foi removido da área de trabalho com êxito", + "workspace-item.delete.title": "Este item foi removido, com êxito, da área de trabalho", // "workspace-item.delete.notification.error.title": "Something went wrong", - "workspace-item.delete.notification.error.title": "Ocorreu algum erro!", + "workspace-item.delete.notification.error.title": "Ocorreu um erro!", // "workspace-item.delete.notification.error.content": "The workspace item could not be deleted", "workspace-item.delete.notification.error.content": "Não foi possível remover o item da área de trabalho", @@ -7274,8 +7319,8 @@ // "researcherprofile.success.claim.title": "Success", "researcherprofile.success.claim.title": "Sucesso", - // "person.page.orcid.create": "Create an ORCID iD", - "person.page.orcid.create": "Criar um ORCID iD", + // "person.page.orcid.create": "Create an ORCID ID", + "person.page.orcid.create": "Criar um ORCID ID", // "person.page.orcid.granted-authorizations": "Granted authorizations", "person.page.orcid.granted-authorizations": "Autorizações concedidas", @@ -7283,8 +7328,8 @@ // "person.page.orcid.grant-authorizations": "Grant authorizations", "person.page.orcid.grant-authorizations": "Conceder autorizações", - // "person.page.orcid.link": "Connect to ORCID iD", - "person.page.orcid.link": "Ligar ao ORCID iD", + // "person.page.orcid.link": "Connect to ORCID ID", + "person.page.orcid.link": "Ligar ao ORCID ID", // "person.page.orcid.link.processing": "Linking profile to ORCID...", "person.page.orcid.link.processing": "Ligação do perfil ao ORCID...", @@ -7663,8 +7708,40 @@ // Other strings... // Missing, Duplicate or Redundant ??? - // NOT FOUND 30-05-2023 + // NOT FOUND 16-06-2023 + // "browse.metadata.srsc": "Subject Category", + "browse.metadata.srsc": "vocabulário controlado (SRSC)", + + // "mydspace.status.archived": "Archived", + "mydspace.status.archived": "Depositado", + + // "mydspace.status.validation": "Validation", + "mydspace.status.validation": "Em validação", + + // "mydspace.status.waiting-for-controller": "Waiting for Controller", + "mydspace.status.waiting-for-controller": "Aguarda validador", + + // "mydspace.status.workflow": "Workflow", + "mydspace.status.workflow": "Em fluxo de trabalho", + + // "mydspace.status.workspace": "Workspace", + "mydspace.status.workspace": "Depósito por terminar", + + // "search.filters.namedresourcetype.Archived": "Archived", + "search.filters.namedresourcetype.Archived": "Depositado", + + // "search.filters.namedresourcetype.Validation": "Validation", + "search.filters.namedresourcetype.Validation": "Em validação", + + // "search.filters.namedresourcetype.waitingforcontroller": "Waiting for Controller", + "search.filters.namedresourcetype.waitingforcontroller": "Aguarda validador", + + // "search.filters.namedresourcetype.Workflow": "Workflow", + "search.filters.namedresourcetype.Workflow": "Em fluxo de trabalho", + + // "search.filters.namedresourcetype.Workspace": "Workspace", + "search.filters.namedresourcetype.Workspace": "Por terminar", // "datafile.listelement.badge": "Data file", "datafile.listelement.badge": "Ficheiro de dados", @@ -7694,21 +7771,21 @@ "register-page.create-profile.security.error.password-length": "A senha deve possuir pelo menos 6 caracteres.", // "search.form.search_mydspace": "Search MyDSpace", - "search.form.search_mydspace": "Pesquisar na Área Pessoal", + "search.form.search_mydspace": "Pesquisar na área pessoal", // "forgot-password.form.error.password-length": "The password should be at least 6 characters long.", "forgot-password.form.error.password-length": "A senha deve ter pelo menos 6 caracteres.", - // "search.filters.entityType.Publication": "Publicação", + // "search.filters.entityType.Publication": "Publication", "search.filters.entityType.Publication": "Publicação", - // "search.filters.entityType.Person": "Pessoa", + // "search.filters.entityType.Person": "Person", "search.filters.entityType.Person": "Pessoa", - // "search.filters.entityType.Project": "Projecto", + // "search.filters.entityType.Project": "Project", "search.filters.entityType.Project": "Projeto", - // "search.filters.entityType.Journal": "Revista", + // "search.filters.entityType.Journal": "Journal", "search.filters.entityType.Journal": "Revista", // "search.filters.entityType.DataFile": "Data File", @@ -7723,18 +7800,6 @@ // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.local-entity": "Successfully imported and added external project to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.local-entity": "Importado com sucesso e adicionado autor à seleção", - // "search.filters.namedresourcetype.Archived": "Archived", - "search.filters.namedresourcetype.Archived": "Aceites", - - // "search.filters.namedresourcetype.Workspace": "Workspace", - "search.filters.namedresourcetype.Workspace": "Por terminar", - - // "search.filters.namedresourcetype.Workflow": "Workflow", - "search.filters.namedresourcetype.Workflow": "Em fluxo de trabalho", - - // "search.filters.namedresourcetype.Validation": "Validation", - "search.filters.namedresourcetype.Validation": "Em validação", - // "orgunit.search.results.head": "Organizational Unit Search Results", "orgunit.search.results.head": "Resultados da pesquisa de organizações", @@ -7747,4 +7812,13 @@ // "journalissue-relationships.search.results.head": "Journal Issue Search Results", "journalissue-relationships.search.results.head": "Resultados da pesquisa de números", + // "grant-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I have the pleasure to send you in attachment a copy of the file(s) concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", + "grant-request-copy.email.message": "Caro {{ recipientName }},\nEm resposta ao seu pedido de cópia, tenho o prazer de lhe enviar em anexo uma cópia do(s) ficheiro(s) relativo(s) ao documento: \"{{ itemUrl }}\" ({{ itemName }}), do qual sou autor.\n\nCom os melhores cumprimentos,\n{{ authorName }} <{{ authorEmail }}>", + + // "item.preview.dc.relation.eissn": "EISSN", + "item.preview.dc.relation.eissn": "EISSN", + + // "item.preview.dc.identifier.eisbn": "EISBN", + "item.preview.dc.identifier.eisbn": "EISBN", + } From c63001c205313d963c4ad5a4a63dd582fc8df71f Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Fri, 16 Jun 2023 16:08:18 -0400 Subject: [PATCH 218/425] Fix illogical templateUrl paths. Add missed DenyRequestCopyComponent. --- .../themed-deny-request-copy.component.ts | 26 +++++++++++++++++++ .../themed-email-request-copy.component.ts | 1 - .../request-copy-routing.module.ts | 4 +-- src/app/request-copy/request-copy.module.ts | 5 ++++ .../deny-request-copy.component.ts | 2 +- .../email-request-copy.component.ts | 2 +- .../grant-request-copy.component.ts | 2 +- src/themes/custom/lazy-theme.module.ts | 2 ++ 8 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 src/app/request-copy/deny-request-copy/themed-deny-request-copy.component.ts diff --git a/src/app/request-copy/deny-request-copy/themed-deny-request-copy.component.ts b/src/app/request-copy/deny-request-copy/themed-deny-request-copy.component.ts new file mode 100644 index 0000000000..664e4c541b --- /dev/null +++ b/src/app/request-copy/deny-request-copy/themed-deny-request-copy.component.ts @@ -0,0 +1,26 @@ +import { Component } from '@angular/core'; +import { ThemedComponent } from 'src/app/shared/theme-support/themed.component'; + +import { DenyRequestCopyComponent } from 'src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component'; + +/** + * Themed wrapper for deny-request-copy.component + */ +@Component({ + selector: 'ds-themed-deny-request-copy', + styleUrls: [], + templateUrl: './../../shared/theme-support/themed.component.html', +}) +export class ThemedDenyRequestCopyComponent extends ThemedComponent { + protected getComponentName(): string { + return 'DenyRequestCopyComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../themes/${themeName}/app/request-copy/deny-request-copy/deny-request-copy.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./deny-request-copy.component'); + } +} diff --git a/src/app/request-copy/email-request-copy/themed-email-request-copy.component.ts b/src/app/request-copy/email-request-copy/themed-email-request-copy.component.ts index 6b808288ad..d010e43060 100644 --- a/src/app/request-copy/email-request-copy/themed-email-request-copy.component.ts +++ b/src/app/request-copy/email-request-copy/themed-email-request-copy.component.ts @@ -12,7 +12,6 @@ import { RequestCopyEmail } from './request-copy-email.model'; styleUrls: [], templateUrl: './../../shared/theme-support/themed.component.html', }) - export class ThemedEmailRequestCopyComponent extends ThemedComponent { /** * Event emitter for sending the email diff --git a/src/app/request-copy/request-copy-routing.module.ts b/src/app/request-copy/request-copy-routing.module.ts index c3ac0be46a..4138fc42a6 100644 --- a/src/app/request-copy/request-copy-routing.module.ts +++ b/src/app/request-copy/request-copy-routing.module.ts @@ -3,7 +3,7 @@ import { RouterModule } from '@angular/router'; import { RequestCopyResolver } from './request-copy.resolver'; import { GrantDenyRequestCopyComponent } from './grant-deny-request-copy/grant-deny-request-copy.component'; import { REQUEST_COPY_DENY_PATH, REQUEST_COPY_GRANT_PATH } from './request-copy-routing-paths'; -import { DenyRequestCopyComponent } from './deny-request-copy/deny-request-copy.component'; +import { ThemedDenyRequestCopyComponent } from './deny-request-copy/themed-deny-request-copy.component'; import { ThemedGrantRequestCopyComponent } from './grant-request-copy/themed-grant-request-copy.component'; @NgModule({ @@ -21,7 +21,7 @@ import { ThemedGrantRequestCopyComponent } from './grant-request-copy/themed-gra }, { path: REQUEST_COPY_DENY_PATH, - component: DenyRequestCopyComponent, + component: ThemedDenyRequestCopyComponent, }, { path: REQUEST_COPY_GRANT_PATH, diff --git a/src/app/request-copy/request-copy.module.ts b/src/app/request-copy/request-copy.module.ts index b5ea3da50c..90d741a879 100644 --- a/src/app/request-copy/request-copy.module.ts +++ b/src/app/request-copy/request-copy.module.ts @@ -4,6 +4,7 @@ import { SharedModule } from '../shared/shared.module'; import { GrantDenyRequestCopyComponent } from './grant-deny-request-copy/grant-deny-request-copy.component'; import { RequestCopyRoutingModule } from './request-copy-routing.module'; import { DenyRequestCopyComponent } from './deny-request-copy/deny-request-copy.component'; +import { ThemedDenyRequestCopyComponent } from './deny-request-copy/themed-deny-request-copy.component'; import { EmailRequestCopyComponent } from './email-request-copy/email-request-copy.component'; import { ThemedEmailRequestCopyComponent } from './email-request-copy/themed-email-request-copy.component'; import { GrantRequestCopyComponent } from './grant-request-copy/grant-request-copy.component'; @@ -18,11 +19,15 @@ import { ThemedGrantRequestCopyComponent } from './grant-request-copy/themed-gra declarations: [ GrantDenyRequestCopyComponent, DenyRequestCopyComponent, + ThemedDenyRequestCopyComponent, EmailRequestCopyComponent, ThemedEmailRequestCopyComponent, GrantRequestCopyComponent, ThemedGrantRequestCopyComponent, ], + exports: [ + ThemedEmailRequestCopyComponent, + ], providers: [] }) diff --git a/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.ts b/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.ts index fb65aae9bc..628b2b3f83 100644 --- a/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.ts +++ b/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.ts @@ -8,7 +8,7 @@ import { // styleUrls: ['./deny-request-copy.component.scss'], styleUrls: [], // templateUrl: './deny-request-copy.component.html', - templateUrl: './../../request-copy/deny-request-copy/deny-request-copy.component.html', + templateUrl: './../../../../../app/request-copy/deny-request-copy/deny-request-copy.component.html', }) export class DenyRequestCopyComponent extends BaseComponent { diff --git a/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.ts b/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.ts index d4da93a99f..a0274f6efd 100644 --- a/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.ts +++ b/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.ts @@ -8,7 +8,7 @@ import { // styleUrls: ['./email-request-copy.component.scss'], styleUrls: [], // templateUrl: './email-request-copy.component.html', - templateUrl: './../../request-copy/email-request-copy/email-request-copy.component.html', + templateUrl: './../../../../../app/request-copy/email-request-copy/email-request-copy.component.html', }) export class EmailRequestCopyComponent extends BaseComponent { diff --git a/src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.ts b/src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.ts index 20d0ae90c1..446044942e 100644 --- a/src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.ts +++ b/src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.ts @@ -8,7 +8,7 @@ import { // styleUrls: ['./grant-request-copy.component.scss'], styleUrls: [], // templateUrl: './grant-request-copy.component.html', - templateUrl: './../../request-copy/grant-request-copy/grant-request-copy.component.html', + templateUrl: './../../../../../app/request-copy/grant-request-copy/grant-request-copy.component.html', }) export class GrantRequestCopyComponent extends BaseComponent { diff --git a/src/themes/custom/lazy-theme.module.ts b/src/themes/custom/lazy-theme.module.ts index 6ec946a6ba..b0f94d3ab7 100644 --- a/src/themes/custom/lazy-theme.module.ts +++ b/src/themes/custom/lazy-theme.module.ts @@ -153,6 +153,7 @@ import { ThumbnailComponent } from './app/thumbnail/thumbnail.component'; import { ItemStatusComponent } from './app/item-page/edit-item-page/item-status/item-status.component'; import { EditBitstreamPageComponent } from './app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component'; import { FormModule } from '../../app/shared/form/form.module'; +import { RequestCopyModule } from 'src/app/request-copy/request-copy.module'; const DECLARATIONS = [ FileSectionComponent, @@ -293,6 +294,7 @@ const DECLARATIONS = [ SystemWideAlertModule, NgxGalleryModule, FormModule, + RequestCopyModule, ], declarations: DECLARATIONS, exports: [ From d2663670706f7a93e13c67f5262469ee77328a99 Mon Sep 17 00:00:00 2001 From: Tom Misilo <1446856+misilot@users.noreply.github.com> Date: Fri, 16 Jun 2023 15:37:15 -0500 Subject: [PATCH 219/425] Fix typo for the word Series --- src/assets/i18n/en.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index da9c67cbd4..0c651991ae 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -2474,7 +2474,7 @@ "item.preview.dc.identifier": "Identifier:", - "item.preview.dc.relation.ispartof": "Journal or Serie", + "item.preview.dc.relation.ispartof": "Journal or Series", "item.preview.dc.identifier.doi": "DOI", From 00aa0271f2e5e5671a3b8a183188e3ec3dbb07aa Mon Sep 17 00:00:00 2001 From: Alan Orth Date: Mon, 19 Jun 2023 09:50:46 +0300 Subject: [PATCH 220/425] src/assets/i18n: update English strings Re-word two messages for better English and consistency with other similar strings. --- src/assets/i18n/en.json5 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 0c651991ae..6c91bae4c1 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -1298,9 +1298,9 @@ "community.all-lists.head": "Subcommunities and Collections", - "community.sub-collection-list.head": "Collections of this Community", + "community.sub-collection-list.head": "Collections in this Community", - "community.sub-community-list.head": "Communities of this Community", + "community.sub-community-list.head": "Communities in this Community", "cookies.consent.accept-all": "Accept all", From 4eb229791052713fd5d15775f8251b853a48000b Mon Sep 17 00:00:00 2001 From: Davide Negretti Date: Mon, 19 Jun 2023 13:24:10 +0200 Subject: [PATCH 221/425] [DURACOM-160] Hide "Send feedback" link when CanSendFeedback is false --- src/app/footer/footer.component.html | 2 +- src/app/footer/footer.component.spec.ts | 5 ++++- src/app/footer/footer.component.ts | 10 +++++++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/app/footer/footer.component.html b/src/app/footer/footer.component.html index 97265d7a23..13d84e6e2e 100644 --- a/src/app/footer/footer.component.html +++ b/src/app/footer/footer.component.html @@ -75,7 +75,7 @@ {{ 'footer.link.end-user-agreement' | translate}} -
  • +
  • {{ 'footer.link.feedback' | translate}}
  • diff --git a/src/app/footer/footer.component.spec.ts b/src/app/footer/footer.component.spec.ts index 15b289d5fb..9f0250edc4 100644 --- a/src/app/footer/footer.component.spec.ts +++ b/src/app/footer/footer.component.spec.ts @@ -15,6 +15,8 @@ import { FooterComponent } from './footer.component'; import { TranslateLoaderMock } from '../shared/mocks/translate-loader.mock'; import { storeModuleConfig } from '../app.reducer'; +import { AuthorizationDataService } from '../core/data/feature-authorization/authorization-data.service'; +import { AuthorizationDataServiceStub } from '../shared/testing/authorization-service.stub'; let comp: FooterComponent; let fixture: ComponentFixture; @@ -34,7 +36,8 @@ describe('Footer component', () => { })], declarations: [FooterComponent], // declare the test component providers: [ - FooterComponent + FooterComponent, + { provide: AuthorizationDataService, useClass: AuthorizationDataServiceStub }, ], schemas: [CUSTOM_ELEMENTS_SCHEMA] }); diff --git a/src/app/footer/footer.component.ts b/src/app/footer/footer.component.ts index c4195c8eb3..f5e4c3799a 100644 --- a/src/app/footer/footer.component.ts +++ b/src/app/footer/footer.component.ts @@ -2,6 +2,9 @@ import { Component, Optional } from '@angular/core'; import { hasValue } from '../shared/empty.util'; import { KlaroService } from '../shared/cookies/klaro.service'; import { environment } from '../../environments/environment'; +import { Observable } from 'rxjs'; +import { AuthorizationDataService } from '../core/data/feature-authorization/authorization-data.service'; +import { FeatureID } from '../core/data/feature-authorization/feature-id'; @Component({ selector: 'ds-footer', @@ -17,8 +20,13 @@ export class FooterComponent { showTopFooter = false; showPrivacyPolicy = environment.info.enablePrivacyStatement; showEndUserAgreement = environment.info.enableEndUserAgreement; + showSendFeedback$: Observable; - constructor(@Optional() private cookies: KlaroService) { + constructor( + @Optional() private cookies: KlaroService, + private authorizationService: AuthorizationDataService, + ) { + this.showSendFeedback$ = this.authorizationService.isAuthorized(FeatureID.CanSendFeedback); } showCookieSettings() { From 52dbb213396e7d5808fa70cdebe1a197028716c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Gra=C3=A7a?= Date: Mon, 19 Jun 2023 15:37:35 +0100 Subject: [PATCH 222/425] include the project metadata representation component --- .../entity-groups/research-entities/research-entities.module.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/app/entity-groups/research-entities/research-entities.module.ts b/src/app/entity-groups/research-entities/research-entities.module.ts index 680e1bd79f..95b183f630 100644 --- a/src/app/entity-groups/research-entities/research-entities.module.ts +++ b/src/app/entity-groups/research-entities/research-entities.module.ts @@ -19,6 +19,7 @@ import { OrgUnitSearchResultGridElementComponent } from './item-grid-elements/se import { ProjectSearchResultGridElementComponent } from './item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component'; import { PersonItemMetadataListElementComponent } from './metadata-representations/person/person-item-metadata-list-element.component'; import { OrgUnitItemMetadataListElementComponent } from './metadata-representations/org-unit/org-unit-item-metadata-list-element.component'; +import { ProjectItemMetadataListElementComponent } from './metadata-representations/project/project-item-metadata-list-element.component'; import { PersonSearchResultListSubmissionElementComponent } from './submission/item-list-elements/person/person-search-result-list-submission-element.component'; import { PersonInputSuggestionsComponent } from './submission/item-list-elements/person/person-suggestions/person-input-suggestions.component'; import { NameVariantModalComponent } from './submission/name-variant-modal/name-variant-modal.component'; @@ -36,6 +37,7 @@ const ENTRY_COMPONENTS = [ // put only entry components that use custom decorator OrgUnitComponent, PersonComponent, + ProjectItemMetadataListElementComponent, ProjectComponent, OrgUnitListElementComponent, OrgUnitItemMetadataListElementComponent, From 82d17d795f5ce952ff54bb114834009eeeb22f4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Gra=C3=A7a?= Date: Tue, 20 Jun 2023 10:24:53 +0100 Subject: [PATCH 223/425] add support for dsoNameService --- ...roject-item-metadata-list-element.component.html | 8 ++++---- .../project-item-metadata-list-element.component.ts | 13 ++++++++++++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.html b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.html index 175ab6e592..acc9173bf7 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.html +++ b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.html @@ -1,12 +1,12 @@ - + - + [innerHTML]="dsoNameService.getName(mdRepresentation)" + [ngbTooltip]="dsoNameService.getName(mdRepresentation).length > 0 ? descTemplate : null"> + \ No newline at end of file diff --git a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts index 7f291b0996..34b96ed2b7 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts +++ b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts @@ -2,6 +2,7 @@ import { Component } from '@angular/core'; import { metadataRepresentationComponent } from '../../../../shared/metadata-representation/metadata-representation.decorator'; import { MetadataRepresentationType } from '../../../../core/shared/metadata-representation/metadata-representation.model'; import { ItemMetadataRepresentationListElementComponent } from '../../../../shared/object-list/metadata-representation-list-element/item/item-metadata-representation-list-element.component'; +import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; @metadataRepresentationComponent('Project', MetadataRepresentationType.Item) @Component({ @@ -12,4 +13,14 @@ import { ItemMetadataRepresentationListElementComponent } from '../../../../shar * The component for displaying an item of the type Project as a metadata field */ export class ProjectItemMetadataListElementComponent extends ItemMetadataRepresentationListElementComponent { -} + /** + * Initialize instance variables + * + * @param nameService + */ + constructor( + public dsoNameService: DSONameService + ) { + super(); + } +} \ No newline at end of file From 130c3c9496fb57e5a8ba401375a1db2048048d0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Gra=C3=A7a?= Date: Tue, 20 Jun 2023 10:33:03 +0100 Subject: [PATCH 224/425] addressing styling issue --- .../project/project-item-metadata-list-element.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts index 34b96ed2b7..03b9e1038d 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts +++ b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts @@ -23,4 +23,4 @@ export class ProjectItemMetadataListElementComponent extends ItemMetadataReprese ) { super(); } -} \ No newline at end of file +} From e6fdc4597afb710b4fb405bdd345271cec20ac73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Gra=C3=A7a?= Date: Tue, 20 Jun 2023 10:34:34 +0100 Subject: [PATCH 225/425] change param name in typescript doc --- .../project/project-item-metadata-list-element.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts index 03b9e1038d..a38a1f5cff 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts +++ b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts @@ -16,7 +16,7 @@ export class ProjectItemMetadataListElementComponent extends ItemMetadataReprese /** * Initialize instance variables * - * @param nameService + * @param dsoNameService */ constructor( public dsoNameService: DSONameService From 72eaf35de153337dd3e942f306192ec3fc161800 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Gra=C3=A7a?= Date: Tue, 20 Jun 2023 13:35:12 +0100 Subject: [PATCH 226/425] adding support for DSONameService --- .../project-item-metadata-list-element.component.spec.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts index fd5095d2f8..afa565ce40 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts @@ -8,6 +8,8 @@ import { ItemMetadataRepresentation } from '../../../../core/shared/metadata-rep import { Item } from '../../../../core/shared/item.model'; import { ProjectItemMetadataListElementComponent } from './project-item-metadata-list-element.component'; import { MetadataValue } from '../../../../core/shared/metadata.models'; +import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; +import { DSONameServiceMock } from '../../../../shared/mocks/dso-name.service.mock'; const projectTitle = 'Lorem ipsum dolor sit amet'; const mockItem = Object.assign(new Item(), { metadata: { 'dc.title': [{ value: projectTitle }] } }); @@ -25,6 +27,9 @@ describe('ProjectItemMetadataListElementComponent', () => { NgbModule ], declarations: [ProjectItemMetadataListElementComponent], + providers: [ + { provide: DSONameService, useValue: new DSONameServiceMock() } + ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(ProjectItemMetadataListElementComponent, { set: { changeDetection: ChangeDetectionStrategy.Default } From f471957c4cb15c78ece7573823979a61dd096950 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Gra=C3=A7a?= Date: Tue, 20 Jun 2023 14:06:48 +0100 Subject: [PATCH 227/425] adding support for DSONameService --- .../project-item-metadata-list-element.component.spec.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts index afa565ce40..a8534744df 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts @@ -9,7 +9,6 @@ import { Item } from '../../../../core/shared/item.model'; import { ProjectItemMetadataListElementComponent } from './project-item-metadata-list-element.component'; import { MetadataValue } from '../../../../core/shared/metadata.models'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; -import { DSONameServiceMock } from '../../../../shared/mocks/dso-name.service.mock'; const projectTitle = 'Lorem ipsum dolor sit amet'; const mockItem = Object.assign(new Item(), { metadata: { 'dc.title': [{ value: projectTitle }] } }); @@ -28,7 +27,7 @@ describe('ProjectItemMetadataListElementComponent', () => { ], declarations: [ProjectItemMetadataListElementComponent], providers: [ - { provide: DSONameService, useValue: new DSONameServiceMock() } + { provide: DSONameService, useValue: dsoNameService } ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(ProjectItemMetadataListElementComponent, { @@ -41,6 +40,9 @@ describe('ProjectItemMetadataListElementComponent', () => { comp = fixture.componentInstance; comp.mdRepresentation = mockItemMetadataRepresentation; fixture.detectChanges(); + dsoNameService = jasmine.createSpyObj({ + getName: projectTitle + }); }); it('should show the project\'s name as a link', () => { From 1919f976f41871bc2065757b051b6992238867c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Gra=C3=A7a?= Date: Tue, 20 Jun 2023 15:30:56 +0100 Subject: [PATCH 228/425] adding support for DSONameService --- .../project-item-metadata-list-element.component.spec.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts index a8534744df..afa565ce40 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts @@ -9,6 +9,7 @@ import { Item } from '../../../../core/shared/item.model'; import { ProjectItemMetadataListElementComponent } from './project-item-metadata-list-element.component'; import { MetadataValue } from '../../../../core/shared/metadata.models'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; +import { DSONameServiceMock } from '../../../../shared/mocks/dso-name.service.mock'; const projectTitle = 'Lorem ipsum dolor sit amet'; const mockItem = Object.assign(new Item(), { metadata: { 'dc.title': [{ value: projectTitle }] } }); @@ -27,7 +28,7 @@ describe('ProjectItemMetadataListElementComponent', () => { ], declarations: [ProjectItemMetadataListElementComponent], providers: [ - { provide: DSONameService, useValue: dsoNameService } + { provide: DSONameService, useValue: new DSONameServiceMock() } ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(ProjectItemMetadataListElementComponent, { @@ -40,9 +41,6 @@ describe('ProjectItemMetadataListElementComponent', () => { comp = fixture.componentInstance; comp.mdRepresentation = mockItemMetadataRepresentation; fixture.detectChanges(); - dsoNameService = jasmine.createSpyObj({ - getName: projectTitle - }); }); it('should show the project\'s name as a link', () => { From 07a8024daa74aea42745853a7331fac406f88da6 Mon Sep 17 00:00:00 2001 From: Alan Orth Date: Mon, 19 Jun 2023 20:59:05 +0300 Subject: [PATCH 229/425] src/app: adjust item count style Minor adjustment to community and collection item counts. Instead of using the Bootstrap `lead` class, which reduces weight but increases size, we should use the same badge / pill style used in other counts like on on the browse by pages. --- .../community-list.component.html | 15 +++++++++------ .../collection-list-element.component.html | 17 ++++++++++------- .../community-list-element.component.html | 17 ++++++++++------- 3 files changed, 29 insertions(+), 20 deletions(-) diff --git a/src/app/community-list-page/community-list/community-list.component.html b/src/app/community-list-page/community-list/community-list.component.html index 5043d45c93..d6fd77e79b 100644 --- a/src/app/community-list-page/community-list/community-list.component.html +++ b/src/app/community-list-page/community-list/community-list.component.html @@ -33,12 +33,15 @@ -
    - - {{ dsoNameService.getName(node.payload) }} - - [{{node.payload.archivedItemsCount}}] -
    +
    +
    + + {{ dsoNameService.getName(node.payload) }} + +   + {{node.payload.archivedItemsCount}} +
    +
    diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html index 707adabde2..c50b382495 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html @@ -1,10 +1,13 @@ - - {{ dsoNameService.getName(object) }} - - - {{ dsoNameService.getName(object) }} - -[{{object.archivedItemsCount}}] +
    + + {{ dsoNameService.getName(object) }} + + + {{ dsoNameService.getName(object) }} + +   + {{object.archivedItemsCount}} +
    {{object.shortDescription}}
    diff --git a/src/app/shared/object-list/community-list-element/community-list-element.component.html b/src/app/shared/object-list/community-list-element/community-list-element.component.html index ea6782b949..2101261bdc 100644 --- a/src/app/shared/object-list/community-list-element/community-list-element.component.html +++ b/src/app/shared/object-list/community-list-element/community-list-element.component.html @@ -1,10 +1,13 @@ - - {{ dsoNameService.getName(object) }} - - - {{ dsoNameService.getName(object) }} - -[{{object.archivedItemsCount}}] +
    + + {{ dsoNameService.getName(object) }} + + + {{ dsoNameService.getName(object) }} + +   + {{object.archivedItemsCount}} +
    {{object.shortDescription}}
    From 275b057b40484218f5218555d53db22d422a6b13 Mon Sep 17 00:00:00 2001 From: Adam Doan Date: Wed, 21 Jun 2023 17:37:22 +0000 Subject: [PATCH 230/425] Add the ability to expand / collapse via keyboard --- .../dynamic-scrollable-dropdown.component.html | 2 +- .../dynamic-scrollable-dropdown.component.ts | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.html b/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.html index 3a75fe1037..6e2d29b789 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.html +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.html @@ -23,7 +23,7 @@ (blur)="onBlur($event)" (click)="$event.stopPropagation(); openDropdown(sdRef);" (focus)="onFocus($event)" - (keypress)="$event.preventDefault()"> + (keydown)="selectOnKeyDown($event, sdRef)">
    Date: Wed, 21 Jun 2023 15:36:59 -0500 Subject: [PATCH 231/425] Implement basic 301 Redirect when SSR is used. --- .../core/data/dso-redirect.service.spec.ts | 24 +++++++++++++++++++ src/app/core/data/dso-redirect.service.ts | 21 +++++++++++++--- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/app/core/data/dso-redirect.service.spec.ts b/src/app/core/data/dso-redirect.service.spec.ts index ca064b5608..64fbd94367 100644 --- a/src/app/core/data/dso-redirect.service.spec.ts +++ b/src/app/core/data/dso-redirect.service.spec.ts @@ -27,6 +27,9 @@ describe('DsoRedirectService', () => { const requestUUIDURL = `https://rest.api/rest/api/pid/find?id=${dsoUUID}`; const requestUUID = '34cfed7c-f597-49ef-9cbe-ea351f0023c2'; const objectCache = {} as ObjectCacheService; + const mockResponse = jasmine.createSpyObj(['redirect']); + const mockPlatformBrowser = 'browser'; + const mockPlatformServer = 'server'; beforeEach(() => { scheduler = getTestScheduler(); @@ -58,6 +61,8 @@ describe('DsoRedirectService', () => { objectCache, halService, router, + mockResponse, + mockPlatformBrowser // default to CSR except where explicitly SSR below ); }); @@ -141,6 +146,25 @@ describe('DsoRedirectService', () => { scheduler.flush(); expect(router.navigate).toHaveBeenCalledWith(['/communities/' + remoteData.payload.uuid]); }); + + it('should return 301 redirect when SSR is used', () => { + service = new DsoRedirectService( + requestService, + rdbService, + objectCache, + halService, + router, + mockResponse, + mockPlatformServer // explicitly SSR mode + ); + remoteData.payload.type = 'item'; + const redir = service.findByIdAndIDType(dsoHandle, IdentifierType.HANDLE); + // The framework would normally subscribe but do it here so we can test navigation. + redir.subscribe(); + scheduler.schedule(() => redir); + scheduler.flush(); + expect(mockResponse.redirect).toHaveBeenCalledWith(301, '/items/' + remoteData.payload.uuid); + }); }); describe('DataService', () => { // todo: should only test the id/uuid interpolation thingy diff --git a/src/app/core/data/dso-redirect.service.ts b/src/app/core/data/dso-redirect.service.ts index 81ce678e43..9b87590f7e 100644 --- a/src/app/core/data/dso-redirect.service.ts +++ b/src/app/core/data/dso-redirect.service.ts @@ -6,7 +6,7 @@ * http://www.dspace.org/license/ */ /* eslint-disable max-classes-per-file */ -import { Injectable } from '@angular/core'; +import { Inject, Injectable, Optional, PLATFORM_ID } from '@angular/core'; import { Router } from '@angular/router'; import { Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; @@ -21,6 +21,8 @@ import { getFirstCompletedRemoteData } from '../shared/operators'; import { DSpaceObject } from '../shared/dspace-object.model'; import { IdentifiableDataService } from './base/identifiable-data.service'; import { getDSORoute } from '../../app-routing-paths'; +import { RESPONSE } from '@nguniversal/express-engine/tokens'; +import { isPlatformServer } from '@angular/common'; const ID_ENDPOINT = 'pid'; const UUID_ENDPOINT = 'dso'; @@ -75,12 +77,20 @@ export class DsoRedirectService { protected objectCache: ObjectCacheService, protected halService: HALEndpointService, private router: Router, + @Optional() @Inject(RESPONSE) private response: any, + @Inject(PLATFORM_ID) private platformId: any ) { this.dataService = new DsoByIdOrUUIDDataService(requestService, rdbService, objectCache, halService); } /** - * Retrieve a DSpaceObject by + * Redirect to a DSpaceObject's path using the given identifier type and ID. + * This is used to redirect paths like "/handle/[prefix]/[suffix]" to the object's path (e.g. /items/[uuid]). + * See LookupGuard for more examples. + * + * If this is called server side (via SSR), it performs a 301 Redirect. + * If this is called client side (via CSR), it simply uses the Angular router to do the redirect. + * * @param id the identifier of the object to retrieve * @param identifierType the type of the given identifier (defaults to UUID) */ @@ -94,7 +104,12 @@ export class DsoRedirectService { if (hasValue(dso.uuid)) { let newRoute = getDSORoute(dso); if (hasValue(newRoute)) { - this.router.navigate([newRoute]); + // If running via SSR, perform a "301 Moved Permanently" redirect for SEO purposes. + if (isPlatformServer(this.platformId)) { + this.response.redirect(301, newRoute); + } else { + this.router.navigate([newRoute]); + } } } } From 47e7eb1a4fc74b768961ca3b766b661809e58db8 Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Thu, 22 Jun 2023 12:14:15 +0200 Subject: [PATCH 232/425] [DURACOM-170] Fixed "add collection" behavior --- .../collection-form/collection-form.component.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/app/collection-page/collection-form/collection-form.component.ts b/src/app/collection-page/collection-form/collection-form.component.ts index 84223d260a..ebb03df3b9 100644 --- a/src/app/collection-page/collection-form/collection-form.component.ts +++ b/src/app/collection-page/collection-form/collection-form.component.ts @@ -22,6 +22,8 @@ import { MetadataValue } from '../../core/shared/metadata.models'; import { getFirstSucceededRemoteListPayload } from '../../core/shared/operators'; import { collectionFormEntityTypeSelectionConfig, collectionFormModels, } from './collection-form.models'; import { NONE_ENTITY_TYPE } from '../../core/shared/item-relationships/item-type.resource-type'; +import { hasNoValue, isNotNull } from 'src/app/shared/empty.util'; + /** * Form used for creating and editing collections @@ -66,6 +68,12 @@ export class CollectionFormComponent extends ComColFormComponent imp super(formService, translate, notificationsService, authService, requestService, objectCache); } + ngOnInit(): void { + if (hasNoValue(this.formModel) && isNotNull(this.dso)) { + this.initializeForm(); + } + } + /** * Detect changes to the dso and initialize the form, * if the dso changes, exists and it is not the first change From 6a58e49fb45a78bb2439f51dd4a8d781c7d5d330 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Thu, 22 Jun 2023 18:16:53 +0200 Subject: [PATCH 233/425] [DURACOM-172] add check to save only successful response into the SSR cache --- server.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/server.ts b/server.ts index 3bbb28820a..7f698a91f8 100644 --- a/server.ts +++ b/server.ts @@ -461,6 +461,8 @@ function saveToCache(req, page: any) { const key = getCacheKey(req); // Avoid caching "/reload/[random]" paths (these are hard refreshes after logout) if (key.startsWith('/reload')) { return; } + // Avoid caching not successful responses (status code different from 2XX status) + if (hasNotSucceeded(req.res.statusCode)) { return; } // Retrieve response headers to save, if any const headers = retrieveHeaders(req.res); @@ -479,6 +481,15 @@ function saveToCache(req, page: any) { } } +/** + * Check if status code is different from 2XX + * @param statusCode + */ +function hasNotSucceeded(statusCode) { + const rgx = new RegExp(/20+/); + return !rgx.test(statusCode) +} + function retrieveHeaders(response) { const headers = Object.create({}); if (Array.isArray(environment.cache.serverSide.headers) && environment.cache.serverSide.headers.length > 0) { From d4a5308d0c7f845cbe0f0caa18437635e94a3067 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Thu, 22 Jun 2023 13:37:14 -0500 Subject: [PATCH 234/425] Refactor to use HardRedirectService. Update its redirect method to support optional statusCode --- .../core/data/dso-redirect.service.spec.ts | 45 +++++-------------- src/app/core/data/dso-redirect.service.ts | 21 +++------ .../core/services/hard-redirect.service.ts | 4 +- .../server-hard-redirect.service.spec.ts | 19 ++++++-- .../services/server-hard-redirect.service.ts | 12 +++-- 5 files changed, 44 insertions(+), 57 deletions(-) diff --git a/src/app/core/data/dso-redirect.service.spec.ts b/src/app/core/data/dso-redirect.service.spec.ts index 64fbd94367..2122dc663a 100644 --- a/src/app/core/data/dso-redirect.service.spec.ts +++ b/src/app/core/data/dso-redirect.service.spec.ts @@ -10,6 +10,7 @@ import { RequestService } from './request.service'; import { createSuccessfulRemoteDataObject } from '../../shared/remote-data.utils'; import { Item } from '../shared/item.model'; import { EMBED_SEPARATOR } from './base/base-data.service'; +import { HardRedirectService } from '../services/hard-redirect.service'; describe('DsoRedirectService', () => { let scheduler: TestScheduler; @@ -17,7 +18,7 @@ describe('DsoRedirectService', () => { let halService: HALEndpointService; let requestService: RequestService; let rdbService: RemoteDataBuildService; - let router; + let redirectService: HardRedirectService; let remoteData; const dsoUUID = '9b4f22f4-164a-49db-8817-3316b6ee5746'; const dsoHandle = '1234567789/22'; @@ -27,9 +28,6 @@ describe('DsoRedirectService', () => { const requestUUIDURL = `https://rest.api/rest/api/pid/find?id=${dsoUUID}`; const requestUUID = '34cfed7c-f597-49ef-9cbe-ea351f0023c2'; const objectCache = {} as ObjectCacheService; - const mockResponse = jasmine.createSpyObj(['redirect']); - const mockPlatformBrowser = 'browser'; - const mockPlatformServer = 'server'; beforeEach(() => { scheduler = getTestScheduler(); @@ -41,9 +39,6 @@ describe('DsoRedirectService', () => { generateRequestId: requestUUID, send: true }); - router = { - navigate: jasmine.createSpy('navigate') - }; remoteData = createSuccessfulRemoteDataObject(Object.assign(new Item(), { type: 'item', @@ -55,14 +50,17 @@ describe('DsoRedirectService', () => { a: remoteData }) }); + + redirectService = jasmine.createSpyObj('redirectService', { + redirect: {} + }); + service = new DsoRedirectService( requestService, rdbService, objectCache, halService, - router, - mockResponse, - mockPlatformBrowser // default to CSR except where explicitly SSR below + redirectService ); }); @@ -109,7 +107,7 @@ describe('DsoRedirectService', () => { redir.subscribe(); scheduler.schedule(() => redir); scheduler.flush(); - expect(router.navigate).toHaveBeenCalledWith(['/items/' + remoteData.payload.uuid]); + expect(redirectService.redirect).toHaveBeenCalledWith('/items/' + remoteData.payload.uuid, 301); }); it('should navigate to entities route with the corresponding entity type', () => { remoteData.payload.type = 'item'; @@ -126,7 +124,7 @@ describe('DsoRedirectService', () => { redir.subscribe(); scheduler.schedule(() => redir); scheduler.flush(); - expect(router.navigate).toHaveBeenCalledWith(['/entities/publication/' + remoteData.payload.uuid]); + expect(redirectService.redirect).toHaveBeenCalledWith('/entities/publication/' + remoteData.payload.uuid, 301); }); it('should navigate to collections route', () => { @@ -135,7 +133,7 @@ describe('DsoRedirectService', () => { redir.subscribe(); scheduler.schedule(() => redir); scheduler.flush(); - expect(router.navigate).toHaveBeenCalledWith(['/collections/' + remoteData.payload.uuid]); + expect(redirectService.redirect).toHaveBeenCalledWith('/collections/' + remoteData.payload.uuid, 301); }); it('should navigate to communities route', () => { @@ -144,26 +142,7 @@ describe('DsoRedirectService', () => { redir.subscribe(); scheduler.schedule(() => redir); scheduler.flush(); - expect(router.navigate).toHaveBeenCalledWith(['/communities/' + remoteData.payload.uuid]); - }); - - it('should return 301 redirect when SSR is used', () => { - service = new DsoRedirectService( - requestService, - rdbService, - objectCache, - halService, - router, - mockResponse, - mockPlatformServer // explicitly SSR mode - ); - remoteData.payload.type = 'item'; - const redir = service.findByIdAndIDType(dsoHandle, IdentifierType.HANDLE); - // The framework would normally subscribe but do it here so we can test navigation. - redir.subscribe(); - scheduler.schedule(() => redir); - scheduler.flush(); - expect(mockResponse.redirect).toHaveBeenCalledWith(301, '/items/' + remoteData.payload.uuid); + expect(redirectService.redirect).toHaveBeenCalledWith('/communities/' + remoteData.payload.uuid, 301); }); }); diff --git a/src/app/core/data/dso-redirect.service.ts b/src/app/core/data/dso-redirect.service.ts index 9b87590f7e..a27d1fb11f 100644 --- a/src/app/core/data/dso-redirect.service.ts +++ b/src/app/core/data/dso-redirect.service.ts @@ -6,8 +6,7 @@ * http://www.dspace.org/license/ */ /* eslint-disable max-classes-per-file */ -import { Inject, Injectable, Optional, PLATFORM_ID } from '@angular/core'; -import { Router } from '@angular/router'; +import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; import { hasValue } from '../../shared/empty.util'; @@ -21,8 +20,7 @@ import { getFirstCompletedRemoteData } from '../shared/operators'; import { DSpaceObject } from '../shared/dspace-object.model'; import { IdentifiableDataService } from './base/identifiable-data.service'; import { getDSORoute } from '../../app-routing-paths'; -import { RESPONSE } from '@nguniversal/express-engine/tokens'; -import { isPlatformServer } from '@angular/common'; +import { HardRedirectService } from '../services/hard-redirect.service'; const ID_ENDPOINT = 'pid'; const UUID_ENDPOINT = 'dso'; @@ -76,9 +74,7 @@ export class DsoRedirectService { protected rdbService: RemoteDataBuildService, protected objectCache: ObjectCacheService, protected halService: HALEndpointService, - private router: Router, - @Optional() @Inject(RESPONSE) private response: any, - @Inject(PLATFORM_ID) private platformId: any + private hardRedirectService: HardRedirectService ) { this.dataService = new DsoByIdOrUUIDDataService(requestService, rdbService, objectCache, halService); } @@ -88,9 +84,6 @@ export class DsoRedirectService { * This is used to redirect paths like "/handle/[prefix]/[suffix]" to the object's path (e.g. /items/[uuid]). * See LookupGuard for more examples. * - * If this is called server side (via SSR), it performs a 301 Redirect. - * If this is called client side (via CSR), it simply uses the Angular router to do the redirect. - * * @param id the identifier of the object to retrieve * @param identifierType the type of the given identifier (defaults to UUID) */ @@ -104,12 +97,8 @@ export class DsoRedirectService { if (hasValue(dso.uuid)) { let newRoute = getDSORoute(dso); if (hasValue(newRoute)) { - // If running via SSR, perform a "301 Moved Permanently" redirect for SEO purposes. - if (isPlatformServer(this.platformId)) { - this.response.redirect(301, newRoute); - } else { - this.router.navigate([newRoute]); - } + // Use a "301 Moved Permanently" redirect for SEO purposes + this.hardRedirectService.redirect(newRoute, 301); } } } diff --git a/src/app/core/services/hard-redirect.service.ts b/src/app/core/services/hard-redirect.service.ts index 3733059283..826c7e4fa9 100644 --- a/src/app/core/services/hard-redirect.service.ts +++ b/src/app/core/services/hard-redirect.service.ts @@ -11,8 +11,10 @@ export abstract class HardRedirectService { * * @param url * the page to redirect to + * @param statusCode + * optional HTTP status code to use for redirect (default = 302, which is a temporary redirect) */ - abstract redirect(url: string); + abstract redirect(url: string, statusCode?: number); /** * Get the current route, with query params included diff --git a/src/app/core/services/server-hard-redirect.service.spec.ts b/src/app/core/services/server-hard-redirect.service.spec.ts index 4501547b92..6bd5828921 100644 --- a/src/app/core/services/server-hard-redirect.service.spec.ts +++ b/src/app/core/services/server-hard-redirect.service.spec.ts @@ -22,20 +22,33 @@ describe('ServerHardRedirectService', () => { expect(service).toBeTruthy(); }); - describe('when performing a redirect', () => { - + describe('when performing a default redirect', () => { const redirect = 'test redirect'; beforeEach(() => { service.redirect(redirect); }); - it('should update the response object', () => { + it('should perform a 302 redirect', () => { expect(mockResponse.redirect).toHaveBeenCalledWith(302, redirect); expect(mockResponse.end).toHaveBeenCalled(); }); }); + describe('when performing a 301 redirect', () => { + const redirect = 'test 301 redirect'; + const redirectStatusCode = 301; + + beforeEach(() => { + service.redirect(redirect, redirectStatusCode); + }); + + it('should redirect with passed in status code', () => { + expect(mockResponse.redirect).toHaveBeenCalledWith(redirectStatusCode, redirect); + expect(mockResponse.end).toHaveBeenCalled(); + }); + }); + describe('when requesting the current route', () => { beforeEach(() => { diff --git a/src/app/core/services/server-hard-redirect.service.ts b/src/app/core/services/server-hard-redirect.service.ts index de8b45b0e5..8c45cc864b 100644 --- a/src/app/core/services/server-hard-redirect.service.ts +++ b/src/app/core/services/server-hard-redirect.service.ts @@ -17,10 +17,14 @@ export class ServerHardRedirectService extends HardRedirectService { } /** - * Perform a hard redirect to URL + * Perform a hard redirect to a given location. + * * @param url + * the page to redirect to + * @param statusCode + * optional HTTP status code to use for redirect (default = 302, which is a temporary redirect) */ - redirect(url: string) { + redirect(url: string, statusCode?: number) { if (url === this.req.url) { return; @@ -38,8 +42,8 @@ export class ServerHardRedirectService extends HardRedirectService { process.exit(1); } } else { - // attempt to use the already set status - let status = this.res.statusCode || 0; + // attempt to use passed in statusCode or the already set status (in request) + let status = statusCode || this.res.statusCode || 0; if (status < 300 || status >= 400) { // temporary redirect status = 302; From 163014306cb3fe5c80dc807695cb2aa4978f0ecc Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Fri, 23 Jun 2023 09:23:28 +0200 Subject: [PATCH 235/425] [DURACOM-172] improve regex --- server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.ts b/server.ts index 7f698a91f8..23327c2058 100644 --- a/server.ts +++ b/server.ts @@ -486,7 +486,7 @@ function saveToCache(req, page: any) { * @param statusCode */ function hasNotSucceeded(statusCode) { - const rgx = new RegExp(/20+/); + const rgx = new RegExp(/^20+/); return !rgx.test(statusCode) } From 3d133f6166cecd769e461c79f7b4b53413d92ff7 Mon Sep 17 00:00:00 2001 From: lotte Date: Fri, 23 Jun 2023 11:50:05 +0200 Subject: [PATCH 236/425] 103005: Fixed issue where bg colours couldn't be overwritten in themes --- src/styles/_bootstrap_variables.scss | 9 +++++++++ src/styles/_bootstrap_variables_mapping.scss | 12 ++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/styles/_bootstrap_variables.scss b/src/styles/_bootstrap_variables.scss index 4c631a294a..9d46f12abb 100644 --- a/src/styles/_bootstrap_variables.scss +++ b/src/styles/_bootstrap_variables.scss @@ -23,6 +23,8 @@ $yellow: #ec9433 !default; $red: #CF4444 !default; $dark: darken($blue, 17%) !default; + + $theme-colors: ( primary: $blue, secondary: $gray-700, @@ -44,3 +46,10 @@ $navbar-light-toggler-icon-bg: url("data:image/svg+xml;charset=utf8, Date: Fri, 23 Jun 2023 12:54:41 -0500 Subject: [PATCH 237/425] Update version tag for release --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 59766e993b..719b13b23b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dspace-angular", - "version": "7.6.0-next", + "version": "7.6.0", "scripts": { "ng": "ng", "config:watch": "nodemon", From 884aa0743096b4bfe946679aa48ad3f5727575df Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Fri, 23 Jun 2023 13:04:19 -0500 Subject: [PATCH 238/425] Update version tag for development of next release --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 719b13b23b..06d7063240 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dspace-angular", - "version": "7.6.0", + "version": "7.6.1-next", "scripts": { "ng": "ng", "config:watch": "nodemon", From 928d7a45a372003547b86be1ff3725288da43ad4 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Tue, 27 Jun 2023 15:26:49 +0200 Subject: [PATCH 239/425] 103176: Fix vcr not being defined yet in OnInit hook --- src/app/shared/theme-support/themed.component.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/shared/theme-support/themed.component.ts b/src/app/shared/theme-support/themed.component.ts index 2ff0713f46..920fbba6e5 100644 --- a/src/app/shared/theme-support/themed.component.ts +++ b/src/app/shared/theme-support/themed.component.ts @@ -1,10 +1,10 @@ import { + AfterViewInit, Component, ViewChild, ViewContainerRef, ComponentRef, SimpleChanges, - OnInit, OnDestroy, ComponentFactoryResolver, ChangeDetectorRef, @@ -21,7 +21,7 @@ import { GenericConstructor } from '../../core/shared/generic-constructor'; styleUrls: ['./themed.component.scss'], templateUrl: './themed.component.html', }) -export abstract class ThemedComponent implements OnInit, OnDestroy, OnChanges { +export abstract class ThemedComponent implements AfterViewInit, OnDestroy, OnChanges { @ViewChild('vcr', { read: ViewContainerRef }) vcr: ViewContainerRef; protected compRef: ComponentRef; @@ -49,7 +49,7 @@ export abstract class ThemedComponent implements OnInit, OnDestroy, OnChanges } } - ngOnInit(): void { + ngAfterViewInit(): void { this.destroyComponentInstance(); this.themeSub = this.themeService.getThemeName$().subscribe(() => { this.renderComponentInstance(); From a35b7d8356e17f4cdd8568389695b1685b27eb84 Mon Sep 17 00:00:00 2001 From: Kim Shepherd Date: Thu, 29 Jun 2023 16:09:54 +0200 Subject: [PATCH 240/425] catch and handle unsuccessful "convert rels to items" responses --- .../shared/item-relationships-utils.ts | 41 +++++++++++++------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/src/app/item-page/simple/item-types/shared/item-relationships-utils.ts b/src/app/item-page/simple/item-types/shared/item-relationships-utils.ts index b4c3da2cdc..0c4e82178f 100644 --- a/src/app/item-page/simple/item-types/shared/item-relationships-utils.ts +++ b/src/app/item-page/simple/item-types/shared/item-relationships-utils.ts @@ -5,8 +5,7 @@ import { RemoteData } from '../../../../core/data/remote-data'; import { Relationship } from '../../../../core/shared/item-relationships/relationship.model'; import { Item } from '../../../../core/shared/item.model'; import { - getFirstSucceededRemoteDataPayload, - getFirstSucceededRemoteData + getFirstCompletedRemoteData } from '../../../../core/shared/operators'; import { hasValue } from '../../../../shared/empty.util'; import { InjectionToken } from '@angular/core'; @@ -77,24 +76,42 @@ export const relationsToItems = (thisId: string) => * @param {string} thisId The item's id of which the relations belong to * @returns {(source: Observable) => Observable} */ -export const paginatedRelationsToItems = (thisId: string) => - (source: Observable>>): Observable>> => +export const paginatedRelationsToItems = (thisId: string) => (source: Observable>>): Observable>> => source.pipe( - getFirstSucceededRemoteData(), + getFirstCompletedRemoteData(), switchMap((relationshipsRD: RemoteData>) => { return observableCombineLatest( relationshipsRD.payload.page.map((rel: Relationship) => observableCombineLatest([ - rel.leftItem.pipe(getFirstSucceededRemoteDataPayload()), - rel.rightItem.pipe(getFirstSucceededRemoteDataPayload())] + rel.leftItem.pipe( + getFirstCompletedRemoteData(), + map((rd: RemoteData) => { + if (rd.hasSucceeded) { + return rd.payload; + } else { + return null; + } + }) + ), + rel.rightItem.pipe( + getFirstCompletedRemoteData(), + map((rd: RemoteData) => { + if (rd.hasSucceeded) { + return rd.payload; + } else { + return null; + } + }) + ), + ] ) - )).pipe( + ) + ).pipe( map((arr) => - arr - .map(([leftItem, rightItem]) => { - if (leftItem.id === thisId) { + arr.map(([leftItem, rightItem]) => { + if (hasValue(leftItem) && leftItem.id === thisId) { return rightItem; - } else if (rightItem.id === thisId) { + } else if (hasValue(rightItem) && rightItem.id === thisId) { return leftItem; } }) From ae6b183faec9cda0d2932143a52e14ef94bd945c Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Wed, 14 Jun 2023 18:51:42 +0200 Subject: [PATCH 241/425] 103236: fix issue where setStaleByHrefSubtring wouldn't emit after all requests were stale --- src/app/core/data/request.service.ts | 36 +++++++++++++++++++++------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/src/app/core/data/request.service.ts b/src/app/core/data/request.service.ts index 2d5acb2cb3..3b7ee80ffb 100644 --- a/src/app/core/data/request.service.ts +++ b/src/app/core/data/request.service.ts @@ -2,8 +2,8 @@ import { Injectable } from '@angular/core'; import { HttpHeaders } from '@angular/common/http'; import { createSelector, MemoizedSelector, select, Store } from '@ngrx/store'; -import { Observable } from 'rxjs'; -import { filter, map, take, tap } from 'rxjs/operators'; +import { Observable, from as observableFrom } from 'rxjs'; +import { filter, find, map, mergeMap, switchMap, take, tap, toArray } from 'rxjs/operators'; import { cloneDeep } from 'lodash'; import { hasValue, isEmpty, isNotEmpty, hasNoValue } from '../../shared/empty.util'; import { ObjectCacheEntry } from '../cache/object-cache.reducer'; @@ -292,22 +292,42 @@ export class RequestService { * Set all requests that match (part of) the href to stale * * @param href A substring of the request(s) href - * @return Returns an observable emitting whether or not the cache is removed + * @return Returns an observable emitting when those requests are all stale */ setStaleByHrefSubstring(href: string): Observable { - this.store.pipe( + const requestUUIDs$ = this.store.pipe( select(uuidsFromHrefSubstringSelector(requestIndexSelector, href)), take(1) - ).subscribe((uuids: string[]) => { + ); + requestUUIDs$.subscribe((uuids: string[]) => { for (const uuid of uuids) { this.store.dispatch(new RequestStaleAction(uuid)); } }); this.requestsOnTheirWayToTheStore = this.requestsOnTheirWayToTheStore.filter((reqHref: string) => reqHref.indexOf(href) < 0); - return this.store.pipe( - select(uuidsFromHrefSubstringSelector(requestIndexSelector, href)), - map((uuids) => isEmpty(uuids)) + // emit true after all requests are stale + return requestUUIDs$.pipe( + switchMap((uuids: string[]) => { + if (isEmpty(uuids)) { + // if there were no matching requests, emit true immediately + return [true]; + } else { + // otherwise emit all request uuids in order + return observableFrom(uuids).pipe( + // retrieve the RequestEntry for each uuid + mergeMap((uuid: string) => this.getByUUID(uuid)), + // check whether it is undefined or stale + map((request: RequestEntry) => hasNoValue(request) || isStale(request.state)), + // if it is, complete + find((stale: boolean) => stale === true), + // after all observables above are completed, emit them as a single array + toArray(), + // when the array comes in, emit true + map(() => true) + ); + } + }) ); } From 02a20c8862ca4d93919ca07e900d70a722ebbb5d Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 30 Jun 2023 16:56:37 +0200 Subject: [PATCH 242/425] 103236: Added tests for setStaleByHrefSubstring --- src/app/core/data/request.service.spec.ts | 46 ++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/src/app/core/data/request.service.spec.ts b/src/app/core/data/request.service.spec.ts index fe35d840d7..4493c61a69 100644 --- a/src/app/core/data/request.service.spec.ts +++ b/src/app/core/data/request.service.spec.ts @@ -1,6 +1,6 @@ import { Store, StoreModule } from '@ngrx/store'; import { cold, getTestScheduler } from 'jasmine-marbles'; -import { EMPTY, of as observableOf } from 'rxjs'; +import { EMPTY, Observable, of as observableOf } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; import { getMockObjectCacheService } from '../../shared/mocks/object-cache.service.mock'; @@ -625,4 +625,48 @@ describe('RequestService', () => { expect(done$).toBeObservable(cold('-----(t|)', { t: true })); })); }); + + describe('setStaleByHrefSubstring', () => { + let dispatchSpy: jasmine.Spy; + let getByUUIDSpy: jasmine.Spy; + + beforeEach(() => { + dispatchSpy = spyOn(store, 'dispatch'); + getByUUIDSpy = spyOn(service, 'getByUUID').and.callThrough(); + }); + + describe('with an empty/no matching requests in the state', () => { + it('should return true', () => { + const done$: Observable = service.setStaleByHrefSubstring('https://rest.api/endpoint/selfLink'); + expect(done$).toBeObservable(cold('(a|)', { a: true })); + }); + }); + + describe('with a matching request in the state', () => { + beforeEach(() => { + const state = Object.assign({}, initialState, { + core: Object.assign({}, initialState.core, { + 'index': { + 'get-request/href-to-uuid': { + 'https://rest.api/endpoint/selfLink': '5f2a0d2a-effa-4d54-bd54-5663b960f9eb' + } + } + }) + }); + mockStore.setState(state); + }); + + it('should return an Observable that emits true as soon as the request is stale', () => { + dispatchSpy.and.callFake(() => { /* empty */ }); // don't actually set as stale + getByUUIDSpy.and.returnValue(cold('a-b--c--d-', { // but fake the state in the cache + a: { state: RequestEntryState.ResponsePending }, + b: { state: RequestEntryState.Success }, + c: { state: RequestEntryState.SuccessStale }, + d: { state: RequestEntryState.Error }, + })); + const done$: Observable = service.setStaleByHrefSubstring('https://rest.api/endpoint/selfLink'); + expect(done$).toBeObservable(cold('-----(a|)', { a: true })); + }); + }); + }); }); From c4342d3238b73d03cb92e8ce160884e66d14b49a Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Fri, 30 Jun 2023 14:57:09 -0500 Subject: [PATCH 243/425] Update version tag for development of next major release --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 06d7063240..977a4bdc5e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dspace-angular", - "version": "7.6.1-next", + "version": "8.0.0-next", "scripts": { "ng": "ng", "config:watch": "nodemon", From b2b1782cd8505cf079782811bab4238e5cc0a359 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 30 Jun 2023 20:23:51 +0200 Subject: [PATCH 244/425] Hide entity field in collection form when entities aren't initialized --- .../collection-form/collection-form.component.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/app/collection-page/collection-form/collection-form.component.ts b/src/app/collection-page/collection-form/collection-form.component.ts index 23698de84e..b52d282f63 100644 --- a/src/app/collection-page/collection-form/collection-form.component.ts +++ b/src/app/collection-page/collection-form/collection-form.component.ts @@ -79,9 +79,8 @@ export class CollectionFormComponent extends ComColFormComponent imp // retrieve all entity types to populate the dropdowns selection entities$.subscribe((entityTypes: ItemType[]) => { - entityTypes - .filter((type: ItemType) => type.label !== NONE_ENTITY_TYPE) - .forEach((type: ItemType, index: number) => { + entityTypes = entityTypes.filter((type: ItemType) => type.label !== NONE_ENTITY_TYPE); + entityTypes.forEach((type: ItemType, index: number) => { this.entityTypeSelection.add({ disabled: false, label: type.label, @@ -93,7 +92,7 @@ export class CollectionFormComponent extends ComColFormComponent imp } }); - this.formModel = [...collectionFormModels, this.entityTypeSelection]; + this.formModel = entityTypes.length === 0 ? collectionFormModels : [...collectionFormModels, this.entityTypeSelection]; super.ngOnInit(); }); From cf777268666587d5980408d7bc3872260606ae71 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 30 Jun 2023 22:41:07 +0200 Subject: [PATCH 245/425] Fix enter not submitting collection form correctly Fixed it for communities, collections, ePersons & groups --- .../eperson-form/eperson-form.component.html | 10 +++++----- .../group-form/group-form.component.html | 4 ++-- .../comcol-form/comcol-form.component.html | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.html b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.html index e9cc48aee3..156f2e776d 100644 --- a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.html +++ b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.html @@ -15,23 +15,23 @@ [displayCancel]="false" (submitForm)="onSubmit()">
    -
    -
    - -
    - diff --git a/src/app/access-control/group-registry/group-form/group-form.component.html b/src/app/access-control/group-registry/group-form/group-form.component.html index 0fc5a574b7..e50a479090 100644 --- a/src/app/access-control/group-registry/group-form/group-form.component.html +++ b/src/app/access-control/group-registry/group-form/group-form.component.html @@ -25,12 +25,12 @@ [displayCancel]="false" (submitForm)="onSubmit()">
    -
    diff --git a/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.html b/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.html index 5d7b092f74..b7b3d344b1 100644 --- a/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.html +++ b/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.html @@ -42,7 +42,7 @@ [formModel]="formModel" [displayCancel]="false" (submitForm)="onSubmit()"> - From 8ac1e9a2838ba24f73b3617190efb942406c9883 Mon Sep 17 00:00:00 2001 From: Alan Orth Date: Wed, 5 Jul 2023 18:03:25 +0300 Subject: [PATCH 246/425] src/app: fix path to deny-request-copy component The themed-deny-request-copy.component erroneously includes the cus- tom theme's deny-request-copy component instead of its own. Closes: https://github.com/DSpace/dspace-angular/issues/2351 --- .../deny-request-copy/themed-deny-request-copy.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/request-copy/deny-request-copy/themed-deny-request-copy.component.ts b/src/app/request-copy/deny-request-copy/themed-deny-request-copy.component.ts index 664e4c541b..1539d49622 100644 --- a/src/app/request-copy/deny-request-copy/themed-deny-request-copy.component.ts +++ b/src/app/request-copy/deny-request-copy/themed-deny-request-copy.component.ts @@ -1,7 +1,7 @@ import { Component } from '@angular/core'; import { ThemedComponent } from 'src/app/shared/theme-support/themed.component'; -import { DenyRequestCopyComponent } from 'src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component'; +import { DenyRequestCopyComponent } from './deny-request-copy.component'; /** * Themed wrapper for deny-request-copy.component From 5208008f9558cbec4882b08852da118a29a6bfbc Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Fri, 7 Jul 2023 11:56:47 -0500 Subject: [PATCH 247/425] Enable Pull Request Opened action to assign PRs to their creator --- .../pull_request_opened.yml | 26 ------------------- .github/workflows/pull_request_opened.yml | 24 +++++++++++++++++ 2 files changed, 24 insertions(+), 26 deletions(-) delete mode 100644 .github/disabled-workflows/pull_request_opened.yml create mode 100644 .github/workflows/pull_request_opened.yml diff --git a/.github/disabled-workflows/pull_request_opened.yml b/.github/disabled-workflows/pull_request_opened.yml deleted file mode 100644 index 0dc718c0b9..0000000000 --- a/.github/disabled-workflows/pull_request_opened.yml +++ /dev/null @@ -1,26 +0,0 @@ -# This workflow runs whenever a new pull request is created -# TEMPORARILY DISABLED. Unfortunately this doesn't work for PRs created from forked repositories (which is how we tend to create PRs). -# There is no known workaround yet. See https://github.community/t/how-to-use-github-token-for-prs-from-forks/16818 -name: Pull Request opened - -# Only run for newly opened PRs against the "main" branch -on: - pull_request: - types: [opened] - branches: - - main - -jobs: - automation: - runs-on: ubuntu-latest - steps: - # Assign the PR to whomever created it. This is useful for visualizing assignments on project boards - # See https://github.com/marketplace/actions/pull-request-assigner - - name: Assign PR to creator - uses: thomaseizinger/assign-pr-creator-action@v1.0.0 - # Note, this authentication token is created automatically - # See: https://docs.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - # Ignore errors. It is possible the PR was created by someone who cannot be assigned - continue-on-error: true diff --git a/.github/workflows/pull_request_opened.yml b/.github/workflows/pull_request_opened.yml new file mode 100644 index 0000000000..9b61af72d1 --- /dev/null +++ b/.github/workflows/pull_request_opened.yml @@ -0,0 +1,24 @@ +# This workflow runs whenever a new pull request is created +name: Pull Request opened + +# Only run for newly opened PRs against the "main" or maintenance branches +# We allow this to run for `pull_request_target` so that github secrets are available +# (This is required to assign a PR back to the creator when the PR comes from a forked repo) +on: + pull_request_target: + types: [ opened ] + branches: + - main + - 'dspace-**' + +permissions: + pull-requests: write + +jobs: + automation: + runs-on: ubuntu-latest + steps: + # Assign the PR to whomever created it. This is useful for visualizing assignments on project boards + # See https://github.com/toshimaru/auto-author-assign + - name: Assign PR to creator + uses: toshimaru/auto-author-assign@v1.6.2 From 15be060665e9f517f75afbede082cbf6fa749cf1 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Fri, 7 Jul 2023 11:56:54 -0500 Subject: [PATCH 248/425] Ensure codescan and label_merge_conflicts run on maintenance branches --- .github/workflows/codescan.yml | 10 +++++++--- .github/workflows/label_merge_conflicts.yml | 7 ++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/.github/workflows/codescan.yml b/.github/workflows/codescan.yml index 35a2e2d24a..8b415296c7 100644 --- a/.github/workflows/codescan.yml +++ b/.github/workflows/codescan.yml @@ -5,12 +5,16 @@ # because CodeQL requires a fresh build with all tests *disabled*. name: "Code Scanning" -# Run this code scan for all pushes / PRs to main branch. Also run once a week. +# Run this code scan for all pushes / PRs to main or maintenance branches. Also run once a week. on: push: - branches: [ main ] + branches: + - main + - 'dspace-**' pull_request: - branches: [ main ] + branches: + - main + - 'dspace-**' # Don't run if PR is only updating static documentation paths-ignore: - '**/*.md' diff --git a/.github/workflows/label_merge_conflicts.yml b/.github/workflows/label_merge_conflicts.yml index c1396b6f45..7ea3327741 100644 --- a/.github/workflows/label_merge_conflicts.yml +++ b/.github/workflows/label_merge_conflicts.yml @@ -1,11 +1,12 @@ # This workflow checks open PRs for merge conflicts and labels them when conflicts are found name: Check for merge conflicts -# Run whenever the "main" branch is updated -# NOTE: This means merge conflicts are only checked for when a PR is merged to main. +# Run this for all pushes (i.e. merges) to 'main' or maintenance branches on: push: - branches: [ main ] + branches: + - main + - 'dspace-**' # So that the `conflict_label_name` is removed if conflicts are resolved, # we allow this to run for `pull_request_target` so that github secrets are available. pull_request_target: From effe1816962b569134eea83c75704bba1721e2ae Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Fri, 7 Jul 2023 12:05:56 -0500 Subject: [PATCH 249/425] Split docker images into separate jobs to run in parallel. Ensure 'main' codebase is tagged as 'latest' --- .github/workflows/docker.yml | 84 ++++++++++++++++++++++++------------ 1 file changed, 57 insertions(+), 27 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 9a2c838d83..0c36d5af98 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -15,29 +15,35 @@ on: permissions: contents: read # to fetch code (actions/checkout) + +env: + # Define tags to use for Docker images based on Git tags/branches (for docker/metadata-action) + # For a new commit on default branch (main), use the literal tag 'latest' on Docker image. + # For a new commit on other branches, use the branch name as the tag for Docker image. + # For a new tag, copy that tag name as the tag for Docker image. + IMAGE_TAGS: | + type=raw,value=latest,enable=${{ endsWith(github.ref, github.event.repository.default_branch) }} + type=ref,event=branch,enable=${{ !endsWith(github.ref, github.event.repository.default_branch) }} + type=ref,event=tag + # Define default tag "flavor" for docker/metadata-action per + # https://github.com/docker/metadata-action#flavor-input + # We manage the 'latest' tag ourselves to the 'main' branch (see settings above) + TAGS_FLAVOR: | + latest=false + # Architectures / Platforms for which we will build Docker images + # If this is a PR, we ONLY build for AMD64. For PRs we only do a sanity check test to ensure Docker builds work. + # If this is NOT a PR (e.g. a tag or merge commit), also build for ARM64. + PLATFORMS: linux/amd64${{ github.event_name != 'pull_request' && ', linux/arm64' || '' }} + + jobs: - docker: + ############################################### + # Build/Push the 'dspace/dspace-angular' image + ############################################### + dspace-angular: # Ensure this job never runs on forked repos. It's only executed for 'dspace/dspace-angular' if: github.repository == 'dspace/dspace-angular' runs-on: ubuntu-latest - env: - # Define tags to use for Docker images based on Git tags/branches (for docker/metadata-action) - # For a new commit on default branch (main), use the literal tag 'dspace-7_x' on Docker image. - # For a new commit on other branches, use the branch name as the tag for Docker image. - # For a new tag, copy that tag name as the tag for Docker image. - IMAGE_TAGS: | - type=raw,value=dspace-7_x,enable=${{ endsWith(github.ref, github.event.repository.default_branch) }} - type=ref,event=branch,enable=${{ !endsWith(github.ref, github.event.repository.default_branch) }} - type=ref,event=tag - # Define default tag "flavor" for docker/metadata-action per - # https://github.com/docker/metadata-action#flavor-input - # We turn off 'latest' tag by default. - TAGS_FLAVOR: | - latest=false - # Architectures / Platforms for which we will build Docker images - # If this is a PR, we ONLY build for AMD64. For PRs we only do a sanity check test to ensure Docker builds work. - # If this is NOT a PR (e.g. a tag or merge commit), also build for ARM64. - PLATFORMS: linux/amd64${{ github.event_name != 'pull_request' && ', linux/arm64' || '' }} steps: # https://github.com/actions/checkout @@ -61,9 +67,6 @@ jobs: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - ############################################### - # Build/Push the 'dspace/dspace-angular' image - ############################################### # https://github.com/docker/metadata-action # Get Metadata for docker_build step below - name: Sync metadata (tags, labels) from GitHub to Docker for 'dspace-angular' image @@ -77,7 +80,7 @@ jobs: # https://github.com/docker/build-push-action - name: Build and push 'dspace-angular' image id: docker_build - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v4 with: context: . file: ./Dockerfile @@ -89,9 +92,36 @@ jobs: tags: ${{ steps.meta_build.outputs.tags }} labels: ${{ steps.meta_build.outputs.labels }} - ##################################################### - # Build/Push the 'dspace/dspace-angular' image ('-dist' tag) - ##################################################### + ############################################################# + # Build/Push the 'dspace/dspace-angular' image ('-dist' tag) + ############################################################# + dspace-angular-dist: + # Ensure this job never runs on forked repos. It's only executed for 'dspace/dspace-angular' + if: github.repository == 'dspace/dspace-angular' + runs-on: ubuntu-latest + + steps: + # https://github.com/actions/checkout + - name: Checkout codebase + uses: actions/checkout@v3 + + # https://github.com/docker/setup-buildx-action + - name: Setup Docker Buildx + uses: docker/setup-buildx-action@v2 + + # https://github.com/docker/setup-qemu-action + - name: Set up QEMU emulation to build for multiple architectures + uses: docker/setup-qemu-action@v2 + + # https://github.com/docker/login-action + - name: Login to DockerHub + # Only login if not a PR, as PRs only trigger a Docker build and not a push + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_ACCESS_TOKEN }} + # https://github.com/docker/metadata-action # Get Metadata for docker_build_dist step below - name: Sync metadata (tags, labels) from GitHub to Docker for 'dspace-angular-dist' image @@ -107,7 +137,7 @@ jobs: - name: Build and push 'dspace-angular-dist' image id: docker_build_dist - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v4 with: context: . file: ./Dockerfile.dist From b5a70e8f95d1046bed0e33d5b0bdc8109d645676 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Sat, 8 Jul 2023 00:20:30 +0200 Subject: [PATCH 250/425] Fix VocabularyTreeview not updating + i18n for nsi --- .../vocabulary-treeview/vocabulary-treeview.component.ts | 9 +++++++-- src/assets/i18n/en.json5 | 6 ++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts index 017416e8c2..13d4495e61 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts @@ -1,5 +1,5 @@ import { FlatTreeControl } from '@angular/cdk/tree'; -import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core'; +import { Component, EventEmitter, Input, OnDestroy, OnInit, Output, OnChanges, SimpleChanges } from '@angular/core'; import { map } from 'rxjs/operators'; import { Observable, Subscription } from 'rxjs'; @@ -28,7 +28,7 @@ import { getFirstSucceededRemoteDataPayload } from '../../../core/shared/operato templateUrl: './vocabulary-treeview.component.html', styleUrls: ['./vocabulary-treeview.component.scss'] }) -export class VocabularyTreeviewComponent implements OnDestroy, OnInit { +export class VocabularyTreeviewComponent implements OnDestroy, OnInit, OnChanges { /** * The {@link VocabularyOptions} object @@ -322,4 +322,9 @@ export class VocabularyTreeviewComponent implements OnDestroy, OnInit { private getEntryId(entry: VocabularyEntry): string { return entry.authority || entry.otherInformation.id || undefined; } + + ngOnChanges(changes: SimpleChanges): void { + this.reset(); + this.vocabularyTreeviewService.initialize(this.vocabularyOptions, new PageInfo(), this.selectedItems, null); + } } diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 6c91bae4c1..ee594a9cb2 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -782,6 +782,8 @@ "browse.comcol.by.srsc": "By Subject Category", + "browse.comcol.by.nsi": "By Norwegian Science Index", + "browse.comcol.by.title": "By Title", "browse.comcol.head": "Browse", @@ -804,6 +806,8 @@ "browse.metadata.srsc.breadcrumbs": "Browse by Subject Category", + "browse.metadata.nsi.breadcrumbs": "Browse by Norwegian Science Index", + "browse.metadata.title.breadcrumbs": "Browse by Title", "pagination.next.button": "Next", @@ -2826,6 +2830,8 @@ "menu.section.browse_global_by_srsc": "By Subject Category", + "menu.section.browse_global_by_nsi": "By Norwegian Science Index", + "menu.section.browse_global_by_title": "By Title", "menu.section.browse_global_communities_and_collections": "Communities & Collections", From 23aefb7385a987c5cb3f3eb169b37037f032a126 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eike=20Martin=20L=C3=B6hden?= Date: Mon, 10 Jul 2023 15:29:14 +0200 Subject: [PATCH 251/425] Added themed-user-menu component. --- .../user-menu/themed-user-menu.component.ts | 33 +++++++++++++++++++ src/app/shared/shared.module.ts | 2 ++ 2 files changed, 35 insertions(+) create mode 100644 src/app/shared/auth-nav-menu/user-menu/themed-user-menu.component.ts diff --git a/src/app/shared/auth-nav-menu/user-menu/themed-user-menu.component.ts b/src/app/shared/auth-nav-menu/user-menu/themed-user-menu.component.ts new file mode 100644 index 0000000000..09f02eb761 --- /dev/null +++ b/src/app/shared/auth-nav-menu/user-menu/themed-user-menu.component.ts @@ -0,0 +1,33 @@ +import {Component, Input} from '@angular/core' +import {ThemedComponent} from '../../theme-support/themed.component'; +import {UserMenuComponent} from './user-menu.component'; + +/** + * This component represents the user nav menu. + */ +@Component({ + selector: 'ds-themed-user-menu', + templateUrl: './../../theme-support/themed.component.html', + styleUrls: [] +}) +export class ThemedUserMenuComponent extends ThemedComponent{ + + /** + * The input flag to show user details in navbar expandable menu + */ + @Input() inExpandableNavbar = false; + + protected inAndOutputNames: (keyof UserMenuComponent & keyof this)[] = ['inExpandableNavbar']; + + protected getComponentName(): string { + return 'UserMenuComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import((`../../../../themes/${themeName}/app/shared/auth-nav-menu/user-menu/user-menu.component`)); + } + + protected importUnthemedComponent(): Promise { + return import('./user-menu.component'); + } +} diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index 0f7871f7f9..91175736ba 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -284,6 +284,7 @@ import { } from '../item-page/simple/field-components/specific-field/title/themed-item-page-field.component'; import { BitstreamListItemComponent } from './object-list/bitstream-list-item/bitstream-list-item.component'; import { NgxPaginationModule } from 'ngx-pagination'; +import {ThemedUserMenuComponent} from './auth-nav-menu/user-menu/themed-user-menu.component'; const MODULES = [ CommonModule, @@ -332,6 +333,7 @@ const COMPONENTS = [ AuthNavMenuComponent, ThemedAuthNavMenuComponent, UserMenuComponent, + ThemedUserMenuComponent, DsSelectComponent, ErrorComponent, LangSwitchComponent, From 63582cfa0d40497b73f39088aaf949f41571e5bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eike=20Martin=20L=C3=B6hden?= Date: Mon, 10 Jul 2023 15:34:25 +0200 Subject: [PATCH 252/425] Corrected missing semicolon. --- .../auth-nav-menu/user-menu/themed-user-menu.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/shared/auth-nav-menu/user-menu/themed-user-menu.component.ts b/src/app/shared/auth-nav-menu/user-menu/themed-user-menu.component.ts index 09f02eb761..cecafc9d5c 100644 --- a/src/app/shared/auth-nav-menu/user-menu/themed-user-menu.component.ts +++ b/src/app/shared/auth-nav-menu/user-menu/themed-user-menu.component.ts @@ -1,4 +1,4 @@ -import {Component, Input} from '@angular/core' +import {Component, Input} from '@angular/core'; import {ThemedComponent} from '../../theme-support/themed.component'; import {UserMenuComponent} from './user-menu.component'; From ed84f4513225d3fdef45edcafd2d434271b5f4cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eike=20Martin=20L=C3=B6hden?= Date: Mon, 10 Jul 2023 15:38:32 +0200 Subject: [PATCH 253/425] Replaced tags for ds-user-menu. --- src/app/navbar/navbar.component.html | 2 +- src/app/shared/auth-nav-menu/auth-nav-menu.component.html | 2 +- src/app/shared/auth-nav-menu/auth-nav-menu.component.spec.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/navbar/navbar.component.html b/src/app/navbar/navbar.component.html index bc1e04f513..8608ee7b02 100644 --- a/src/app/navbar/navbar.component.html +++ b/src/app/navbar/navbar.component.html @@ -6,7 +6,7 @@
    diff --git a/src/app/shared/auth-nav-menu/auth-nav-menu.component.spec.ts b/src/app/shared/auth-nav-menu/auth-nav-menu.component.spec.ts index 58a1edfabd..0b9ea6ef4b 100644 --- a/src/app/shared/auth-nav-menu/auth-nav-menu.component.spec.ts +++ b/src/app/shared/auth-nav-menu/auth-nav-menu.component.spec.ts @@ -248,7 +248,7 @@ describe('AuthNavMenuComponent', () => { component = null; }); it('should render UserMenuComponent component', () => { - const logoutDropdownMenu = deNavMenuItem.query(By.css('ds-user-menu')); + const logoutDropdownMenu = deNavMenuItem.query(By.css('ds-themed-user-menu')); expect(logoutDropdownMenu.nativeElement).toBeDefined(); }); }); From e3f57dae44de6f58e1ba2bf91d0de092b9416f7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eike=20Martin=20L=C3=B6hden?= Date: Mon, 10 Jul 2023 15:54:09 +0200 Subject: [PATCH 254/425] Included user-menu component in custom theme. --- .../user-menu/user-menu.component.html | 0 .../user-menu/user-menu.component.scss | 0 .../user-menu/user-menu.component.ts | 15 +++++++++++++++ src/themes/custom/lazy-theme.module.ts | 2 ++ 4 files changed, 17 insertions(+) create mode 100644 src/themes/custom/app/shared/auth-nav-menu/user-menu/user-menu.component.html create mode 100644 src/themes/custom/app/shared/auth-nav-menu/user-menu/user-menu.component.scss create mode 100644 src/themes/custom/app/shared/auth-nav-menu/user-menu/user-menu.component.ts diff --git a/src/themes/custom/app/shared/auth-nav-menu/user-menu/user-menu.component.html b/src/themes/custom/app/shared/auth-nav-menu/user-menu/user-menu.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/auth-nav-menu/user-menu/user-menu.component.scss b/src/themes/custom/app/shared/auth-nav-menu/user-menu/user-menu.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/auth-nav-menu/user-menu/user-menu.component.ts b/src/themes/custom/app/shared/auth-nav-menu/user-menu/user-menu.component.ts new file mode 100644 index 0000000000..f9f1db65ee --- /dev/null +++ b/src/themes/custom/app/shared/auth-nav-menu/user-menu/user-menu.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { UserMenuComponent as BaseComponent } from '../../../../../../app/shared/auth-nav-menu/user-menu/user-menu.component'; + +/** + * Component representing the {@link UserMenuComponent} of a page + */ +@Component({ + selector: 'ds-user-menu', + // templateUrl: 'user-menu.component.html', + templateUrl: '../../../../../../app/shared/auth-nav-menu/user-menu/user-menu.component.html', + // styleUrls: ['user-menu.component.scss'], + styleUrls: ['../../../../../../app/shared/auth-nav-menu/user-menu/user-menu.component.scss'], +}) +export class UserMenuComponent extends BaseComponent { +} diff --git a/src/themes/custom/lazy-theme.module.ts b/src/themes/custom/lazy-theme.module.ts index edb3f5478c..937e174b7f 100644 --- a/src/themes/custom/lazy-theme.module.ts +++ b/src/themes/custom/lazy-theme.module.ts @@ -156,6 +156,7 @@ import { ItemStatusComponent } from './app/item-page/edit-item-page/item-status/ import { EditBitstreamPageComponent } from './app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component'; import { FormModule } from '../../app/shared/form/form.module'; import { RequestCopyModule } from 'src/app/request-copy/request-copy.module'; +import {UserMenuComponent} from './app/shared/auth-nav-menu/user-menu/user-menu.component'; const DECLARATIONS = [ FileSectionComponent, @@ -239,6 +240,7 @@ const DECLARATIONS = [ SubmissionSectionUploadFileComponent, ItemStatusComponent, EditBitstreamPageComponent, + UserMenuComponent, ]; @NgModule({ From cac1407f08290adbc1a827fb1769011d3ecba803 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Wed, 12 Jul 2023 15:11:38 +0200 Subject: [PATCH 255/425] 104189: Allow CSV export on related entity search --- .../related-entities-search.component.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/item-page/simple/related-entities/related-entities-search/related-entities-search.component.html b/src/app/item-page/simple/related-entities/related-entities-search/related-entities-search.component.html index 2a08efeb2c..36340bebfa 100644 --- a/src/app/item-page/simple/related-entities/related-entities-search/related-entities-search.component.html +++ b/src/app/item-page/simple/related-entities/related-entities-search/related-entities-search.component.html @@ -2,5 +2,6 @@ [fixedFilterQuery]="fixedFilter" [configuration]="configuration" [searchEnabled]="searchEnabled" - [sideBarWidth]="sideBarWidth"> + [sideBarWidth]="sideBarWidth" + [showCsvExport]="true"> From 45ad5f73168ccdf3d4f7ab617d44a0e28c94545a Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Wed, 12 Jul 2023 16:32:56 +0200 Subject: [PATCH 256/425] 104189: CSV export add fixedFilter --- .../search-export-csv.component.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/app/shared/search/search-export-csv/search-export-csv.component.ts b/src/app/shared/search/search-export-csv/search-export-csv.component.ts index 6ad105342f..1997a663a1 100644 --- a/src/app/shared/search/search-export-csv/search-export-csv.component.ts +++ b/src/app/shared/search/search-export-csv/search-export-csv.component.ts @@ -94,6 +94,19 @@ export class SearchExportCsvComponent implements OnInit { } }); } + if (isNotEmpty(this.searchConfig.fixedFilter)) { + const fixedFilter = this.searchConfig.fixedFilter.substring(2); + const keyAndValue = fixedFilter.split('='); + if (keyAndValue.length > 1) { + const key = keyAndValue[0]; + const valueAndOperator = keyAndValue[1].split(','); + if (valueAndOperator.length > 1) { + const value = valueAndOperator[0]; + const operator = valueAndOperator[1]; + parameters.push({name: '-f', value: `${key},${operator}=${value}`}); + } + } + } } this.scriptDataService.invoke('metadata-export-search', parameters, []).pipe( From 03e1f677b610498b6dbb54b1f3e6310bef5a1407 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Mon, 17 Jul 2023 15:08:54 +0200 Subject: [PATCH 257/425] 104126: ProcessDetailComponent test improvement --- .../detail/process-detail.component.spec.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/app/process-page/detail/process-detail.component.spec.ts b/src/app/process-page/detail/process-detail.component.spec.ts index 9552f9a092..9a0d89a882 100644 --- a/src/app/process-page/detail/process-detail.component.spec.ts +++ b/src/app/process-page/detail/process-detail.component.spec.ts @@ -147,7 +147,7 @@ describe('ProcessDetailComponent', () => { providers: [ { provide: ActivatedRoute, - useValue: { data: observableOf({ process: createSuccessfulRemoteDataObject(process) }) } + useValue: { data: observableOf({ process: createSuccessfulRemoteDataObject(process) }), snapshot: { params: { id: 1 } } }, }, { provide: ProcessDataService, useValue: processService }, { provide: BitstreamDataService, useValue: bitstreamDataService }, @@ -310,10 +310,11 @@ describe('ProcessDetailComponent', () => { }); it('should call refresh method every 5 seconds, until process is completed', fakeAsync(() => { - spyOn(component, 'refresh'); - spyOn(component, 'stopRefreshTimer'); + spyOn(component, 'refresh').and.callThrough(); + spyOn(component, 'stopRefreshTimer').and.callThrough(); - process.processStatus = ProcessStatus.COMPLETED; + // start off with a running process in order for the refresh counter starts counting up + process.processStatus = ProcessStatus.RUNNING; // set findbyId to return a completed process (processService.findById as jasmine.Spy).and.returnValue(observableOf(createSuccessfulRemoteDataObject(process))); @@ -336,6 +337,10 @@ describe('ProcessDetailComponent', () => { tick(1001); // 1 second + 1 ms by the setTimeout expect(component.refreshCounter$.value).toBe(0); // 1 - 1 + // set the process to completed right before the counter checks the process + process.processStatus = ProcessStatus.COMPLETED; + (processService.findById as jasmine.Spy).and.returnValue(observableOf(createSuccessfulRemoteDataObject(process))); + tick(1000); // 1 second expect(component.refresh).toHaveBeenCalledTimes(1); From 648925f3e1c0a51fc3eb61b7257e7a44ea57fee6 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Wed, 19 Jul 2023 14:01:41 +0200 Subject: [PATCH 258/425] 104312: DsDynamicLookupRelationExternalSourceTabComponent should have the form value already filled in the search input --- .../dynamic-lookup-relation-modal.component.html | 1 + ...ookup-relation-external-source-tab.component.ts | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.html b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.html index f95cd98c65..4c635b931f 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.html +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.html @@ -42,6 +42,7 @@ [collection]="collection" [relationship]="relationshipOptions" [context]="context" + [query]="query" [externalSource]="source" (importedObject)="imported($event)" class="d-block pt-3"> diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.ts index ca2535cb91..ef646c28eb 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.ts @@ -74,6 +74,12 @@ export class DsDynamicLookupRelationExternalSourceTabComponent implements OnInit * The context to displaying lists for */ @Input() context: Context; + + /** + * The search query + */ + @Input() query: string; + @Input() repeatable: boolean; /** * Emit an event when an object has been imported (or selected from similar local entries) @@ -147,8 +153,12 @@ export class DsDynamicLookupRelationExternalSourceTabComponent implements OnInit this.resetRoute(); this.entriesRD$ = this.searchConfigService.paginatedSearchOptions.pipe( - switchMap((searchOptions: PaginatedSearchOptions) => - this.externalSourceService.getExternalSourceEntries(this.externalSource.id, searchOptions).pipe(startWith(undefined))) + switchMap((searchOptions: PaginatedSearchOptions) => { + if (searchOptions.query === '') { + searchOptions.query = this.query; + } + return this.externalSourceService.getExternalSourceEntries(this.externalSource.id, searchOptions).pipe(startWith(undefined)); + }) ); this.currentPagination$ = this.paginationService.getCurrentPagination(this.searchConfigService.paginationID, this.initialPagination); this.importConfig = { From 8bf4ba812614e5ed34b2808b79d7e364fd01c2db Mon Sep 17 00:00:00 2001 From: Mirko Scherf Date: Thu, 20 Jul 2023 14:53:28 +0200 Subject: [PATCH 259/425] refactor: rename aletr-type.ts to alert-type.ts --- .../group-registry/group-form/group-form.component.ts | 2 +- .../edit-item-template-page.component.ts | 2 +- .../dso-shared/dso-edit-metadata/dso-edit-metadata.component.ts | 2 +- .../health-panel/health-component/health-component.component.ts | 2 +- src/app/item-page/alerts/item-alerts.component.ts | 2 +- .../item-version-history/item-version-history.component.ts | 2 +- .../item-page/orcid-page/orcid-queue/orcid-queue.component.ts | 2 +- src/app/item-page/versions/item-versions.component.ts | 2 +- .../item-page/versions/notice/item-versions-notice.component.ts | 2 +- src/app/process-page/detail/process-detail.component.ts | 2 +- src/app/register-email-form/register-email-form.component.ts | 2 +- .../access-control-form-container.component.ts | 2 +- src/app/shared/alert/{aletr-type.ts => alert-type.ts} | 0 src/app/shared/alert/alert.component.spec.ts | 2 +- src/app/shared/alert/alert.component.ts | 2 +- src/app/shared/error/error.component.ts | 2 +- .../sections/container/section-container.component.ts | 2 +- .../sections/identifiers/section-identifiers.component.ts | 2 +- .../publisher-policy/publisher-policy.component.ts | 2 +- .../sherpa-policies/section-sherpa-policies.component.ts | 2 +- src/app/submission/sections/upload/section-upload.component.ts | 2 +- 21 files changed, 20 insertions(+), 20 deletions(-) rename src/app/shared/alert/{aletr-type.ts => alert-type.ts} (100%) diff --git a/src/app/access-control/group-registry/group-form/group-form.component.ts b/src/app/access-control/group-registry/group-form/group-form.component.ts index 3c0547cca5..693e283b4a 100644 --- a/src/app/access-control/group-registry/group-form/group-form.component.ts +++ b/src/app/access-control/group-registry/group-form/group-form.component.ts @@ -37,7 +37,7 @@ import { getFirstCompletedRemoteData, getFirstSucceededRemoteDataPayload } from '../../../core/shared/operators'; -import { AlertType } from '../../../shared/alert/aletr-type'; +import { AlertType } from '../../../shared/alert/alert-type'; import { ConfirmationModalComponent } from '../../../shared/confirmation-modal/confirmation-modal.component'; import { hasValue, isNotEmpty, hasValueOperator } from '../../../shared/empty.util'; import { FormBuilderService } from '../../../shared/form/builder/form-builder.service'; diff --git a/src/app/collection-page/edit-item-template-page/edit-item-template-page.component.ts b/src/app/collection-page/edit-item-template-page/edit-item-template-page.component.ts index 6425996fd2..238ec5e37a 100644 --- a/src/app/collection-page/edit-item-template-page/edit-item-template-page.component.ts +++ b/src/app/collection-page/edit-item-template-page/edit-item-template-page.component.ts @@ -8,7 +8,7 @@ import { ItemTemplateDataService } from '../../core/data/item-template-data.serv import { getCollectionEditRoute } from '../collection-page-routing-paths'; import { Item } from '../../core/shared/item.model'; import { getFirstSucceededRemoteDataPayload } from '../../core/shared/operators'; -import { AlertType } from '../../shared/alert/aletr-type'; +import { AlertType } from '../../shared/alert/alert-type'; import { DSONameService } from '../../core/breadcrumbs/dso-name.service'; @Component({ diff --git a/src/app/dso-shared/dso-edit-metadata/dso-edit-metadata.component.ts b/src/app/dso-shared/dso-edit-metadata/dso-edit-metadata.component.ts index d67a7ea738..d44817be84 100644 --- a/src/app/dso-shared/dso-edit-metadata/dso-edit-metadata.component.ts +++ b/src/app/dso-shared/dso-edit-metadata/dso-edit-metadata.component.ts @@ -1,5 +1,5 @@ import { Component, Inject, Injector, Input, OnDestroy, OnInit, ViewChild } from '@angular/core'; -import { AlertType } from '../../shared/alert/aletr-type'; +import { AlertType } from '../../shared/alert/alert-type'; import { DSpaceObject } from '../../core/shared/dspace-object.model'; import { DsoEditMetadataForm } from './dso-edit-metadata-form'; import { map } from 'rxjs/operators'; diff --git a/src/app/health-page/health-panel/health-component/health-component.component.ts b/src/app/health-page/health-panel/health-component/health-component.component.ts index e212a07289..f2391c9c4c 100644 --- a/src/app/health-page/health-panel/health-component/health-component.component.ts +++ b/src/app/health-page/health-panel/health-component/health-component.component.ts @@ -3,7 +3,7 @@ import { Component, Input } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; import { HealthComponent } from '../../models/health-component.model'; -import { AlertType } from '../../../shared/alert/aletr-type'; +import { AlertType } from '../../../shared/alert/alert-type'; /** * A component to render a "health component" object. diff --git a/src/app/item-page/alerts/item-alerts.component.ts b/src/app/item-page/alerts/item-alerts.component.ts index d7a84db015..2b1df58c9f 100644 --- a/src/app/item-page/alerts/item-alerts.component.ts +++ b/src/app/item-page/alerts/item-alerts.component.ts @@ -1,6 +1,6 @@ import { Component, Input } from '@angular/core'; import { Item } from '../../core/shared/item.model'; -import { AlertType } from '../../shared/alert/aletr-type'; +import { AlertType } from '../../shared/alert/alert-type'; @Component({ selector: 'ds-item-alerts', diff --git a/src/app/item-page/edit-item-page/item-version-history/item-version-history.component.ts b/src/app/item-page/edit-item-page/item-version-history/item-version-history.component.ts index 18878109c2..3845c03578 100644 --- a/src/app/item-page/edit-item-page/item-version-history/item-version-history.component.ts +++ b/src/app/item-page/edit-item-page/item-version-history/item-version-history.component.ts @@ -5,7 +5,7 @@ import { Item } from '../../../core/shared/item.model'; import { map } from 'rxjs/operators'; import { getFirstSucceededRemoteData } from '../../../core/shared/operators'; import { ActivatedRoute } from '@angular/router'; -import { AlertType } from '../../../shared/alert/aletr-type'; +import { AlertType } from '../../../shared/alert/alert-type'; @Component({ selector: 'ds-item-version-history', diff --git a/src/app/item-page/orcid-page/orcid-queue/orcid-queue.component.ts b/src/app/item-page/orcid-page/orcid-queue/orcid-queue.component.ts index 6079287f71..3e88826952 100644 --- a/src/app/item-page/orcid-page/orcid-queue/orcid-queue.component.ts +++ b/src/app/item-page/orcid-page/orcid-queue/orcid-queue.component.ts @@ -15,7 +15,7 @@ import { getFirstCompletedRemoteData } from '../../../core/shared/operators'; import { hasValue } from '../../../shared/empty.util'; import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model'; -import { AlertType } from '../../../shared/alert/aletr-type'; +import { AlertType } from '../../../shared/alert/alert-type'; import { Item } from '../../../core/shared/item.model'; import { OrcidAuthService } from '../../../core/orcid/orcid-auth.service'; diff --git a/src/app/item-page/versions/item-versions.component.ts b/src/app/item-page/versions/item-versions.component.ts index 700a35552c..e7ee9d5ea2 100644 --- a/src/app/item-page/versions/item-versions.component.ts +++ b/src/app/item-page/versions/item-versions.component.ts @@ -23,7 +23,7 @@ import { PaginatedList } from '../../core/data/paginated-list.model'; import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model'; import { VersionHistoryDataService } from '../../core/data/version-history-data.service'; import { PaginatedSearchOptions } from '../../shared/search/models/paginated-search-options.model'; -import { AlertType } from '../../shared/alert/aletr-type'; +import { AlertType } from '../../shared/alert/alert-type'; import { followLink } from '../../shared/utils/follow-link-config.model'; import { hasValue, hasValueOperator } from '../../shared/empty.util'; import { PaginationService } from '../../core/pagination/pagination.service'; diff --git a/src/app/item-page/versions/notice/item-versions-notice.component.ts b/src/app/item-page/versions/notice/item-versions-notice.component.ts index 8a8f5ff76f..0e5e45806b 100644 --- a/src/app/item-page/versions/notice/item-versions-notice.component.ts +++ b/src/app/item-page/versions/notice/item-versions-notice.component.ts @@ -12,7 +12,7 @@ import { } from '../../../core/shared/operators'; import { map, startWith, switchMap } from 'rxjs/operators'; import { VersionHistoryDataService } from '../../../core/data/version-history-data.service'; -import { AlertType } from '../../../shared/alert/aletr-type'; +import { AlertType } from '../../../shared/alert/alert-type'; import { getItemPageRoute } from '../../item-page-routing-paths'; @Component({ diff --git a/src/app/process-page/detail/process-detail.component.ts b/src/app/process-page/detail/process-detail.component.ts index a379dfe337..be0b6ad0f6 100644 --- a/src/app/process-page/detail/process-detail.component.ts +++ b/src/app/process-page/detail/process-detail.component.ts @@ -17,7 +17,7 @@ import { getFirstSucceededRemoteDataPayload } from '../../core/shared/operators'; import { URLCombiner } from '../../core/url-combiner/url-combiner'; -import { AlertType } from '../../shared/alert/aletr-type'; +import { AlertType } from '../../shared/alert/alert-type'; import { hasValue } from '../../shared/empty.util'; import { ProcessStatus } from '../processes/process-status.model'; import { Process } from '../processes/process.model'; diff --git a/src/app/register-email-form/register-email-form.component.ts b/src/app/register-email-form/register-email-form.component.ts index ddb77b669c..df7e9bea5e 100644 --- a/src/app/register-email-form/register-email-form.component.ts +++ b/src/app/register-email-form/register-email-form.component.ts @@ -13,7 +13,7 @@ import {isNotEmpty} from '../shared/empty.util'; import {BehaviorSubject, combineLatest, Observable, of, switchMap} from 'rxjs'; import {map, startWith, take} from 'rxjs/operators'; import {CAPTCHA_NAME, GoogleRecaptchaService} from '../core/google-recaptcha/google-recaptcha.service'; -import {AlertType} from '../shared/alert/aletr-type'; +import {AlertType} from '../shared/alert/alert-type'; import {KlaroService} from '../shared/cookies/klaro.service'; import {CookieService} from '../core/services/cookie.service'; import { Subscription } from 'rxjs'; diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index 69a598f7ce..cddd1b1a29 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -15,7 +15,7 @@ import { import { BulkAccessConfigDataService } from '../../core/config/bulk-access-config-data.service'; import { getFirstCompletedRemoteData } from '../../core/shared/operators'; import { BulkAccessConditionOptions } from '../../core/config/models/bulk-access-condition-options.model'; -import { AlertType } from '../alert/aletr-type'; +import { AlertType } from '../alert/alert-type'; import { createAccessControlInitialFormState } from './access-control-form-container-intial-state'; diff --git a/src/app/shared/alert/aletr-type.ts b/src/app/shared/alert/alert-type.ts similarity index 100% rename from src/app/shared/alert/aletr-type.ts rename to src/app/shared/alert/alert-type.ts diff --git a/src/app/shared/alert/alert.component.spec.ts b/src/app/shared/alert/alert.component.spec.ts index 21e4d197b7..11411c7de0 100644 --- a/src/app/shared/alert/alert.component.spec.ts +++ b/src/app/shared/alert/alert.component.spec.ts @@ -8,7 +8,7 @@ import { TranslateModule } from '@ngx-translate/core'; import { AlertComponent } from './alert.component'; import { createTestComponent } from '../testing/utils.test'; -import { AlertType } from './aletr-type'; +import { AlertType } from './alert-type'; describe('AlertComponent test suite', () => { diff --git a/src/app/shared/alert/alert.component.ts b/src/app/shared/alert/alert.component.ts index 93535d2057..07a8efbd7d 100644 --- a/src/app/shared/alert/alert.component.ts +++ b/src/app/shared/alert/alert.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core'; import { trigger } from '@angular/animations'; -import { AlertType } from './aletr-type'; +import { AlertType } from './alert-type'; import { fadeOutLeave, fadeOutState } from '../animations/fade'; /** diff --git a/src/app/shared/error/error.component.ts b/src/app/shared/error/error.component.ts index 9a6b0660bb..6572598c8b 100644 --- a/src/app/shared/error/error.component.ts +++ b/src/app/shared/error/error.component.ts @@ -3,7 +3,7 @@ import { Component, Input } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; import { Subscription } from 'rxjs'; -import { AlertType } from '../alert/aletr-type'; +import { AlertType } from '../alert/alert-type'; @Component({ selector: 'ds-error', diff --git a/src/app/submission/sections/container/section-container.component.ts b/src/app/submission/sections/container/section-container.component.ts index 8f9ebfbfda..3331629f33 100644 --- a/src/app/submission/sections/container/section-container.component.ts +++ b/src/app/submission/sections/container/section-container.component.ts @@ -3,7 +3,7 @@ import { Component, Injector, Input, OnInit, ViewChild } from '@angular/core'; import { SectionsDirective } from '../sections.directive'; import { SectionDataObject } from '../models/section-data.model'; import { rendersSectionType } from '../sections-decorator'; -import { AlertType } from '../../../shared/alert/aletr-type'; +import { AlertType } from '../../../shared/alert/alert-type'; /** * This component represents a section that contains the submission license form. diff --git a/src/app/submission/sections/identifiers/section-identifiers.component.ts b/src/app/submission/sections/identifiers/section-identifiers.component.ts index 2dc70f668e..ac4af63adb 100644 --- a/src/app/submission/sections/identifiers/section-identifiers.component.ts +++ b/src/app/submission/sections/identifiers/section-identifiers.component.ts @@ -7,7 +7,7 @@ import { SectionModelComponent } from '../models/section.model'; import { renderSectionFor } from '../sections-decorator'; import { SectionDataObject } from '../models/section-data.model'; import { SubmissionService } from '../../submission.service'; -import { AlertType } from '../../../shared/alert/aletr-type'; +import { AlertType } from '../../../shared/alert/alert-type'; import { SectionsService } from '../sections.service'; import { WorkspaceitemSectionIdentifiersObject } from '../../../core/submission/models/workspaceitem-section-identifiers.model'; diff --git a/src/app/submission/sections/sherpa-policies/publisher-policy/publisher-policy.component.ts b/src/app/submission/sections/sherpa-policies/publisher-policy/publisher-policy.component.ts index 96ada3904c..25407f5a7b 100644 --- a/src/app/submission/sections/sherpa-policies/publisher-policy/publisher-policy.component.ts +++ b/src/app/submission/sections/sherpa-policies/publisher-policy/publisher-policy.component.ts @@ -1,7 +1,7 @@ import { Component, Input } from '@angular/core'; import { Policy } from '../../../../core/submission/models/sherpa-policies-details.model'; -import { AlertType } from '../../../../shared/alert/aletr-type'; +import { AlertType } from '../../../../shared/alert/alert-type'; /** * This component represents a section that contains the publisher policy informations. diff --git a/src/app/submission/sections/sherpa-policies/section-sherpa-policies.component.ts b/src/app/submission/sections/sherpa-policies/section-sherpa-policies.component.ts index e55b75146f..eb273a8420 100644 --- a/src/app/submission/sections/sherpa-policies/section-sherpa-policies.component.ts +++ b/src/app/submission/sections/sherpa-policies/section-sherpa-policies.component.ts @@ -1,4 +1,4 @@ -import { AlertType } from '../../../shared/alert/aletr-type'; +import { AlertType } from '../../../shared/alert/alert-type'; import { Component, Inject } from '@angular/core'; import { BehaviorSubject, Observable, of, Subscription } from 'rxjs'; diff --git a/src/app/submission/sections/upload/section-upload.component.ts b/src/app/submission/sections/upload/section-upload.component.ts index eefed8a36b..10203adbc0 100644 --- a/src/app/submission/sections/upload/section-upload.component.ts +++ b/src/app/submission/sections/upload/section-upload.component.ts @@ -21,7 +21,7 @@ import { SectionsType } from '../sections-type'; import { renderSectionFor } from '../sections-decorator'; import { SectionDataObject } from '../models/section-data.model'; import { SubmissionObjectEntry } from '../../objects/submission-objects.reducer'; -import { AlertType } from '../../../shared/alert/aletr-type'; +import { AlertType } from '../../../shared/alert/alert-type'; import { RemoteData } from '../../../core/data/remote-data'; import { Group } from '../../../core/eperson/models/group.model'; import { SectionsService } from '../sections.service'; From c9558167b2dc2df22428b8d1fcfbd9b77e4b855e Mon Sep 17 00:00:00 2001 From: Yury Bondarenko Date: Thu, 20 Jul 2023 18:19:48 +0200 Subject: [PATCH 260/425] Move subscription button to DSO edit menu --- .../collection-page.component.html | 3 - .../community-page.component.html | 3 - .../shared/dso-page/dso-edit-menu.resolver.ts | 37 +++++++++ ...so-page-subscription-button.component.html | 8 -- ...so-page-subscription-button.component.scss | 0 ...page-subscription-button.component.spec.ts | 83 ------------------- .../dso-page-subscription-button.component.ts | 57 ------------- src/app/shared/shared.module.ts | 4 - 8 files changed, 37 insertions(+), 158 deletions(-) delete mode 100644 src/app/shared/dso-page/dso-page-subscription-button/dso-page-subscription-button.component.html delete mode 100644 src/app/shared/dso-page/dso-page-subscription-button/dso-page-subscription-button.component.scss delete mode 100644 src/app/shared/dso-page/dso-page-subscription-button/dso-page-subscription-button.component.spec.ts delete mode 100644 src/app/shared/dso-page/dso-page-subscription-button/dso-page-subscription-button.component.ts diff --git a/src/app/collection-page/collection-page.component.html b/src/app/collection-page/collection-page.component.html index 02c63d316d..3cbd08f132 100644 --- a/src/app/collection-page/collection-page.component.html +++ b/src/app/collection-page/collection-page.component.html @@ -34,9 +34,6 @@ -
    - -
    diff --git a/src/app/community-page/community-page.component.html b/src/app/community-page/community-page.component.html index 6d5262d933..671bf28fd1 100644 --- a/src/app/community-page/community-page.component.html +++ b/src/app/community-page/community-page.component.html @@ -21,9 +21,6 @@ -
    - -
    diff --git a/src/app/shared/dso-page/dso-edit-menu.resolver.ts b/src/app/shared/dso-page/dso-edit-menu.resolver.ts index 80a69c2830..1ade457840 100644 --- a/src/app/shared/dso-page/dso-edit-menu.resolver.ts +++ b/src/app/shared/dso-page/dso-edit-menu.resolver.ts @@ -21,6 +21,9 @@ import { getDSORoute } from '../../app-routing-paths'; import { ResearcherProfileDataService } from '../../core/profile/researcher-profile-data.service'; import { NotificationsService } from '../notifications/notifications.service'; import { TranslateService } from '@ngx-translate/core'; +import { SubscriptionModalComponent } from '../subscriptions/subscription-modal/subscription-modal.component'; +import { Community } from '../../core/shared/community.model'; +import { Collection } from '../../core/shared/collection.model'; /** * Creates the menus for the dspace object pages @@ -84,6 +87,7 @@ export class DSOEditMenuResolver implements Resolve<{ [key: string]: MenuSection getDsoMenus(dso, route, state): Observable[] { return [ this.getItemMenu(dso), + this.getComColMenu(dso), this.getCommonMenu(dso, state) ]; } @@ -178,6 +182,39 @@ export class DSOEditMenuResolver implements Resolve<{ [key: string]: MenuSection } } + /** + * Get Community/Collection-specific menus + */ + protected getComColMenu(dso): Observable { + if (dso instanceof Community || dso instanceof Collection) { + return combineLatest([ + this.authorizationService.isAuthorized(FeatureID.CanSubscribe, dso.self), + ]).pipe( + map(([canSubscribe]) => { + return [ + { + id: 'subscribe', + active: false, + visible: canSubscribe, + model: { + type: MenuItemType.ONCLICK, + text: 'subscriptions.tooltip', + function: () => { + const modalRef = this.modalService.open(SubscriptionModalComponent); + modalRef.componentInstance.dso = dso; + } + } as OnClickMenuItemModel, + icon: 'bell', + index: 4 + }, + ]; + }) + ); + } else { + return observableOf([]); + } + } + /** * Claim a researcher by creating a profile * Shows notifications and/or hides the menu section on success/error diff --git a/src/app/shared/dso-page/dso-page-subscription-button/dso-page-subscription-button.component.html b/src/app/shared/dso-page/dso-page-subscription-button/dso-page-subscription-button.component.html deleted file mode 100644 index 15135009fc..0000000000 --- a/src/app/shared/dso-page/dso-page-subscription-button/dso-page-subscription-button.component.html +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/src/app/shared/dso-page/dso-page-subscription-button/dso-page-subscription-button.component.scss b/src/app/shared/dso-page/dso-page-subscription-button/dso-page-subscription-button.component.scss deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/app/shared/dso-page/dso-page-subscription-button/dso-page-subscription-button.component.spec.ts b/src/app/shared/dso-page/dso-page-subscription-button/dso-page-subscription-button.component.spec.ts deleted file mode 100644 index 726854778d..0000000000 --- a/src/app/shared/dso-page/dso-page-subscription-button/dso-page-subscription-button.component.spec.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { DsoPageSubscriptionButtonComponent } from './dso-page-subscription-button.component'; -import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; -import { of as observableOf } from 'rxjs'; -import { NgbModalModule } from '@ng-bootstrap/ng-bootstrap'; -import { By } from '@angular/platform-browser'; -import { DebugElement } from '@angular/core'; -import { Item } from '../../../core/shared/item.model'; -import { ITEM } from '../../../core/shared/item.resource-type'; -import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; -import { TranslateLoaderMock } from '../../mocks/translate-loader.mock'; - -describe('DsoPageSubscriptionButtonComponent', () => { - let component: DsoPageSubscriptionButtonComponent; - let fixture: ComponentFixture; - let de: DebugElement; - - const authorizationService = jasmine.createSpyObj('authorizationService', { - isAuthorized: jasmine.createSpy('isAuthorized') // observableOf(true) - }); - - const mockItem = Object.assign(new Item(), { - id: 'fake-id', - uuid: 'fake-id', - handle: 'fake/handle', - lastModified: '2018', - type: ITEM, - _links: { - self: { - href: 'https://localhost:8000/items/fake-id' - } - } - }); - - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [ - NgbModalModule, - TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useClass: TranslateLoaderMock - } - }) - ], - declarations: [ DsoPageSubscriptionButtonComponent ], - providers: [ - { provide: AuthorizationDataService, useValue: authorizationService }, - ] - }) - .compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(DsoPageSubscriptionButtonComponent); - component = fixture.componentInstance; - de = fixture.debugElement; - component.dso = mockItem; - }); - - describe('when is authorized', () => { - beforeEach(() => { - authorizationService.isAuthorized.and.returnValue(observableOf(true)); - fixture.detectChanges(); - }); - - it('should display subscription button', () => { - expect(de.query(By.css(' [data-test="subscription-button"]'))).toBeTruthy(); - }); - }); - - describe('when is not authorized', () => { - beforeEach(() => { - authorizationService.isAuthorized.and.returnValue(observableOf(false)); - fixture.detectChanges(); - }); - - it('should not display subscription button', () => { - expect(de.query(By.css(' [data-test="subscription-button"]'))).toBeNull(); - }); - }); -}); diff --git a/src/app/shared/dso-page/dso-page-subscription-button/dso-page-subscription-button.component.ts b/src/app/shared/dso-page/dso-page-subscription-button/dso-page-subscription-button.component.ts deleted file mode 100644 index 54cd9e6bb0..0000000000 --- a/src/app/shared/dso-page/dso-page-subscription-button/dso-page-subscription-button.component.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { Component, Input, OnInit } from '@angular/core'; - -import { Observable, of } from 'rxjs'; -import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; - -import { DSpaceObject } from '../../../core/shared/dspace-object.model'; -import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; -import { SubscriptionModalComponent } from '../../subscriptions/subscription-modal/subscription-modal.component'; -import { FeatureID } from '../../../core/data/feature-authorization/feature-id'; - -@Component({ - selector: 'ds-dso-page-subscription-button', - templateUrl: './dso-page-subscription-button.component.html', - styleUrls: ['./dso-page-subscription-button.component.scss'] -}) -/** - * Display a button that opens the modal to manage subscriptions - */ -export class DsoPageSubscriptionButtonComponent implements OnInit { - - /** - * Whether the current user is authorized to edit the DSpaceObject - */ - isAuthorized$: Observable = of(false); - - /** - * Reference to NgbModal - */ - public modalRef: NgbModalRef; - - /** - * DSpaceObject that is being viewed - */ - @Input() dso: DSpaceObject; - - constructor( - protected authorizationService: AuthorizationDataService, - private modalService: NgbModal, - ) { - } - - /** - * check if the current DSpaceObject can be subscribed by the user - */ - ngOnInit(): void { - this.isAuthorized$ = this.authorizationService.isAuthorized(FeatureID.CanSubscribe, this.dso.self); - } - - /** - * Open the modal to subscribe to the related DSpaceObject - */ - public openSubscriptionModal() { - this.modalRef = this.modalService.open(SubscriptionModalComponent); - this.modalRef.componentInstance.dso = this.dso; - } - -} diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index 0f7871f7f9..c6e2ddc3f3 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -273,9 +273,6 @@ import { AdvancedClaimedTaskActionRatingComponent } from './mydspace-actions/claimed-task/rating/advanced-claimed-task-action-rating.component'; import { ClaimedTaskActionsDeclineTaskComponent } from './mydspace-actions/claimed-task/decline-task/claimed-task-actions-decline-task.component'; -import { - DsoPageSubscriptionButtonComponent -} from './dso-page/dso-page-subscription-button/dso-page-subscription-button.component'; import { EpersonGroupListComponent } from './eperson-group-list/eperson-group-list.component'; import { EpersonSearchBoxComponent } from './eperson-group-list/eperson-search-box/eperson-search-box.component'; import { GroupSearchBoxComponent } from './eperson-group-list/group-search-box/group-search-box.component'; @@ -395,7 +392,6 @@ const COMPONENTS = [ ItemPageTitleFieldComponent, ThemedSearchNavbarComponent, ListableNotificationObjectComponent, - DsoPageSubscriptionButtonComponent, MetadataFieldWrapperComponent, ContextHelpWrapperComponent, EpersonGroupListComponent, From b1df1251663b162a6fbc3555bcb5e7cfca4c12b4 Mon Sep 17 00:00:00 2001 From: Mirko Scherf Date: Fri, 21 Jul 2023 10:43:13 +0200 Subject: [PATCH 261/425] fix(i18n): add and update missing status strings New strings for status filter entries: search.filters.namedresourcetype.* Refactored strings introduced with #2068 (refactor badged), e.g. mydspace.status.archived -> mydspace.status.mydspaceArchived --- src/assets/i18n/ar.json5 | 20 ++++++++++---------- src/assets/i18n/bn.json5 | 20 ++++++++++---------- src/assets/i18n/ca.json5 | 20 ++++++++++---------- src/assets/i18n/cs.json5 | 20 ++++++++++---------- src/assets/i18n/de.json5 | 35 +++++++++++++++++++++++++---------- src/assets/i18n/el.json5 | 10 +++++----- src/assets/i18n/en.json5 | 10 ++++++++++ src/assets/i18n/es.json5 | 20 ++++++++++---------- src/assets/i18n/fi.json5 | 20 ++++++++++---------- src/assets/i18n/fr.json5 | 20 ++++++++++---------- src/assets/i18n/gd.json5 | 20 ++++++++++---------- src/assets/i18n/hi.json5 | 10 +++++----- src/assets/i18n/hu.json5 | 20 ++++++++++---------- src/assets/i18n/it.json5 | 20 ++++++++++---------- src/assets/i18n/ja.json5 | 20 ++++++++++---------- src/assets/i18n/kk.json5 | 20 ++++++++++---------- src/assets/i18n/lv.json5 | 20 ++++++++++---------- src/assets/i18n/nl.json5 | 20 ++++++++++---------- src/assets/i18n/pl.json5 | 10 +++++----- src/assets/i18n/pt-BR.json5 | 20 ++++++++++---------- src/assets/i18n/pt-PT.json5 | 20 ++++++++++---------- src/assets/i18n/sv.json5 | 20 ++++++++++---------- src/assets/i18n/sw.json5 | 20 ++++++++++---------- src/assets/i18n/tr.json5 | 20 ++++++++++---------- src/assets/i18n/uk.json5 | 20 ++++++++++---------- src/assets/i18n/vi.json5 | 10 +++++----- 26 files changed, 255 insertions(+), 230 deletions(-) diff --git a/src/assets/i18n/ar.json5 b/src/assets/i18n/ar.json5 index 70f5fdadb1..3069104dd9 100644 --- a/src/assets/i18n/ar.json5 +++ b/src/assets/i18n/ar.json5 @@ -4276,25 +4276,25 @@ // TODO New key - Add a translation "mydspace.show.workspace": "Your Submissions", - // "mydspace.status.archived": "Archived", + // "mydspace.status.mydspaceArchived": "Archived", // TODO New key - Add a translation - "mydspace.status.archived": "Archived", + "mydspace.status.mydspaceArchived": "Archived", - // "mydspace.status.validation": "Validation", + // "mydspace.status.mydspaceValidation": "Validation", // TODO New key - Add a translation - "mydspace.status.validation": "Validation", + "mydspace.status.mydspaceValidation": "Validation", - // "mydspace.status.waiting-for-controller": "Waiting for controller", + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", // TODO New key - Add a translation - "mydspace.status.waiting-for-controller": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "Waiting for controller", - // "mydspace.status.workflow": "Workflow", + // "mydspace.status.mydspaceWorkflow": "Workflow", // TODO New key - Add a translation - "mydspace.status.workflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "Workflow", - // "mydspace.status.workspace": "Workspace", + // "mydspace.status.mydspaceWorkspace": "Workspace", // TODO New key - Add a translation - "mydspace.status.workspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Workspace", // "mydspace.title": "MyDSpace", // TODO New key - Add a translation diff --git a/src/assets/i18n/bn.json5 b/src/assets/i18n/bn.json5 index cc05d12828..c70cc6f459 100644 --- a/src/assets/i18n/bn.json5 +++ b/src/assets/i18n/bn.json5 @@ -3880,20 +3880,20 @@ // "mydspace.show.workspace": "Your Submissions", "mydspace.show.workspace": "আপনার জমাগুলো", - // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "সংরক্ষণাগারভুক্ত", + // "mydspace.status.mydspaceArchived": "Archived", + "mydspace.status.mydspaceArchived": "সংরক্ষণাগারভুক্ত", - // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "বৈধতা", + // "mydspace.status.mydspaceValidation": "Validation", + "mydspace.status.mydspaceValidation": "বৈধতা", - // "mydspace.status.waiting-for-controller": "Waiting for controller", - "mydspace.status.waiting-for-controller": "নিয়ামক জন্য অপেক্ষা করছে", + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "নিয়ামক জন্য অপেক্ষা করছে", - // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "ওয়ার্কফ্লো", + // "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "ওয়ার্কফ্লো", - // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "কর্মক্ষেত্র", + // "mydspace.status.mydspaceWorkspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "কর্মক্ষেত্র", // "mydspace.title": "MyDSpace", "mydspace.title": "আমার ডিস্পেস", diff --git a/src/assets/i18n/ca.json5 b/src/assets/i18n/ca.json5 index 34279548bb..ad8fe49424 100644 --- a/src/assets/i18n/ca.json5 +++ b/src/assets/i18n/ca.json5 @@ -4190,20 +4190,20 @@ // "mydspace.show.workspace": "Your Submissions", "mydspace.show.workspace": "Els seus enviaments", - // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "Arxivat", + // "mydspace.status.mydspaceArchived": "Archived", + "mydspace.status.mydspaceArchived": "Arxivat", - // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "Validació", + // "mydspace.status.mydspaceValidation": "Validation", + "mydspace.status.mydspaceValidation": "Validació", - // "mydspace.status.waiting-for-controller": "Waiting for controller", - "mydspace.status.waiting-for-controller": "Esperant el controlador", + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "Esperant el controlador", - // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "Flux de treball", + // "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "Flux de treball", - // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "Espai de treball", + // "mydspace.status.mydspaceWorkspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Espai de treball", // "mydspace.title": "MyDSpace", "mydspace.title": "El meu DSpace", diff --git a/src/assets/i18n/cs.json5 b/src/assets/i18n/cs.json5 index f3155e9f57..7f9583a50e 100644 --- a/src/assets/i18n/cs.json5 +++ b/src/assets/i18n/cs.json5 @@ -4187,25 +4187,25 @@ // TODO New key - Add a translation "mydspace.show.workspace": "Your Submissions", - // "mydspace.status.archived": "Archived", + // "mydspace.status.mydspaceArchived": "Archived", // TODO New key - Add a translation - "mydspace.status.archived": "Archived", + "mydspace.status.mydspaceArchived": "Archived", - // "mydspace.status.validation": "Validation", + // "mydspace.status.mydspaceValidation": "Validation", // TODO New key - Add a translation - "mydspace.status.validation": "Validation", + "mydspace.status.mydspaceValidation": "Validation", - // "mydspace.status.waiting-for-controller": "Waiting for controller", + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", // TODO New key - Add a translation - "mydspace.status.waiting-for-controller": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "Waiting for controller", - // "mydspace.status.workflow": "Workflow", + // "mydspace.status.mydspaceWorkflow": "Workflow", // TODO New key - Add a translation - "mydspace.status.workflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "Workflow", - // "mydspace.status.workspace": "Workspace", + // "mydspace.status.mydspaceWorkspace": "Workspace", // TODO New key - Add a translation - "mydspace.status.workspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Workspace", // "mydspace.title": "MyDSpace", // TODO New key - Add a translation diff --git a/src/assets/i18n/de.json5 b/src/assets/i18n/de.json5 index b03dc21e5a..4ebce8012d 100644 --- a/src/assets/i18n/de.json5 +++ b/src/assets/i18n/de.json5 @@ -3484,20 +3484,20 @@ // "mydspace.show.workspace": "Your Submissions", "mydspace.show.workspace": "Ihre Veröffentlichungen", - // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "Archiviert", + // "mydspace.status.mydspaceArchived": "Archived", + "mydspace.status.mydspaceArchived": "Archiviert", - // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "Validierung", + // "mydspace.status.mydspaceValidation": "Validation", + "mydspace.status.mydspaceValidation": "Validierung", - // "mydspace.status.waiting-for-controller": "Waiting for controller", - "mydspace.status.waiting-for-controller": "Warten auf die Überprüfung", + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "Warten auf die Überprüfung", - // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "Geschäftsgang", + // "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "Geschäftsgang", - // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "Arbeitsbereich", + // "mydspace.status.mydspaceWorkspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Arbeitsbereich", // "mydspace.title": "MyDSpace", "mydspace.title": "Mein DSpace", @@ -4487,6 +4487,21 @@ // "search.filters.discoverable.false": "Yes", "search.filters.discoverable.false": "Ja", + // "search.filters.namedresourcetype.Archived": "Archived", + "search.filters.namedresourcetype.Archived": "Archiviert", + + // "search.filters.namedresourcetype.Validation": "Validation", + "search.filters.namedresourcetype.Validation": "Validierung", + + // "search.filters.namedresourcetype.Waiting for Controller": "Waiting for Controller", + "search.filters.namedresourcetype.Waiting for Controller": "Warten auf die Überprüfung", + + // "search.filters.namedresourcetype.Workflow": "Workflow", + "search.filters.namedresourcetype.Workflow": "Geschäftsgang", + + // "search.filters.namedresourcetype.Workspace": "Workspace", + "search.filters.namedresourcetype.Workspace": "Arbeitsbereich", + // "search.filters.withdrawn.true": "Yes", "search.filters.withdrawn.true": "Ja", diff --git a/src/assets/i18n/el.json5 b/src/assets/i18n/el.json5 index af8a4fce49..176eadff62 100644 --- a/src/assets/i18n/el.json5 +++ b/src/assets/i18n/el.json5 @@ -1315,11 +1315,11 @@ "mydspace.search-form.placeholder": "Αναζήτηση στο mydspace...", "mydspace.show.workflow": "Εργασίες ροής εργασιών", "mydspace.show.workspace": "Οι Υποβολές σας", - "mydspace.status.archived": "Αρχειοθετημένα", - "mydspace.status.validation": "Επικύρωση", - "mydspace.status.waiting-for-controller": "Αναμονή για τον ελεγκτή", - "mydspace.status.workflow": "Ροή εργασιών", - "mydspace.status.workspace": "Χώρος εργασίας", + "mydspace.status.mydspaceArchived": "Αρχειοθετημένα", + "mydspace.status.mydspaceValidation": "Επικύρωση", + "mydspace.status.mydspaceWaitingController": "Αναμονή για τον ελεγκτή", + "mydspace.status.mydspaceWorkflow": "Ροή εργασιών", + "mydspace.status.mydspaceWorkspace": "Χώρος εργασίας", "mydspace.title": "MyDSpace", "mydspace.upload.upload-failed": "Σφάλμα κατά τη δημιουργία νέου χώρου εργασίας. Επαληθεύστε το περιεχόμενο που ανεβάσατε πριν δοκιμάσετε ξανά.", "mydspace.upload.upload-failed-manyentries": "Μη επεξεργάσιμο αρχείο. Εντοπίστηκαν πάρα πολλές καταχωρίσεις, αλλά επιτρέπεται μόνο μία για αρχείο.", diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 6c91bae4c1..5c17fc8e42 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -3812,6 +3812,16 @@ "search.filters.discoverable.false": "Yes", + "search.filters.namedresourcetype.Archived": "Archived", + + "search.filters.namedresourcetype.Validation": "Validation", + + "search.filters.namedresourcetype.Waiting for Controller": "Waiting for Controller", + + "search.filters.namedresourcetype.Workflow": "Workflow", + + "search.filters.namedresourcetype.Workspace": "Workspace", + "search.filters.withdrawn.true": "Yes", "search.filters.withdrawn.false": "No", diff --git a/src/assets/i18n/es.json5 b/src/assets/i18n/es.json5 index 7a2f2fa3db..5a0e40af42 100644 --- a/src/assets/i18n/es.json5 +++ b/src/assets/i18n/es.json5 @@ -4560,20 +4560,20 @@ // "mydspace.show.supervisedWorkspace": "Supervised items", "mydspace.show.supervisedWorkspace": "Ítems supervisados", - // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "Archivado", + // "mydspace.status.mydspaceArchived": "Archived", + "mydspace.status.mydspaceArchived": "Archivado", - // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "Validación", + // "mydspace.status.mydspaceValidation": "Validation", + "mydspace.status.mydspaceValidation": "Validación", - // "mydspace.status.waiting-for-controller": "Waiting for controller", - "mydspace.status.waiting-for-controller": "Esperando al controlador", + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "Esperando al controlador", - // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "Flujo de trabajo", + // "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "Flujo de trabajo", - // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "Espacio de trabajo", + // "mydspace.status.mydspaceWorkspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Espacio de trabajo", // "mydspace.title": "MyDSpace", "mydspace.title": "Mi DSpace", diff --git a/src/assets/i18n/fi.json5 b/src/assets/i18n/fi.json5 index 62e7e6bffe..4c6116276e 100644 --- a/src/assets/i18n/fi.json5 +++ b/src/assets/i18n/fi.json5 @@ -3261,20 +3261,20 @@ // "mydspace.show.workspace": "Your Submissions", "mydspace.show.workspace": "Tallennuksesi", - // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "Arkistoitu", + // "mydspace.status.mydspaceArchived": "Archived", + "mydspace.status.mydspaceArchived": "Arkistoitu", - // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "Tarkastaminen", + // "mydspace.status.mydspaceValidation": "Validation", + "mydspace.status.mydspaceValidation": "Tarkastaminen", - // "mydspace.status.waiting-for-controller": "Waiting for controller", - "mydspace.status.waiting-for-controller": "Odotetaan tarkastajaa", + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "Odotetaan tarkastajaa", - // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "Työnkulku", + // "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "Työnkulku", - // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "Työtila", + // "mydspace.status.mydspaceWorkspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Työtila", // "mydspace.title": "MyDSpace", "mydspace.title": "Oma DSpace", diff --git a/src/assets/i18n/fr.json5 b/src/assets/i18n/fr.json5 index 8ee4dc7d22..699ca5cc27 100644 --- a/src/assets/i18n/fr.json5 +++ b/src/assets/i18n/fr.json5 @@ -3822,20 +3822,20 @@ //"mydspace.show.supervisedWorkspace": "Supervised items", "mydspace.show.supervisedWorkspace": "Items supervisés", - // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "Archivés", + // "mydspace.status.mydspaceArchived": "Archived", + "mydspace.status.mydspaceArchived": "Archivés", - // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "En cours de validation", + // "mydspace.status.mydspaceValidation": "Validation", + "mydspace.status.mydspaceValidation": "En cours de validation", - // "mydspace.status.waiting-for-controller": "Waiting for controller", - "mydspace.status.waiting-for-controller": "En attente d'assignation", + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "En attente d'assignation", - // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "En traitement", + // "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "En traitement", - // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "Dépôts en cours", + // "mydspace.status.mydspaceWorkspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Dépôts en cours", // "mydspace.title": "MyDSpace", "mydspace.title": "Mon compte DSpace", diff --git a/src/assets/i18n/gd.json5 b/src/assets/i18n/gd.json5 index 6096073d56..55a53bc6f1 100644 --- a/src/assets/i18n/gd.json5 +++ b/src/assets/i18n/gd.json5 @@ -3867,20 +3867,20 @@ // "mydspace.show.workspace": "Your Submissions", "mydspace.show.workspace": "Do Chur-a-steachan", - // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "San Tasglann", + // "mydspace.status.mydspaceArchived": "Archived", + "mydspace.status.mydspaceArchived": "San Tasglann", - // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "Dearbhadh", + // "mydspace.status.mydspaceValidation": "Validation", + "mydspace.status.mydspaceValidation": "Dearbhadh", - // "mydspace.status.waiting-for-controller": "Waiting for controller", - "mydspace.status.waiting-for-controller": "A' feitheamh riaghladair", + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "A' feitheamh riaghladair", - // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "Sruth-obrach", + // "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "Sruth-obrach", - // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "Raon-obrach", + // "mydspace.status.mydspaceWorkspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Raon-obrach", // "mydspace.title": "MyDSpace", "mydspace.title": "MoDSpace", diff --git a/src/assets/i18n/hi.json5 b/src/assets/i18n/hi.json5 index 53fc106187..68eb6c1f12 100644 --- a/src/assets/i18n/hi.json5 +++ b/src/assets/i18n/hi.json5 @@ -2677,15 +2677,15 @@ "mydspace.show.workspace": "आपकी प्रस्तुतियां", - "mydspace.status.archived": "संग्रहीत", + "mydspace.status.mydspaceArchived": "संग्रहीत", - "mydspace.status.validation": "सत्यापन", + "mydspace.status.mydspaceValidation": "सत्यापन", - "mydspace.status.waiting-for-controller": "नियंत्रक की प्रतीक्षा कर रहा है", + "mydspace.status.mydspaceWaitingController": "नियंत्रक की प्रतीक्षा कर रहा है", - "mydspace.status.workflow": "कार्यप्रवाह", + "mydspace.status.mydspaceWorkflow": "कार्यप्रवाह", - "mydspace.status.workspace": "कार्यस्थान", + "mydspace.status.mydspaceWorkspace": "कार्यस्थान", "mydspace.title": "मेरा डीस्पेस", diff --git a/src/assets/i18n/hu.json5 b/src/assets/i18n/hu.json5 index 373d73aec5..e1076c7512 100644 --- a/src/assets/i18n/hu.json5 +++ b/src/assets/i18n/hu.json5 @@ -4983,20 +4983,20 @@ // TODO New key - Add a translation "mydspace.show.supervisedWorkspace": "Supervised items", - // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "Tárolva", + // "mydspace.status.mydspaceArchived": "Archived", + "mydspace.status.mydspaceArchived": "Tárolva", - // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "Érvényesítés", + // "mydspace.status.mydspaceValidation": "Validation", + "mydspace.status.mydspaceValidation": "Érvényesítés", - // "mydspace.status.waiting-for-controller": "Waiting for controller", - "mydspace.status.waiting-for-controller": "Várakozás a kontrollerre", + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "Várakozás a kontrollerre", - // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "Munkafolyamat", + // "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "Munkafolyamat", - // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "Munkafelület", + // "mydspace.status.mydspaceWorkspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Munkafelület", // "mydspace.title": "MyDSpace", "mydspace.title": "MyDSpace", diff --git a/src/assets/i18n/it.json5 b/src/assets/i18n/it.json5 index 4131d0bee6..1a97eca501 100644 --- a/src/assets/i18n/it.json5 +++ b/src/assets/i18n/it.json5 @@ -4813,20 +4813,20 @@ // TODO New key - Add a translation "mydspace.show.supervisedWorkspace": "Supervised items", - // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "Archiviati", + // "mydspace.status.mydspaceArchived": "Archived", + "mydspace.status.mydspaceArchived": "Archiviati", - // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "Convalida", + // "mydspace.status.mydspaceValidation": "Validation", + "mydspace.status.mydspaceValidation": "Convalida", - // "mydspace.status.waiting-for-controller": "Waiting for controller", - "mydspace.status.waiting-for-controller": "In attesa del controllo", + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "In attesa del controllo", - // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "Workflow", + // "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "Workflow", - // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "Workspace", + // "mydspace.status.mydspaceWorkspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Workspace", // "mydspace.title": "MyDSpace", "mydspace.title": "MyDSpace", diff --git a/src/assets/i18n/ja.json5 b/src/assets/i18n/ja.json5 index 94dfc9aa98..da2385fd62 100644 --- a/src/assets/i18n/ja.json5 +++ b/src/assets/i18n/ja.json5 @@ -4276,25 +4276,25 @@ // TODO New key - Add a translation "mydspace.show.workspace": "Your Submissions", - // "mydspace.status.archived": "Archived", + // "mydspace.status.mydspaceArchived": "Archived", // TODO New key - Add a translation - "mydspace.status.archived": "Archived", + "mydspace.status.mydspaceArchived": "Archived", - // "mydspace.status.validation": "Validation", + // "mydspace.status.mydspaceValidation": "Validation", // TODO New key - Add a translation - "mydspace.status.validation": "Validation", + "mydspace.status.mydspaceValidation": "Validation", - // "mydspace.status.waiting-for-controller": "Waiting for controller", + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", // TODO New key - Add a translation - "mydspace.status.waiting-for-controller": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "Waiting for controller", - // "mydspace.status.workflow": "Workflow", + // "mydspace.status.mydspaceWorkflow": "Workflow", // TODO New key - Add a translation - "mydspace.status.workflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "Workflow", - // "mydspace.status.workspace": "Workspace", + // "mydspace.status.mydspaceWorkspace": "Workspace", // TODO New key - Add a translation - "mydspace.status.workspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Workspace", // "mydspace.title": "MyDSpace", // TODO New key - Add a translation diff --git a/src/assets/i18n/kk.json5 b/src/assets/i18n/kk.json5 index 354eb1104a..d23dc23c47 100644 --- a/src/assets/i18n/kk.json5 +++ b/src/assets/i18n/kk.json5 @@ -4139,20 +4139,20 @@ // "mydspace.show.workspace": "Your Submissions", "mydspace.show.workspace": "Сіздің өтініштеріңіз", - // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "Мұрағатталған", + // "mydspace.status.mydspaceArchived": "Archived", + "mydspace.status.mydspaceArchived": "Мұрағатталған", - // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "Валидация", + // "mydspace.status.mydspaceValidation": "Validation", + "mydspace.status.mydspaceValidation": "Валидация", - // "mydspace.status.waiting-for-controller": "Waiting for controller", - "mydspace.status.waiting-for-controller": "Контроллерді күтуде", + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "Контроллерді күтуде", - // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "Жұмыс барысы", + // "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "Жұмыс барысы", - // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "Жұмыс кеңістігі", + // "mydspace.status.mydspaceWorkspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Жұмыс кеңістігі", // "mydspace.title": "MyDSpace", "mydspace.title": "MyDSpace", diff --git a/src/assets/i18n/lv.json5 b/src/assets/i18n/lv.json5 index 9b4058a3e6..81e2383a1f 100644 --- a/src/assets/i18n/lv.json5 +++ b/src/assets/i18n/lv.json5 @@ -3492,20 +3492,20 @@ // "mydspace.show.workspace": "Your Submissions", "mydspace.show.workspace": "Jūsu Iesniegumi", - // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "Arhivēts", + // "mydspace.status.mydspaceArchived": "Archived", + "mydspace.status.mydspaceArchived": "Arhivēts", - // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "Validācija", + // "mydspace.status.mydspaceValidation": "Validation", + "mydspace.status.mydspaceValidation": "Validācija", - // "mydspace.status.waiting-for-controller": "Waiting for controller", - "mydspace.status.waiting-for-controller": "Gaida kontrolieri", + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "Gaida kontrolieri", - // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "Darba plūsma", + // "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "Darba plūsma", - // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "Darbavieta", + // "mydspace.status.mydspaceWorkspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Darbavieta", // "mydspace.title": "MyDSpace", "mydspace.title": "Mans DSpace", diff --git a/src/assets/i18n/nl.json5 b/src/assets/i18n/nl.json5 index 520a8ca427..280a87b96f 100644 --- a/src/assets/i18n/nl.json5 +++ b/src/assets/i18n/nl.json5 @@ -3764,20 +3764,20 @@ // "mydspace.show.workspace": "Your Submissions", "mydspace.show.workspace": "Uw Submissions", - // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "Opgeslagen", + // "mydspace.status.mydspaceArchived": "Archived", + "mydspace.status.mydspaceArchived": "Opgeslagen", - // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "Validatie", + // "mydspace.status.mydspaceValidation": "Validation", + "mydspace.status.mydspaceValidation": "Validatie", - // "mydspace.status.waiting-for-controller": "Waiting for controller", - "mydspace.status.waiting-for-controller": "Wachten op controlleur", + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "Wachten op controlleur", - // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "Workflow", + // "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "Workflow", - // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "Workspace", + // "mydspace.status.mydspaceWorkspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Workspace", // "mydspace.title": "MyDSpace", "mydspace.title": "MyDSpace", diff --git a/src/assets/i18n/pl.json5 b/src/assets/i18n/pl.json5 index d748b94888..3512653705 100644 --- a/src/assets/i18n/pl.json5 +++ b/src/assets/i18n/pl.json5 @@ -1207,11 +1207,11 @@ "mydspace.search-form.placeholder": "Wyszukaj w mydspace...", "mydspace.show.workflow": "Wszystkie zadania", "mydspace.show.workspace": "Twoje zadania", - "mydspace.status.archived": "Zarchiwizowano", - "mydspace.status.validation": "Walidacja", - "mydspace.status.waiting-for-controller": "Oczekiwanie na redaktora", - "mydspace.status.workflow": "Workflow", - "mydspace.status.workspace": "Wersja robocza", + "mydspace.status.mydspaceArchived": "Zarchiwizowano", + "mydspace.status.mydspaceValidation": "Walidacja", + "mydspace.status.mydspaceWaitingController": "Oczekiwanie na redaktora", + "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkspace": "Wersja robocza", "mydspace.title": "Mój DSpace", "mydspace.upload.upload-failed": "Bład podczas tworzenia nowej wersji roboczej. Sprawdź poprawność plików i spróbuj ponownie.", "mydspace.upload.upload-failed-manyentries": "Plik jest niemożliwy do przetworzenia. Wykryto wiele wejść, a dopuszczalne jest tylko jedno dla jednego pliku.", diff --git a/src/assets/i18n/pt-BR.json5 b/src/assets/i18n/pt-BR.json5 index 25f1e0fb7c..5d852129bc 100644 --- a/src/assets/i18n/pt-BR.json5 +++ b/src/assets/i18n/pt-BR.json5 @@ -3972,20 +3972,20 @@ // "mydspace.show.workspace": "Your Submissions", "mydspace.show.workspace": "Minhas Submissões", - // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "Arquivado", + // "mydspace.status.mydspaceArchived": "Archived", + "mydspace.status.mydspaceArchived": "Arquivado", - // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "Validação", + // "mydspace.status.mydspaceValidation": "Validation", + "mydspace.status.mydspaceValidation": "Validação", - // "mydspace.status.waiting-for-controller": "Waiting for controller", - "mydspace.status.waiting-for-controller": "Esperando pelo controlador", + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "Esperando pelo controlador", - // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "Fluxo de trabalho", + // "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "Fluxo de trabalho", - // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "Espaço de trabalho", + // "mydspace.status.mydspaceWorkspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Espaço de trabalho", // "mydspace.title": "MyDSpace", "mydspace.title": "MeuDSpace", diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index a187ff927c..622f8cc48b 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -7713,20 +7713,20 @@ // "browse.metadata.srsc": "Subject Category", "browse.metadata.srsc": "vocabulário controlado (SRSC)", - // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "Depositado", + // "mydspace.status.mydspaceArchived": "Archived", + "mydspace.status.mydspaceArchived": "Depositado", - // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "Em validação", + // "mydspace.status.mydspaceValidation": "Validation", + "mydspace.status.mydspaceValidation": "Em validação", - // "mydspace.status.waiting-for-controller": "Waiting for Controller", - "mydspace.status.waiting-for-controller": "Aguarda validador", + // "mydspace.status.mydspaceWaitingController": "Waiting for Controller", + "mydspace.status.mydspaceWaitingController": "Aguarda validador", - // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "Em fluxo de trabalho", + // "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "Em fluxo de trabalho", - // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "Depósito por terminar", + // "mydspace.status.mydspaceWorkspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Depósito por terminar", // "search.filters.namedresourcetype.Archived": "Archived", "search.filters.namedresourcetype.Archived": "Depositado", diff --git a/src/assets/i18n/sv.json5 b/src/assets/i18n/sv.json5 index c988577c92..4e3576ccfc 100644 --- a/src/assets/i18n/sv.json5 +++ b/src/assets/i18n/sv.json5 @@ -3934,20 +3934,20 @@ // "mydspace.show.workspace": "Your Submissions", "mydspace.show.workspace": "Dina registreringar", - // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "I arkivet", + // "mydspace.status.mydspaceArchived": "Archived", + "mydspace.status.mydspaceArchived": "I arkivet", - // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "Validering", + // "mydspace.status.mydspaceValidation": "Validation", + "mydspace.status.mydspaceValidation": "Validering", - // "mydspace.status.waiting-for-controller": "Waiting for controller", - "mydspace.status.waiting-for-controller": "Väntar på kontrollant", + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "Väntar på kontrollant", - // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "Arbetsflöde", + // "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "Arbetsflöde", - // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "I arbetsflödet", + // "mydspace.status.mydspaceWorkspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "I arbetsflödet", // "mydspace.title": "MyDSpace", "mydspace.title": "Mitt DSpace", diff --git a/src/assets/i18n/sw.json5 b/src/assets/i18n/sw.json5 index 47253dea9f..a470ee4b58 100644 --- a/src/assets/i18n/sw.json5 +++ b/src/assets/i18n/sw.json5 @@ -4276,25 +4276,25 @@ // TODO New key - Add a translation "mydspace.show.workspace": "Your Submissions", - // "mydspace.status.archived": "Archived", + // "mydspace.status.mydspaceArchived": "Archived", // TODO New key - Add a translation - "mydspace.status.archived": "Archived", + "mydspace.status.mydspaceArchived": "Archived", - // "mydspace.status.validation": "Validation", + // "mydspace.status.mydspaceValidation": "Validation", // TODO New key - Add a translation - "mydspace.status.validation": "Validation", + "mydspace.status.mydspaceValidation": "Validation", - // "mydspace.status.waiting-for-controller": "Waiting for controller", + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", // TODO New key - Add a translation - "mydspace.status.waiting-for-controller": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "Waiting for controller", - // "mydspace.status.workflow": "Workflow", + // "mydspace.status.mydspaceWorkflow": "Workflow", // TODO New key - Add a translation - "mydspace.status.workflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "Workflow", - // "mydspace.status.workspace": "Workspace", + // "mydspace.status.mydspaceWorkspace": "Workspace", // TODO New key - Add a translation - "mydspace.status.workspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Workspace", // "mydspace.title": "MyDSpace", // TODO New key - Add a translation diff --git a/src/assets/i18n/tr.json5 b/src/assets/i18n/tr.json5 index e9869e0019..153eaa1281 100644 --- a/src/assets/i18n/tr.json5 +++ b/src/assets/i18n/tr.json5 @@ -3257,20 +3257,20 @@ // "mydspace.show.workspace": "Your Submissions", "mydspace.show.workspace": "Gönderimleriniz", - // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "Arşivlendi", + // "mydspace.status.mydspaceArchived": "Archived", + "mydspace.status.mydspaceArchived": "Arşivlendi", - // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "Doğrulama", + // "mydspace.status.mydspaceValidation": "Validation", + "mydspace.status.mydspaceValidation": "Doğrulama", - // "mydspace.status.waiting-for-controller": "Waiting for controller", - "mydspace.status.waiting-for-controller": "Kontrolör bekleniyor", + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "Kontrolör bekleniyor", - // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "İş akışı", + // "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "İş akışı", - // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "Çalışma alanı", + // "mydspace.status.mydspaceWorkspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Çalışma alanı", // "mydspace.title": "MyDSpace", "mydspace.title": "MyDSpace", diff --git a/src/assets/i18n/uk.json5 b/src/assets/i18n/uk.json5 index 5cbb480179..7df55fa236 100644 --- a/src/assets/i18n/uk.json5 +++ b/src/assets/i18n/uk.json5 @@ -3383,20 +3383,20 @@ // "mydspace.show.workspace": "Your Submissions", "mydspace.show.workspace": "Ваші надіслані документи ", - // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "Заархівовані", + // "mydspace.status.mydspaceArchived": "Archived", + "mydspace.status.mydspaceArchived": "Заархівовані", - // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "Перевірка", + // "mydspace.status.mydspaceValidation": "Validation", + "mydspace.status.mydspaceValidation": "Перевірка", - // "mydspace.status.waiting-for-controller": "Waiting for controller", - "mydspace.status.waiting-for-controller": "Чекаємо контролера", + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "Чекаємо контролера", - // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "Робочий процес", + // "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "Робочий процес", - // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "Робоче середовище", + // "mydspace.status.mydspaceWorkspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Робоче середовище", // "mydspace.title": "MyDSpace", "mydspace.title": "Моє середовище", diff --git a/src/assets/i18n/vi.json5 b/src/assets/i18n/vi.json5 index 7627818978..f254df34fe 100644 --- a/src/assets/i18n/vi.json5 +++ b/src/assets/i18n/vi.json5 @@ -1449,11 +1449,11 @@ "mydspace.search-form.placeholder": "Tìm kiếm trong trang cá nhân của tôi...", "mydspace.show.workflow": "Tất cả nhiệm vụ", "mydspace.show.workspace": "Tài liệu của tôi", - "mydspace.status.archived": "Đã lưu trữ", - "mydspace.status.validation": "Đang kiểm tra", - "mydspace.status.waiting-for-controller": "Đợi nhận nhiệm vụ", - "mydspace.status.workflow": "Đang kiểm duyệt", - "mydspace.status.workspace": "Đang biên mục", + "mydspace.status.mydspaceArchived": "Đã lưu trữ", + "mydspace.status.mydspaceValidation": "Đang kiểm tra", + "mydspace.status.mydspaceWaitingController": "Đợi nhận nhiệm vụ", + "mydspace.status.mydspaceWorkflow": "Đang kiểm duyệt", + "mydspace.status.mydspaceWorkspace": "Đang biên mục", "mydspace.title": "Trang cá nhân", "mydspace.upload.upload-failed": "Có lỗi xảy ra khi tạo tài liệu mới. Vui lòng xác minh nội dung đã tải lên trước khi thử lại.", "mydspace.upload.upload-failed-manyentries": "Không thể xử lý tệp tin. Có quá nhiều mục trong khi hệ thống chỉ cho phép một mục trong tệp tin.", From 2a35180a1b2c81ca84e3fe7d9c4a84567f567a6a Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 21 Jul 2023 15:03:46 +0200 Subject: [PATCH 262/425] Created separate pages for edit & create EPersons --- .../access-control-routing-paths.ts | 10 ++ .../access-control-routing.module.ts | 25 ++- .../epeople-registry.component.html | 147 ++++++++-------- .../epeople-registry.component.spec.ts | 30 ---- .../epeople-registry.component.ts | 64 +------ .../eperson-form/eperson-form.component.html | 161 +++++++++--------- .../eperson-form.component.spec.ts | 89 +++++----- .../eperson-form/eperson-form.component.ts | 23 +-- .../eperson-resolver.service.ts | 53 ++++++ src/assets/i18n/en.json5 | 8 + 10 files changed, 310 insertions(+), 300 deletions(-) create mode 100644 src/app/access-control/epeople-registry/eperson-resolver.service.ts diff --git a/src/app/access-control/access-control-routing-paths.ts b/src/app/access-control/access-control-routing-paths.ts index 259aa311e7..c3c42b3155 100644 --- a/src/app/access-control/access-control-routing-paths.ts +++ b/src/app/access-control/access-control-routing-paths.ts @@ -1,6 +1,16 @@ import { URLCombiner } from '../core/url-combiner/url-combiner'; import { getAccessControlModuleRoute } from '../app-routing-paths'; +export const EPERSON_PATH = 'epeople'; + +export function getEPersonsRoute(): string { + return new URLCombiner(getAccessControlModuleRoute(), EPERSON_PATH).toString(); +} + +export function getEPersonEditRoute(id: string): string { + return new URLCombiner(getEPersonsRoute(), id).toString(); +} + export const GROUP_EDIT_PATH = 'groups'; export function getGroupsRoute() { diff --git a/src/app/access-control/access-control-routing.module.ts b/src/app/access-control/access-control-routing.module.ts index 6f6de6cb26..a4082d19e2 100644 --- a/src/app/access-control/access-control-routing.module.ts +++ b/src/app/access-control/access-control-routing.module.ts @@ -3,7 +3,7 @@ import { RouterModule } from '@angular/router'; import { EPeopleRegistryComponent } from './epeople-registry/epeople-registry.component'; import { GroupFormComponent } from './group-registry/group-form/group-form.component'; import { GroupsRegistryComponent } from './group-registry/groups-registry.component'; -import { GROUP_EDIT_PATH } from './access-control-routing-paths'; +import { EPERSON_PATH, GROUP_EDIT_PATH } from './access-control-routing-paths'; import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver'; import { GroupPageGuard } from './group-registry/group-page.guard'; import { @@ -13,12 +13,14 @@ import { SiteAdministratorGuard } from '../core/data/feature-authorization/feature-authorization-guard/site-administrator.guard'; import { BulkAccessComponent } from './bulk-access/bulk-access.component'; +import { EPersonFormComponent } from './epeople-registry/eperson-form/eperson-form.component'; +import { EPersonResolver } from './epeople-registry/eperson-resolver.service'; @NgModule({ imports: [ RouterModule.forChild([ { - path: 'epeople', + path: EPERSON_PATH, component: EPeopleRegistryComponent, resolve: { breadcrumb: I18nBreadcrumbResolver @@ -26,6 +28,25 @@ import { BulkAccessComponent } from './bulk-access/bulk-access.component'; data: { title: 'admin.access-control.epeople.title', breadcrumbKey: 'admin.access-control.epeople' }, canActivate: [SiteAdministratorGuard] }, + { + path: `${EPERSON_PATH}/create`, + component: EPersonFormComponent, + resolve: { + breadcrumb: I18nBreadcrumbResolver, + }, + data: { title: 'admin.access-control.epeople.add.title', breadcrumbKey: 'admin.access-control.epeople.add' }, + canActivate: [SiteAdministratorGuard], + }, + { + path: `${EPERSON_PATH}/:id`, + component: EPersonFormComponent, + resolve: { + breadcrumb: I18nBreadcrumbResolver, + ePerson: EPersonResolver, + }, + data: { title: 'admin.access-control.epeople.edit.title', breadcrumbKey: 'admin.access-control.epeople.edit' }, + canActivate: [SiteAdministratorGuard], + }, { path: GROUP_EDIT_PATH, component: GroupsRegistryComponent, diff --git a/src/app/access-control/epeople-registry/epeople-registry.component.html b/src/app/access-control/epeople-registry/epeople-registry.component.html index e3a8e2c590..f3ddd63ae8 100644 --- a/src/app/access-control/epeople-registry/epeople-registry.component.html +++ b/src/app/access-control/epeople-registry/epeople-registry.component.html @@ -4,96 +4,91 @@
    -
    +
    - + + +
    + +
    +
    +
    + + -
    -
    - -
    - - - - - -
    - - - - - - - - - - - - - - - - - -
    {{labelPrefix + 'table.id' | translate}}{{labelPrefix + 'table.name' | translate}}{{labelPrefix + 'table.email' | translate}}{{labelPrefix + 'table.edit' | translate}}
    {{epersonDto.eperson.id}}{{ dsoNameService.getName(epersonDto.eperson) }}{{epersonDto.eperson.email}} -
    - - -
    -
    -
    - -
    - - +
    + +
    + + + + + +
    + + + + + + + + + + + + + + + + + +
    {{labelPrefix + 'table.id' | translate}}{{labelPrefix + 'table.name' | translate}}{{labelPrefix + 'table.email' | translate}}{{labelPrefix + 'table.edit' | translate}}
    {{epersonDto.eperson.id}}{{ dsoNameService.getName(epersonDto.eperson) }}{{epersonDto.eperson.email}} +
    + + +
    +
    +
    + +
    + +
    diff --git a/src/app/access-control/epeople-registry/epeople-registry.component.spec.ts b/src/app/access-control/epeople-registry/epeople-registry.component.spec.ts index 4a09913862..e2cee5e935 100644 --- a/src/app/access-control/epeople-registry/epeople-registry.component.spec.ts +++ b/src/app/access-control/epeople-registry/epeople-registry.component.spec.ts @@ -203,36 +203,6 @@ describe('EPeopleRegistryComponent', () => { }); }); - describe('toggleEditEPerson', () => { - describe('when you click on first edit eperson button', () => { - beforeEach(fakeAsync(() => { - const editButtons = fixture.debugElement.queryAll(By.css('.access-control-editEPersonButton')); - editButtons[0].triggerEventHandler('click', { - preventDefault: () => {/**/ - } - }); - tick(); - fixture.detectChanges(); - })); - - it('editEPerson form is toggled', () => { - const ePeopleIds = fixture.debugElement.queryAll(By.css('#epeople tr td:first-child')); - ePersonDataServiceStub.getActiveEPerson().subscribe((activeEPerson: EPerson) => { - if (ePeopleIds[0] && activeEPerson === ePeopleIds[0].nativeElement.textContent) { - expect(component.isEPersonFormShown).toEqual(false); - } else { - expect(component.isEPersonFormShown).toEqual(true); - } - - }); - }); - - it('EPerson search section is hidden', () => { - expect(fixture.debugElement.query(By.css('#search'))).toBeNull(); - }); - }); - }); - describe('deleteEPerson', () => { describe('when you click on first delete eperson button', () => { let ePeopleIdsFoundBeforeDelete; diff --git a/src/app/access-control/epeople-registry/epeople-registry.component.ts b/src/app/access-control/epeople-registry/epeople-registry.component.ts index fb045ebb88..221fa9fd71 100644 --- a/src/app/access-control/epeople-registry/epeople-registry.component.ts +++ b/src/app/access-control/epeople-registry/epeople-registry.component.ts @@ -22,6 +22,7 @@ import { PageInfo } from '../../core/shared/page-info.model'; import { NoContent } from '../../core/shared/NoContent.model'; import { PaginationService } from '../../core/pagination/pagination.service'; import { DSONameService } from '../../core/breadcrumbs/dso-name.service'; +import { getEPersonEditRoute, getEPersonsRoute } from '../access-control-routing-paths'; @Component({ selector: 'ds-epeople-registry', @@ -64,11 +65,6 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy { currentPage: 1 }); - /** - * Whether or not to show the EPerson form - */ - isEPersonFormShown: boolean; - // The search form searchForm; @@ -114,17 +110,11 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy { */ initialisePage() { this.searching$.next(true); - this.isEPersonFormShown = false; this.search({scope: this.currentSearchScope, query: this.currentSearchQuery}); - this.subs.push(this.epersonService.getActiveEPerson().subscribe((eperson: EPerson) => { - if (eperson != null && eperson.id) { - this.isEPersonFormShown = true; - } - })); this.subs.push(this.ePeople$.pipe( switchMap((epeople: PaginatedList) => { if (epeople.pageInfo.totalElements > 0) { - return combineLatest([...epeople.page.map((eperson: EPerson) => { + return combineLatest(epeople.page.map((eperson: EPerson) => { return this.authorizationService.isAuthorized(FeatureID.CanDelete, hasValue(eperson) ? eperson.self : undefined).pipe( map((authorized) => { const epersonDtoModel: EpersonDtoModel = new EpersonDtoModel(); @@ -133,7 +123,7 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy { return epersonDtoModel; }) ); - })]).pipe(map((dtos: EpersonDtoModel[]) => { + })).pipe(map((dtos: EpersonDtoModel[]) => { return buildPaginatedList(epeople.pageInfo, dtos); })); } else { @@ -160,14 +150,14 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy { const query: string = data.query; const scope: string = data.scope; if (query != null && this.currentSearchQuery !== query) { - this.router.navigate([this.epersonService.getEPeoplePageRouterLink()], { + void this.router.navigate([getEPersonsRoute()], { queryParamsHandling: 'merge' }); this.currentSearchQuery = query; this.paginationService.resetPage(this.config.id); } if (scope != null && this.currentSearchScope !== scope) { - this.router.navigate([this.epersonService.getEPeoplePageRouterLink()], { + void this.router.navigate([getEPersonsRoute()], { queryParamsHandling: 'merge' }); this.currentSearchScope = scope; @@ -205,23 +195,6 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy { return this.epersonService.getActiveEPerson(); } - /** - * Start editing the selected EPerson - * @param ePerson - */ - toggleEditEPerson(ePerson: EPerson) { - this.getActiveEPerson().pipe(take(1)).subscribe((activeEPerson: EPerson) => { - if (ePerson === activeEPerson) { - this.epersonService.cancelEditEPerson(); - this.isEPersonFormShown = false; - } else { - this.epersonService.editEPerson(ePerson); - this.isEPersonFormShown = true; - } - }); - this.scrollToTop(); - } - /** * Deletes EPerson, show notification on success/failure & updates EPeople list */ @@ -264,16 +237,6 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy { this.subs.filter((sub) => hasValue(sub)).forEach((sub) => sub.unsubscribe()); } - scrollToTop() { - (function smoothscroll() { - const currentScroll = document.documentElement.scrollTop || document.body.scrollTop; - if (currentScroll > 0) { - window.requestAnimationFrame(smoothscroll); - window.scrollTo(0, currentScroll - (currentScroll / 8)); - } - })(); - } - /** * Reset all input-fields to be empty and search all search */ @@ -284,20 +247,7 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy { this.search({query: ''}); } - /** - * This method will set everything to stale, which will cause the lists on this page to update. - */ - reset(): void { - this.epersonService.getBrowseEndpoint().pipe( - take(1), - switchMap((href: string) => { - return this.requestService.setStaleByHrefSubstring(href).pipe( - take(1), - ); - }) - ).subscribe(()=>{ - this.epersonService.cancelEditEPerson(); - this.isEPersonFormShown = false; - }); + getEditEPeoplePage(id: string): string { + return getEPersonEditRoute(id); } } diff --git a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.html b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.html index 228449a8a5..493209f0a2 100644 --- a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.html +++ b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.html @@ -1,89 +1,98 @@ -
    +
    +
    +
    - -

    {{messagePrefix + '.create' | translate}}

    -
    +
    - -

    {{messagePrefix + '.edit' | translate}}

    -
    + +

    {{messagePrefix + '.create' | translate}}

    +
    - -
    - -
    -
    - -
    -
    - - -
    - -
    + +

    {{messagePrefix + '.edit' | translate}}

    +
    - + +
    + +
    +
    + +
    +
    + + +
    + +
    -
    -
    {{messagePrefix + '.groupsEPersonIsMemberOf' | translate}}
    + - +
    +
    {{messagePrefix + '.groupsEPersonIsMemberOf' | translate}}
    - + -
    - - - - - - - - - - - - - - - -
    {{messagePrefix + '.table.id' | translate}}{{messagePrefix + '.table.name' | translate}}{{messagePrefix + '.table.collectionOrCommunity' | translate}}
    {{group.id}} - - {{ dsoNameService.getName(group) }} - - {{ dsoNameService.getName(undefined) }}
    -
    + - +
    + + + + + + + + + + + + + + + +
    {{messagePrefix + '.table.id' | translate}}{{messagePrefix + '.table.name' | translate}}{{messagePrefix + '.table.collectionOrCommunity' | translate}}
    {{group.id}} + + {{ dsoNameService.getName(group) }} + + {{ dsoNameService.getName(undefined) }}
    +
    -
    diff --git a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.spec.ts b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.spec.ts index fb911e709c..1402f79ae3 100644 --- a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.spec.ts +++ b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.spec.ts @@ -31,6 +31,10 @@ import { PaginationServiceStub } from '../../../shared/testing/pagination-servic import { FindListOptions } from '../../../core/data/find-list-options.model'; import { ValidateEmailNotTaken } from './validators/email-taken.validator'; import { EpersonRegistrationService } from '../../../core/data/eperson-registration.service'; +import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model'; +import { ActivatedRoute, Router } from '@angular/router'; +import { RouterStub } from '../../../shared/testing/router.stub'; +import { ActivatedRouteStub } from '../../../shared/testing/active-router.stub'; describe('EPersonFormComponent', () => { let component: EPersonFormComponent; @@ -43,6 +47,8 @@ describe('EPersonFormComponent', () => { let authorizationService: AuthorizationDataService; let groupsDataService: GroupDataService; let epersonRegistrationService: EpersonRegistrationService; + let route: ActivatedRouteStub; + let router: RouterStub; let paginationService; @@ -106,6 +112,9 @@ describe('EPersonFormComponent', () => { }, getEPersonByEmail(email): Observable> { return createSuccessfulRemoteDataObject$(null); + }, + findById(_id: string, _useCachedVersionIfAvailable = true, _reRequestOnStale = true, ..._linksToFollow: FollowLinkConfig[]): Observable> { + return createSuccessfulRemoteDataObject$(null); } }; builderService = Object.assign(getMockFormBuilderService(),{ @@ -182,6 +191,8 @@ describe('EPersonFormComponent', () => { }); paginationService = new PaginationServiceStub(); + route = new ActivatedRouteStub(); + router = new RouterStub(); TestBed.configureTestingModule({ imports: [CommonModule, NgbModule, FormsModule, ReactiveFormsModule, BrowserModule, TranslateModule.forRoot({ @@ -202,6 +213,8 @@ describe('EPersonFormComponent', () => { { provide: PaginationService, useValue: paginationService }, { provide: RequestService, useValue: jasmine.createSpyObj('requestService', ['removeByHrefSubstring'])}, { provide: EpersonRegistrationService, useValue: epersonRegistrationService }, + { provide: ActivatedRoute, useValue: route }, + { provide: Router, useValue: router }, EPeopleRegistryComponent ], schemas: [NO_ERRORS_SCHEMA] @@ -263,24 +276,18 @@ describe('EPersonFormComponent', () => { fixture.detectChanges(); }); describe('firstName, lastName and email should be required', () => { - it('form should be invalid because the firstName is required', waitForAsync(() => { - fixture.whenStable().then(() => { - expect(component.formGroup.controls.firstName.valid).toBeFalse(); - expect(component.formGroup.controls.firstName.errors.required).toBeTrue(); - }); - })); - it('form should be invalid because the lastName is required', waitForAsync(() => { - fixture.whenStable().then(() => { - expect(component.formGroup.controls.lastName.valid).toBeFalse(); - expect(component.formGroup.controls.lastName.errors.required).toBeTrue(); - }); - })); - it('form should be invalid because the email is required', waitForAsync(() => { - fixture.whenStable().then(() => { - expect(component.formGroup.controls.email.valid).toBeFalse(); - expect(component.formGroup.controls.email.errors.required).toBeTrue(); - }); - })); + it('form should be invalid because the firstName is required', () => { + expect(component.formGroup.controls.firstName.valid).toBeFalse(); + expect(component.formGroup.controls.firstName.errors.required).toBeTrue(); + }); + it('form should be invalid because the lastName is required', () => { + expect(component.formGroup.controls.lastName.valid).toBeFalse(); + expect(component.formGroup.controls.lastName.errors.required).toBeTrue(); + }); + it('form should be invalid because the email is required', () => { + expect(component.formGroup.controls.email.valid).toBeFalse(); + expect(component.formGroup.controls.email.errors.required).toBeTrue(); + }); }); describe('after inserting information firstName,lastName and email not required', () => { @@ -290,24 +297,18 @@ describe('EPersonFormComponent', () => { component.formGroup.controls.email.setValue('test@test.com'); fixture.detectChanges(); }); - it('firstName should be valid because the firstName is set', waitForAsync(() => { - fixture.whenStable().then(() => { + it('firstName should be valid because the firstName is set', () => { expect(component.formGroup.controls.firstName.valid).toBeTrue(); expect(component.formGroup.controls.firstName.errors).toBeNull(); - }); - })); - it('lastName should be valid because the lastName is set', waitForAsync(() => { - fixture.whenStable().then(() => { + }); + it('lastName should be valid because the lastName is set', () => { expect(component.formGroup.controls.lastName.valid).toBeTrue(); expect(component.formGroup.controls.lastName.errors).toBeNull(); - }); - })); - it('email should be valid because the email is set', waitForAsync(() => { - fixture.whenStable().then(() => { + }); + it('email should be valid because the email is set', () => { expect(component.formGroup.controls.email.valid).toBeTrue(); expect(component.formGroup.controls.email.errors).toBeNull(); - }); - })); + }); }); @@ -316,12 +317,10 @@ describe('EPersonFormComponent', () => { component.formGroup.controls.email.setValue('test@test'); fixture.detectChanges(); }); - it('email should not be valid because the email pattern', waitForAsync(() => { - fixture.whenStable().then(() => { + it('email should not be valid because the email pattern', () => { expect(component.formGroup.controls.email.valid).toBeFalse(); expect(component.formGroup.controls.email.errors.pattern).toBeTruthy(); - }); - })); + }); }); describe('after already utilized email', () => { @@ -336,12 +335,10 @@ describe('EPersonFormComponent', () => { fixture.detectChanges(); }); - it('email should not be valid because email is already taken', waitForAsync(() => { - fixture.whenStable().then(() => { + it('email should not be valid because email is already taken', () => { expect(component.formGroup.controls.email.valid).toBeFalse(); expect(component.formGroup.controls.email.errors.emailTaken).toBeTruthy(); - }); - })); + }); }); @@ -393,11 +390,9 @@ describe('EPersonFormComponent', () => { fixture.detectChanges(); }); - it('should emit a new eperson using the correct values', waitForAsync(() => { - fixture.whenStable().then(() => { - expect(component.submitForm.emit).toHaveBeenCalledWith(expected); - }); - })); + it('should emit a new eperson using the correct values', () => { + expect(component.submitForm.emit).toHaveBeenCalledWith(expected); + }); }); describe('with an active eperson', () => { @@ -428,11 +423,9 @@ describe('EPersonFormComponent', () => { fixture.detectChanges(); }); - it('should emit the existing eperson using the correct values', waitForAsync(() => { - fixture.whenStable().then(() => { - expect(component.submitForm.emit).toHaveBeenCalledWith(expectedWithId); - }); - })); + it('should emit the existing eperson using the correct values', () => { + expect(component.submitForm.emit).toHaveBeenCalledWith(expectedWithId); + }); }); }); diff --git a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts index d009d56058..d7d5a0b49c 100644 --- a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts +++ b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts @@ -38,6 +38,8 @@ import { Registration } from '../../../core/shared/registration.model'; import { EpersonRegistrationService } from '../../../core/data/eperson-registration.service'; import { TYPE_REQUEST_FORGOT } from '../../../register-email-form/register-email-form.component'; import { DSONameService } from '../../../core/breadcrumbs/dso-name.service'; +import { ActivatedRoute, Router } from '@angular/router'; +import { getEPersonsRoute } from '../../access-control-routing-paths'; @Component({ selector: 'ds-eperson-form', @@ -194,6 +196,8 @@ export class EPersonFormComponent implements OnInit, OnDestroy { public requestService: RequestService, private epersonRegistrationService: EpersonRegistrationService, public dsoNameService: DSONameService, + protected route: ActivatedRoute, + protected router: Router, ) { this.subs.push(this.epersonService.getActiveEPerson().subscribe((eperson: EPerson) => { this.epersonInitial = eperson; @@ -213,7 +217,9 @@ export class EPersonFormComponent implements OnInit, OnDestroy { * This method will initialise the page */ initialisePage() { - + this.subs.push(this.epersonService.findById(this.route.snapshot.params.id).subscribe((ePersonRD: RemoteData) => { + this.epersonService.editEPerson(ePersonRD.payload); + })); observableCombineLatest([ this.translateService.get(`${this.messagePrefix}.firstName`), this.translateService.get(`${this.messagePrefix}.lastName`), @@ -339,6 +345,7 @@ export class EPersonFormComponent implements OnInit, OnDestroy { onCancel() { this.epersonService.cancelEditEPerson(); this.cancelForm.emit(); + void this.router.navigate([getEPersonsRoute()]); } /** @@ -390,6 +397,8 @@ export class EPersonFormComponent implements OnInit, OnDestroy { if (rd.hasSucceeded) { this.notificationsService.success(this.translateService.get(this.labelPrefix + 'notification.created.success', { name: this.dsoNameService.getName(ePersonToCreate) })); this.submitForm.emit(ePersonToCreate); + this.epersonService.clearEPersonRequests(); + void this.router.navigateByUrl(getEPersonsRoute()); } else { this.notificationsService.error(this.translateService.get(this.labelPrefix + 'notification.created.failure', { name: this.dsoNameService.getName(ePersonToCreate) })); this.cancelForm.emit(); @@ -429,6 +438,7 @@ export class EPersonFormComponent implements OnInit, OnDestroy { if (rd.hasSucceeded) { this.notificationsService.success(this.translateService.get(this.labelPrefix + 'notification.edited.success', { name: this.dsoNameService.getName(editedEperson) })); this.submitForm.emit(editedEperson); + void this.router.navigateByUrl(getEPersonsRoute()); } else { this.notificationsService.error(this.translateService.get(this.labelPrefix + 'notification.edited.failure', { name: this.dsoNameService.getName(editedEperson) })); this.cancelForm.emit(); @@ -495,6 +505,7 @@ export class EPersonFormComponent implements OnInit, OnDestroy { ).subscribe(({ restResponse, eperson }: { restResponse: RemoteData | null, eperson: EPerson }) => { if (restResponse?.hasSucceeded) { this.notificationsService.success(this.translateService.get(this.labelPrefix + 'notification.deleted.success', { name: this.dsoNameService.getName(eperson) })); + void this.router.navigate([getEPersonsRoute()]); } else { this.notificationsService.error(`Error occurred when trying to delete EPerson with id: ${eperson?.id} with code: ${restResponse?.statusCode} and message: ${restResponse?.errorMessage}`); } @@ -541,16 +552,6 @@ export class EPersonFormComponent implements OnInit, OnDestroy { } } - /** - * This method will ensure that the page gets reset and that the cache is cleared - */ - reset() { - this.epersonService.getActiveEPerson().pipe(take(1)).subscribe((eperson: EPerson) => { - this.requestService.removeByHrefSubstring(eperson.self); - }); - this.initialisePage(); - } - /** * Checks for the given ePerson if there is already an ePerson in the system with that email * and shows notification if this is the case diff --git a/src/app/access-control/epeople-registry/eperson-resolver.service.ts b/src/app/access-control/epeople-registry/eperson-resolver.service.ts new file mode 100644 index 0000000000..1db8e70d89 --- /dev/null +++ b/src/app/access-control/epeople-registry/eperson-resolver.service.ts @@ -0,0 +1,53 @@ +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; +import { Observable } from 'rxjs'; +import { EPerson } from '../../core/eperson/models/eperson.model'; +import { RemoteData } from '../../core/data/remote-data'; +import { getFirstCompletedRemoteData } from '../../core/shared/operators'; +import { ResolvedAction } from '../../core/resolving/resolver.actions'; +import { EPersonDataService } from '../../core/eperson/eperson-data.service'; +import { Store } from '@ngrx/store'; +import { followLink, FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; + +export const EPERSON_EDIT_FOLLOW_LINKS: FollowLinkConfig[] = [ + followLink('groups'), +]; + +/** + * This class represents a resolver that requests a specific {@link EPerson} before the route is activated + */ +@Injectable({ + providedIn: 'root', +}) +export class EPersonResolver implements Resolve> { + + constructor( + protected ePersonService: EPersonDataService, + protected store: Store, + ) { + } + + /** + * Method for resolving a {@link EPerson} based on the parameters in the current route + * @param {ActivatedRouteSnapshot} route The current ActivatedRouteSnapshot + * @param {RouterStateSnapshot} state The current RouterStateSnapshot + * @returns `Observable<>` Emits the found {@link EPerson} based on the parameters in the current + * route, or an error if something went wrong + */ + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable> { + const ePersonRD$: Observable> = this.ePersonService.findById(route.params.id, + true, + false, + ...EPERSON_EDIT_FOLLOW_LINKS, + ).pipe( + getFirstCompletedRemoteData(), + ); + + ePersonRD$.subscribe((ePersonRD: RemoteData) => { + this.store.dispatch(new ResolvedAction(state.url, ePersonRD.payload)); + }); + + return ePersonRD$; + } + +} diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 6c91bae4c1..2a55229616 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -248,6 +248,14 @@ "admin.access-control.epeople.title": "EPeople", + "admin.access-control.epeople.edit.breadcrumbs": "New EPerson", + + "admin.access-control.epeople.edit.title": "New EPerson", + + "admin.access-control.epeople.add.breadcrumbs": "Add EPerson", + + "admin.access-control.epeople.add.title": "Add EPerson", + "admin.access-control.epeople.head": "EPeople", "admin.access-control.epeople.search.head": "Search", From 9ac19d40fc26275d53a50deed3a8151e07955113 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 21 Jul 2023 15:11:01 +0200 Subject: [PATCH 263/425] Cleanup access-control components - Use the same methods to retrieve the access-control urls - Fix EPersonDataService.startEditingNewEPerson returning the incorrect link --- .../access-control-routing-paths.ts | 6 ++--- .../access-control-routing.module.ts | 8 +++---- .../epeople-registry.component.ts | 2 +- .../group-form/group-form.component.html | 4 ++-- .../group-form/group-form.component.ts | 24 +++++++++---------- .../groups-registry.component.html | 2 +- src/app/core/eperson/eperson-data.service.ts | 6 ++--- src/app/core/eperson/group-data.service.ts | 7 +++--- .../entry/resource-policy-entry.component.ts | 5 ++-- 9 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/app/access-control/access-control-routing-paths.ts b/src/app/access-control/access-control-routing-paths.ts index c3c42b3155..c8b9e01793 100644 --- a/src/app/access-control/access-control-routing-paths.ts +++ b/src/app/access-control/access-control-routing-paths.ts @@ -11,12 +11,12 @@ export function getEPersonEditRoute(id: string): string { return new URLCombiner(getEPersonsRoute(), id).toString(); } -export const GROUP_EDIT_PATH = 'groups'; +export const GROUP_PATH = 'groups'; export function getGroupsRoute() { - return new URLCombiner(getAccessControlModuleRoute(), GROUP_EDIT_PATH).toString(); + return new URLCombiner(getAccessControlModuleRoute(), GROUP_PATH).toString(); } export function getGroupEditRoute(id: string) { - return new URLCombiner(getAccessControlModuleRoute(), GROUP_EDIT_PATH, id).toString(); + return new URLCombiner(getGroupsRoute(), id).toString(); } diff --git a/src/app/access-control/access-control-routing.module.ts b/src/app/access-control/access-control-routing.module.ts index a4082d19e2..4ef97cb5ea 100644 --- a/src/app/access-control/access-control-routing.module.ts +++ b/src/app/access-control/access-control-routing.module.ts @@ -3,7 +3,7 @@ import { RouterModule } from '@angular/router'; import { EPeopleRegistryComponent } from './epeople-registry/epeople-registry.component'; import { GroupFormComponent } from './group-registry/group-form/group-form.component'; import { GroupsRegistryComponent } from './group-registry/groups-registry.component'; -import { EPERSON_PATH, GROUP_EDIT_PATH } from './access-control-routing-paths'; +import { EPERSON_PATH, GROUP_PATH } from './access-control-routing-paths'; import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver'; import { GroupPageGuard } from './group-registry/group-page.guard'; import { @@ -48,7 +48,7 @@ import { EPersonResolver } from './epeople-registry/eperson-resolver.service'; canActivate: [SiteAdministratorGuard], }, { - path: GROUP_EDIT_PATH, + path: GROUP_PATH, component: GroupsRegistryComponent, resolve: { breadcrumb: I18nBreadcrumbResolver @@ -57,7 +57,7 @@ import { EPersonResolver } from './epeople-registry/eperson-resolver.service'; canActivate: [GroupAdministratorGuard] }, { - path: `${GROUP_EDIT_PATH}/newGroup`, + path: `${GROUP_PATH}/create`, component: GroupFormComponent, resolve: { breadcrumb: I18nBreadcrumbResolver @@ -66,7 +66,7 @@ import { EPersonResolver } from './epeople-registry/eperson-resolver.service'; canActivate: [GroupAdministratorGuard] }, { - path: `${GROUP_EDIT_PATH}/:groupId`, + path: `${GROUP_PATH}/:groupId`, component: GroupFormComponent, resolve: { breadcrumb: I18nBreadcrumbResolver diff --git a/src/app/access-control/epeople-registry/epeople-registry.component.ts b/src/app/access-control/epeople-registry/epeople-registry.component.ts index 221fa9fd71..d2837a5317 100644 --- a/src/app/access-control/epeople-registry/epeople-registry.component.ts +++ b/src/app/access-control/epeople-registry/epeople-registry.component.ts @@ -215,7 +215,7 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy { if (restResponse.hasSucceeded) { this.notificationsService.success(this.translateService.get(this.labelPrefix + 'notification.deleted.success', {name: this.dsoNameService.getName(ePerson)})); } else { - this.notificationsService.error('Error occured when trying to delete EPerson with id: ' + ePerson.id + ' with code: ' + restResponse.statusCode + ' and message: ' + restResponse.errorMessage); + this.notificationsService.error(`Error occurred when trying to delete EPerson with id: ${ePerson.id} with code: ${restResponse.statusCode} and message: ${restResponse.errorMessage}`); } }); } diff --git a/src/app/access-control/group-registry/group-form/group-form.component.html b/src/app/access-control/group-registry/group-form/group-form.component.html index 77a81a8daa..0515b071ae 100644 --- a/src/app/access-control/group-registry/group-form/group-form.component.html +++ b/src/app/access-control/group-registry/group-form/group-form.component.html @@ -2,13 +2,13 @@
    -
    +

    {{messagePrefix + '.head.create' | translate}}

    - +

    {{messagePrefix + 'head' | translate}}

    diff --git a/src/app/core/eperson/eperson-data.service.ts b/src/app/core/eperson/eperson-data.service.ts index d30030365c..00620655de 100644 --- a/src/app/core/eperson/eperson-data.service.ts +++ b/src/app/core/eperson/eperson-data.service.ts @@ -34,6 +34,7 @@ import { PatchData, PatchDataImpl } from '../data/base/patch-data'; import { DeleteData, DeleteDataImpl } from '../data/base/delete-data'; import { RestRequestMethod } from '../data/rest-request-method'; import { dataService } from '../data/base/data-service.decorator'; +import { getEPersonEditRoute, getEPersonsRoute } from '../../access-control/access-control-routing-paths'; const ePeopleRegistryStateSelector = (state: AppState) => state.epeopleRegistry; const editEPersonSelector = createSelector(ePeopleRegistryStateSelector, (ePeopleRegistryState: EPeopleRegistryState) => ePeopleRegistryState.editEPerson); @@ -281,15 +282,14 @@ export class EPersonDataService extends IdentifiableDataService impleme this.editEPerson(ePerson); } }); - return '/access-control/epeople'; + return getEPersonEditRoute(ePerson.id); } /** * Get EPeople admin page - * @param ePerson New EPerson to edit */ public getEPeoplePageRouterLink(): string { - return '/access-control/epeople'; + return getEPersonsRoute(); } /** diff --git a/src/app/core/eperson/group-data.service.ts b/src/app/core/eperson/group-data.service.ts index bb38e46758..7b3a14c70b 100644 --- a/src/app/core/eperson/group-data.service.ts +++ b/src/app/core/eperson/group-data.service.ts @@ -40,6 +40,7 @@ import { DeleteData, DeleteDataImpl } from '../data/base/delete-data'; import { Operation } from 'fast-json-patch'; import { RestRequestMethod } from '../data/rest-request-method'; import { dataService } from '../data/base/data-service.decorator'; +import { getGroupEditRoute } from '../../access-control/access-control-routing-paths'; const groupRegistryStateSelector = (state: AppState) => state.groupRegistry; const editGroupSelector = createSelector(groupRegistryStateSelector, (groupRegistryState: GroupRegistryState) => groupRegistryState.editGroup); @@ -264,15 +265,15 @@ export class GroupDataService extends IdentifiableDataService implements * @param group Group we want edit page for */ public getGroupEditPageRouterLink(group: Group): string { - return this.getGroupEditPageRouterLinkWithID(group.id); + return getGroupEditRoute(group.id); } /** * Get Edit page of group * @param groupID Group ID we want edit page for */ - public getGroupEditPageRouterLinkWithID(groupId: string): string { - return '/access-control/groups/' + groupId; + public getGroupEditPageRouterLinkWithID(groupID: string): string { + return getGroupEditRoute(groupID); } /** diff --git a/src/app/shared/resource-policies/entry/resource-policy-entry.component.ts b/src/app/shared/resource-policies/entry/resource-policy-entry.component.ts index 904a79cbe6..83733c7011 100644 --- a/src/app/shared/resource-policies/entry/resource-policy-entry.component.ts +++ b/src/app/shared/resource-policies/entry/resource-policy-entry.component.ts @@ -17,8 +17,7 @@ import { RemoteData } from '../../../core/data/remote-data'; import { DSpaceObject } from '../../../core/shared/dspace-object.model'; import { ActivatedRoute, Router } from '@angular/router'; import { Group } from '../../../core/eperson/models/group.model'; -import { ACCESS_CONTROL_MODULE_PATH } from '../../../app-routing-paths'; -import { GROUP_EDIT_PATH } from '../../../access-control/access-control-routing-paths'; +import { getGroupEditRoute } from '../../../access-control/access-control-routing-paths'; import { GroupDataService } from '../../../core/eperson/group-data.service'; export interface ResourcePolicyCheckboxEntry { @@ -97,7 +96,7 @@ export class ResourcePolicyEntryComponent implements OnInit { getFirstSucceededRemoteDataPayload(), map((group: Group) => group.id), ).subscribe((groupUUID) => { - this.router.navigate([ACCESS_CONTROL_MODULE_PATH, GROUP_EDIT_PATH, groupUUID]); + void this.router.navigate([getGroupEditRoute(groupUUID)]); }); } } From 998e1fac8de2707a62c729250a82f439b173b33c Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 21 Jul 2023 17:48:27 +0200 Subject: [PATCH 264/425] Fix spacing issues for EPerson form buttons --- .../eperson-form/eperson-form.component.html | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.html b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.html index 493209f0a2..88c4f99870 100644 --- a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.html +++ b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.html @@ -29,9 +29,8 @@ {{'admin.access-control.epeople.actions.reset' | translate}}
    -
    - -
    - diff --git a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.spec.ts b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.spec.ts index 1402f79ae3..b9aeeb0af2 100644 --- a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.spec.ts +++ b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.spec.ts @@ -484,16 +484,16 @@ describe('EPersonFormComponent', () => { }); - it('the delete button should be active if the eperson can be deleted', () => { + it('the delete button should be visible if the ePerson can be deleted', () => { const deleteButton = fixture.debugElement.query(By.css('.delete-button')); - expect(deleteButton.nativeElement.disabled).toBe(false); + expect(deleteButton).not.toBeNull(); }); - it('the delete button should be disabled if the eperson cannot be deleted', () => { + it('the delete button should be hidden if the ePerson cannot be deleted', () => { component.canDelete$ = observableOf(false); fixture.detectChanges(); const deleteButton = fixture.debugElement.query(By.css('.delete-button')); - expect(deleteButton.nativeElement.disabled).toBe(true); + expect(deleteButton).toBeNull(); }); it('should call the epersonFormComponent delete when clicked on the button', () => { diff --git a/src/app/access-control/group-registry/group-form/group-form.component.html b/src/app/access-control/group-registry/group-form/group-form.component.html index 0515b071ae..d5003911ae 100644 --- a/src/app/access-control/group-registry/group-form/group-form.component.html +++ b/src/app/access-control/group-registry/group-form/group-form.component.html @@ -39,7 +39,7 @@
    -
    +
    \ No newline at end of file + diff --git a/src/app/shared/log-in/methods/oidc/log-in-oidc.component.spec.ts b/src/app/shared/log-in/methods/oidc/log-in-oidc.component.spec.ts index 078a58dd5a..93559689e8 100644 --- a/src/app/shared/log-in/methods/oidc/log-in-oidc.component.spec.ts +++ b/src/app/shared/log-in/methods/oidc/log-in-oidc.component.spec.ts @@ -3,11 +3,8 @@ import { ActivatedRoute, Router } from '@angular/router'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { provideMockStore } from '@ngrx/store/testing'; -import { Store, StoreModule } from '@ngrx/store'; +import { StoreModule } from '@ngrx/store'; import { TranslateModule } from '@ngx-translate/core'; - -import { EPerson } from '../../../../core/eperson/models/eperson.model'; -import { EPersonMock } from '../../../testing/eperson.mock'; import { authReducer } from '../../../../core/auth/auth.reducer'; import { AuthService } from '../../../../core/auth/auth.service'; import { AuthServiceStub } from '../../../testing/auth-service.stub'; @@ -20,23 +17,22 @@ import { RouterStub } from '../../../testing/router.stub'; import { ActivatedRouteStub } from '../../../testing/active-router.stub'; import { NativeWindowMockFactory } from '../../../mocks/mock-native-window-ref'; import { HardRedirectService } from '../../../../core/services/hard-redirect.service'; +import { AuthorizationDataService } from '../../../../core/data/feature-authorization/authorization-data.service'; +import { AuthorizationDataServiceStub } from '../../../testing/authorization-service.stub'; describe('LogInOidcComponent', () => { let component: LogInOidcComponent; let fixture: ComponentFixture; - let page: Page; - let user: EPerson; let componentAsAny: any; let setHrefSpy; - let oidcBaseUrl; - let location; + let oidcBaseUrl: string; + let location: string; let initialState: any; let hardRedirectService: HardRedirectService; beforeEach(() => { - user = EPersonMock; oidcBaseUrl = 'dspace-rest.test/oidc?redirectUrl='; location = oidcBaseUrl + 'http://dspace-angular.test/home'; @@ -60,7 +56,7 @@ describe('LogInOidcComponent', () => { beforeEach(waitForAsync(() => { // refine the test module by declaring the test component - TestBed.configureTestingModule({ + void TestBed.configureTestingModule({ imports: [ StoreModule.forRoot({ auth: authReducer }, storeModuleConfig), TranslateModule.forRoot() @@ -70,7 +66,8 @@ describe('LogInOidcComponent', () => { ], providers: [ { provide: AuthService, useClass: AuthServiceStub }, - { provide: 'authMethodProvider', useValue: new AuthMethod(AuthMethodType.Oidc, location) }, + { provide: AuthorizationDataService, useClass: AuthorizationDataServiceStub }, + { provide: 'authMethodProvider', useValue: new AuthMethod(AuthMethodType.Oidc, 0, location) }, { provide: 'isStandalonePage', useValue: true }, { provide: NativeWindowService, useFactory: NativeWindowMockFactory }, { provide: Router, useValue: new RouterStub() }, @@ -95,7 +92,6 @@ describe('LogInOidcComponent', () => { componentAsAny = component; // create page - page = new Page(component, fixture); setHrefSpy = spyOnProperty(componentAsAny._window.nativeWindow.location, 'href', 'set').and.callThrough(); }); @@ -131,25 +127,3 @@ describe('LogInOidcComponent', () => { }); }); - -/** - * I represent the DOM elements and attach spies. - * - * @class Page - */ -class Page { - - public emailInput: HTMLInputElement; - public navigateSpy: jasmine.Spy; - public passwordInput: HTMLInputElement; - - constructor(private component: LogInOidcComponent, private fixture: ComponentFixture) { - // use injector to get services - const injector = fixture.debugElement.injector; - const store = injector.get(Store); - - // add spies - this.navigateSpy = spyOn(store, 'dispatch'); - } - -} diff --git a/src/app/shared/log-in/methods/orcid/log-in-orcid.component.html b/src/app/shared/log-in/methods/orcid/log-in-orcid.component.html index 6f5453fd60..2260197ab4 100644 --- a/src/app/shared/log-in/methods/orcid/log-in-orcid.component.html +++ b/src/app/shared/log-in/methods/orcid/log-in-orcid.component.html @@ -1,3 +1,3 @@ - \ No newline at end of file + diff --git a/src/app/shared/log-in/methods/orcid/log-in-orcid.component.spec.ts b/src/app/shared/log-in/methods/orcid/log-in-orcid.component.spec.ts index 001f0a4959..0782f15720 100644 --- a/src/app/shared/log-in/methods/orcid/log-in-orcid.component.spec.ts +++ b/src/app/shared/log-in/methods/orcid/log-in-orcid.component.spec.ts @@ -3,11 +3,8 @@ import { ActivatedRoute, Router } from '@angular/router'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { provideMockStore } from '@ngrx/store/testing'; -import { Store, StoreModule } from '@ngrx/store'; +import { StoreModule } from '@ngrx/store'; import { TranslateModule } from '@ngx-translate/core'; - -import { EPerson } from '../../../../core/eperson/models/eperson.model'; -import { EPersonMock } from '../../../testing/eperson.mock'; import { authReducer } from '../../../../core/auth/auth.reducer'; import { AuthService } from '../../../../core/auth/auth.service'; import { AuthServiceStub } from '../../../testing/auth-service.stub'; @@ -26,17 +23,14 @@ describe('LogInOrcidComponent', () => { let component: LogInOrcidComponent; let fixture: ComponentFixture; - let page: Page; - let user: EPerson; let componentAsAny: any; let setHrefSpy; - let orcidBaseUrl; - let location; + let orcidBaseUrl: string; + let location: string; let initialState: any; let hardRedirectService: HardRedirectService; beforeEach(() => { - user = EPersonMock; orcidBaseUrl = 'dspace-rest.test/orcid?redirectUrl='; location = orcidBaseUrl + 'http://dspace-angular.test/home'; @@ -60,7 +54,7 @@ describe('LogInOrcidComponent', () => { beforeEach(waitForAsync(() => { // refine the test module by declaring the test component - TestBed.configureTestingModule({ + void TestBed.configureTestingModule({ imports: [ StoreModule.forRoot({ auth: authReducer }, storeModuleConfig), TranslateModule.forRoot() @@ -70,7 +64,7 @@ describe('LogInOrcidComponent', () => { ], providers: [ { provide: AuthService, useClass: AuthServiceStub }, - { provide: 'authMethodProvider', useValue: new AuthMethod(AuthMethodType.Orcid, location) }, + { provide: 'authMethodProvider', useValue: new AuthMethod(AuthMethodType.Orcid, 0, location) }, { provide: 'isStandalonePage', useValue: true }, { provide: NativeWindowService, useFactory: NativeWindowMockFactory }, { provide: Router, useValue: new RouterStub() }, @@ -95,7 +89,6 @@ describe('LogInOrcidComponent', () => { componentAsAny = component; // create page - page = new Page(component, fixture); setHrefSpy = spyOnProperty(componentAsAny._window.nativeWindow.location, 'href', 'set').and.callThrough(); }); @@ -131,25 +124,3 @@ describe('LogInOrcidComponent', () => { }); }); - -/** - * I represent the DOM elements and attach spies. - * - * @class Page - */ -class Page { - - public emailInput: HTMLInputElement; - public navigateSpy: jasmine.Spy; - public passwordInput: HTMLInputElement; - - constructor(private component: LogInOrcidComponent, private fixture: ComponentFixture) { - // use injector to get services - const injector = fixture.debugElement.injector; - const store = injector.get(Store); - - // add spies - this.navigateSpy = spyOn(store, 'dispatch'); - } - -} diff --git a/src/app/shared/log-in/methods/password/log-in-password.component.html b/src/app/shared/log-in/methods/password/log-in-password.component.html index c1f1016cb8..60477d141d 100644 --- a/src/app/shared/log-in/methods/password/log-in-password.component.html +++ b/src/app/shared/log-in/methods/password/log-in-password.component.html @@ -28,3 +28,12 @@ + + diff --git a/src/app/shared/log-in/methods/password/log-in-password.component.scss b/src/app/shared/log-in/methods/password/log-in-password.component.scss index 0eda382c0a..955252b51e 100644 --- a/src/app/shared/log-in/methods/password/log-in-password.component.scss +++ b/src/app/shared/log-in/methods/password/log-in-password.component.scss @@ -11,3 +11,7 @@ border-top-right-radius: 0; } +.dropdown-item { + white-space: normal; + padding: .25rem .75rem; +} diff --git a/src/app/shared/log-in/methods/password/log-in-password.component.spec.ts b/src/app/shared/log-in/methods/password/log-in-password.component.spec.ts index 5238482770..94d18fe768 100644 --- a/src/app/shared/log-in/methods/password/log-in-password.component.spec.ts +++ b/src/app/shared/log-in/methods/password/log-in-password.component.spec.ts @@ -8,8 +8,6 @@ import { Store, StoreModule } from '@ngrx/store'; import { TranslateModule } from '@ngx-translate/core'; import { LogInPasswordComponent } from './log-in-password.component'; -import { EPerson } from '../../../../core/eperson/models/eperson.model'; -import { EPersonMock } from '../../../testing/eperson.mock'; import { authReducer } from '../../../../core/auth/auth.reducer'; import { AuthService } from '../../../../core/auth/auth.service'; import { AuthServiceStub } from '../../../testing/auth-service.stub'; @@ -18,19 +16,18 @@ import { AuthMethod } from '../../../../core/auth/models/auth.method'; import { AuthMethodType } from '../../../../core/auth/models/auth.method-type'; import { HardRedirectService } from '../../../../core/services/hard-redirect.service'; import { BrowserOnlyMockPipe } from '../../../testing/browser-only-mock.pipe'; +import { AuthorizationDataService } from '../../../../core/data/feature-authorization/authorization-data.service'; +import { AuthorizationDataServiceStub } from '../../../testing/authorization-service.stub'; describe('LogInPasswordComponent', () => { let component: LogInPasswordComponent; let fixture: ComponentFixture; let page: Page; - let user: EPerson; let initialState: any; let hardRedirectService: HardRedirectService; beforeEach(() => { - user = EPersonMock; - hardRedirectService = jasmine.createSpyObj('hardRedirectService', { getCurrentRoute: {} }); @@ -50,7 +47,7 @@ describe('LogInPasswordComponent', () => { beforeEach(waitForAsync(() => { // refine the test module by declaring the test component - TestBed.configureTestingModule({ + void TestBed.configureTestingModule({ imports: [ FormsModule, ReactiveFormsModule, @@ -63,7 +60,8 @@ describe('LogInPasswordComponent', () => { ], providers: [ { provide: AuthService, useClass: AuthServiceStub }, - { provide: 'authMethodProvider', useValue: new AuthMethod(AuthMethodType.Password) }, + { provide: AuthorizationDataService, useClass: AuthorizationDataServiceStub }, + { provide: 'authMethodProvider', useValue: new AuthMethod(AuthMethodType.Password, 0) }, { provide: 'isStandalonePage', useValue: true }, { provide: HardRedirectService, useValue: hardRedirectService }, provideMockStore({ initialState }), @@ -76,7 +74,7 @@ describe('LogInPasswordComponent', () => { })); - beforeEach(() => { + beforeEach(async () => { // create component and test fixture fixture = TestBed.createComponent(LogInPasswordComponent); @@ -87,10 +85,8 @@ describe('LogInPasswordComponent', () => { page = new Page(component, fixture); // verify the fixture is stable (no pending tasks) - fixture.whenStable().then(() => { - page.addPageElements(); - }); - + await fixture.whenStable(); + page.addPageElements(); }); it('should create a FormGroup comprised of FormControls', () => { diff --git a/src/app/shared/log-in/methods/password/log-in-password.component.ts b/src/app/shared/log-in/methods/password/log-in-password.component.ts index e4a92ded29..e2fe92fafb 100644 --- a/src/app/shared/log-in/methods/password/log-in-password.component.ts +++ b/src/app/shared/log-in/methods/password/log-in-password.component.ts @@ -15,6 +15,9 @@ import { AuthMethod } from '../../../../core/auth/models/auth.method'; import { AuthService } from '../../../../core/auth/auth.service'; import { HardRedirectService } from '../../../../core/services/hard-redirect.service'; import { CoreState } from '../../../../core/core-state.model'; +import { getForgotPasswordRoute, getRegisterRoute } from '../../../../app-routing-paths'; +import { FeatureID } from '../../../../core/data/feature-authorization/feature-id'; +import { AuthorizationDataService } from '../../../../core/data/feature-authorization/authorization-data.service'; /** * /users/sign-in @@ -66,21 +69,18 @@ export class LogInPasswordComponent implements OnInit { public form: FormGroup; /** - * @constructor - * @param {AuthMethod} injectedAuthMethodModel - * @param {boolean} isStandalonePage - * @param {AuthService} authService - * @param {HardRedirectService} hardRedirectService - * @param {FormBuilder} formBuilder - * @param {Store} store + * Whether the current user (or anonymous) is authorized to register an account */ + public canRegister$: Observable; + constructor( @Inject('authMethodProvider') public injectedAuthMethodModel: AuthMethod, @Inject('isStandalonePage') public isStandalonePage: boolean, private authService: AuthService, private hardRedirectService: HardRedirectService, private formBuilder: FormBuilder, - private store: Store + protected store: Store, + protected authorizationService: AuthorizationDataService, ) { this.authMethod = injectedAuthMethodModel; } @@ -115,6 +115,15 @@ export class LogInPasswordComponent implements OnInit { }) ); + this.canRegister$ = this.authorizationService.isAuthorized(FeatureID.EPersonRegistration); + } + + getRegisterRoute() { + return getRegisterRoute(); + } + + getForgotRoute() { + return getForgotPasswordRoute(); } /** diff --git a/src/app/shared/log-in/methods/shibboleth/log-in-shibboleth.component.html b/src/app/shared/log-in/methods/shibboleth/log-in-shibboleth.component.html index 3a3b935cfa..fca514b83d 100644 --- a/src/app/shared/log-in/methods/shibboleth/log-in-shibboleth.component.html +++ b/src/app/shared/log-in/methods/shibboleth/log-in-shibboleth.component.html @@ -1,3 +1,3 @@ - diff --git a/src/app/shared/log-in/methods/shibboleth/log-in-shibboleth.component.spec.ts b/src/app/shared/log-in/methods/shibboleth/log-in-shibboleth.component.spec.ts index 075d33d98e..afb0f2092a 100644 --- a/src/app/shared/log-in/methods/shibboleth/log-in-shibboleth.component.spec.ts +++ b/src/app/shared/log-in/methods/shibboleth/log-in-shibboleth.component.spec.ts @@ -3,11 +3,8 @@ import { ActivatedRoute, Router } from '@angular/router'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { provideMockStore } from '@ngrx/store/testing'; -import { Store, StoreModule } from '@ngrx/store'; +import { StoreModule } from '@ngrx/store'; import { TranslateModule } from '@ngx-translate/core'; - -import { EPerson } from '../../../../core/eperson/models/eperson.model'; -import { EPersonMock } from '../../../testing/eperson.mock'; import { authReducer } from '../../../../core/auth/auth.reducer'; import { AuthService } from '../../../../core/auth/auth.service'; import { AuthServiceStub } from '../../../testing/auth-service.stub'; @@ -26,17 +23,14 @@ describe('LogInShibbolethComponent', () => { let component: LogInShibbolethComponent; let fixture: ComponentFixture; - let page: Page; - let user: EPerson; let componentAsAny: any; let setHrefSpy; - let shibbolethBaseUrl; - let location; + let shibbolethBaseUrl: string; + let location: string; let initialState: any; let hardRedirectService: HardRedirectService; beforeEach(() => { - user = EPersonMock; shibbolethBaseUrl = 'dspace-rest.test/shibboleth?redirectUrl='; location = shibbolethBaseUrl + 'http://dspace-angular.test/home'; @@ -60,7 +54,7 @@ describe('LogInShibbolethComponent', () => { beforeEach(waitForAsync(() => { // refine the test module by declaring the test component - TestBed.configureTestingModule({ + void TestBed.configureTestingModule({ imports: [ StoreModule.forRoot({ auth: authReducer }, storeModuleConfig), TranslateModule.forRoot() @@ -70,7 +64,7 @@ describe('LogInShibbolethComponent', () => { ], providers: [ { provide: AuthService, useClass: AuthServiceStub }, - { provide: 'authMethodProvider', useValue: new AuthMethod(AuthMethodType.Shibboleth, location) }, + { provide: 'authMethodProvider', useValue: new AuthMethod(AuthMethodType.Shibboleth, 0, location) }, { provide: 'isStandalonePage', useValue: true }, { provide: NativeWindowService, useFactory: NativeWindowMockFactory }, { provide: Router, useValue: new RouterStub() }, @@ -95,7 +89,6 @@ describe('LogInShibbolethComponent', () => { componentAsAny = component; // create page - page = new Page(component, fixture); setHrefSpy = spyOnProperty(componentAsAny._window.nativeWindow.location, 'href', 'set').and.callThrough(); }); @@ -131,25 +124,3 @@ describe('LogInShibbolethComponent', () => { }); }); - -/** - * I represent the DOM elements and attach spies. - * - * @class Page - */ -class Page { - - public emailInput: HTMLInputElement; - public navigateSpy: jasmine.Spy; - public passwordInput: HTMLInputElement; - - constructor(private component: LogInShibbolethComponent, private fixture: ComponentFixture) { - // use injector to get services - const injector = fixture.debugElement.injector; - const store = injector.get(Store); - - // add spies - this.navigateSpy = spyOn(store, 'dispatch'); - } - -} diff --git a/src/app/shared/testing/auth-service.stub.ts b/src/app/shared/testing/auth-service.stub.ts index b8d822252d..e974c5ca9e 100644 --- a/src/app/shared/testing/auth-service.stub.ts +++ b/src/app/shared/testing/auth-service.stub.ts @@ -6,10 +6,11 @@ import { EPerson } from '../../core/eperson/models/eperson.model'; import { createSuccessfulRemoteDataObject$ } from '../remote-data.utils'; import { AuthMethod } from '../../core/auth/models/auth.method'; import { hasValue } from '../empty.util'; +import { AuthMethodType } from '../../core/auth/models/auth.method-type'; -export const authMethodsMock = [ - new AuthMethod('password'), - new AuthMethod('shibboleth', 'dspace.test/shibboleth') +export const authMethodsMock: AuthMethod[] = [ + new AuthMethod(AuthMethodType.Password, 0), + new AuthMethod(AuthMethodType.Shibboleth, 1, 'dspace.test/shibboleth'), ]; export class AuthServiceStub { diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 597f226cc7..4e875d61f2 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -2560,8 +2560,6 @@ "login.form.new-user": "New user? Click here to register.", - "login.form.or-divider": "or", - "login.form.oidc": "Log in with OIDC", "login.form.orcid": "Log in with ORCID", From e53abcb69ea3d26461c24bd67894b7de1104a8cb Mon Sep 17 00:00:00 2001 From: Sascha Szott Date: Wed, 2 Aug 2023 18:00:03 +0200 Subject: [PATCH 278/425] remove redundant cache default values from server.ts --- server.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/server.ts b/server.ts index 23327c2058..4feda5209a 100644 --- a/server.ts +++ b/server.ts @@ -320,22 +320,23 @@ function initCache() { if (botCacheEnabled()) { // Initialize a new "least-recently-used" item cache (where least recently used pages are removed first) // See https://www.npmjs.com/package/lru-cache - // When enabled, each page defaults to expiring after 1 day + // When enabled, each page defaults to expiring after 1 day (defined in default-app-config.ts) botCache = new LRU( { max: environment.cache.serverSide.botCache.max, - ttl: environment.cache.serverSide.botCache.timeToLive || 24 * 60 * 60 * 1000, // 1 day - allowStale: environment.cache.serverSide.botCache.allowStale ?? true // if object is stale, return stale value before deleting + ttl: environment.cache.serverSide.botCache.timeToLive, + allowStale: environment.cache.serverSide.botCache.allowStale }); } if (anonymousCacheEnabled()) { // NOTE: While caches may share SSR pages, this cache must be kept separately because the timeToLive // may expire pages more frequently. - // When enabled, each page defaults to expiring after 10 seconds (to minimize anonymous users seeing out-of-date content) + // When enabled, each page defaults to expiring after 10 seconds (defined in default-app-config.ts) + // to minimize anonymous users seeing out-of-date content anonymousCache = new LRU( { max: environment.cache.serverSide.anonymousCache.max, - ttl: environment.cache.serverSide.anonymousCache.timeToLive || 10 * 1000, // 10 seconds - allowStale: environment.cache.serverSide.anonymousCache.allowStale ?? true // if object is stale, return stale value before deleting + ttl: environment.cache.serverSide.anonymousCache.timeToLive, + allowStale: environment.cache.serverSide.anonymousCache.allowStale }); } } From 3dc73f90214bc9fd288aaf0e0a06bc5912aadfbb Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Wed, 2 Aug 2023 21:25:58 +0200 Subject: [PATCH 279/425] Properly handle AuthMethod subscription in LogInComponent --- src/app/shared/log-in/log-in.component.ts | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/app/shared/log-in/log-in.component.ts b/src/app/shared/log-in/log-in.component.ts index f47ea2d77e..4bfae18332 100644 --- a/src/app/shared/log-in/log-in.component.ts +++ b/src/app/shared/log-in/log-in.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; -import { Observable } from 'rxjs'; +import { map, Observable } from 'rxjs'; import { select, Store } from '@ngrx/store'; import { AuthMethod } from '../../core/auth/models/auth.method'; import { @@ -35,7 +35,7 @@ export class LogInComponent implements OnInit { * The list of authentication methods available * @type {AuthMethod[]} */ - public authMethods: AuthMethod[]; + public authMethods: Observable; /** * Whether user is authenticated. @@ -55,13 +55,11 @@ export class LogInComponent implements OnInit { } ngOnInit(): void { - - this.store.pipe( + this.authMethods = this.store.pipe( select(getAuthenticationMethods), - ).subscribe(methods => { // ignore the ip authentication method when it's returned by the backend - this.authMethods = methods.filter(a => a.authMethodType !== AuthMethodType.Ip); - }); + map((methods: AuthMethod[]) => methods.filter((authMethod: AuthMethod) => authMethod.authMethodType !== AuthMethodType.Ip)), + ); // set loading this.loading = this.store.pipe(select(isAuthenticationLoading)); From 4c93b4728b215474c793b6ee8951b92019c7e2fa Mon Sep 17 00:00:00 2001 From: Alan Orth Date: Fri, 30 Jun 2023 09:49:01 +0300 Subject: [PATCH 280/425] src/assets/i18n: update Finnish language strings Contributed by Reeta Kuukoski from the National Library of Finland. (cherry picked from commit 1b9656b1351a0de44e15c3d26cab56645b200956) --- src/assets/i18n/fi.json5 | 3382 +++++++++++++++++++++++++++++++++----- 1 file changed, 2975 insertions(+), 407 deletions(-) diff --git a/src/assets/i18n/fi.json5 b/src/assets/i18n/fi.json5 index 62e7e6bffe..c56fcb6fec 100644 --- a/src/assets/i18n/fi.json5 +++ b/src/assets/i18n/fi.json5 @@ -9,8 +9,6 @@ // "401.unauthorized": "unauthorized", "401.unauthorized": "valtuuttamaton", - - // "403.help": "You don't have permission to access this page. You can use the button below to get back to the home page.", "403.help": "Sinulla ei ole oikeutta nähdä sivua. Voit palata etusivulle alla olevalla painikkeella.", @@ -20,10 +18,17 @@ // "403.forbidden": "forbidden", "403.forbidden": "kielletty", + // "500.page-internal-server-error": "Service Unavailable", + "500.page-internal-server-error": "Palvelu ei ole saatavilla", + // "500.help": "The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.", + "500.help": "Palvelin ei tilapäisesti pysty käsittelemään pyyntöäsi huoltokatkon tai kapasiteettiongelmien vuoksi. Yritä myöhemmin uudelleen.", + + // "500.link.home-page": "Take me to the home page", + "500.link.home-page": "Palaa etusivulle", // "404.help": "We can't find the page you're looking for. The page may have been moved or deleted. You can use the button below to get back to the home page. ", - "404.help": "Hakemaasi sivua ei löytynyt. Sivu on voitu siirtää tai poistaa. Painamalla alapuolella olevaa nappia palaat etusivulle. ", + "404.help": "Hakemaasi sivua ei löytynyt. Sivu on voitu siirtää tai poistaa. Painamalla alapuolella olevaa painiketta palaat etusivulle. ", // "404.link.home-page": "Take me to the home page", "404.link.home-page": "Palaa etusivulle", @@ -31,6 +36,36 @@ // "404.page-not-found": "page not found", "404.page-not-found": "sivua ei löytynyt", + // "error-page.description.401": "unauthorized", + "error-page.description.401": "valtuuttamaton", + + // "error-page.description.403": "forbidden", + "error-page.description.403": "kielletty", + + // "error-page.description.500": "Service Unavailable", + "error-page.description.500": "Palvelu ei ole saatavilla", + + // "error-page.description.404": "page not found", + "error-page.description.404": "sivua ei löytynyt", + + // "error-page.orcid.generic-error": "An error occurred during login via ORCID. Make sure you have shared your ORCID account email address with DSpace. If the error persists, contact the administrator", + "error-page.orcid.generic-error": "Virhe ORCID-kirjautumisessa. Varmista, että olet tuonut ORCID-tilisi sähköpostiosoitteen DSpaceen. Jos virhe jatkuu, ota yhteyttä ylläpitäjään.", + + // "access-status.embargo.listelement.badge": "Embargo", + "access-status.embargo.listelement.badge": "Embargo", + + // "access-status.metadata.only.listelement.badge": "Metadata only", + "access-status.metadata.only.listelement.badge": "Vain metadata", + + // "access-status.open.access.listelement.badge": "Open Access", + "access-status.open.access.listelement.badge": "Open Access", + + // "access-status.restricted.listelement.badge": "Restricted", + "access-status.restricted.listelement.badge": "Rajattu", + + // "access-status.unknown.listelement.badge": "Unknown", + "access-status.unknown.listelement.badge": "Tuntematon", + // "admin.curation-tasks.breadcrumbs": "System curation tasks", "admin.curation-tasks.breadcrumbs": "Järjestelmän kuratointitehtävät", @@ -157,11 +192,11 @@ // "admin.registries.bitstream-formats.table.name": "Name", "admin.registries.bitstream-formats.table.name": "Nimi", - // "admin.registries.bitstream-formats.table.id" : "ID", + // "admin.registries.bitstream-formats.table.id": "ID", "admin.registries.bitstream-formats.table.id": "ID", - // "admin.registries.bitstream-formats.table.return": "Return", - "admin.registries.bitstream-formats.table.return": "Palaa", + // "admin.registries.bitstream-formats.table.return": "Back", + "admin.registries.bitstream-formats.table.return": "Paluu", // "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Known", "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Tunnettu", @@ -175,10 +210,8 @@ // "admin.registries.bitstream-formats.table.supportLevel.head": "Support Level", "admin.registries.bitstream-formats.table.supportLevel.head": "Tukitaso", - // "admin.registries.bitstream-formats.title": "DSpace Angular :: Bitstream Format Registry", - "admin.registries.bitstream-formats.title": "DSpace Angular :: Tiedostoformaattirekisteri", - - + // "admin.registries.bitstream-formats.title": "Bitstream Format Registry", + "admin.registries.bitstream-formats.title": "Tiedostoformaattirekisteri", // "admin.registries.metadata.breadcrumbs": "Metadata registry", "admin.registries.metadata.breadcrumbs": "Metadatarekisteri", @@ -216,10 +249,8 @@ // "admin.registries.metadata.schemas.table.namespace": "Namespace", "admin.registries.metadata.schemas.table.namespace": "Nimiavaruus", - // "admin.registries.metadata.title": "DSpace Angular :: Metadata Registry", - "admin.registries.metadata.title": "DSpace Angular :: Metadatarekisteri", - - + // "admin.registries.metadata.title": "Metadata Registry", + "admin.registries.metadata.title": "Metadatarekisteri", // "admin.registries.schema.breadcrumbs": "Metadata schema", "admin.registries.schema.breadcrumbs": "Metadataskeema", @@ -293,13 +324,11 @@ // "admin.registries.schema.notification.success": "Success", "admin.registries.schema.notification.success": "Valmis", - // "admin.registries.schema.return": "Return", - "admin.registries.schema.return": "Palaa", - - // "admin.registries.schema.title": "DSpace Angular :: Metadata Schema Registry", - "admin.registries.schema.title": "DSpace Angular :: Metadataskeemarekisteri", - + // "admin.registries.schema.return": "Back", + "admin.registries.schema.return": "Paluu", + // "admin.registries.schema.title": "Metadata Schema Registry", + "admin.registries.schema.title": "Metadataskeemarekisteri", // "admin.access-control.epeople.actions.delete": "Delete EPerson", "admin.access-control.epeople.actions.delete": "Poista käyttäjä", @@ -313,7 +342,10 @@ // "admin.access-control.epeople.actions.stop-impersonating": "Stop impersonating EPerson", "admin.access-control.epeople.actions.stop-impersonating": "Lopeta käyttäjänä esiintyminen", - // "admin.access-control.epeople.title": "DSpace Angular :: EPeople", + // "admin.access-control.epeople.breadcrumbs": "EPeople", + "admin.access-control.epeople.breadcrumbs": "Käyttäjät", + + // "admin.access-control.epeople.title": "EPeople", "admin.access-control.epeople.title": "DSpace Angular :: Käyttäjät", // "admin.access-control.epeople.head": "EPeople", @@ -334,6 +366,9 @@ // "admin.access-control.epeople.search.button": "Search", "admin.access-control.epeople.search.button": "Hae", + // "admin.access-control.epeople.search.placeholder": "Search people...", + "admin.access-control.epeople.search.placeholder": "Hae käyttäjiä...", + // "admin.access-control.epeople.button.add": "Add EPerson", "admin.access-control.epeople.button.add": "Lisää käyttäjä", @@ -352,6 +387,9 @@ // "admin.access-control.epeople.table.edit.buttons.edit": "Edit \"{{name}}\"", "admin.access-control.epeople.table.edit.buttons.edit": "Muokkaa \"{{name}}\"", + // "admin.access-control.epeople.table.edit.buttons.edit-disabled": "You are not authorized to edit this group", + "admin.access-control.epeople.table.edit.buttons.edit-disabled": "Sinulla ei ole valtuuksia muokata tätä ryhmää", + // "admin.access-control.epeople.table.edit.buttons.remove": "Delete \"{{name}}\"", "admin.access-control.epeople.table.edit.buttons.remove": "Poista \"{{name}}\"", @@ -382,6 +420,9 @@ // "admin.access-control.epeople.form.requireCertificate": "Requires certificate", "admin.access-control.epeople.form.requireCertificate": "Vaatii sertifikaatin", + // "admin.access-control.epeople.form.return": "Back", + "admin.access-control.epeople.form.return": "Paluu", + // "admin.access-control.epeople.form.notification.created.success": "Successfully created EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.created.success": "Käyttäjä \"{{name}}\" luotu", @@ -415,6 +456,9 @@ // "admin.access-control.epeople.form.table.name": "Name", "admin.access-control.epeople.form.table.name": "Nimi", + // "admin.access-control.epeople.form.table.collectionOrCommunity": "Collection/Community", + "admin.access-control.epeople.form.table.collectionOrCommunity": "Kokoelma/Yhteisö", + // "admin.access-control.epeople.form.memberOfNoGroups": "This EPerson is not a member of any groups", "admin.access-control.epeople.form.memberOfNoGroups": "Tämä käyttäjä ei kuulu mihinkään ryhmään", @@ -427,16 +471,23 @@ // "admin.access-control.epeople.notification.deleted.success": "Successfully deleted EPerson: \"{{name}}\"", "admin.access-control.epeople.notification.deleted.success": "Käyttäjä poistettu: \"{{name}}\"", + // "admin.access-control.groups.title": "Groups", + "admin.access-control.groups.title": "Ryhmät", + // "admin.access-control.groups.breadcrumbs": "Groups", + "admin.access-control.groups.breadcrumbs": "Ryhmät", - // "admin.access-control.groups.title": "DSpace Angular :: Groups", - "admin.access-control.groups.title": "DSpace Angular :: Ryhmät", + // "admin.access-control.groups.singleGroup.breadcrumbs": "Edit Group", + // "admin.access-control.groups.singleGroup.breadcrumbs": "Ryhmän muokkaus", - // "admin.access-control.groups.title.singleGroup": "DSpace Angular :: Edit Group", - "admin.access-control.groups.title.singleGroup": "DSpace Angular :: Ryhmän muokkaus", + // "admin.access-control.groups.title.singleGroup": "Edit Group", + "admin.access-control.groups.title.singleGroup": "Ryhmän muokkaus", - // "admin.access-control.groups.title.addGroup": "DSpace Angular :: New Group", - "admin.access-control.groups.title.addGroup": "DSpace Angular :: Uusi ryhmä", + // "admin.access-control.groups.title.addGroup": "New Group", + "admin.access-control.groups.title.addGroup": "Uusi ryhmä", + + // "admin.access-control.groups.addGroup.breadcrumbs": "New Group", + "admin.access-control.groups.addGroup.breadcrumbs": "uusi ryhmä", // "admin.access-control.groups.head": "Groups", "admin.access-control.groups.head": "Ryhmät", @@ -453,12 +504,18 @@ // "admin.access-control.groups.search.button": "Search", "admin.access-control.groups.search.button": "Hae", + // "admin.access-control.groups.search.placeholder": "Search groups...", + "admin.access-control.groups.search.placeholder": "Hae ryhmiä...", + // "admin.access-control.groups.table.id": "ID", "admin.access-control.groups.table.id": "ID", // "admin.access-control.groups.table.name": "Name", "admin.access-control.groups.table.name": "Nimi", + // "admin.access-control.groups.table.collectionOrCommunity": "Collection/Community", + "admin.access-control.groups.table.collectionOrCommunity": "Kokoelma/Yhteisö", + // "admin.access-control.groups.table.members": "Members", "admin.access-control.groups.table.members": "Jäsenet", @@ -483,8 +540,6 @@ // "admin.access-control.groups.notification.deleted.failure.content": "Cause: \"{{cause}}\"", "admin.access-control.groups.notification.deleted.failure.content": "Syy: \"{{cause}}\"", - - // "admin.access-control.groups.form.alert.permanent": "This group is permanent, so it can't be edited or deleted. You can still add and remove group members using this page.", "admin.access-control.groups.form.alert.permanent": "Tämä ryhmä on pysyvä, eikä sitä voi muokata tai poistaa. Ryhmään voi kuitenkin lisätä ja poistaa jäseniä tällä sivulla.", @@ -500,6 +555,9 @@ // "admin.access-control.groups.form.groupName": "Group name", "admin.access-control.groups.form.groupName": "Ryhmän nimi", + // "admin.access-control.groups.form.groupCommunity": "Community or Collection", + "admin.access-control.groups.form.groupCommunity": "Yhteisö tai kokoelma", + // "admin.access-control.groups.form.groupDescription": "Description", "admin.access-control.groups.form.groupDescription": "Kuvaus", @@ -572,6 +630,15 @@ // "admin.access-control.groups.form.members-list.table.name": "Name", "admin.access-control.groups.form.members-list.table.name": "Nimi", + // "admin.access-control.groups.form.members-list.table.identity": "Identity", + "admin.access-control.groups.form.members-list.table.identity": "Identiteetti", + + // "admin.access-control.groups.form.members-list.table.email": "Email", + "admin.access-control.groups.form.members-list.table.email": "Sähköpostiosoite", + + // "admin.access-control.groups.form.members-list.table.netid": "NetID", + "admin.access-control.groups.form.members-list.table.netid": "Käyttäjätunnus", + // "admin.access-control.groups.form.members-list.table.edit": "Remove / Add", "admin.access-control.groups.form.members-list.table.edit": "Poista / Lisää", @@ -626,6 +693,9 @@ // "admin.access-control.groups.form.subgroups-list.table.name": "Name", "admin.access-control.groups.form.subgroups-list.table.name": "Nimi", + // "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Collection/Community", + "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Kokoelma/Yhteisö", + // "admin.access-control.groups.form.subgroups-list.table.edit": "Remove / Add", "admin.access-control.groups.form.subgroups-list.table.edit": "Poista / Lisää", @@ -662,10 +732,18 @@ // "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "No subgroups in group yet.", "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "Ryhmällä ei ole alaryhmiä.", - // "admin.access-control.groups.form.return": "Return to groups", - "admin.access-control.groups.form.return": "Palaa ryhmiin", + // "admin.access-control.groups.form.return": "Back", + "admin.access-control.groups.form.return": "Paluu", + // "admin.access-control.groups.form.tooltip.editGroupPage": "On this page, you can modify the properties and members of a group. In the top section, you can edit the group name and description, unless this is an admin group for a collection or community, in which case the group name and description are auto-generated and cannot be edited. In the following sections, you can edit group membership. See [the wiki](https://wiki.lyrasis.org/display/DSDOC7x/Create+or+manage+a+user+group) for more details.", + "admin.access-control.groups.form.tooltip.editGroupPage": "Tällä sivulla voit muokata ryhmän ominaisuuksia ja jäseniä. Yläosassa voit muokata ryhmän nimeä ja kuvausta, paitsi jos kyseessä on kokoelman tai yhteisön ylläpitäjäryhmä, jolloin ryhmän nimi ja kuvaus luodaan automaattisesti, eikä niitä voi muokata. Muissa osioissa voit muokata ryhmän jäsenyyttä. Katso lisätietoja wiki-sivulta (https://wiki.lyrasis.org/display/DSDOC7x/Create+or+manage+a+user+group).", + // "admin.access-control.groups.form.tooltip.editGroup.addEpeople": "To add or remove an EPerson to/from this group, either click the 'Browse All' button or use the search bar below to search for users (use the dropdown to the left of the search bar to choose whether to search by metadata or by email). Then click the plus icon for each user you wish to add in the list below, or the trash can icon for each user you wish to remove. The list below may have several pages: use the page controls below the list to navigate to the next pages. Once you are ready, save your changes by clicking the 'Save' button in the top section.", + "admin.access-control.groups.form.tooltip.editGroup.addEpeople": "Voit lisätä tai poistaa ryhmän käyttäjän joko napsauttamalla 'Selaa kaikkia' -painiketta tai käyttämällä alla olevaa hakupalkkia käyttäjien etsimiseen (käytä hakupalkin vasemmalla puolella olevaa pudotusvalikkoa valitaksesi, haetaanko metatietojen vai sähköpostin perusteella). Napsauta sitten plus-kuvaketta jokaisen käyttäjän kohdalla, jonka haluat lisätä alla olevaan luetteloon, tai roskakorikuvaketta jokaisen käyttäjän kohdalla, jonka haluat poistaa. Alla olevassa luettelossa voi olla useita sivuja: voit siirtyä seuraaville sivuille luettelon alapuolella olevilla sivunohjaimilla. Kun olet valmis, tallenna muutokset napsauttamalla yläosassa olevaa Tallenna-painiketta.", + + // "admin.access-control.groups.form.tooltip.editGroup.addSubgroups": "To add or remove a Subgroup to/from this group, either click the 'Browse All' button or use the search bar below to search for users. Then click the plus icon for each user you wish to add in the list below, or the trash can icon for each user you wish to remove. The list below may have several pages: use the page controls below the list to navigate to the next pages. Once you are ready, save your changes by clicking the 'Save' button in the top section.", + // TODO New key - Add a translation - ree made ticket 2321 to DSpace's github + "admin.access-control.groups.form.tooltip.editGroup.addSubgroups": "Jos haluat lisätä tai poistaa alaryhmän tähän ryhmään tai tästä ryhmästä, napsauta joko 'Selaa kaikkia' -painiketta tai käytä alla olevaa hakupalkkia käyttäjien etsimiseen. Napsauta sitten luettelossa plus-kuvaketta jokaisen käyttäjän kohdalla, jonka haluat lisätä, tai roskakorikuvaketta jokaisen käyttäjän kohdalla, jonka haluat poistaa. Luettelossa voi olla useita sivuja: voit siirtyä seuraaville sivuille luettelon alapuolella olevilla sivunohjaimilla. Kun olet valmis, tallenna muutokset napsauttamalla yläosassa olevaa Tallenna-painiketta.", // "admin.search.breadcrumbs": "Administrative Search", "admin.search.breadcrumbs": "Ylläpitäjän haku", @@ -682,17 +760,17 @@ // "admin.search.item.edit": "Edit", "admin.search.item.edit": "Muokkaa", - // "admin.search.item.make-private": "Make Private", + // "admin.search.item.make-private": "Make non-discoverable", "admin.search.item.make-private": "Tee yksityiseksi", - // "admin.search.item.make-public": "Make Public", + // "admin.search.item.make-public": "Make discoverable", "admin.search.item.make-public": "Tee julkiseksi", // "admin.search.item.move": "Move", "admin.search.item.move": "Siirrä", // "admin.search.item.reinstate": "Reinstate", - "admin.search.item.reinstate": "Palauta käyttöön", + "admin.search.item.reinstate": "Palauta", // "admin.search.item.withdraw": "Withdraw", "admin.search.item.withdraw": "Poista käytöstä", @@ -703,9 +781,6 @@ // "administrativeView.search.results.head": "Administrative Search", "administrativeView.search.results.head": "Ylläpitäjän haku", - - - // "admin.workflow.breadcrumbs": "Administer Workflow", "admin.workflow.breadcrumbs": "Hallinnoi työnkulkua", @@ -715,43 +790,191 @@ // "admin.workflow.item.workflow": "Workflow", "admin.workflow.item.workflow": "Työnkulku", + // "admin.workflow.item.workspace": "Workspace", + "admin.workflow.item.workspace": "Työtila", + // "admin.workflow.item.delete": "Delete", "admin.workflow.item.delete": "Poista", // "admin.workflow.item.send-back": "Send back", "admin.workflow.item.send-back": "Lähetä takaisin", + // "admin.workflow.item.policies": "Policies", + "admin.workflow.item.policies": "Käytännöt", + // "admin.workflow.item.supervision": "Supervision", + "admin.workflow.item.supervision": "Valvonta", // "admin.metadata-import.breadcrumbs": "Import Metadata", "admin.metadata-import.breadcrumbs": "Importoi metadata", + // "admin.batch-import.breadcrumbs": "Import Batch", + "admin.batch-import.breadcrumbs": "Importoi erä", + // "admin.metadata-import.title": "Import Metadata", "admin.metadata-import.title": "Importoi metadata", + // "admin.batch-import.title": "Import Batch", + "admin.batch-import.title": "Importoi erä", + // "admin.metadata-import.page.header": "Import Metadata", "admin.metadata-import.page.header": "Importoi metadata", + // "admin.batch-import.page.header": "Import Batch", + "admin.batch-import.page.header": "Importoi erä", + // "admin.metadata-import.page.help": "You can drop or browse CSV files that contain batch metadata operations on files here", "admin.metadata-import.page.help": "Voit pudottaa tähän tai selata CSV-tiedostoja, joilla voit tehdä metadatatoimintoja usealle tietueelle", + // "admin.batch-import.page.help": "Select the Collection to import into. Then, drop or browse to a Simple Archive Format (SAF) zip file that includes the Items to import", + "admin.batch-import.page.help": "Valitse kokoelma, johon tietueet importoidaan. Sen jälkeen pudota tai selaa esiin importoitavat tietueet sisältävä Simple Archive Format (SAF) -ZIP-tiedosto.", + + // "admin.batch-import.page.toggle.help": "It is possible to perform import either with file upload or via URL, use above toggle to set the input source", + "admin.batch-import.page.toggle.help": "Importoinnin voi tehdä joko lataamalla tiedoston tai URL-osoitteen kautta. Käytä yllä olevaa kytkintä valitaksesi syöttötavan.", + // "admin.metadata-import.page.dropMsg": "Drop a metadata CSV to import", "admin.metadata-import.page.dropMsg": "Pudota CSV-metadata importoimista varten", + // "admin.batch-import.page.dropMsg": "Drop a batch ZIP to import", + "admin.batch-import.page.dropMsg": "Pudota erän ZIP-tiedosto importoimista varten", + // "admin.metadata-import.page.dropMsgReplace": "Drop to replace the metadata CSV to import", "admin.metadata-import.page.dropMsgReplace": "Pudota korvataksesi importoitava CSV-metadata", - // "admin.metadata-import.page.button.return": "Return", + // "admin.batch-import.page.dropMsgReplace": "Drop to replace the batch ZIP to import", + "admin.batch-import.page.dropMsgReplace": "Pudota korvataksesi importoitava erän ZIP-tiedosto", + + // "admin.metadata-import.page.button.return": "Back", "admin.metadata-import.page.button.return": "Paluu", // "admin.metadata-import.page.button.proceed": "Proceed", "admin.metadata-import.page.button.proceed": "Jatka", + // "admin.metadata-import.page.button.select-collection": "Select Collection", + "admin.metadata-import.page.button.select-collection": "Valitse kokoelma", + // "admin.metadata-import.page.error.addFile": "Select file first!", "admin.metadata-import.page.error.addFile": "Valitse ensin tiedosto!", + // "admin.metadata-import.page.error.addFileUrl": "Insert file url first!", + "admin.metadata-import.page.error.addFileUrl": "Syötä tiedoston URL ensin!", + // "admin.batch-import.page.error.addFile": "Select Zip file first!", + "admin.batch-import.page.error.addFile": "Valitse ZIP-tiedosto ensin!", + // "admin.metadata-import.page.toggle.upload": "Upload", + "admin.metadata-import.page.toggle.upload": "Lataa", + + // "admin.metadata-import.page.toggle.url": "URL", + "admin.metadata-import.page.toggle.url": "URL", + + // "admin.metadata-import.page.urlMsg": "Insert the batch ZIP url to import", + "admin.metadata-import.page.urlMsg": "Syötä erän ZIP-URL importoitavaksi", + + // "admin.metadata-import.page.validateOnly": "Validate Only", + "admin.metadata-import.page.validateOnly": "Pelkkä validointi", + + // "admin.metadata-import.page.validateOnly.hint": "When selected, the uploaded CSV will be validated. You will receive a report of detected changes, but no changes will be saved.", + "admin.metadata-import.page.validateOnly.hint": "Kun tämä valitaan, ladattu CSV-tiedosto validoidaan. Saat raportin havaituista muutoksista, mutta muutoksia ei tallenneta.", + + // "advanced-workflow-action.rating.form.rating.label": "Rating", + "advanced-workflow-action.rating.form.rating.label": "Arviointi", + + // "advanced-workflow-action.rating.form.rating.error": "You must rate the item", + "advanced-workflow-action.rating.form.rating.error": "Sinun on arvioitava tietua", + + // "advanced-workflow-action.rating.form.review.label": "Review", + "advanced-workflow-action.rating.form.review.label": "Tarkasta", + + // "advanced-workflow-action.rating.form.review.error": "You must enter a review to submit this rating", + "advanced-workflow-action.rating.form.review.error": "Sinun on annettava arvostelu lähettääksesi tämän arvioinnin", + + // "advanced-workflow-action.rating.description": "Please select a rating below", + "advanced-workflow-action.rating.description": "Valitse arviointi alapuolelta", + + // "advanced-workflow-action.rating.description-requiredDescription": "Please select a rating below and also add a review", + "advanced-workflow-action.rating.description-requiredDescription": "Valitse arviointi alapuolelta. Lisää myös arvostelu", + + // "advanced-workflow-action.select-reviewer.description-single": "Please select a single reviewer below before submitting", + "advanced-workflow-action.select-reviewer.description-single": "Valitse yksi tarkastaja alapuolelta ennen lähettämistä", + + // "advanced-workflow-action.select-reviewer.description-multiple": "Please select one or more reviewers below before submitting", + "advanced-workflow-action.select-reviewer.description-multiple": "Valitse yksi tai useampi tarkastaja alapuolelta ennen lähettämistä", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.head": "EPeople", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.head": "Käyttäjät", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.head": "Add EPeople", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.head": "Lisää käyttäjiä", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.button.see-all": "Browse All", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.button.see-all": "Selaa kaikkia", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.headMembers": "Current Members", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.headMembers": "Nykyiset jäsenet", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.metadata": "Metadata", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.metadata": "Metadata", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.email": "E-mail (exact)", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.email": "Sähköpostiosoite (oikea)", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.button": "Search", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.button": "Hae", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.id": "ID", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.id": "ID", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.name": "Name", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.name": "Nimi", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity": "Identity", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity": "Identiteetti", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "Email", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "Sähköpostiosoite", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.netid": "NetID", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.netid": "Käyttäjätunnus", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit": "Remove / Add", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit": "Poista / Lisää", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove": "Remove member with name \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove": "Poista jäsen nimellä \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember": "Successfully added member: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember": "Jäsen lisätty: \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.addMember": "Failed to add member: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.addMember": "Jäsenen lisäys epäonnistui: \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.deleteMember": "Successfully deleted member: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.deleteMember": "Jäsen poistettu: \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.deleteMember": "Failed to delete member: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.deleteMember": "Jäsenen poisto epäonnistui: \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Add member with name \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Lisää jäsen nimellä \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "Ei aktiivista ryhmää, syötä ensin nimi", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-members-yet": "No members in group yet, search and add.", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-members-yet": "Ryhmässä ei ole vielä jäseniä, hae ja lisää.", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-items": "No EPeople found in that search", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-items": "Haku ei palauttanut käyttäjiä", + + // "advanced-workflow-action.select-reviewer.no-reviewer-selected.error": "No reviewer selected.", + "advanced-workflow-action.select-reviewer.no-reviewer-selected.error": "Ei valittua tarkastajaa.", + + // "admin.batch-import.page.validateOnly.hint": "When selected, the uploaded ZIP will be validated. You will receive a report of detected changes, but no changes will be saved.", + "admin.batch-import.page.validateOnly.hint": "Kun tämä valitaan, ladattu ZIP-tiedosto validoidaan. the uploaded ZIP will be validated. Saat raportin havaituista muutoksista, mutta muutoksia ei tallenneta.", + + // "admin.batch-import.page.remove": "remove", + "admin.batch-import.page.remove": "poista", // "auth.errors.invalid-user": "Invalid email address or password.", "auth.errors.invalid-user": "Virheellinen sähköpostiosoite tai salasana.", @@ -759,7 +982,23 @@ // "auth.messages.expired": "Your session has expired. Please log in again.", "auth.messages.expired": "Istuntosi on vanhentunut. Kirjaudu uudelleen.", + // "auth.messages.token-refresh-failed": "Refreshing your session token failed. Please log in again.", + "auth.messages.token-refresh-failed": "Istuntotunnisteen päivittäminen epäonnistui. Kirjaudu uudelleen.", + // "bitstream.download.page": "Now downloading {{bitstream}}...", + "bitstream.download.page": "Nyt ladataan {{bitstream}}...", + + // "bitstream.download.page.back": "Back", + "bitstream.download.page.back": "Paluu", + + // "bitstream.edit.authorizations.link": "Edit bitstream's Policies", + "bitstream.edit.authorizations.link": "Muokkaa tiedostokäytäntöjä", + + // "bitstream.edit.authorizations.title": "Edit bitstream's Policies", + "bitstream.edit.authorizations.title": "Muokkaa tiedostokäytäntöjä", + + // "bitstream.edit.return": "Back", + "bitstream.edit.return": "Paluu", // "bitstream.edit.bitstream": "Bitstream: ", "bitstream.edit.bitstream": "Tiedosto: ", @@ -803,6 +1042,33 @@ // "bitstream.edit.notifications.error.format.title": "An error occurred saving the bitstream's format", "bitstream.edit.notifications.error.format.title": "Virhe tallennettaessa tiedoston formaattia", + // "bitstream.edit.notifications.error.primaryBitstream.title": "An error occurred saving the primary bitstream", + "bitstream.edit.notifications.error.primaryBitstream.title": "Virhe tallennettaessa päätiedostoa", + + // "bitstream.edit.form.iiifLabel.label": "IIIF Label", + "bitstream.edit.form.iiifLabel.label": "IIIF-nimike", + + // "bitstream.edit.form.iiifLabel.hint": "Canvas label for this image. If not provided default label will be used.", + "bitstream.edit.form.iiifLabel.hint": "Kuvan canvasin nimike. Ellei nimikettä anneta, käytetään oletusnimikettä.", + + // "bitstream.edit.form.iiifToc.label": "IIIF Table of Contents", + "bitstream.edit.form.iiifToc.label": "IIIF-sisällysluettelo", + + // "bitstream.edit.form.iiifToc.hint": "Adding text here makes this the start of a new table of contents range.", + "bitstream.edit.form.iiifToc.hint": "Jos tekstiä lisätään tähän, tästä alkaa uusi sisällysluetteloaihe.", + + // "bitstream.edit.form.iiifWidth.label": "IIIF Canvas Width", + "bitstream.edit.form.iiifWidth.label": "IIIF-canvasin leveys", + + // "bitstream.edit.form.iiifWidth.hint": "The canvas width should usually match the image width.", + "bitstream.edit.form.iiifWidth.hint": "Canvasin leveyden tulee vastata kuvan leveyttä.", + + // "bitstream.edit.form.iiifHeight.label": "IIIF Canvas Height", + "bitstream.edit.form.iiifHeight.label": "IIIF-canvasin korkeus", + + // "bitstream.edit.form.iiifHeight.hint": "The canvas height should usually match the image height.", + "bitstream.edit.form.iiifHeight.hint": "Canvasin korkeuden tulee vastata kuvan korkeutta.", + // "bitstream.edit.notifications.saved.content": "Your changes to this bitstream were saved.", "bitstream.edit.notifications.saved.content": "Muutokset tiedostoon on tallennettu.", @@ -812,7 +1078,65 @@ // "bitstream.edit.title": "Edit bitstream", "bitstream.edit.title": "Muokkaa tiedostoa", + // "bitstream-request-a-copy.alert.canDownload1": "You already have access to this file. If you want to download the file, click ", + "bitstream-request-a-copy.alert.canDownload1": "Sinulla on jo pääsy tähän tiedostoon. Jos haluat ladata tiedoston, napsauta ", + // "bitstream-request-a-copy.alert.canDownload2": "here", + "bitstream-request-a-copy.alert.canDownload2": "tässä", + + // "bitstream-request-a-copy.header": "Request a copy of the file", + "bitstream-request-a-copy.header": "Pyydä tiedostokopiota", + + // "bitstream-request-a-copy.intro": "Enter the following information to request a copy for the following item: ", + "bitstream-request-a-copy.intro": "Syötä seuraavat tiedot pyytääksesi kopiota tietueesta: ", + + // "bitstream-request-a-copy.intro.bitstream.one": "Requesting the following file: ", + "bitstream-request-a-copy.intro.bitstream.one": "Pyydetään seuraavaa tiedostoa: ", + + // "bitstream-request-a-copy.intro.bitstream.all": "Requesting all files. ", + "bitstream-request-a-copy.intro.bitstream.all": "Pyydetään kaikkia tiedostoja. ", + + // "bitstream-request-a-copy.name.label": "Name *", + "bitstream-request-a-copy.name.label": "Nimi *", + + // "bitstream-request-a-copy.name.error": "The name is required", + "bitstream-request-a-copy.name.error": "Nimi on pakollinen tieto", + + // "bitstream-request-a-copy.email.label": "Your e-mail address *", + "bitstream-request-a-copy.email.label": "Sähköpostiosoite *", + + // "bitstream-request-a-copy.email.hint": "This email address is used for sending the file.", + "bitstream-request-a-copy.email.hint": "Tätä sähköpostiosoitetta käytetään tiedostoa lähetettäessä.", + + // "bitstream-request-a-copy.email.error": "Please enter a valid email address.", + "bitstream-request-a-copy.email.error": "Syötä toimiva sähköpostiosoite.", + + // "bitstream-request-a-copy.allfiles.label": "Files", + "bitstream-request-a-copy.allfiles.label": "Tiedostot", + + // "bitstream-request-a-copy.files-all-false.label": "Only the requested file", + "bitstream-request-a-copy.files-all-false.label": "Vain pyydetty tiedosto", + + // "bitstream-request-a-copy.files-all-true.label": "All files (of this item) in restricted access", + "bitstream-request-a-copy.files-all-true.label": "Kaikilla (tämän tietueen) tiedostoilla on rajattu käyttöoikeus", + + // "bitstream-request-a-copy.message.label": "Message", + "bitstream-request-a-copy.message.label": "Viesti", + + // "bitstream-request-a-copy.return": "Back", + "bitstream-request-a-copy.return": "Paluu", + + // "bitstream-request-a-copy.submit": "Request copy", + "bitstream-request-a-copy.submit": "Pyydä kopio", + + // "bitstream-request-a-copy.submit.success": "The item request was submitted successfully.", + "bitstream-request-a-copy.submit.success": "Tietuepyyntö on lähetetty.", + + // "bitstream-request-a-copy.submit.error": "Something went wrong with submitting the item request.", + "bitstream-request-a-copy.submit.error": "Tapahtui virhe lähetettäessä tietuepyyntöä", + + // "browse.back.all-results": "All browse results", + "browse.back.all-results": "Kaikki selaustulokset", // "browse.comcol.by.author": "By Author", "browse.comcol.by.author": "Tekijän mukaan", @@ -823,6 +1147,9 @@ // "browse.comcol.by.subject": "By Subject", "browse.comcol.by.subject": "Asiasanan mukaan", + // "browse.comcol.by.srsc": "By Subject Category", + "browse.comcol.by.srsc": "Aihekategorian mukaan", + // "browse.comcol.by.title": "By Title", "browse.comcol.by.title": "Nimekkeen mukaan", @@ -853,17 +1180,35 @@ // "browse.metadata.subject.breadcrumbs": "Browse by Subject", "browse.metadata.subject.breadcrumbs": "Selaa asiasanan mukaan", + // "browse.metadata.srsc.breadcrumbs": "Browse by Subject Category", + "browse.metadata.srsc.breadcrumbs": "Selaa aihekategorian luokan mukaan", + // "browse.metadata.title.breadcrumbs": "Browse by Title", "browse.metadata.title.breadcrumbs": "Selaa nimekkeen mukaan", + // "pagination.next.button": "Next", + "pagination.next.button": "Seuraava", + + // "pagination.previous.button": "Previous", + "pagination.previous.button": "Edellinen", + + // "pagination.next.button.disabled.tooltip": "No more pages of results", + "pagination.next.button.disabled.tooltip": "Ei enempää tulossivuja", + + // "browse.startsWith": ", starting with {{ startsWith }}", + "browse.startsWith": ", alkaa kirjaimella {{ startsWith }}", + // "browse.startsWith.choose_start": "(Choose start)", "browse.startsWith.choose_start": "(Valitse alku)", // "browse.startsWith.choose_year": "(Choose year)", "browse.startsWith.choose_year": "(Valitse vuosi)", - // "browse.startsWith.jump": "Jump to a point in the index:", - "browse.startsWith.jump": "Hyppää indeksin kohtaan:", + // "browse.startsWith.choose_year.label": "Choose the issue year", + "browse.startsWith.choose_year.label": "Valitse julkaisuvuosi", + + // "browse.startsWith.jump": "Filter results by year or month", + "browse.startsWith.jump": "Suodata tulokset vuoden tai kuukauden mukaan", // "browse.startsWith.months.april": "April", "browse.startsWith.months.april": "Huhtikuu", @@ -895,6 +1240,9 @@ // "browse.startsWith.months.none": "(Choose month)", "browse.startsWith.months.none": "(Valitse kuukausi)", + // "browse.startsWith.months.none.label": "Choose the issue month", + "browse.startsWith.months.none.label": "Valitse julkaisukuukausi", + // "browse.startsWith.months.november": "November", "browse.startsWith.months.november": "Marraskuu", @@ -904,23 +1252,44 @@ // "browse.startsWith.months.september": "September", "browse.startsWith.months.september": "Syyskuu", - // "browse.startsWith.submit": "Go", - "browse.startsWith.submit": "Ok", + // "browse.startsWith.submit": "Browse", + "browse.startsWith.submit": "Selaa", - // "browse.startsWith.type_date": "Or type in a date (year-month):", - "browse.startsWith.type_date": "Tai anna päiväys (vuosi-kuukausi):", + // "browse.startsWith.type_date": "Filter results by date", + "browse.startsWith.type_date": "Suodata tulokset päivämäärän mukaan", - // "browse.startsWith.type_text": "Or enter first few letters:", - "browse.startsWith.type_text": "Tai anna muutama alkukirjain:", + // "browse.startsWith.type_date.label": "Or type in a date (year-month) and click on the Browse button", + "browse.startsWith.type_date.label": "Tai syötä päiväys (vuosi-kuukausi) ja napsauta Selaa-painiketta", - // "browse.title": "Browsing {{ collection }} by {{ field }} {{ value }}", - "browse.title": "Selataan {{ collection }}-kokoelmaa {{ field }}-kentän arvolla {{ value }}", + // "browse.startsWith.type_text": "Filter results by typing the first few letters", + "browse.startsWith.type_text": "Suodata tuloksia antamalla muutama alkukirjain", + // "browse.startsWith.input": "Filter", + "browse.startsWith.input": "Suodata", + + // "browse.taxonomy.button": "Browse", + "browse.taxonomy.button": "Selaa", + + // "browse.title": "Browsing {{ collection }} by {{ field }}{{ startsWith }} {{ value }}", + "browse.title": "Selataan {{ collection }}-kokoelmaa {{ field }}{{ startsWith }}-kentän arvolla {{ value }}", + + // "browse.title.page": "Browsing {{ collection }} by {{ field }} {{ value }}", + "browse.title.page": "Selataan {{ collection }}-kokoelmaa {{ field }}-kentän arvolla {{ value }}", + + // "search.browse.item-back": "Back to Results", + "search.browse.item-back": "Paluu tuloksiin", // "chips.remove": "Remove chip", "chips.remove": "Poista chip", + // "claimed-approved-search-result-list-element.title": "Approved", + "claimed-approved-search-result-list-element.title": "Hyväksytty", + // "claimed-declined-search-result-list-element.title": "Rejected, sent back to submitter", + "claimed-declined-search-result-list-element.title": "Hylätty, lähetetty takaisin tallentajalle", + + // "claimed-declined-task-search-result-list-element.title": "Declined, sent back to Review Manager's workflow", + "claimed-declined-task-search-result-list-element.title": "Kieltäydytty, lähetetty takaisin päätarkastajan työnkulkuun", // "collection.create.head": "Create a Collection", "collection.create.head": "Luo kokoelma", @@ -940,6 +1309,9 @@ // "collection.delete.confirm": "Confirm", "collection.delete.confirm": "Vahvista", + // "collection.delete.processing": "Deleting", + "collection.delete.processing": "Poistetaan", + // "collection.delete.head": "Delete Collection", "collection.delete.head": "Poista kokoelma", @@ -952,8 +1324,6 @@ // "collection.delete.text": "Are you sure you want to delete collection \"{{ dso }}\"", "collection.delete.text": "Haluatko varmasti poistaa kokoelman \"{{ dso }}\"", - - // "collection.edit.delete": "Delete this collection", "collection.edit.delete": "Poista kokoelma", @@ -963,8 +1333,6 @@ // "collection.edit.breadcrumbs": "Edit Collection", "collection.edit.breadcrumbs": "Muokkaa kokoelmaa", - - // "collection.edit.tabs.mapper.head": "Item Mapper", "collection.edit.tabs.mapper.head": "Tietueliitosväline", @@ -1016,13 +1384,20 @@ // "collection.edit.item-mapper.remove": "Remove selected item mappings", "collection.edit.item-mapper.remove": "Poista valitut tietueliitokset", + // "collection.edit.item-mapper.search-form.placeholder": "Search items...", + "collection.edit.item-mapper.search-form.placeholder": "Hae tietueita...", + // "collection.edit.item-mapper.tabs.browse": "Browse mapped items", "collection.edit.item-mapper.tabs.browse": "Selaa liitettyjä tietueita", // "collection.edit.item-mapper.tabs.map": "Map new items", "collection.edit.item-mapper.tabs.map": "Liitä uusia tietueita", + // "collection.edit.logo.delete.title": "Delete logo", + "collection.edit.logo.delete.title": "Poista logo", + // "collection.edit.logo.delete-undo.title": "Undo delete", + "collection.edit.logo.delete-undo.title": "Kumoa poisto", // "collection.edit.logo.label": "Collection logo", "collection.edit.logo.label": "Kokoelman logo", @@ -1045,15 +1420,11 @@ // "collection.edit.logo.upload": "Drop a Collection Logo to upload", "collection.edit.logo.upload": "Pudota kokoelman logo ladattavaksi", - - // "collection.edit.notifications.success": "Successfully edited the Collection", "collection.edit.notifications.success": "Kokoelman muokkaus onnistui", - // "collection.edit.return": "Return", - "collection.edit.return": "Palaa", - - + // "collection.edit.return": "Back", + "collection.edit.return": "Paluu", // "collection.edit.tabs.curate.head": "Curate", "collection.edit.tabs.curate.head": "Kuratoi", @@ -1067,6 +1438,15 @@ // "collection.edit.tabs.authorizations.title": "Collection Edit - Authorizations", "collection.edit.tabs.authorizations.title": "Kokoelman muokkaus - Käyttöoikeudet", + // "collection.edit.item.authorizations.load-bundle-button": "Load more bundles", + "collection.edit.item.authorizations.load-bundle-button": "Lataa lisää nippuja", + + // "collection.edit.item.authorizations.load-more-button": "Load more", + "collection.edit.item.authorizations.load-more-button": "Lataa lisää", + + // "collection.edit.item.authorizations.show-bitstreams-button": "Show bitstream policies for bundle", + "collection.edit.item.authorizations.show-bitstreams-button": "Näytä nipun tiedostokäytännöt", + // "collection.edit.tabs.metadata.head": "Edit Metadata", "collection.edit.tabs.metadata.head": "Muokkaa metadataa", @@ -1115,7 +1495,7 @@ // "collection.edit.tabs.source.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", "collection.edit.tabs.source.notifications.discarded.content": "Muutokset hylätty. Valitse 'Kumoa' palauttaaksesi muutokset", - // "collection.edit.tabs.source.notifications.discarded.title": "Changed discarded", + // "collection.edit.tabs.source.notifications.discarded.title": "Changes discarded", "collection.edit.tabs.source.notifications.discarded.title": "Muutokset hylätty", // "collection.edit.tabs.source.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", @@ -1133,8 +1513,6 @@ // "collection.edit.tabs.source.title": "Collection Edit - Content Source", "collection.edit.tabs.source.title": "Kokoelman muokkaus - Sisältölähde", - - // "collection.edit.template.add-button": "Add", "collection.edit.template.add-button": "Lisää", @@ -1150,12 +1528,18 @@ // "collection.edit.template.edit-button": "Edit", "collection.edit.template.edit-button": "Muokkaa", + // "collection.edit.template.error": "An error occurred retrieving the template item", + "collection.edit.template.error": "Virhe noudettaessa mallitietuetta", + // "collection.edit.template.head": "Edit Template Item for Collection \"{{ collection }}\"", "collection.edit.template.head": "Muokkaa kokoelman \"{{ collection }}\" mallitietuetta", // "collection.edit.template.label": "Template item", "collection.edit.template.label": "Mallitietue", + // "collection.edit.template.loading": "Loading template item...", + "collection.edit.template.loading": "Ladataan mallitietuetta...", + // "collection.edit.template.notifications.delete.error": "Failed to delete the item template", "collection.edit.template.notifications.delete.error": "Tietueen mallipohjan poisto epäonnistui", @@ -1165,8 +1549,6 @@ // "collection.edit.template.title": "Edit Template Item", "collection.edit.template.title": "Muokkaa mallitietuetta", - - // "collection.form.abstract": "Short Description", "collection.form.abstract": "Lyhyt kuvaus", @@ -1191,13 +1573,12 @@ // "collection.form.title": "Name", "collection.form.title": "Nimi", - + // "collection.form.entityType": "Entity Type", + "collection.form.entityType": "Entiteettityyppi", // "collection.listelement.badge": "Collection", "collection.listelement.badge": "Kokoelma", - - // "collection.page.browse.recent.head": "Recent Submissions", "collection.page.browse.recent.head": "Viimeksi lisätyt", @@ -1216,8 +1597,6 @@ // "collection.page.news": "News", "collection.page.news": "Uutiset", - - // "collection.select.confirm": "Confirm selected", "collection.select.confirm": "Vahvista valinta", @@ -1227,7 +1606,74 @@ // "collection.select.table.title": "Title", "collection.select.table.title": "Nimeke", + // "collection.source.controls.head": "Harvest Controls", + "collection.source.controls.head": "Harvointikontrollit", + // "collection.source.controls.test.submit.error": "Something went wrong with initiating the testing of the settings", + "collection.source.controls.test.submit.error": "Virhe asetusten testaamisen valmistelussa", + + // "collection.source.controls.test.failed": "The script to test the settings has failed", + "collection.source.controls.test.failed": "Asetusten testausskripti epäonnistui", + + // "collection.source.controls.test.completed": "The script to test the settings has successfully finished", + "collection.source.controls.test.completed": "Asetusten testausskripti suoritettu", + + // "collection.source.controls.test.submit": "Test configuration", + "collection.source.controls.test.submit": "Testikonfiguraatio", + + // "collection.source.controls.test.running": "Testing configuration...", + "collection.source.controls.test.running": "Testataan konfiguraatiota...", + + // "collection.source.controls.import.submit.success": "The import has been successfully initiated", + "collection.source.controls.import.submit.success": "Importointi valmisteltu", + + // "collection.source.controls.import.submit.error": "Something went wrong with initiating the import", + "collection.source.controls.import.submit.error": "Virhe importoinnin valmistelussa", + + // "collection.source.controls.import.submit": "Import now", + "collection.source.controls.import.submit": "Importoi nyt", + + // "collection.source.controls.import.running": "Importing...", + "collection.source.controls.import.running": "Importoidaan...", + + // "collection.source.controls.import.failed": "An error occurred during the import", + "collection.source.controls.import.failed": "Virhe importoinnissa", + + // "collection.source.controls.import.completed": "The import completed", + "collection.source.controls.import.completed": "Importointi valmis", + + // "collection.source.controls.reset.submit.success": "The reset and reimport has been successfully initiated", + "collection.source.controls.reset.submit.success": "Nollaus ja uudelleenimportointi valmisteltu", + + // "collection.source.controls.reset.submit.error": "Something went wrong with initiating the reset and reimport", + "collection.source.controls.reset.submit.error": "Virhe nollauksen ja uudelleenimportoinnin valmistelussa", + + // "collection.source.controls.reset.failed": "An error occurred during the reset and reimport", + "collection.source.controls.reset.failed": "Virhe nollauksessa ja uudelleenimportoinnissa", + + // "collection.source.controls.reset.completed": "The reset and reimport completed", + "collection.source.controls.reset.completed": "Nollaus ja uudelleenimportointi valmis", + + // "collection.source.controls.reset.submit": "Reset and reimport", + "collection.source.controls.reset.submit": "Nollaus ja uudelleenimportointi", + + // "collection.source.controls.reset.running": "Resetting and reimporting...", + "collection.source.controls.reset.running": "Nollataan ja uudelleenimportoidaan...", + + // "collection.source.controls.harvest.status": "Harvest status:", + "collection.source.controls.harvest.status": "Harvestoinnin tila:", + + // "collection.source.controls.harvest.start": "Harvest start time:", + "collection.source.controls.harvest.start": "Harvestoinnin aloitusaika:", + + // "collection.source.controls.harvest.last": "Last time harvested:", + "collection.source.controls.harvest.last": "Harvestoitu viimeksi::", + + // "collection.source.controls.harvest.message": "Harvest info:", + "collection.source.controls.harvest.message": "Harvestointitiedot:", + + // "collection.source.controls.harvest.no-information": "N/A", + "collection.source.controls.harvest.no-information": "Ei saatavilla", // "collection.source.update.notifications.error.content": "The provided settings have been tested and didn't work.", "collection.source.update.notifications.error.content": "Annetut asetukset on testattu. Ne eivät toimi.", @@ -1235,10 +1681,11 @@ // "collection.source.update.notifications.error.title": "Server Error", "collection.source.update.notifications.error.title": "Palvelinvirhe", + // "communityList.breadcrumbs": "Community List", + "communityList.breadcrumbs": "Yhteisöluettelo", - - // "communityList.tabTitle": "DSpace - Community List", - "communityList.tabTitle": "DSpace - Yhteisöluettelo", + // "communityList.tabTitle": "Community List", + "communityList.tabTitle": "Yhteisöluettelo", // "communityList.title": "List of Communities", "communityList.title": "Luettelo yhteisöistä", @@ -1246,8 +1693,6 @@ // "communityList.showMore": "Show More", "communityList.showMore": "Näytä lisää", - - // "community.create.head": "Create a Community", "community.create.head": "Luo yhteisö", @@ -1266,6 +1711,9 @@ // "community.delete.confirm": "Confirm", "community.delete.confirm": "Vahvista", + // "community.delete.processing": "Deleting...", + "community.delete.processing": "Poistetaan...", + // "community.delete.head": "Delete Community", "community.delete.head": "Poista yhteisö", @@ -1287,6 +1735,11 @@ // "community.edit.breadcrumbs": "Edit Community", "community.edit.breadcrumbs": "Muokkaa yhteisöä", + // "community.edit.logo.delete.title": "Delete logo", + "community.edit.logo.delete.title": "Poista logo", + + // "community.edit.logo.delete-undo.title": "Undo delete", + "community.edit.logo.delete-undo.title": "Kumoa poisto", // "community.edit.logo.label": "Community logo", "community.edit.logo.label": "Yhteisön logo", @@ -1309,8 +1762,6 @@ // "community.edit.logo.upload": "Drop a Community Logo to upload", "community.edit.logo.upload": "Pudota yhteisön logo ladattavaksi", - - // "community.edit.notifications.success": "Successfully edited the Community", "community.edit.notifications.success": "Yhteisön muokkaus onnistui", @@ -1320,10 +1771,8 @@ // "community.edit.notifications.error": "An error occured while editing the Community", "community.edit.notifications.error": "Virhe muokattaessa yhteisöä", - // "community.edit.return": "Return", - "community.edit.return": "Palaa", - - + // "community.edit.return": "Back", + "community.edit.return": "Paluu", // "community.edit.tabs.curate.head": "Curate", "community.edit.tabs.curate.head": "Kuratoi", @@ -1349,25 +1798,26 @@ // "community.edit.tabs.authorizations.title": "Community Edit - Authorizations", "community.edit.tabs.authorizations.title": "Yhteisön muokkaus - Käyttöoikeudet", - - // "community.listelement.badge": "Community", "community.listelement.badge": "Yhteisö", - - // "comcol-role.edit.no-group": "None", "comcol-role.edit.no-group": "Ei mitään", // "comcol-role.edit.create": "Create", "comcol-role.edit.create": "Luo", + // "comcol-role.edit.create.error.title": "Failed to create a group for the '{{ role }}' role", + "comcol-role.edit.create.error.title": "Ryhmän luonti '{{ role }}'-roolille epäonnistui", + // "comcol-role.edit.restrict": "Restrict", "comcol-role.edit.restrict": "Rajoita", // "comcol-role.edit.delete": "Delete", "comcol-role.edit.delete": "Poista", + // "comcol-role.edit.delete.error.title": "Failed to delete the '{{ role }}' role's group", + "comcol-role.edit.delete.error.title": "'{{ role }}'-roolin ryhmän poisto epäonnistui", // "comcol-role.edit.community-admin.name": "Administrators", "comcol-role.edit.community-admin.name": "Ylläpitäjät", @@ -1375,21 +1825,18 @@ // "comcol-role.edit.collection-admin.name": "Administrators", "comcol-role.edit.collection-admin.name": "Ylläpitäjät", - // "comcol-role.edit.community-admin.description": "Community administrators can create sub-communities or collections, and manage or assign management for those sub-communities or collections. In addition, they decide who can submit items to any sub-collections, edit item metadata (after submission), and add (map) existing items from other collections (subject to authorization).", "comcol-role.edit.community-admin.description": "Yhteisön ylläpitäjät voivat luoda alayhteisöjä tai kokoelmia ja hallita niitä sekä myöntää niihin hallintaoikeuksia. He päättävät, kuka saa tallentaa tietueita alakokoelmiin, muokata metadataa (tallennuksen jälkeen) ja lisätä (liittää) olemassa olevia tietueita muista kokoelmista (käyttöoikeuksien puitteissa).", // "comcol-role.edit.collection-admin.description": "Collection administrators decide who can submit items to the collection, edit item metadata (after submission), and add (map) existing items from other collections to this collection (subject to authorization for that collection).", "comcol-role.edit.collection-admin.description": "Kokoelman ylläpitäjät päättävät, kuka saa tallentaa tietueita alakokoelmiin, muokata metadataa (tallennuksen jälkeen) ja lisätä (liittää) olemassa olevia tietueita muista kokoelmista (k.o. kokoelman käyttöoikeuksien puitteissa).", - // "comcol-role.edit.submitters.name": "Submitters", "comcol-role.edit.submitters.name": "Tallentajat", // "comcol-role.edit.submitters.description": "The E-People and Groups that have permission to submit new items to this collection.", "comcol-role.edit.submitters.description": "Käyttäjät ja ryhmät, joilla on oikeus tallentaa uusia tietueita tähän kokoelmaan", - // "comcol-role.edit.item_read.name": "Default item read access", "comcol-role.edit.item_read.name": "Tietueen oletuslukuoikeus", @@ -1399,7 +1846,6 @@ // "comcol-role.edit.item_read.anonymous-group": "Default read for incoming items is currently set to Anonymous.", "comcol-role.edit.item_read.anonymous-group": "Uusien tietuiden oletuslukuoikeus on tällä hetkellä Anonymous.", - // "comcol-role.edit.bitstream_read.name": "Default bitstream read access", "comcol-role.edit.bitstream_read.name": "Tiedostojen oletuslukuoikeus", @@ -1409,28 +1855,29 @@ // "comcol-role.edit.bitstream_read.anonymous-group": "Default read for incoming bitstreams is currently set to Anonymous.", "comcol-role.edit.bitstream_read.anonymous-group": "Uusien tiedostojen oletuslukuoikeus on tällä hetkellä Anonymous.", - // "comcol-role.edit.editor.name": "Editors", "comcol-role.edit.editor.name": "Muokkaajat", // "comcol-role.edit.editor.description": "Editors are able to edit the metadata of incoming submissions, and then accept or reject them.", "comcol-role.edit.editor.description": "Muokkaajat voivat muokata uusien tallennusten metadataa sekä hyväksyä tai hylätä tallennukset.", - // "comcol-role.edit.finaleditor.name": "Final editors", "comcol-role.edit.finaleditor.name": "Loppumuokkaajat", // "comcol-role.edit.finaleditor.description": "Final editors are able to edit the metadata of incoming submissions, but will not be able to reject them.", "comcol-role.edit.finaleditor.description": "Loppumuokkaajat voivat muokata uusien tallennusten metadataa. He eivät voi hylätä tallennuksia.", - // "comcol-role.edit.reviewer.name": "Reviewers", "comcol-role.edit.reviewer.name": "Tarkastajat", // "comcol-role.edit.reviewer.description": "Reviewers are able to accept or reject incoming submissions. However, they are not able to edit the submission's metadata.", "comcol-role.edit.reviewer.description": "Tarkastajat voivat hyväksyä tai hylätä uudet tallennukset. He eivät voi muokata tallennusten metadataa.", + // "comcol-role.edit.scorereviewers.name": "Score Reviewers", + "comcol-role.edit.scorereviewers.name": "Arvosanatarkastajat", + // "comcol-role.edit.scorereviewers.description": "Reviewers are able to give a score to incoming submissions, this will define whether the submission will be rejected or not.", + "comcol-role.edit.scorereviewers.description": "Tarkastajat voivat antaa tallennettaville julkaisuille arvosanan, joka määrittää, hylätäänkö vai hyväksytäänkö tallennus.", // "community.form.abstract": "Short Description", "community.form.abstract": "Lyhyt kuvaus", @@ -1471,8 +1918,6 @@ // "community.sub-community-list.head": "Communities of this Community", "community.sub-community-list.head": "Yhteisön alayhteisöt", - - // "cookies.consent.accept-all": "Accept all", "cookies.consent.accept-all": "Hyväksy kaikki", @@ -1494,6 +1939,12 @@ // "cookies.consent.app.required.title": "(always required)", "cookies.consent.app.required.title": "(aina pakollinen)", + // "cookies.consent.app.disable-all.description": "Use this switch to enable or disable all services.", + "cookies.consent.app.disable-all.description": "Tästä kytkimestä voit ottaa kaikki palvelut käyttöön tai poistaa ne käytöstä", + + // "cookies.consent.app.disable-all.title": "Enable or disable all services", + "cookies.consent.app.disable-all.title": "Ota käyttöön tai poista käytöstä kaikki palvelut", + // "cookies.consent.update": "There were changes since your last visit, please update your consent.", "cookies.consent.update": "Viime käyntisi jälkeen on tehty muutoksia. Ole hyvä ja päivitä suostumuksesi.", @@ -1503,9 +1954,21 @@ // "cookies.consent.decline": "Decline", "cookies.consent.decline": "Kieltäydy", + // "cookies.consent.ok": "That's ok", + "cookies.consent.ok": "OK", + + // "cookies.consent.save": "Save", + "cookies.consent.save": "Tallenna", + + // "cookies.consent.content-notice.title": "Cookie Consent", + "cookies.consent.content-notice.title": "Evästeiden hyväksyntä", + // "cookies.consent.content-notice.description": "We collect and process your personal information for the following purposes: Authentication, Preferences, Acknowledgement and Statistics.
    To learn more, please read our {privacyPolicy}.", "cookies.consent.content-notice.description": "Keräämme ja käsittelemme tietojasi seuraaviin tarkoituksiin: todentaminen, asetukset, kuittaus ja tilastot.
    Lisätietoa saat lukemalla tämän: {privacyPolicy}.", + // "cookies.consent.content-notice.description.no-privacy": "We collect and process your personal information for the following purposes: Authentication, Preferences, Acknowledgement and Statistics.", + "cookies.consent.content-notice.description.no-privacy": "Keräämme ja käsittelemme tietojasi seuraaviin tarkoituksiin: todentaminen, asetukset, kuittaus ja tilastot.", + // "cookies.consent.content-notice.learnMore": "Customize", "cookies.consent.content-notice.learnMore": "Räätälöi", @@ -1521,7 +1984,11 @@ // "cookies.consent.content-modal.title": "Information that we collect", "cookies.consent.content-modal.title": "Keräämämme tieto", + // "cookies.consent.content-modal.services": "services", + "cookies.consent.content-modal.services": "palvelut", + // "cookies.consent.content-modal.service": "service", + "cookies.consent.content-modal.service": "palvelu", // "cookies.consent.app.title.authentication": "Authentication", "cookies.consent.app.title.authentication": "Todentaminen", @@ -1529,30 +1996,29 @@ // "cookies.consent.app.description.authentication": "Required for signing you in", "cookies.consent.app.description.authentication": "Vaadittu kirjautumista varten", - // "cookies.consent.app.title.preferences": "Preferences", "cookies.consent.app.title.preferences": "Asetukset", // "cookies.consent.app.description.preferences": "Required for saving your preferences", "cookies.consent.app.description.preferences": "Vaadittu asetustesi tallentamista varten", - - // "cookies.consent.app.title.acknowledgement": "Acknowledgement", "cookies.consent.app.title.acknowledgement": "Kuittaus", // "cookies.consent.app.description.acknowledgement": "Required for saving your acknowledgements and consents", "cookies.consent.app.description.acknowledgement": "Vaadittu kuittaustesi ja hyväksyntäsi tallentamista varten", - - // "cookies.consent.app.title.google-analytics": "Google Analytics", "cookies.consent.app.title.google-analytics": "Google Analytics", // "cookies.consent.app.description.google-analytics": "Allows us to track statistical data", "cookies.consent.app.description.google-analytics": "Sallii tilastollisen datan seurannan", + // "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", + "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", + // "cookies.consent.app.description.google-recaptcha": "We use google reCAPTCHA service during registration and password recovery", + "cookies.consent.app.description.google-recaptcha": "Käytämme Googlen reCAPTCHA-palvelua rekisteröinnin ja salasanan palauttamisen yhteydessä.", // "cookies.consent.purpose.functional": "Functional", "cookies.consent.purpose.functional": "Toiminnallinen", @@ -1560,8 +2026,16 @@ // "cookies.consent.purpose.statistical": "Statistical", "cookies.consent.purpose.statistical": "Tilastollinen", + // "cookies.consent.purpose.registration-password-recovery": "Registration and Password recovery", + "cookies.consent.purpose.registration-password-recovery": "Rekisteröinti ja salasanan palauttaminen", - // "curation-task.task.checklinks.label": "Check Links in Metadata", + // "cookies.consent.purpose.sharing": "Sharing", + "cookies.consent.purpose.sharing": "Jakaminen", + + // "curation-task.task.citationpage.label": "Generate Citation Page", + "curation-task.task.citationpage.label": "Luo viittaussivu", + + // "curation-task.task.checklinks.label": "Check Links in Metadata", "curation-task.task.checklinks.label": "Tarkista metadatan linkit", // "curation-task.task.noop.label": "NOOP", @@ -1579,7 +2053,8 @@ // "curation-task.task.vscan.label": "Virus Scan", "curation-task.task.vscan.label": "Virusskannaus", - + // "curation-task.task.register-doi.label": "Register DOI", + "curation-task.task.register-doi.label": "Rekisteröi DOI", // "curation.form.task-select.label": "Task:", "curation.form.task-select.label": "Tehtävä:", @@ -1599,13 +2074,38 @@ // "curation.form.submit.error.content": "An error occured when trying to start the curation task.", "curation.form.submit.error.content": "Virhe kuratointitehtävää aloitettaessa.", + // "curation.form.submit.error.invalid-handle": "Couldn't determine the handle for this object", + "curation.form.submit.error.invalid-handle": "Kohteen handlea ei voitu määrittää", + // "curation.form.handle.label": "Handle:", "curation.form.handle.label": "Handle:", // "curation.form.handle.hint": "Hint: Enter [your-handle-prefix]/0 to run a task across entire site (not all tasks may support this capability)", "curation.form.handle.hint": "Vinkki: Syötä [oma-handle-prefix]/0 suorittaaksesi tehtävän koko sivustolla (kaikki tehtävät eivät tue tätä toimintoa)", + // "deny-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I regret to inform you that it's not possible to send you a copy of the file(s) you have requested, concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", + "deny-request-copy.email.message": "Hyvä {{ recipientName }},\nValitettavasti emme voi lähettää kopiota pyytämistänne tiedostoista (dokumentti \"{{ itemUrl }}\" ({{ itemName }})), joiden tekijä olen. Ystävällisin terveisin \n{{ authorName }} <{{ authorEmail }}>", + // "deny-request-copy.email.subject": "Request copy of document", + "deny-request-copy.email.subject": "Dokumenttikopion pyyntö", + + // "deny-request-copy.error": "An error occurred", + "deny-request-copy.error": "Tapahtui virhe", + + // "deny-request-copy.header": "Deny document copy request", + "deny-request-copy.header": "Epää dokumenttikopion pyyntö", + + // "deny-request-copy.intro": "This message will be sent to the applicant of the request", + "deny-request-copy.intro": "Tämä viesti lähetetään pyynnön esittäjälle", + + // "deny-request-copy.success": "Successfully denied item request", + "deny-request-copy.success": "Tietuepyyntö evätty", + + // "dso.name.untitled": "Untitled", + "dso.name.untitled": "Nimetön", + + // "dso.name.unnamed": "Unnamed", + "dso.name.unnamed": "Nimeämätön", // "dso-selector.create.collection.head": "New collection", "dso-selector.create.collection.head": "Uusi kokoelma", @@ -1616,6 +2116,9 @@ // "dso-selector.create.community.head": "New community", "zxzcommunity.head": "Uusi yhteisö", + // "dso-selector.create.community.or-divider": "or", + "dso-selector.create.community.or-divider": "tai", + // "dso-selector.create.community.sub-level": "Create a new community in", "dso-selector.create.community.sub-level": "Luo uusi yhteisö tänne: ", @@ -1640,16 +2143,92 @@ // "dso-selector.edit.item.head": "Edit item", "dso-selector.edit.item.head": "Muokkaa tietuetta", + // "dso-selector.error.title": "An error occurred searching for a {{ type }}", + "dso-selector.error.title": "Virhe etsittäessä tyyppiä {{ type }}", + // "dso-selector.export-metadata.dspaceobject.head": "Export metadata from", "dso-selector.export-metadata.dspaceobject.head": "Eksportoi metadata täältä: ", + // "dso-selector.export-batch.dspaceobject.head": "Export Batch (ZIP) from", + "dso-selector.export-batch.dspaceobject.head": "Eksportoi erä (ZIP): ", + + // "dso-selector.import-batch.dspaceobject.head": "Import batch from", + "dso-selector.import-batch.dspaceobject.head": "Importoi erä: ", + // "dso-selector.no-results": "No {{ type }} found", "dso-selector.no-results": "Ei {{ type }}-tyyppiä.", // "dso-selector.placeholder": "Search for a {{ type }}", "dso-selector.placeholder": "Hae {{ type }}-tyyppiä", + // "dso-selector.select.collection.head": "Select a collection", + "dso-selector.select.collection.head": "Valitse kokoelma", + // "dso-selector.set-scope.community.head": "Select a search scope", + "dso-selector.set-scope.community.head": "Valitse hakualue", + + // "dso-selector.set-scope.community.button": "Search all of DSpace", + "dso-selector.set-scope.community.button": "Hae koko julkaisuarkistosta", + + // "dso-selector.set-scope.community.or-divider": "or", + "dso-selector.set-scope.community.or-divider": "tai", + + // "dso-selector.set-scope.community.input-header": "Search for a community or collection", + "dso-selector.set-scope.community.input-header": "Hae yhteisöä tai kokoelmaa", + + // "dso-selector.claim.item.head": "Profile tips", + "dso-selector.claim.item.head": "Profiilivinkkejä", + + // "dso-selector.claim.item.body": "These are existing profiles that may be related to you. If you recognize yourself in one of these profiles, select it and on the detail page, among the options, choose to claim it. Otherwise you can create a new profile from scratch using the button below.", + "dso-selector.claim.item.body": "Nämä ovat olemassa olevia profiileja, jotka saattavat liittyä sinuun. Jos tunnistat jonkin näistä profiileista omaksesi, valitse se ja valitse tarkentavan sivun vaihtoehdoista, että otat sen itsellesi. Muussa tapauksessa voit luoda uuden profiilin käyttämällä alla olevaa painiketta.", + + // "dso-selector.claim.item.not-mine-label": "None of these are mine", + "dso-selector.claim.item.not-mine-label": "Mikään näistä ei ole minun", + + // "dso-selector.claim.item.create-from-scratch": "Create a new one", + "dso-selector.claim.item.create-from-scratch": "Luo uusi", + + // "dso-selector.results-could-not-be-retrieved": "Something went wrong, please refresh again ↻", + "dso-selector.results-could-not-be-retrieved": "Tapahtui virhe, päivitä uudelleen ↻", + + // "supervision-group-selector.header": "Supervision Group Selector", + "supervision-group-selector.header": "Ohjausryhmän valitsin", + + // "supervision-group-selector.select.type-of-order.label": "Select a type of Order", + "supervision-group-selector.select.type-of-order.label": "Valitse tilauksen tyyppi", + + // "supervision-group-selector.select.type-of-order.option.none": "NONE", + "supervision-group-selector.select.type-of-order.option.none": "EI MITÄÄN", + + // "supervision-group-selector.select.type-of-order.option.editor": "EDITOR", + "supervision-group-selector.select.type-of-order.option.editor": "MUOKKAAJA", + + // "supervision-group-selector.select.type-of-order.option.observer": "OBSERVER", + "supervision-group-selector.select.type-of-order.option.observer": "KATSELIJA", + + // "supervision-group-selector.select.group.label": "Select a Group", + "supervision-group-selector.select.group.label": "Valitse ryhmä", + + // "supervision-group-selector.button.cancel": "Cancel", + "supervision-group-selector.button.cancel": "Peruuta", + + // "supervision-group-selector.button.save": "Save", + "supervision-group-selector.button.save": "Tallenna", + + // "supervision-group-selector.select.type-of-order.error": "Please select a type of order", + "supervision-group-selector.select.type-of-order.error": "Valitse tilauksen tyyppi", + + // "supervision-group-selector.select.group.error": "Please select a group", + "supervision-group-selector.select.group.error": "Valitse ryhmä", + + // "supervision-group-selector.notification.create.success.title": "Successfully created supervision order for group {{ name }}", + "supervision-group-selector.notification.create.success.title": "Ohjausmääräys luotu {{ name }}-ryhmälle", + + // "supervision-group-selector.notification.create.failure.title": "Error", + "supervision-group-selector.notification.create.failure.title": "Virhe", + + // "supervision-group-selector.notification.create.already-existing": "A supervision order already exists on this item for selected group", + "supervision-group-selector.notification.create.already-existing": "Tietueelle on jo ohjausmääräys valitulle ryhmälle", // "confirmation-modal.export-metadata.header": "Export metadata for {{ dsoName }}", "confirmation-modal.export-metadata.header": "Eksportoi {{ dsoName }}:n metadata", @@ -1663,11 +2242,23 @@ // "confirmation-modal.export-metadata.confirm": "Export", "confirmation-modal.export-metadata.confirm": "Eksportoi", + // "confirmation-modal.export-batch.header": "Export batch (ZIP) for {{ dsoName }}", + "confirmation-modal.export-batch.header": "Exportoi erä (ZIP) {{ dsoName }}", + + // "confirmation-modal.export-batch.info": "Are you sure you want to export batch (ZIP) for {{ dsoName }}", + "confirmation-modal.export-batch.info": "Haluatko varmasti eksportoida erän (ZIP) {{ dsoName }}?", + + // "confirmation-modal.export-batch.cancel": "Cancel", + "confirmation-modal.export-batch.cancel": "Peruuta", + + // "confirmation-modal.export-batch.confirm": "Export", + "confirmation-modal.export-batch.confirm": "Eksportoi", + // "confirmation-modal.delete-eperson.header": "Delete EPerson \"{{ dsoName }}\"", "confirmation-modal.delete-eperson.header": "Poista käyttäjä \"{{ dsoName }}\"", // "confirmation-modal.delete-eperson.info": "Are you sure you want to delete EPerson \"{{ dsoName }}\"", - "confirmation-modal.delete-eperson.info": "Haluatko varmasti poistaa käyttäjän \"{{ dsoName }}\"", + "confirmation-modal.delete-eperson.info": "Haluatko varmasti poistaa käyttäjän \"{{ dsoName }}\"?", // "confirmation-modal.delete-eperson.cancel": "Cancel", "confirmation-modal.delete-eperson.cancel": "Peruuta", @@ -1675,6 +2266,29 @@ // "confirmation-modal.delete-eperson.confirm": "Delete", "confirmation-modal.delete-eperson.confirm": "Poista", + // "confirmation-modal.delete-profile.header": "Delete Profile", + "confirmation-modal.delete-profile.header": "Poista profiili", + + // "confirmation-modal.delete-profile.info": "Are you sure you want to delete your profile", + "confirmation-modal.delete-profile.info": "Haluatko varmasti poistaa profiilisi?", + + // "confirmation-modal.delete-profile.cancel": "Cancel", + "confirmation-modal.delete-profile.cancel": "Peruuta", + + // "confirmation-modal.delete-profile.confirm": "Delete", + "confirmation-modal.delete-profile.confirm": "Poista", + + // "confirmation-modal.delete-subscription.header": "Delete Subscription", + "confirmation-modal.delete-subscription.header": "Poista tilaus", + + // "confirmation-modal.delete-subscription.info": "Are you sure you want to delete subscription for \"{{ dsoName }}\"", + "confirmation-modal.delete-subscription.info": "Haluatko varmasti poistaa tilauksen: \"{{ dsoName }}\"", + + // "confirmation-modal.delete-subscription.cancel": "Cancel", + "confirmation-modal.delete-subscription.cancel": "Peruuta", + + // "confirmation-modal.delete-subscription.confirm": "Delete", + "confirmation-modal.delete-subscription.confirm": "Poista", // "error.bitstream": "Error fetching bitstream", "error.bitstream": "Virhe tiedostoa noudettaessa", @@ -1712,6 +2326,9 @@ // "error.search-results": "Error fetching search results", "error.search-results": "Virhe hakutuloksia noudettaessa", + // "error.invalid-search-query": "Search query is not valid. Please check Solr query syntax best practices for further information about this error.", + "error.invalid-search-query": "Hakulauseke on virheellinen. Tarkista Solr-kyselysyntaksi ja sieltä parhaat käytännöt saadaksesi lisätietoja.", + // "error.sub-collections": "Error fetching sub-collections", "error.sub-collections": "Virhe alakokoelmia noudettaessa", @@ -1733,13 +2350,45 @@ // "error.validation.filerequired": "The file upload is mandatory", "error.validation.filerequired": "Tiedoston lataus on pakollinen", + // "error.validation.required": "This field is required", + "error.validation.required": "Kenttä on pakollinen", + // "error.validation.NotValidEmail": "This E-mail is not a valid email", + "error.validation.NotValidEmail": "Sähköpostiosoite ei ole toimiva sähköpostiosoite.", + + // "error.validation.emailTaken": "This E-mail is already taken", + "error.validation.emailTaken": "Sähköpostiosoite on jo käytössä", + + // "error.validation.groupExists": "This group already exists", + "error.validation.groupExists": "Ryhmä on jo olemassa", + + // "error.validation.metadata.name.invalid-pattern": "This field cannot contain dots, commas or spaces. Please use the Element & Qualifier fields instead", + "error.validation.metadata.name.invalid-pattern": "Kenttään ei voi syöttää pisteitä, pilkkuja tai välilyöntejä. Käytä tämän kentän sijasta Elementti- ja Tarkenne-kenttiä.", + + // "error.validation.metadata.name.max-length": "This field may not contain more than 32 characters", + "error.validation.metadata.name.max-length": "Kenttään voi laittaa vain 32 merkkiä", + + // "error.validation.metadata.namespace.max-length": "This field may not contain more than 256 characters", + "error.validation.metadata.namespace.max-length": "Kenttään voi laittaa vain 256 merkkiä", + + // "error.validation.metadata.element.invalid-pattern": "This field cannot contain dots, commas or spaces. Please use the Qualifier field instead", + "error.validation.metadata.element.invalid-pattern": "Kenttään ei voi syöttää pisteitä, pilkkuja tai välilyöntejä. Käytä tämän kentän sijasta Elementti- ja Tarkenne-kenttiä.", + + // "error.validation.metadata.element.max-length": "This field may not contain more than 64 characters", + "error.validation.metadata.element.max-length": "Kenttään voi laittaa vain 64 merkkiä", + + // "error.validation.metadata.qualifier.invalid-pattern": "This field cannot contain dots, commas or spaces", + "error.validation.metadata.qualifier.invalid-pattern": "Kenttään ei voi syöttää pisteitä, pilkkuja tai välilyöntejä", + + // "error.validation.metadata.qualifier.max-length": "This field may not contain more than 64 characters", + "error.validation.metadata.qualifier.max-length": "Kenttään voi laittaa vain 64 merkkiä", + + // "feed.description": "Syndication feed", + "feed.description": "Jakelusyöte", // "file-section.error.header": "Error obtaining files for this item", "file-section.error.header": "Virhe tietueen tiedostoja noudettaessa", - - // "footer.copyright": "copyright © 2002-{{ year }}", "footer.copyright": "tekijänoikeus © 2002-{{ year }}", @@ -1755,16 +2404,17 @@ // "footer.link.privacy-policy": "Privacy policy", "footer.link.privacy-policy": "Yksilönsuoja", - // "footer.link.end-user-agreement":"End User Agreement", - "footer.link.end-user-agreement": "Käyttöehdot", - + // "footer.link.end-user-agreement": "End User Agreement", + "footer.link.end-user-agreement": "Käyttöoikeussopimus", + // "footer.link.feedback": "Send Feedback", + "footer.link.feedback": "Lähetä palautetta", // "forgot-email.form.header": "Forgot Password", "forgot-email.form.header": "Unohtunut salasana", - // "forgot-email.form.info": "Enter Register an account to subscribe to collections for email updates, and submit new items to DSpace.", - "forgot-email.form.info": "Rekisteröi käyttäjätili voidaksesi tilata sähköposti-ilmoituksia kokoelmien päivityksistä ja lisätä uusia tietueita julkaisuarkistoon.", + // "forgot-email.form.info": "Enter the email address associated with the account.", + "forgot-email.form.info": "Syötä tiliin liittyvä sähköpostiosoite.", // "forgot-email.form.email": "Email Address *", "forgot-email.form.email": "Sähköpostiosoite *", @@ -1772,28 +2422,26 @@ // "forgot-email.form.email.error.required": "Please fill in an email address", "forgot-email.form.email.error.required": "Anna sähköpostiosoite", - // "forgot-email.form.email.error.pattern": "Please fill in a valid email address", - "forgot-email.form.email.error.pattern": "Anna oikea sähköpostiosoite", + // "forgot-email.form.email.error.not-email-form": "Please fill in a valid email address", + "forgot-email.form.email.error.not-email-form": "Anna toimiva sähköpostiosoite", - // "forgot-email.form.email.hint": "This address will be verified and used as your login name.", - "forgot-email.form.email.hint": "Osoite varmistetaan, ja se toimii käyttäjätunnuksenasi kirjautumisessa.", + // "forgot-email.form.email.hint": "An email will be sent to this address with a further instructions.", + "forgot-email.form.email.hint": "Sähköpostiosoitteeseen lähetetään viesti, jossa on lisäohjeita.", - // "forgot-email.form.submit": "Submit", - "forgot-email.form.submit": "Lähetä", + // "forgot-email.form.submit": "Reset password", + "forgot-email.form.submit": "Nollaa salasana", - // "forgot-email.form.success.head": "Verification email sent", - "forgot-email.form.success.head": "Varmistusviesti lähetetty", + // "forgot-email.form.success.head": "Password reset email sent", + "forgot-email.form.success.head": "Salasanan nollausviesti lähetetty", // "forgot-email.form.success.content": "An email has been sent to {{ email }} containing a special URL and further instructions.", "forgot-email.form.success.content": "Viesti on lähetetty osoitteeseen {{ email }}. Viestissä on URL-osoite ja lisäohjeita.", - // "forgot-email.form.error.head": "Error when trying to register email", - "forgot-email.form.error.head": "Virhe sähköpostiosoitetta rekisteröitäessä", - - // "forgot-email.form.error.content": "An error occured when registering the following email address: {{ email }}", - "forgot-email.form.error.content": "Virhe rekisteröitäessä tätä sähköpostiosoitetta: {{ email }}", - + // "forgot-email.form.error.head": "Error when trying to reset password", + "forgot-email.form.error.head": "Virhe salasanaa nollattaessa", + // "forgot-email.form.error.content": "An error occured when attempting to reset the password for the account associated with the following email address: {{ email }}", + "forgot-email.form.error.content": "Virhe nollattaessa tähän sähköpostiosoitteeseen liittyvän tilin salasanaa {{ email }}", // "forgot-password.title": "Forgot Password", "forgot-password.title": "Unohtunut salasana", @@ -1801,8 +2449,8 @@ // "forgot-password.form.head": "Forgot Password", "forgot-password.form.head": "Unohtunut salasana", - // "forgot-password.form.info": "Enter a new password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", - "forgot-password.form.info": "Syötä uusi salasana alla olevaan kenttään ja vahvista se kirjoittamalla salasana uudelleen seuraavaan kenttään. Salasanan on oltava vähintään kuusi merkkiä pitkä.", + // "forgot-password.form.info": "Enter a new password in the box below, and confirm it by typing it again into the second box.", + "forgot-password.form.info": "Syötä uusi salasana alla olevaan kenttään ja vahvista se kirjoittamalla salasana uudelleen seuraavaan kenttään.", // "forgot-password.form.card.security": "Security", "forgot-password.form.card.security": "Turvallisuus", @@ -1825,9 +2473,6 @@ // "forgot-password.form.error.matching-passwords": "The passwords do not match.", "forgot-password.form.error.matching-passwords": "Salasanat eivät täsmää.", - // "forgot-password.form.error.password-length": "The password should be at least 6 characters long.", - "forgot-password.form.error.password-length": "Salasanan on oltava vähintään 6 merkkiä pitkä.", - // "forgot-password.form.notification.error.title": "Error when trying to submit new password", "forgot-password.form.notification.error.title": "Virhe uutta salasanaa lähetettäessä", @@ -1840,10 +2485,8 @@ // "forgot-password.form.submit": "Submit password", "forgot-password.form.submit": "Lähetä salasana", - - - // "form.add": "Add", - "form.add": "Lisää", + // "form.add": "Add more", + "form.add": "Lisää vielä", // "form.add-help": "Click here to add the current entry and to add another one", "form.add-help": "Valitse lisätäksesi nykyisen kohteen ja toisen kohteen", @@ -1855,13 +2498,19 @@ "form.clear": "Tyhjennä", // "form.clear-help": "Click here to remove the selected value", - "form.clear-help": "Napauta tästä poistaaksesi valitun arvon", + "form.clear-help": "Napsauta tästä poistaaksesi valitun arvon", + + // "form.discard": "Discard", + "form.discard": "Hylkää", + + // "form.drag": "Drag", + "form.drag": "Raahaa", // "form.edit": "Edit", "form.edit": "Muokkaa", // "form.edit-help": "Click here to edit the selected value", - "form.edit-help": "Napauta tästä muokataksesi valittua arvoa", + "form.edit-help": "Napsauta tästä muokataksesi valittua arvoa", // "form.first-name": "First name", "form.first-name": "Etunimi", @@ -1896,6 +2545,24 @@ // "form.no-value": "No value entered", "form.no-value": "Ei syötettyä arvoa", + // "form.other-information.email": "Email", + "form.other-information.email": "Sähköpostiosoite", + + // "form.other-information.first-name": "First Name", + "form.other-information.first-name": "Etunimi", + + // "form.other-information.insolr": "In Solr Index", + "form.other-information.insolr": "Solr-indeksissä", + + // "form.other-information.institution": "Institution", + "form.other-information.institution": "Instituutio", + + // "form.other-information.last-name": "Last Name", + "form.other-information.last-name": "Sukunimi", + + // "form.other-information.orcid": "ORCID", + "form.other-information.orcid": "ORCID-tunniste", + // "form.remove": "Remove", "form.remove": "Poista", @@ -1911,10 +2578,134 @@ // "form.search-help": "Click here to look for an existing correspondence", "form.search-help": "Valitse etsiäksesi olemassa olevaa vastaavuutta", - // "form.submit": "Submit", - "form.submit": "Lähetä", + // "form.submit": "Save", + "form.submit": "Tallenna", + // "form.create": "Create", + "form.create": "Luo", + // "form.repeatable.sort.tip": "Drop the item in the new position", + "form.repeatable.sort.tip": "Pudota tietue uuteen paikkaan", + + // "grant-deny-request-copy.deny": "Don't send copy", + "grant-deny-request-copy.deny": "Älä lähetä kopiota", + + // "grant-deny-request-copy.email.back": "Back", + "grant-deny-request-copy.email.back": "Paluu", + + // "grant-deny-request-copy.email.message": "Optional additional message", + "grant-deny-request-copy.email.message": "Valinnainen lisäviesti", + + // "grant-deny-request-copy.email.message.empty": "Please enter a message", + "grant-deny-request-copy.email.message.empty": "Kirjoita viesti", + + // "grant-deny-request-copy.email.permissions.info": "You may use this occasion to reconsider the access restrictions on the document, to avoid having to respond to these requests. If you’d like to ask the repository administrators to remove these restrictions, please check the box below.", + "grant-deny-request-copy.email.permissions.info": "Voit harkita uudelleen dokumentin pääsyrajoituksia, jotta sinun ei tarvitse vastata näihin pyyntöihin. Rastita alla oleva ruutu pyytääksesi julkaisuarkiston ylläpitäjää poistamaan rajoitukset.", + + // "grant-deny-request-copy.email.permissions.label": "Change to open access", + "grant-deny-request-copy.email.permissions.label": "Valitse Open Access", + + // "grant-deny-request-copy.email.send": "Send", + "grant-deny-request-copy.email.send": "Lähetä", + + // "grant-deny-request-copy.email.subject": "Subject", + "grant-deny-request-copy.email.subject": "Asiasana", + + // "grant-deny-request-copy.email.subject.empty": "Please enter a subject", + "grant-deny-request-copy.email.subject.empty": "Syötä asiasana", + + // "grant-deny-request-copy.grant": "Send copy", + "grant-deny-request-copy.grant": "Lähetä kopio", + + // "grant-deny-request-copy.header": "Document copy request", + "grant-deny-request-copy.header": "Dokumenttikopion pyyntö", + + // "grant-deny-request-copy.home-page": "Take me to the home page", + "grant-deny-request-copy.home-page": "Palaa etusivulle", + + // "grant-deny-request-copy.intro1": "If you are one of the authors of the document {{ name }}, then please use one of the options below to respond to the user's request.", + "grant-deny-request-copy.intro1": "Jos olet dokumentin {{ name }} tekijä, vastaa käyttäjän pyyntöön jollakin alla olevista vaihtoehdoista.", + + // "grant-deny-request-copy.intro2": "After choosing an option, you will be presented with a suggested email reply which you may edit.", + "grant-deny-request-copy.intro2": "Valittuasi vaihtoehdon näet sähköpostiviestiehdotuksen. Voit muokata ehdotusta halutessasi.", + + // "grant-deny-request-copy.processed": "This request has already been processed. You can use the button below to get back to the home page.", + "grant-deny-request-copy.processed": "Pyyntö on käsitelty. Voit käyttää alla olevaa painiketta palataksesi etusivulle.", + + // "grant-request-copy.email.subject": "Request copy of document", + "grant-request-copy.email.subject": "Pyydä kopiota dokumentista", + + // "grant-request-copy.error": "An error occurred", + "grant-request-copy.error": "Tapahtui virhe", + + // "grant-request-copy.header": "Grant document copy request", + "grant-request-copy.header": "Hyväksy dokumenttikopion pyyntö", + + // "grant-request-copy.intro": "A message will be sent to the applicant of the request. The requested document(s) will be attached.", + "grant-request-copy.intro": "Viesti lähetetään pyynnön esittäjälle. Pyydetyt dokumentit liitetään viestiin.", + + // "grant-request-copy.success": "Successfully granted item request", + "grant-request-copy.success": "Tietuepyyntö hyväksytty", + + // "health.breadcrumbs": "Health", + "health.breadcrumbs": "Järjestelmän kunto", + + // "health-page.heading": "Health", + "health-page.heading": "Järjestelmän kunto", + + // "health-page.info-tab": "Info", + "health-page.info-tab": "Tiedot", + + // "health-page.status-tab": "Status", + "health-page.status-tab": "Tila", + + // "health-page.error.msg": "The health check service is temporarily unavailable", + "health-page.error.msg": "Järjestelmän kunnon tarkistus on väliaikaisesti poissa käytöstä", + + // "health-page.property.status": "Status code", + "health-page.property.status": "Tilakoodi", + + // "health-page.section.db.title": "Database", + "health-page.section.db.title": "Tietokanta", + + // "health-page.section.geoIp.title": "GeoIp", + "health-page.section.geoIp.title": "GeoIp", + + // "health-page.section.solrAuthorityCore.title": "Solr: authority core", + "health-page.section.solrAuthorityCore.title": "Solr: auktoriteettiydin", + + // "health-page.section.solrOaiCore.title": "Solr: oai core", + "health-page.section.solrOaiCore.title": "Solr: OAI-ydin", + + // "health-page.section.solrSearchCore.title": "Solr: search core", + "health-page.section.solrSearchCore.title": "Solr: hakuydin", + + // "health-page.section.solrStatisticsCore.title": "Solr: statistics core", + "health-page.section.solrStatisticsCore.title": "Solr: tilastoydin", + + // "health-page.section-info.app.title": "Application Backend", + "health-page.section-info.app.title": "Taustasovellus", + + // "health-page.section-info.java.title": "Java", + "health-page.section-info.java.title": "Java", + + // "health-page.status": "Status", + "health-page.status": "Tila", + + // "health-page.status.ok.info": "Operational", + "health-page.status.ok.info": "Toiminnassa", + + // "health-page.status.error.info": "Problems detected", + "health-page.status.error.info": "Ongelmia havaittu", + + // "health-page.status.warning.info": "Possible issues detected", + "health-page.status.warning.info": "Mahdollisia ongelmia havaittu", + + // "health-page.title": "Health", + "health-page.title": "Järjestelmän kunto", + + // "health-page.section.no-issues": "No issues detected", + "health-page.section.no-issues": "Ei havaittuja ongelmia", // "home.description": "", "home.description": "", @@ -1922,11 +2713,11 @@ // "home.breadcrumbs": "Home", "home.breadcrumbs": "Etusivu", - // "home.search-form.placeholder": "Search the repository ...", + // "home.search-form.placeholder": "Search the repository ...", "home.search-form.placeholder": "Hae julkaisuarkistosta ...", - // "home.title": "DSpace Angular :: Home", - "home.title": "DSpace Angular :: Etusivu", + // "home.title": "Home", + "home.title": "Etusivu", // "home.top-level-communities.head": "Communities in DSpace", "home.top-level-communities.head": "Julkaisuarkiston yhteisöt", @@ -1934,19 +2725,17 @@ // "home.top-level-communities.help": "Select a community to browse its collections.", "home.top-level-communities.help": "Valitse yhteisö, jonka kokoelmia haluat selata.", - - // "info.end-user-agreement.accept": "I have read and I agree to the End User Agreement", - "info.end-user-agreement.accept": "Olen lukenut ja hyväksyn käyttöehdot", + "info.end-user-agreement.accept": "Olen lukenut ja hyväksyn käyttöoikeussopimuksen", // "info.end-user-agreement.accept.error": "An error occurred accepting the End User Agreement", - "info.end-user-agreement.accept.error": "Virhe hyväksyttäessä käyttöehtoja", + "info.end-user-agreement.accept.error": "Virhe hyväksyttäessä käyttöoikeussopimusta", // "info.end-user-agreement.accept.success": "Successfully updated the End User Agreement", - "info.end-user-agreement.accept.success": "Käyttöehdot päivitetty", + "info.end-user-agreement.accept.success": "Käyttöoikeussopimus päivitetty", // "info.end-user-agreement.breadcrumbs": "End User Agreement", - "info.end-user-agreement.breadcrumbs": "Käyttöehdot", + "info.end-user-agreement.breadcrumbs": "Käyttöoikeussopimus", // "info.end-user-agreement.buttons.cancel": "Cancel", "info.end-user-agreement.buttons.cancel": "Peruuta", @@ -1955,10 +2744,13 @@ "info.end-user-agreement.buttons.save": "Tallenna", // "info.end-user-agreement.head": "End User Agreement", - "info.end-user-agreement.head": "Käyttöehdot", + "info.end-user-agreement.head": "Käyttöoikeussopimus", // "info.end-user-agreement.title": "End User Agreement", - "info.end-user-agreement.title": "Käyttöehdot", + "info.end-user-agreement.title": "Käyttöoikeussopimus", + + // "info.end-user-agreement.hosting-country": "the United States", + "info.end-user-agreement.hosting-country": "Suomi", // "info.privacy.breadcrumbs": "Privacy Statement", "info.privacy.breadcrumbs": "Tietosuojalauseke", @@ -1969,39 +2761,68 @@ // "info.privacy.title": "Privacy Statement", "info.privacy.title": "Tietosuojalauseke", + // "info.feedback.breadcrumbs": "Feedback", + "info.feedback.breadcrumbs": "Palaute", + // "info.feedback.head": "Feedback", + "info.feedback.head": "Palaute", - // "item.alerts.private": "This item is private", + // "info.feedback.title": "Feedback", + "info.feedback.title": "Palaute", + + // "info.feedback.info": "Thanks for sharing your feedback about the DSpace system. Your comments are appreciated!", + "info.feedback.info": "Kiitos antamastasi palautteesta. Havaintosi ovat arvokkaita!", + + // "info.feedback.email_help": "This address will be used to follow up on your feedback.", + "info.feedback.email_help": "Tätä osoitetta käytetään palautteesi käsittelyssä.", + + // "info.feedback.send": "Send Feedback", + "info.feedback.send": "Lähetä palautetta", + + // "info.feedback.comments": "Comments", + "info.feedback.comments": "Kommentit", + + // "info.feedback.email-label": "Your Email", + "info.feedback.email-label": "Sähköpostiosoitteesi", + + // "info.feedback.create.success": "Feedback Sent Successfully!", + "info.feedback.create.success": "Palaute lähetetty!", + + // "info.feedback.error.email.required": "A valid email address is required", + "info.feedback.error.email.required": "Toimiva sähköpostiosoite on pakollinen", + + // "info.feedback.error.message.required": "A comment is required", + "info.feedback.error.message.required": "Kommentti on pakollinen", + + // "info.feedback.page-label": "Page", + "info.feedback.page-label": "Sivu", + + // "info.feedback.page_help": "Tha page related to your feedback", + "info.feedback.page_help": "Sivu, johon palautteesi kohdistuu", + + // "item.alerts.private": "This item is non-discoverable", "item.alerts.private": "Tietue on yksityinen", // "item.alerts.withdrawn": "This item has been withdrawn", "item.alerts.withdrawn": "Tietue on poistettu käytöstä", - - // "item.edit.authorizations.heading": "With this editor you can view and alter the policies of an item, plus alter policies of individual item components: bundles and bitstreams. Briefly, an item is a container of bundles, and bundles are containers of bitstreams. Containers usually have ADD/REMOVE/READ/WRITE policies, while bitstreams only have READ/WRITE policies.", "item.edit.authorizations.heading": "Tässä voit tarkastella ja muokata tietuekäytäntöjä sekä tietueen yksittäisten komponenttien eli nippujen ja tiedostojen käytäntöjä. Tietue on nippujen säiliö ja niput ovat tiedostojen säiliöitä. Säiliöillä on yleensä LISÄYS/POISTO/LUKU/KIRJOITUS-käytännöt, mutta tiedostoihin sovelletaan vain LUKU/KIRJOITUS-käytäntöjä.", - - // "item.edit.authorizations.title": "Edit item's Policies", "item.edit.authorizations.title": "Muokkaa tietuekäytäntöjä", - - - // "item.badge.private": "Private", + // "item.badge.private": "Non-discoverable", "item.badge.private": "Yksityinen", // "item.badge.withdrawn": "Withdrawn", "item.badge.withdrawn": "Poistettu käytöstä", - - // "item.bitstreams.upload.bundle": "Bundle", "item.bitstreams.upload.bundle": "Nippu", - // "item.bitstreams.upload.bundle.placeholder": "Select a bundle", - "item.bitstreams.upload.bundle.placeholder": "Valitse nippu", + // "item.bitstreams.upload.bundle.placeholder": "Select a bundle or input new bundle name", + "item.bitstreams.upload.bundle.placeholder": "Valitse nippu tai syötä uuden nipun nimi", // "item.bitstreams.upload.bundle.new": "Create bundle", "item.bitstreams.upload.bundle.new": "Luo nippu", @@ -2030,8 +2851,6 @@ // "item.bitstreams.upload.title": "Upload bitstream", "item.bitstreams.upload.title": "Lataa tiedosto", - - // "item.edit.bitstreams.bundle.edit.buttons.upload": "Upload", "item.edit.bitstreams.bundle.edit.buttons.upload": "Lataus", @@ -2063,7 +2882,7 @@ "item.edit.bitstreams.edit.buttons.remove": "Poista", // "item.edit.bitstreams.edit.buttons.undo": "Undo changes", - "item.edit.bitstreams.edit.buttons.undo": "Peruuta muutokset", + "item.edit.bitstreams.edit.buttons.undo": "Kumoa muutokset", // "item.edit.bitstreams.empty": "This item doesn't contain any bitstreams. Click the upload button to create one.", "item.edit.bitstreams.empty": "Tietueeseen ei liity tiedostoja. Valitse latauspainike luodaksesi tiedoston.", @@ -2122,8 +2941,6 @@ // "item.edit.bitstreams.upload-button": "Upload", "item.edit.bitstreams.upload-button": "Lataa", - - // "item.edit.delete.cancel": "Cancel", "item.edit.delete.cancel": "Peruuta", @@ -2148,6 +2965,8 @@ // "item.edit.breadcrumbs": "Edit Item", "item.edit.breadcrumbs": "Muokkaa tietuetta", + // "item.edit.tabs.disabled.tooltip": "You're not authorized to access this tab", + "item.edit.tabs.disabled.tooltip": "Sinulla ei ole valtuuksia tähän välilehteen", // "item.edit.tabs.mapper.head": "Collection Mapper", "item.edit.tabs.mapper.head": "Kokoelmaliitosväline", @@ -2155,6 +2974,69 @@ // "item.edit.tabs.item-mapper.title": "Item Edit - Collection Mapper", "item.edit.tabs.item-mapper.title": "Tietueen muokkaus - Kokoelmaliitosväline", + // "item.edit.identifiers.doi.status.UNKNOWN": "Unknown", + "item.edit.identifiers.doi.status.UNKNOWN": "Tuntematon", + + // "item.edit.identifiers.doi.status.TO_BE_REGISTERED": "Queued for registration", + "item.edit.identifiers.doi.status.TO_BE_REGISTERED": "Rekisteröintijonossa", + + // "item.edit.identifiers.doi.status.TO_BE_RESERVED": "Queued for reservation", + "item.edit.identifiers.doi.status.TO_BE_RESERVED": "Varausjonossa", + + // "item.edit.identifiers.doi.status.IS_REGISTERED": "Registered", + "item.edit.identifiers.doi.status.IS_REGISTERED": "Rekisteröity", + + // "item.edit.identifiers.doi.status.IS_RESERVED": "Reserved", + "item.edit.identifiers.doi.status.IS_RESERVED": "Varattu", + + // "item.edit.identifiers.doi.status.UPDATE_RESERVED": "Reserved (update queued)", + "item.edit.identifiers.doi.status.UPDATE_RESERVED": "Varattu (päivitysjonossa)", + + // "item.edit.identifiers.doi.status.UPDATE_REGISTERED": "Registered (update queued)", + "item.edit.identifiers.doi.status.UPDATE_REGISTERED": "Rekisteröity (päivitysjonossa)", + + // "item.edit.identifiers.doi.status.UPDATE_BEFORE_REGISTRATION": "Queued for update and registration", + "item.edit.identifiers.doi.status.UPDATE_BEFORE_REGISTRATION": "Päivitys- ja rekisteröintijonossa", + + // "item.edit.identifiers.doi.status.TO_BE_DELETED": "Queued for deletion", + "item.edit.identifiers.doi.status.TO_BE_DELETED": "Poistojonossa", + + // "item.edit.identifiers.doi.status.DELETED": "Deleted", + "item.edit.identifiers.doi.status.DELETED": "Poistettu", + + // "item.edit.identifiers.doi.status.PENDING": "Pending (not registered)", + "item.edit.identifiers.doi.status.PENDING": "Vireillä (ei rekisteröity)", + + // "item.edit.identifiers.doi.status.MINTED": "Minted (not registered)", + "item.edit.identifiers.doi.status.MINTED": "Luotu (ei rekisteröity)", + + // "item.edit.tabs.status.buttons.register-doi.label": "Register a new or pending DOI", + "item.edit.tabs.status.buttons.register-doi.label": "Rekisteröi uusi tai vireillä oleva DOI", + + // "item.edit.tabs.status.buttons.register-doi.button": "Register DOI...", + "item.edit.tabs.status.buttons.register-doi.button": "Rekisteröi DOI...", + + // "item.edit.register-doi.header": "Register a new or pending DOI", + "item.edit.register-doi.header": "Rekisteröi uusi tai vireillä oleva DOI", + + // "item.edit.register-doi.description": "Review any pending identifiers and item metadata below and click Confirm to proceed with DOI registration, or Cancel to back out", + "item.edit.register-doi.description": "Tarkasta vireillä olevat tunnisteet ja tietueitten metadata alapuolella. Napsauta Vahvista jatkaaksesi DOI-tunnuksen rekisteröintiä tai Peruuta peruuttaaksesi.", + + // "item.edit.register-doi.confirm": "Confirm", + "item.edit.register-doi.confirm": "Vahvista", + + // "item.edit.register-doi.cancel": "Cancel", + "item.edit.register-doi.cancel": "Peruuta", + + // "item.edit.register-doi.success": "DOI queued for registration successfully.", + "item.edit.register-doi.success": "DOI lisätty rekisteröintijonoon.", + + // "item.edit.register-doi.error": "Error registering DOI", + "item.edit.register-doi.error": "Virhe rekisteröitäessä DOI-tunnusta", + + // "item.edit.register-doi.to-update": "The following DOI has already been minted and will be queued for registration online", + "item.edit.register-doi.to-update": "DOI on jo luotu ja lisätään rekisteröintijonoon verkossa", + // "item.edit.item-mapper.buttons.add": "Map item to selected collections", "item.edit.item-mapper.buttons.add": "Liitä tietue valittuihin kokoelmiin", @@ -2200,20 +3082,27 @@ // "item.edit.item-mapper.notifications.remove.success.head": "Removal of mapping completed", "item.edit.item-mapper.notifications.remove.success.head": "Liitos poistettu", + // "item.edit.item-mapper.search-form.placeholder": "Search collections...", + "item.edit.item-mapper.search-form.placeholder": "Hae kokoelmia...", + // "item.edit.item-mapper.tabs.browse": "Browse mapped collections", "item.edit.item-mapper.tabs.browse": "Selaa liitettyjä kokoelmia", // "item.edit.item-mapper.tabs.map": "Map new collections", "item.edit.item-mapper.tabs.map": "Liitä uusia kokoelmia", - - // "item.edit.metadata.add-button": "Add", "item.edit.metadata.add-button": "Lisää", // "item.edit.metadata.discard-button": "Discard", "item.edit.metadata.discard-button": "Hylkää", + // "item.edit.metadata.edit.buttons.confirm": "Confirm", + "item.edit.metadata.edit.buttons.confirm": "Vahvista", + + // "item.edit.metadata.edit.buttons.drag": "Drag to reorder", + "item.edit.metadata.edit.buttons.drag": "Raahaa uudelleenjärjestääksesi", + // "item.edit.metadata.edit.buttons.edit": "Edit", "item.edit.metadata.edit.buttons.edit": "Muokkaa", @@ -2226,6 +3115,9 @@ // "item.edit.metadata.edit.buttons.unedit": "Stop editing", "item.edit.metadata.edit.buttons.unedit": "Lopeta muokkaus", + // "item.edit.metadata.edit.buttons.virtual": "This is a virtual metadata value, i.e. a value inherited from a related entity. It can’t be modified directly. Add or remove the corresponding relationship in the \"Relationships\" tab", + "item.edit.metadata.edit.buttons.virtual": "Tämä on virtuaalinen metadata-arvo eli arvo, joka on peritty liittyvältä entiteetiltä. Sitä ei voi muokata suoraan. Lisää tai poista yhteys \"Suhteet\"-välilehdellä,", + // "item.edit.metadata.empty": "The item currently doesn't contain any metadata. Click Add to start adding a metadata value.", "item.edit.metadata.empty": "Tietueessa ei ole metadataa. Valitse Lisää lisätäksesi metadataa.", @@ -2241,13 +3133,16 @@ // "item.edit.metadata.headers.value": "Value", "item.edit.metadata.headers.value": "Arvo", + // "item.edit.metadata.metadatafield.error": "An error occurred validating the metadata field", + "item.edit.metadata.metadatafield.error": "Virhe validoitaessa metadatakenttää", + // "item.edit.metadata.metadatafield.invalid": "Please choose a valid metadata field", "item.edit.metadata.metadatafield.invalid": "Valitse oikea metadatakenttä", // "item.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", "item.edit.metadata.notifications.discarded.content": "Muutokset hylätty. Valitse 'Kumoa' palauttaaksesi muutokset", - // "item.edit.metadata.notifications.discarded.title": "Changed discarded", + // "item.edit.metadata.notifications.discarded.title": "Changes discarded", "item.edit.metadata.notifications.discarded.title": "Muutokset hylätty", // "item.edit.metadata.notifications.error.title": "An error occurred", @@ -2262,7 +3157,7 @@ // "item.edit.metadata.notifications.outdated.content": "The item you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", "item.edit.metadata.notifications.outdated.content": "Toinen käyttäjä on muuttanut parhaillaan muokkaamaasi tietuetta. Tekemäsi muutokset on hylätty ristiriitojen estämiseksi", - // "item.edit.metadata.notifications.outdated.title": "Changed outdated", + // "item.edit.metadata.notifications.outdated.title": "Changes outdated", "item.edit.metadata.notifications.outdated.title": "Muutokset vanhentuneet", // "item.edit.metadata.notifications.saved.content": "Your changes to this item's metadata were saved.", @@ -2272,13 +3167,14 @@ "item.edit.metadata.notifications.saved.title": "Metadata tallennettu", // "item.edit.metadata.reinstate-button": "Undo", - "item.edit.metadata.reinstate-button": "Peruuta", + "item.edit.metadata.reinstate-button": "Kumoa", + + // "item.edit.metadata.reset-order-button": "Undo reorder", + "item.edit.metadata.reset-order-button": "Kumoa uudelleenjärjestäminen", // "item.edit.metadata.save-button": "Save", "item.edit.metadata.save-button": "Tallenna", - - // "item.edit.modify.overview.field": "Field", "item.edit.modify.overview.field": "Kenttä", @@ -2288,10 +3184,14 @@ // "item.edit.modify.overview.value": "Value", "item.edit.modify.overview.value": "Arvo", + // "item.edit.move.cancel": "Back", + "item.edit.move.cancel": "Paluu", + // "item.edit.move.save-button": "Save", + "item.edit.move.save-button": "Tallenna", - // "item.edit.move.cancel": "Cancel", - "item.edit.move.cancel": "Peruuta", + // "item.edit.move.discard-button": "Discard", + "item.edit.move.discard-button": "Hylkää", // "item.edit.move.description": "Select the collection you wish to move this item to. To narrow down the list of displayed collections, you can enter a search query in the box.", "item.edit.move.description": "Valitse kokoelma, johon haluat siirtää tietueen. Voit antaa hakulausekkeen kokoelmien määrän pienentämiseksi.", @@ -2323,48 +3223,42 @@ // "item.edit.move.title": "Move item", "item.edit.move.title": "Siirrä tietue", - - // "item.edit.private.cancel": "Cancel", "item.edit.private.cancel": "Peruuta", - // "item.edit.private.confirm": "Make it Private", + // "item.edit.private.confirm": "Make it non-discoverable", "item.edit.private.confirm": "Muuta yksityiseksi", - // "item.edit.private.description": "Are you sure this item should be made private in the archive?", - "item.edit.private.description": "Haluatko varmasti muuttaa tietueen yksityiseksi?", + // "item.edit.private.description": "Are you sure this item should be made non-discoverable in the archive?", + "item.edit.private.description": "Haluatko varmasti muuttaa tietueen yksityiseksi? Yksityinen tietue ei löydy haettaessa.", - // "item.edit.private.error": "An error occurred while making the item private", + // "item.edit.private.error": "An error occurred while making the item non-discoverable", "item.edit.private.error": "Virhe muutettaessa tietuetta yksityiseksi", - // "item.edit.private.header": "Make item private: {{ id }}", - "item.edit.private.header": "Muuta yksityiseksi tietue: {{ id }}", + // "item.edit.private.header": "Make item non-discoverable: {{ id }}", + "item.edit.private.header": "Muuta tietue yksityiseksi: {{ id }}", - // "item.edit.private.success": "The item is now private", + // "item.edit.private.success": "The item is now non-discoverable", "item.edit.private.success": "Tietue on yksityinen", - - // "item.edit.public.cancel": "Cancel", "item.edit.public.cancel": "Peruuta", - // "item.edit.public.confirm": "Make it Public", + // "item.edit.public.confirm": "Make it discoverable", "item.edit.public.confirm": "Muuta julkiseksi", - // "item.edit.public.description": "Are you sure this item should be made public in the archive?", - "item.edit.public.description": "Haluatko varmasti muuttaa tietueen julkiseksi?", + // "item.edit.public.description": "Are you sure this item should be made discoverable in the archive?", + "item.edit.public.description": "Haluatko varmasti muuttaa tietueen julkiseksi? Julkinen tietue löytyy haettaessa.", - // "item.edit.public.error": "An error occurred while making the item public", + // "item.edit.public.error": "An error occurred while making the item discoverable", "item.edit.public.error": "Virhe muutettaessa tietuetta julkiseksi", - // "item.edit.public.header": "Make item public: {{ id }}", - "item.edit.public.header": "Muuta julkiseksi tietue: {{ id }}", + // "item.edit.public.header": "Make item discoverable: {{ id }}", + "item.edit.public.header": "Muuta tietue julkiseksi: {{ id }}", - // "item.edit.public.success": "The item is now public", + // "item.edit.public.success": "The item is now discoverable", "item.edit.public.success": "Tietue on julkinen", - - // "item.edit.reinstate.cancel": "Cancel", "item.edit.reinstate.cancel": "Peruuta", @@ -2383,8 +3277,6 @@ // "item.edit.reinstate.success": "The item was reinstated successfully", "item.edit.reinstate.success": "Tietue palautettu käyttöön", - - // "item.edit.relationships.discard-button": "Discard", "item.edit.relationships.discard-button": "Hylkää", @@ -2395,13 +3287,13 @@ "item.edit.relationships.edit.buttons.remove": "Poista", // "item.edit.relationships.edit.buttons.undo": "Undo changes", - "item.edit.relationships.edit.buttons.undo": "Peruuta muutokset", + "item.edit.relationships.edit.buttons.undo": "Kumoa muutokset", // "item.edit.relationships.no-relationships": "No relationships", "item.edit.relationships.no-relationships": "Ei yhteyksiä", // "item.edit.relationships.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", - "item.edit.relationships.notifications.discarded.content": "Muutoksesi hylättiin. Valitse 'Peruuta' palauttaaksesi ne.", + "item.edit.relationships.notifications.discarded.content": "Muutoksesi hylättiin. Valitse 'Kumoa' palauttaaksesi ne.", // "item.edit.relationships.notifications.discarded.title": "Changes discarded", "item.edit.relationships.notifications.discarded.title": "Muutokset hylätty", @@ -2422,7 +3314,7 @@ "item.edit.relationships.notifications.saved.title": "Yhteydet tallennettu", // "item.edit.relationships.reinstate-button": "Undo", - "item.edit.relationships.reinstate-button": "Peruuta", + "item.edit.relationships.reinstate-button": "Kumoa", // "item.edit.relationships.save-button": "Save", "item.edit.relationships.save-button": "Tallenna", @@ -2430,6 +3322,9 @@ // "item.edit.relationships.no-entity-type": "Add 'dspace.entity.type' metadata to enable relationships for this item", "item.edit.relationships.no-entity-type": "Lisää 'dspace.entity.type' -metadataa aktivoidaksesi yhteydet tietueessa", + // "item.edit.return": "Back", + "item.edit.return": "Paluu", + // "item.edit.tabs.bitstreams.head": "Bitstreams", "item.edit.tabs.bitstreams.head": "Tietueen tiedostot", @@ -2442,6 +3337,9 @@ // "item.edit.tabs.curate.title": "Item Edit - Curate", "item.edit.tabs.curate.title": "Tietueen muokkaus - Kuratointi", + // "item.edit.curate.title": "Curate Item: {{item}}", + "item.edit.curate.title": "Kuratoi tietuetta: {{item}}", + // "item.edit.tabs.metadata.head": "Metadata", "item.edit.tabs.metadata.head": "Tietueen metadata", @@ -2478,23 +3376,26 @@ // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", "item.edit.tabs.status.buttons.move.label": "Siirrä tietue toiseen kokoelmaan", - // "item.edit.tabs.status.buttons.private.button": "Make it private...", + // "item.edit.tabs.status.buttons.private.button": "Make it non-discoverable...", "item.edit.tabs.status.buttons.private.button": "Muuta yksityiseksi...", - // "item.edit.tabs.status.buttons.private.label": "Make item private", + // "item.edit.tabs.status.buttons.private.label": "Make item non-discoverable", "item.edit.tabs.status.buttons.private.label": "Muuta tietue yksityiseksi", - // "item.edit.tabs.status.buttons.public.button": "Make it public...", + // "item.edit.tabs.status.buttons.public.button": "Make it discoverable...", "item.edit.tabs.status.buttons.public.button": "Muuta julkiseksi...", - // "item.edit.tabs.status.buttons.public.label": "Make item public", + // "item.edit.tabs.status.buttons.public.label": "Make item discoverable", "item.edit.tabs.status.buttons.public.label": "Muuta tietue julkiseksi", // "item.edit.tabs.status.buttons.reinstate.button": "Reinstate...", "item.edit.tabs.status.buttons.reinstate.button": "Palauta käyttöön...", // "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", - "item.edit.tabs.status.buttons.reinstate.label": "Palauta tietue arkistoon", + "item.edit.tabs.status.buttons.reinstate.label": "Palauta tietue julkaisuarkistoon", + + // "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", + "item.edit.tabs.status.buttons.unauthorized": "Sinulla ei ole valtuuksia suorittaa tätä toimintoa", // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", "item.edit.tabs.status.buttons.withdraw.button": "Poista tämä kohde", @@ -2509,7 +3410,7 @@ "item.edit.tabs.status.head": "Tietueen tila", // "item.edit.tabs.status.labels.handle": "Handle", - "item.edit.tabs.status.labels.handle": "Handle-tunnus", + "item.edit.tabs.status.labels.handle": "Handle", // "item.edit.tabs.status.labels.id": "Item Internal ID", "item.edit.tabs.status.labels.id": "Tietueen sisäinen ID", @@ -2538,8 +3439,6 @@ // "item.edit.tabs.view.title": "Item Edit - View", "item.edit.tabs.view.title": "Tietueen muokkaus - Näytä", - - // "item.edit.withdraw.cancel": "Cancel", "item.edit.withdraw.cancel": "Peruuta", @@ -2558,7 +3457,8 @@ // "item.edit.withdraw.success": "The item was withdrawn successfully", "item.edit.withdraw.success": "Tietue poistettu käytöstä", - + // "item.orcid.return": "Back", + "item.orcid.return": "Paluu", // "item.listelement.badge": "Item", "item.listelement.badge": "Tietue", @@ -2584,10 +3484,38 @@ // "item.search.results.head": "Item Search Results", "item.search.results.head": "Tietuehaun tulokset", - // "item.search.title": "DSpace Angular :: Item Search", - "item.search.title": "DSpace Angular :: Tietuehaku", + // "item.search.title": "Item Search", + "item.search.title": "Tietuehaku", + // "item.truncatable-part.show-more": "Show more", + "item.truncatable-part.show-more": "Näytä lisää", + // "item.truncatable-part.show-less": "Collapse", + "item.truncatable-part.show-less": "Sulje", + + // "workflow-item.search.result.delete-supervision.modal.header": "Delete Supervision Order", + "workflow-item.search.result.delete-supervision.modal.header": "Poista ohjausmääräys", + + // "workflow-item.search.result.delete-supervision.modal.info": "Are you sure you want to delete Supervision Order", + "workflow-item.search.result.delete-supervision.modal.info": "Haluatko varmasti poistaa ohjausmääräyksen?", + + // "workflow-item.search.result.delete-supervision.modal.cancel": "Cancel", + "workflow-item.search.result.delete-supervision.modal.cancel": "Peruuta", + + // "workflow-item.search.result.delete-supervision.modal.confirm": "Delete", + "workflow-item.search.result.delete-supervision.modal.confirm": "Poista", + + // "workflow-item.search.result.notification.deleted.success": "Successfully deleted supervision order \"{{name}}\"", + "workflow-item.search.result.notification.deleted.success": "Ohjausmääräys poistettu \"{{name}}\"", + + // "workflow-item.search.result.notification.deleted.failure": "Failed to delete supervision order \"{{name}}\"", + "workflow-item.search.result.notification.deleted.failure": "Ohjausmääräyksen poisto epäonnistui \"{{name}}\"", + + // "workflow-item.search.result.list.element.supervised-by": "Supervised by:", + "workflow-item.search.result.list.element.supervised-by": "Ohjaajana:", + + // "workflow-item.search.result.list.element.supervised.remove-tooltip": "Remove supervision group", + "workflow-item.search.result.list.element.supervised.remove-tooltip": "Poista ohjausryhmä", // "item.page.abstract": "Abstract", "item.page.abstract": "Tiivistelmä", @@ -2601,6 +3529,12 @@ // "item.page.collections": "Collections", "item.page.collections": "Kokoelmat", + // "item.page.collections.loading": "Loading...", + "item.page.collections.loading": "Ladataan...", + + // "item.page.collections.load-more": "Load more", + "item.page.collections.load-more": "Lataa lisää", + // "item.page.date": "Date", "item.page.date": "Päivämäärä", @@ -2634,6 +3568,12 @@ // "item.page.link.simple": "Simple item page", "item.page.link.simple": "Tietueen suppeat tiedot", + // "item.page.orcid.title": "ORCID", + "item.page.orcid.title": "ORCID-tunniste", + + // "item.page.orcid.tooltip": "Open ORCID setting page", + "item.page.orcid.tooltip": "Avaa ORCID-asetusten sivu", + // "item.page.person.search.title": "Articles by this author", "item.page.person.search.title": "Tekijän artikkelit", @@ -2667,12 +3607,27 @@ // "item.page.bitstreams.collapse": "Collapse", "item.page.bitstreams.collapse": "Sulje", - // "item.page.filesection.original.bundle" : "Original bundle", + // "item.page.filesection.original.bundle": "Original bundle", "item.page.filesection.original.bundle": "Alkuperäinen nippu", - // "item.page.filesection.license.bundle" : "License bundle", + // "item.page.filesection.license.bundle": "License bundle", "item.page.filesection.license.bundle": "Lisenssinippu", + // "item.page.return": "Back", + "item.page.return": "Paluu", + + // "item.page.version.create": "Create new version", + "item.page.version.create": "Luo uusi versio", + + // "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + "item.page.version.hasDraft": "Uutta versiota ei voida luoda, koska versiohistoriassa on kesken oleva tallennus.", + + // "item.page.claim.button": "Claim", + "item.page.claim.button": "Ota itsellesi", + + // "item.page.claim.tooltip": "Claim this item as profile", + "item.page.claim.tooltip": "Ota tämä kohde profiiliksi", + // "item.preview.dc.identifier.uri": "Identifier:", "item.preview.dc.identifier.uri": "Tunnus:", @@ -2680,7 +3635,7 @@ "item.preview.dc.contributor.author": "Tekijät:", // "item.preview.dc.date.issued": "Published date:", - "item.preview.dc.date.issued": "Julkaisuajankohta:", + "item.preview.dc.date.issued": "Julkaisuaika:", // "item.preview.dc.description.abstract": "Abstract:", "item.preview.dc.description.abstract": "Tiivistelmä:", @@ -2697,6 +3652,33 @@ // "item.preview.dc.title": "Title:", "item.preview.dc.title": "Nimeke:", + // "item.preview.dc.type": "Type:", + "item.preview.dc.type": "Tyyppi:", + + // "item.preview.oaire.citation.issue": "Issue", + "item.preview.oaire.citation.issue": "Numero", + + // "item.preview.oaire.citation.volume": "Volume", + "item.preview.oaire.citation.volume": "Vuosikerta", + + // "item.preview.dc.relation.issn": "ISSN", + "item.preview.dc.relation.issn": "ISSN-tunnus", + + // "item.preview.dc.identifier.isbn": "ISBN", + "item.preview.dc.identifier.isbn": "ISBN", + + // "item.preview.dc.identifier": "Identifier:", + "item.preview.dc.identifier": "Tunnisteet:", + + // "item.preview.dc.relation.ispartof": "Journal or Serie", + "item.preview.dc.relation.ispartof": "Kausijulkaisu tai sarja", + + // "item.preview.dc.identifier.doi": "DOI", + "item.preview.dc.identifier.doi": "DOI", + + // "item.preview.dc.publisher": "Publisher:", + "item.preview.dc.publisher": "Julkaisija:", + // "item.preview.person.familyName": "Surname:", "item.preview.person.familyName": "Sukunimi:", @@ -2706,6 +3688,23 @@ // "item.preview.person.identifier.orcid": "ORCID:", "item.preview.person.identifier.orcid": "ORCID-tunniste:", + // "item.preview.project.funder.name": "Funder:", + "item.preview.project.funder.name": "Rahoittaja:", + + // "item.preview.project.funder.identifier": "Funder Identifier:", + "item.preview.project.funder.identifier": "Rahoittajan tunniste:", + + // "item.preview.oaire.awardNumber": "Funding ID:", + "item.preview.oaire.awardNumber": "Rahoitustunnus:", + + // "item.preview.dc.title.alternative": "Acronym:", + "item.preview.dc.title.alternative": "Kirjainlyhemme:", + + // "item.preview.dc.coverage.spatial": "Jurisdiction:", + "item.preview.dc.coverage.spatial": "Toimivalta:", + + // "item.preview.oaire.fundingStream": "Funding Stream:", + "item.preview.oaire.fundingStream": "Rahoituslähde:", // "item.select.confirm": "Confirm selected", "item.select.confirm": "Vahvista valinta", @@ -2722,19 +3721,21 @@ // "item.select.table.title": "Title", "item.select.table.title": "Nimeke", - // "item.version.history.empty": "There are no other versions for this item yet.", "item.version.history.empty": "Tietueesta ei ole muita versioita.", // "item.version.history.head": "Version History", "item.version.history.head": "Versiohistoria", - // "item.version.history.return": "Return", - "item.version.history.return": "Palaa", + // "item.version.history.return": "Back", + "item.version.history.return": "Paluu", // "item.version.history.selected": "Selected version", "item.version.history.selected": "Valittu versio", + // "item.version.history.selected.alert": "You are currently viewing version {{version}} of the item.", + "item.version.history.selected.alert": "Tarkastelet tietueen versiota {{version}}.", + // "item.version.history.table.version": "Version", "item.version.history.table.version": "Versio", @@ -2750,12 +3751,191 @@ // "item.version.history.table.summary": "Summary", "item.version.history.table.summary": "Yhteenveto", + // "item.version.history.table.workspaceItem": "Workspace item", + "item.version.history.table.workspaceItem": "Työtilan tietue", + // "item.version.history.table.workflowItem": "Workflow item", + "item.version.history.table.workflowItem": "Työtilan tietue", + + // "item.version.history.table.actions": "Action", + "item.version.history.table.actions": "Toiminto", + + // "item.version.history.table.action.editWorkspaceItem": "Edit workspace item", + "item.version.history.table.action.editWorkspaceItem": "Muokkaa työtilan tietuetta", + + // "item.version.history.table.action.editSummary": "Edit summary", + "item.version.history.table.action.editSummary": "Muokkaa yhteenvetoa", + + // "item.version.history.table.action.saveSummary": "Save summary edits", + "item.version.history.table.action.saveSummary": "Tallenna yhteenvedon muokkaukset", + + // "item.version.history.table.action.discardSummary": "Discard summary edits", + "item.version.history.table.action.discardSummary": "Hylkää yhteenvedon muokkaukset", + + // "item.version.history.table.action.newVersion": "Create new version from this one", + "item.version.history.table.action.newVersion": "Luo tästä uusi versio", + + // "item.version.history.table.action.deleteVersion": "Delete version", + "item.version.history.table.action.deleteVersion": "Poista versio", + + // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + "item.version.history.table.action.hasDraft": "Uutta versiota ei voida luoda, koska versiohistoriassa on kesken oleva tallennus.", // "item.version.notice": "This is not the latest version of this item. The latest version can be found here.", "item.version.notice": "Tämä ei ole tietueen uusin versio. Uusin versio löytyy täältä.", + // "item.version.create.modal.header": "New version", + "item.version.create.modal.header": "uusi versio", + // "item.version.create.modal.text": "Create a new version for this item", + "item.version.create.modal.text": "Luodaan tietueesta uusi versio", + + // "item.version.create.modal.text.startingFrom": "starting from version {{version}}", + "item.version.create.modal.text.startingFrom": "alkaen versiosta {{version}}", + + // "item.version.create.modal.button.confirm": "Create", + "item.version.create.modal.button.confirm": "Luo", + + // "item.version.create.modal.button.confirm.tooltip": "Create new version", + "item.version.create.modal.button.confirm.tooltip": "Luo uusi versio", + + // "item.version.create.modal.button.cancel": "Cancel", + "item.version.create.modal.button.cancel": "Peruuta", + + // "item.version.create.modal.button.cancel.tooltip": "Do not create new version", + "item.version.create.modal.button.cancel.tooltip": "Älä luo uutta versiota", + + // "item.version.create.modal.form.summary.label": "Summary", + "item.version.create.modal.form.summary.label": "Yhteenveto", + + // "item.version.create.modal.form.summary.placeholder": "Insert the summary for the new version", + "item.version.create.modal.form.summary.placeholder": "Syötä uuden version yhteenveto", + + // "item.version.create.modal.submitted.header": "Creating new version...", + "item.version.create.modal.submitted.header": "Luodaan uutta versiota...", + + // "item.version.create.modal.submitted.text": "The new version is being created. This may take some time if the item has a lot of relationships.", + "item.version.create.modal.submitted.text": "Uutta versiota luodaan. Luonti voi kestää, jos tietueella on paljon yhteyksiä.", + + // "item.version.create.notification.success": "New version has been created with version number {{version}}", + "item.version.create.notification.success": "Uusi versio on luotu, sen versionumero on {{version}}", + + // "item.version.create.notification.failure": "New version has not been created", + "item.version.create.notification.failure": "Uutta versiota ei luotu", + + // "item.version.create.notification.inProgress": "A new version cannot be created because there is an inprogress submission in the version history", + "item.version.create.notification.inProgress": "Uutta versiota ei voida luoda, koska versiohistoriassa on kesken oleva tallennus.", + + // "item.version.delete.modal.header": "Delete version", + "item.version.delete.modal.header": "Poista versio", + + // "item.version.delete.modal.text": "Do you want to delete version {{version}}?", + "item.version.delete.modal.text": "Haluatko poistaa version {{version}}?", + + // "item.version.delete.modal.button.confirm": "Delete", + "item.version.delete.modal.button.confirm": "Poista", + + // "item.version.delete.modal.button.confirm.tooltip": "Delete this version", + "item.version.delete.modal.button.confirm.tooltip": "Poista tämä versio", + + // "item.version.delete.modal.button.cancel": "Cancel", + "item.version.delete.modal.button.cancel": "Peruuta", + + // "item.version.delete.modal.button.cancel.tooltip": "Do not delete this version", + "item.version.delete.modal.button.cancel.tooltip": "Älä poista tätä versiota", + + // "item.version.delete.notification.success": "Version number {{version}} has been deleted", + "item.version.delete.notification.success": "Versio versionumerolla {{version}} poistettu", + + // "item.version.delete.notification.failure": "Version number {{version}} has not been deleted", + "item.version.delete.notification.failure": "Versiota versionumerolla {{version}} ei poistettu", + + // "item.version.edit.notification.success": "The summary of version number {{version}} has been changed", + "item.version.edit.notification.success": "Version versionumerolla {{version}} yhteenveto on muuttunut", + + // "item.version.edit.notification.failure": "The summary of version number {{version}} has not been changed", + "item.version.edit.notification.failure": "Version versionumerolla {{version}} yhteenvetoa ei ole muutettu", + + // "itemtemplate.edit.metadata.add-button": "Add", + "itemtemplate.edit.metadata.add-button": "Lisää", + + // "itemtemplate.edit.metadata.discard-button": "Discard", + "itemtemplate.edit.metadata.discard-button": "Hylkää", + + // "itemtemplate.edit.metadata.edit.buttons.confirm": "Confirm", + "itemtemplate.edit.metadata.edit.buttons.confirm": "Vahvista", + + // "itemtemplate.edit.metadata.edit.buttons.drag": "Drag to reorder", + "itemtemplate.edit.metadata.edit.buttons.drag": "Raahaa uudelleenjärjestääksesi", + + // "itemtemplate.edit.metadata.edit.buttons.edit": "Edit", + "itemtemplate.edit.metadata.edit.buttons.edit": "Muokkaa", + + // "itemtemplate.edit.metadata.edit.buttons.remove": "Remove", + "itemtemplate.edit.metadata.edit.buttons.remove": "Poista", + + // "itemtemplate.edit.metadata.edit.buttons.undo": "Undo changes", + "itemtemplate.edit.metadata.edit.buttons.undo": "Kumoa muutokset", + + // "itemtemplate.edit.metadata.edit.buttons.unedit": "Stop editing", + "itemtemplate.edit.metadata.edit.buttons.unedit": "Lopeta muokkaus", + + // "itemtemplate.edit.metadata.empty": "The item template currently doesn't contain any metadata. Click Add to start adding a metadata value.", + "itemtemplate.edit.metadata.empty": "Mallipohjassa ei ole metadataa. Napsauta Lisää lisätäksesi metadata-arvoja.", + + // "itemtemplate.edit.metadata.headers.edit": "Edit", + "itemtemplate.edit.metadata.headers.edit": "Muokkaa", + + // "itemtemplate.edit.metadata.headers.field": "Field", + "itemtemplate.edit.metadata.headers.field": "Kenttä", + + // "itemtemplate.edit.metadata.headers.language": "Lang", + "itemtemplate.edit.metadata.headers.language": "Kieli", + + // "itemtemplate.edit.metadata.headers.value": "Value", + "itemtemplate.edit.metadata.headers.value": "Arvo", + + // "itemtemplate.edit.metadata.metadatafield.error": "An error occurred validating the metadata field", + "itemtemplate.edit.metadata.metadatafield.error": "Virhe metadatakenttää validoitaessa", + + // "itemtemplate.edit.metadata.metadatafield.invalid": "Please choose a valid metadata field", + "itemtemplate.edit.metadata.metadatafield.invalid": "Valitse kelvollinen metadatakenttä ", + + // "itemtemplate.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", + "itemtemplate.edit.metadata.notifications.discarded.content": "Muutoksesi hylättiin. Palauta muutokset napsauttamalla Kumoa-painiketta", + + // "itemtemplate.edit.metadata.notifications.discarded.title": "Changes discarded", + "itemtemplate.edit.metadata.notifications.discarded.title": "Muutokset peruttu", + + // "itemtemplate.edit.metadata.notifications.error.title": "An error occurred", + "itemtemplate.edit.metadata.notifications.error.title": "Tapahtui virhe", + + // "itemtemplate.edit.metadata.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", + "itemtemplate.edit.metadata.notifications.invalid.content": "Muutoksia ei tallennettu. Tarkista kaikkien kenttien oikeellisuus ennen tallennusta.", + + // "itemtemplate.edit.metadata.notifications.invalid.title": "Metadata invalid", + "itemtemplate.edit.metadata.notifications.invalid.title": "Virheellinen metadata", + + // "itemtemplate.edit.metadata.notifications.outdated.content": "The item template you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", + "itemtemplate.edit.metadata.notifications.outdated.content": "Toinen käyttäjä on muokannut käsittelemääsi mallipohjaa. Muutoksesi on hylätty konfliktien välttämiseksi.", + + // "itemtemplate.edit.metadata.notifications.outdated.title": "Changes outdated", + "itemtemplate.edit.metadata.notifications.outdated.title": "Muutokset vanhentuneet", + + // "itemtemplate.edit.metadata.notifications.saved.content": "Your changes to this item template's metadata were saved.", + "itemtemplate.edit.metadata.notifications.saved.content": "Muutokset mallipohjan metadataan on tallennettu.", + + // "itemtemplate.edit.metadata.notifications.saved.title": "Metadata saved", + "itemtemplate.edit.metadata.notifications.saved.title": "Metadata tallennettu", + + // "itemtemplate.edit.metadata.reinstate-button": "Undo", + "itemtemplate.edit.metadata.reinstate-button": "Kumoa", + + // "itemtemplate.edit.metadata.reset-order-button": "Undo reorder", + "itemtemplate.edit.metadata.reset-order-button": "Kumoa uudelleenjärjestäminen", + + // "itemtemplate.edit.metadata.save-button": "Save", + "itemtemplate.edit.metadata.save-button": "Tallenna", // "journal.listelement.badge": "Journal", "journal.listelement.badge": "Kausijulkaisu", @@ -2781,10 +3961,11 @@ // "journal.search.results.head": "Journal Search Results", "journal.search.results.head": "Kausijulkaisuhaun tulokset", - // "journal.search.title": "DSpace Angular :: Journal Search", - "journal.search.title": "DSpace Angular :: Kausijulkaisuhaku", - + // "journal-relationships.search.results.head": "Journal Search Results", + "journal-relationships.search.results.head": "Kausijulkaisuhaun tulokset", + // "journal.search.title": "Journal Search", + "journal.search.title": "Kausijulkaisuhaku", // "journalissue.listelement.badge": "Journal Issue", "journalissue.listelement.badge": "Kausijulkaisun numero", @@ -2813,8 +3994,6 @@ // "journalissue.page.titleprefix": "Journal Issue: ", "journalissue.page.titleprefix": "Kausijulkaisun numero: ", - - // "journalvolume.listelement.badge": "Journal Volume", "journalvolume.listelement.badge": "Kausijulkaisun vuosikerta", @@ -2833,7 +4012,38 @@ // "journalvolume.page.volume": "Volume", "journalvolume.page.volume": "Vuosikerta", + // "iiifsearchable.listelement.badge": "Document Media", + "iiifsearchable.listelement.badge": "Dokumenttimedia", + // "iiifsearchable.page.titleprefix": "Document: ", + "iiifsearchable.page.titleprefix": "Dokumentti: ", + + // "iiifsearchable.page.doi": "Permanent Link: ", + "iiifsearchable.page.doi": "Pysyvä linkki: ", + + // "iiifsearchable.page.issue": "Issue: ", + "iiifsearchable.page.issue": "Numero: ", + + // "iiifsearchable.page.description": "Description: ", + "iiifsearchable.page.description": "Kuvaus: ", + + // "iiifviewer.fullscreen.notice": "Use full screen for better viewing.", + "iiifviewer.fullscreen.notice": "Käytä koko näytön tilaa nähdäksesi paremmin", + + // "iiif.listelement.badge": "Image Media", + "iiif.listelement.badge": "Kuvamedia", + + // "iiif.page.titleprefix": "Image: ", + "iiif.page.titleprefix": "Kuva: ", + + // "iiif.page.doi": "Permanent Link: ", + "iiif.page.doi": "Pysyvä linkki: ", + + // "iiif.page.issue": "Issue: ", + "iiif.page.issue": "Numero: ", + + // "iiif.page.description": "Description: ", + "iiif.page.description": "Kuvaus: ", // "loading.bitstream": "Loading bitstream...", "loading.bitstream": "Ladataan tiedostoa...", @@ -2889,8 +4099,6 @@ // "loading.top-level-communities": "Loading top-level communities...", "loading.top-level-communities": "Ladataan ylätason yhteisöjä...", - - // "login.form.email": "Email address", "login.form.email": "Sähköpostiosoite", @@ -2906,6 +4114,12 @@ // "login.form.or-divider": "or", "login.form.or-divider": "tai", + // "login.form.oidc": "Log in with OIDC", + "login.form.oidc": "Kirjaudu OIDC-tunnuksella", + + // "login.form.orcid": "Log in with ORCID", + "login.form.orcid": "Kirjaudu ORCID-tunnuksella", + // "login.form.password": "Password", "login.form.password": "Salasana", @@ -2921,8 +4135,6 @@ // "login.breadcrumbs": "Login", "login.breadcrumbs": "Sisäänkirjautuminen", - - // "logout.form.header": "Log out from DSpace", "logout.form.header": "Kirjaudu ulos", @@ -2932,15 +4144,14 @@ // "logout.title": "Logout", "logout.title": "Uloskirjautuminen", - - - // "menu.header.admin": "Admin", - "menu.header.admin": "Ylläpitäjä", + // "menu.header.admin": "Management", + "menu.header.admin": "Hallinto", // "menu.header.image.logo": "Repository logo", "menu.header.image.logo": "Arkiston logo", - + // "menu.header.admin.description": "Management menu", + "menu.header.admin.description": "Hallintovalikko", // "menu.section.access_control": "Access Control", "menu.section.access_control": "Pääsyoikeudet", @@ -2954,13 +4165,9 @@ // "menu.section.access_control_people": "People", "menu.section.access_control_people": "Käyttäjät", - - // "menu.section.admin_search": "Admin Search", "menu.section.admin_search": "Ylläpitäjän haku", - - // "menu.section.browse_community": "This Community", "menu.section.browse_community": "Tämä yhteisö", @@ -2968,7 +4175,7 @@ "menu.section.browse_community_by_author": "Tekijän mukaan", // "menu.section.browse_community_by_issue_date": "By Issue Date", - "menu.section.browse_community_by_issue_date": "Julkaisuajankohdan mukaan", + "menu.section.browse_community_by_issue_date": "Julkaisuajan mukaan", // "menu.section.browse_community_by_title": "By Title", "menu.section.browse_community_by_title": "Nimekkeen mukaan", @@ -2980,27 +4187,26 @@ "menu.section.browse_global_by_author": "Tekijän mukaan", // "menu.section.browse_global_by_dateissued": "By Issue Date", - "menu.section.browse_global_by_dateissued": "Julkaisuajankohdan mukaan", + "menu.section.browse_global_by_dateissued": "Julkaisuajan mukaan", // "menu.section.browse_global_by_subject": "By Subject", "menu.section.browse_global_by_subject": "Asiasanan mukaan", + // "menu.section.browse_global_by_srsc": "By Subject Category", + "menu.section.browse_global_by_srsc": "Aihekategorian mukaan", + // "menu.section.browse_global_by_title": "By Title", "menu.section.browse_global_by_title": "Nimekkeen mukaan", // "menu.section.browse_global_communities_and_collections": "Communities & Collections", "menu.section.browse_global_communities_and_collections": "Yhteisöt & kokoelmat", - - // "menu.section.control_panel": "Control Panel", "menu.section.control_panel": "Hallintapaneeli", // "menu.section.curation_task": "Curation Task", "menu.section.curation_task": "Kuratointitehtävä", - - // "menu.section.edit": "Edit", "menu.section.edit": "Muokkaa", @@ -3013,8 +4219,6 @@ // "menu.section.edit_item": "Item", "menu.section.edit_item": "Tietue", - - // "menu.section.export": "Export", "menu.section.export": "Eksportoi", @@ -3030,7 +4234,8 @@ // "menu.section.export_metadata": "Metadata", "menu.section.export_metadata": "Metadata", - + // "menu.section.export_batch": "Batch Export (ZIP)", + "menu.section.export_batch": "Erän eksportointi(ZIP)", // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": "Pääsyoikeudet", @@ -3041,8 +4246,8 @@ // "menu.section.icon.control_panel": "Control Panel menu section", "menu.section.icon.control_panel": "Hallintapaneeli", - // "menu.section.icon.curation_task": "Curation Task menu section", - "menu.section.icon.curation_task": "Kuratointi", + // "menu.section.icon.curation_tasks": "Curation Task menu section", + "menu.section.icon.curation_tasks": "Kuratointitehtävä", // "menu.section.icon.edit": "Edit menu section", "menu.section.icon.edit": "Muokkaus", @@ -3053,6 +4258,9 @@ // "menu.section.icon.find": "Find menu section", "menu.section.icon.find": "Haku", + // "menu.section.icon.health": "Health check menu section", + "menu.section.icon.health": "Järjestelmän kunnon tarkistus", + // "menu.section.icon.import": "Import menu section", "menu.section.icon.import": "Importointi", @@ -3062,8 +4270,8 @@ // "menu.section.icon.pin": "Pin sidebar", "menu.section.icon.pin": "Kiinnitä sivupalkki", - // "menu.section.icon.processes": "Processes menu section", - "menu.section.icon.processes": "Prosessit", + // "menu.section.icon.processes": "Processes Health", + "menu.section.icon.processes": "Prosessien kunto", // "menu.section.icon.registries": "Registries menu section", "menu.section.icon.registries": "Rekisterit", @@ -3071,11 +4279,12 @@ // "menu.section.icon.statistics_task": "Statistics Task menu section", "menu.section.icon.statistics_task": "Tilastot", + // "menu.section.icon.workflow": "Administer workflow menu section", + "menu.section.icon.workflow": "Työnkulku hallinta", + // "menu.section.icon.unpin": "Unpin sidebar", "menu.section.icon.unpin": "Vapauta sivupalkki", - - // "menu.section.import": "Import", "menu.section.import": "Importoi", @@ -3085,8 +4294,6 @@ // "menu.section.import_metadata": "Metadata", "menu.section.import_metadata": "Metadata", - - // "menu.section.new": "New", "menu.section.new": "Uusi", @@ -3105,20 +4312,17 @@ // "menu.section.new_process": "Process", "menu.section.new_process": "Prosessi", - - // "menu.section.pin": "Pin sidebar", "menu.section.pin": "Kiinnitä sivupalkki", // "menu.section.unpin": "Unpin sidebar", "menu.section.unpin": "Vapauta sivupalkki", - - // "menu.section.processes": "Processes", "menu.section.processes": "Prosessit", - + // "menu.section.health": "Health", + "menu.section.health": "Järjestelmän kunto", // "menu.section.registries": "Registries", "menu.section.registries": "Rekisterit", @@ -3129,57 +4333,60 @@ // "menu.section.registries_metadata": "Metadata", "menu.section.registries_metadata": "Metadata", - - // "menu.section.statistics": "Statistics", "menu.section.statistics": "Tilastot", // "menu.section.statistics_task": "Statistics Task", "menu.section.statistics_task": "Tilastointitehtävä", - - // "menu.section.toggle.access_control": "Toggle Access Control section", - "menu.section.toggle.access_control": "Vaihda Pääsyoikeudet-osion tilaa", + "menu.section.toggle.access_control": "Näytä/piilota Pääsyoikeudet-osio", // "menu.section.toggle.control_panel": "Toggle Control Panel section", - "menu.section.toggle.control_panel": "Vaihda Hallintapaneeli-osion tilaa", + "menu.section.toggle.control_panel": "Näytä/piilota Hallintapaneeli-osio", // "menu.section.toggle.curation_task": "Toggle Curation Task section", - "menu.section.toggle.curation_task": "Vaihda Kuratointitehtävä-osion tilaa", + "menu.section.toggle.curation_task": "Näytä/piilota Kuratointitehtävä-osio", // "menu.section.toggle.edit": "Toggle Edit section", - "menu.section.toggle.edit": "Vaihda Muokkaus-osion tilaa", + "menu.section.toggle.edit": "Näytä/piilota Muokkaus-osio", // "menu.section.toggle.export": "Toggle Export section", - "menu.section.toggle.export": "Vaihda Eksportointi-osion tilaa", + "menu.section.toggle.export": "Näytä/piilota Eksportointi-osio", // "menu.section.toggle.find": "Toggle Find section", - "menu.section.toggle.find": "Vaihda Haku-osion tilaa", + "menu.section.toggle.find": "Näytä/piilota Haku-osio", // "menu.section.toggle.import": "Toggle Import section", - "menu.section.toggle.import": "Vaihda Importointi-osion tilaa", + "menu.section.toggle.import": "Näytä/piilota Importointi-osio", // "menu.section.toggle.new": "Toggle New section", - "menu.section.toggle.new": "Vaihda Uusi-osion tilaa", + "menu.section.toggle.new": "Näytä/piilota Uusi-osio", // "menu.section.toggle.registries": "Toggle Registries section", - "menu.section.toggle.registries": "Vaihda Rekisterit-osion tilaa", + "menu.section.toggle.registries": "Näytä/piilota Rekisterit-osio", // "menu.section.toggle.statistics_task": "Toggle Statistics Task section", - "menu.section.toggle.statistics_task": "Vaihda Tilastointitehtävä-osion tilaa", - + "menu.section.toggle.statistics_task": "Näytä/piilota Tilastointitehtävä-osio", // "menu.section.workflow": "Administer Workflow", "menu.section.workflow": "Hallinnoi työnkulkua", + // "metadata-export-search.tooltip": "Export search results as CSV", + "metadata-export-search.tooltip": "Eksportoi Hakutulokset CSV-tiedostona", + + // "metadata-export-search.submit.success": "The export was started successfully", + "metadata-export-search.submit.success": "Eksportointi aloitettu", + + // "metadata-export-search.submit.error": "Starting the export has failed", + "metadata-export-search.submit.error": "Eksportoinnin aloittaminen epäonnistui", + + // "mydspace.breadcrumbs": "MyDSpace", + "mydspace.breadcrumbs": "Oma DSpace", // "mydspace.description": "", "mydspace.description": "", - // "mydspace.general.text-here": "here", - "mydspace.general.text-here": "tässä", - // "mydspace.messages.controller-help": "Select this option to send a message to item's submitter.", "mydspace.messages.controller-help": "Valitse tämä, jos haluat lähettää viestin tietueen tallentajalle.", @@ -3255,26 +4462,32 @@ // "mydspace.results.no-uri": "No Uri", "mydspace.results.no-uri": "Ei URL-osoitetta", - // "mydspace.show.workflow": "All tasks", - "mydspace.show.workflow": "Kaikki tehtävät", + // "mydspace.search-form.placeholder": "Search in mydspace...", + "mydspace.search-form.placeholder": "Hae omasta DSpacesta...", + + // "mydspace.show.workflow": "Workflow tasks", + "mydspace.show.workflow": "Työnkulun tehtävät", // "mydspace.show.workspace": "Your Submissions", "mydspace.show.workspace": "Tallennuksesi", - // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "Arkistoitu", + // "mydspace.show.supervisedWorkspace": "Supervised items", + "mydspace.show.supervisedWorkspace": "Valvotut tietueet", - // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "Tarkastaminen", + // "mydspace.status.mydspaceArchived": "Archived", + "mydspace.status.mydspaceArchived": "Arkistoitu", - // "mydspace.status.waiting-for-controller": "Waiting for controller", - "mydspace.status.waiting-for-controller": "Odotetaan tarkastajaa", + // "mydspace.status.mydspaceValidation": "Validation", + "mydspace.status.mydspaceValidation": "Validointi", - // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "Työnkulku", + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "Odottaa tarkastajaa", - // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "Työtila", + // "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "Työnkulku", + + // "mydspace.status.mydspaceWorkspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Työtila", // "mydspace.title": "MyDSpace", "mydspace.title": "Oma DSpace", @@ -3291,31 +4504,35 @@ // "mydspace.upload.upload-multiple-successful": "{{qty}} new workspace items created.", "mydspace.upload.upload-multiple-successful": "{{qty}} uutta työtilaa luotu.", - // "mydspace.upload.upload-successful": "New workspace item created. Click {{here}} for edit it.", - "mydspace.upload.upload-successful": "Uusi työtila luotu. Napauta tästä muokataksesi sitä.", - // "mydspace.view-btn": "View", "mydspace.view-btn": "Näytä", - - // "nav.browse.header": "All of DSpace", "nav.browse.header": "Koko julkaisuarkisto", // "nav.community-browse.header": "By Community", "nav.community-browse.header": "Yhteisön mukaan", + // "nav.context-help-toggle": "Toggle context help", + "nav.context-help-toggle": "Näytä/piilota tilannekohtainen ohje", + // "nav.language": "Language switch", "nav.language": "Kielivalinta", // "nav.login": "Log In", "nav.login": "Kirjaudu sisään", + // "nav.user-profile-menu-and-logout": "User profile menu and Log Out", + "nav.user-profile-menu-and-logout": "Käyttäjäprofiilivalikko ja uloskirjautuminen", + // "nav.logout": "Log Out", "nav.logout": "Kirjaudu ulos", + // "nav.main.description": "Main navigation bar", + "nav.main.description": "Päänavigointipalkki", + // "nav.mydspace": "MyDSpace", - "nav.mydspace": "Omat tiedot", + "nav.mydspace": "Oma DSpace", // "nav.profile": "Profile", "nav.profile": "Profiili", @@ -3323,17 +4540,33 @@ // "nav.search": "Search", "nav.search": "Hae", + // "nav.search.button": "Submit search", + "nav.search.button": "Lähetä haku", + // "nav.statistics.header": "Statistics", "nav.statistics.header": "Tilastot", // "nav.stop-impersonating": "Stop impersonating EPerson", "nav.stop-impersonating": "Lopeta käyttäjänä esiintyminen", + // "nav.subscriptions": "Subscriptions", + "nav.subscriptions": "Tilaukset", + // "nav.toggle": "Toggle navigation", + "nav.toggle": "Näytä/piilota navigointi", + + // "nav.user.description": "User profile bar", + "nav.user.description": "Käyttäjäprofiilipalkki", + + // "none.listelement.badge": "Item", + "none.listelement.badge": "Tietue", // "orgunit.listelement.badge": "Organizational Unit", "orgunit.listelement.badge": "Organisaatioyksikkö", + // "orgunit.listelement.no-title": "Untitled", + "orgunit.listelement.no-title": "Nimetön", + // "orgunit.page.city": "City", "orgunit.page.city": "Kaupunki", @@ -3355,7 +4588,8 @@ // "orgunit.page.titleprefix": "Organizational Unit: ", "orgunit.page.titleprefix": "Organisaatioyksikkö: ", - + // "pagination.options.description": "Pagination options", + "pagination.options.description": "Sivutusvaihtoehdot", // "pagination.results-per-page": "Results Per Page", "pagination.results-per-page": "Tuloksia sivulla", @@ -3369,8 +4603,6 @@ // "pagination.sort-direction": "Sort Options", "pagination.sort-direction": "Lajitteluvalinnat", - - // "person.listelement.badge": "Person", "person.listelement.badge": "Käyttäjä", @@ -3395,6 +4627,9 @@ // "person.page.lastname": "Last Name", "person.page.lastname": "Sukunimi", + // "person.page.name": "Name", + "person.page.name": "Nimi", + // "person.page.link.full": "Show all metadata", "person.page.link.full": "Näytä kaikki metadata", @@ -3408,12 +4643,13 @@ "person.page.titleprefix": "Käyttäjä: ", // "person.search.results.head": "Person Search Results", - "person.search.results.head": "Käyttäjähaun tulokset", - - // "person.search.title": "DSpace Angular :: Person Search", - "person.search.title": "DSpace Angular :: Käyttäjähaku", + "person.search.results.head": "Henkilöhaun tulokset", + // "person-relationships.search.results.head": "Person Search Results", + "person-relationships.search.results.head": "Henkilöhaun tulokset", + // "person.search.title": "Person Search", + "person.search.title": "Henkilöhaku", // "process.new.select-parameters": "Parameters", "process.new.select-parameters": "Parametrit", @@ -3421,8 +4657,8 @@ // "process.new.cancel": "Cancel", "process.new.cancel": "Peruuta", - // "process.new.submit": "Submit", - "process.new.submit": "Lähetä", + // "process.new.submit": "Save", + "process.new.submit": "Tallenna", // "process.new.select-script": "Script", "process.new.select-script": "Skripti", @@ -3463,6 +4699,9 @@ // "process.new.notification.error.content": "An error occurred while creating this process", "process.new.notification.error.content": "Virhe prosessia luotaessa", + // "process.new.notification.error.max-upload.content": "The file exceeds the maximum upload size", + "process.new.notification.error.max-upload.content": "Tiedoston koko ylittää latauksen maksimikoon", + // "process.new.header": "Create a new process", "process.new.header": "Luo uusi prosessi", @@ -3472,18 +4711,16 @@ // "process.new.breadcrumbs": "Create a new process", "process.new.breadcrumbs": "Luo uusi prosessi", + // "process.detail.arguments": "Arguments", + "process.detail.arguments": "Perustelut", + // "process.detail.arguments.empty": "This process doesn't contain any arguments", + "process.detail.arguments.empty": "Prosessiin ei liity perusteluja", - // "process.detail.arguments" : "Arguments", - "process.detail.arguments": "Muuttujat", - - // "process.detail.arguments.empty" : "This process doesn't contain any arguments", - "process.detail.arguments.empty": "Prosessiin ei liity muuttujia", - - // "process.detail.back" : "Back", + // "process.detail.back": "Back", "process.detail.back": "Paluu", - // "process.detail.output" : "Process Output", + // "process.detail.output": "Process Output", "process.detail.output": "Prosessin tulos", // "process.detail.logs.button": "Retrieve process output", @@ -3495,48 +4732,70 @@ // "process.detail.logs.none": "This process has no output", "process.detail.logs.none": "Prosessilla ei tulosta", - // "process.detail.output-files" : "Output Files", + // "process.detail.output-files": "Output Files", "process.detail.output-files": "Tulostiedostot", - // "process.detail.output-files.empty" : "This process doesn't contain any output files", + // "process.detail.output-files.empty": "This process doesn't contain any output files", "process.detail.output-files.empty": "Prosessilla ei ole tulostiedostoja", - // "process.detail.script" : "Script", + // "process.detail.script": "Script", "process.detail.script": "Skripti", - // "process.detail.title" : "Process: {{ id }} - {{ name }}", + // "process.detail.title": "Process: {{ id }} - {{ name }}", "process.detail.title": "Prosessi: {{ id }} - {{ name }}", - // "process.detail.start-time" : "Start time", + // "process.detail.start-time": "Start time", "process.detail.start-time": "Aloitusaika", - // "process.detail.end-time" : "Finish time", + // "process.detail.end-time": "Finish time", "process.detail.end-time": "Lopetusaika", - // "process.detail.status" : "Status", + // "process.detail.status": "Status", "process.detail.status": "Tila", - // "process.detail.create" : "Create similar process", + // "process.detail.create": "Create similar process", "process.detail.create": "Luo vastaava prosessi", + // "process.detail.actions": "Actions", + "process.detail.actions": "Toiminnot", + // "process.detail.delete.button": "Delete process", + "process.detail.delete.button": "Poista prosessi", - // "process.overview.table.finish" : "Finish time", - "process.overview.table.finish": "Lopetusaika", + // "process.detail.delete.header": "Delete process", + "process.detail.delete.header": "Poista prosessi", - // "process.overview.table.id" : "Process ID", + // "process.detail.delete.body": "Are you sure you want to delete the current process?", + "process.detail.delete.body": "Haluatko varmasti poistaa nykyisen prosessin?", + + // "process.detail.delete.cancel": "Cancel", + "process.detail.delete.cancel": "Peruuta", + + // "process.detail.delete.confirm": "Delete process", + "process.detail.delete.confirm": "Poista prosessi", + + // "process.detail.delete.success": "The process was successfully deleted.", + "process.detail.delete.success": "Prosessi on poistettu.", + + // "process.detail.delete.error": "Something went wrong when deleting the process", + "process.detail.delete.error": "Virhe prosessia poistettaessa", + + // "process.overview.table.finish": "Finish time (UTC)", + "process.overview.table.finish": "Lopetusaika (UTC)", + + // "process.overview.table.id": "Process ID", "process.overview.table.id": "Prosessin ID", - // "process.overview.table.name" : "Name", + // "process.overview.table.name": "Name", "process.overview.table.name": "Nimi", - // "process.overview.table.start" : "Start time", - "process.overview.table.start": "Aloitusaika", + // "process.overview.table.start": "Start time (UTC)", + "process.overview.table.start": "Aloitusaika (UTC)", - // "process.overview.table.status" : "Status", + // "process.overview.table.status": "Status", "process.overview.table.status": "Tila", - // "process.overview.table.user" : "User", + // "process.overview.table.user": "User", "process.overview.table.user": "Käyttäjä", // "process.overview.title": "Processes Overview", @@ -3548,6 +4807,32 @@ // "process.overview.new": "New", "process.overview.new": "Uusi", + // "process.overview.table.actions": "Actions", + "process.overview.table.actions": "Toiminnot", + + // "process.overview.delete": "Delete {{count}} processes", + "process.overview.delete": "Poista {{count}} prosessi(a)", + + // "process.overview.delete.clear": "Clear delete selection", + "process.overview.delete.clear": "Tyhjennä poistettavien valinta", + + // "process.overview.delete.processing": "{{count}} process(es) are being deleted. Please wait for the deletion to fully complete. Note that this can take a while.", + "process.overview.delete.processing": "{{count}} prosessi(a) poistetaan. Odota poiston päättymistä. Poisto saattaa kestää hetken.", + + // "process.overview.delete.body": "Are you sure you want to delete {{count}} process(es)?", + "process.overview.delete.body": "Haluatko varmasti poistaa {{count}} prosessin/prosessia?", + + // "process.overview.delete.header": "Delete processes", + "process.overview.delete.header": "Poista prosessi", + + // "process.bulk.delete.error.head": "Error on deleteing process", + "process.bulk.delete.error.head": "Virhe poistettaessa prosessia", + + // "process.bulk.delete.error.body": "The process with ID {{processId}} could not be deleted. The remaining processes will continue being deleted. ", + "process.bulk.delete.error.body": "Prosessia, jonka ID on {{processId}}, ei voitu poistaa. Muiden prosessien poistamista jatketaan.", + + // "process.bulk.delete.success": "{{count}} process(es) have been succesfully deleted", + "process.bulk.delete.success": "{{count}} prosessi(a) poistettu", // "profile.breadcrumbs": "Update Profile", "profile.breadcrumbs": "Päivitä profiili", @@ -3558,11 +4843,14 @@ // "profile.card.security": "Security", "profile.card.security": "Suojaus", - // "profile.form.submit": "Update Profile", - "profile.form.submit": "Päivitä profiili", + // "profile.form.submit": "Save", + "profile.form.submit": "Tallenna", // "profile.groups.head": "Authorization groups you belong to", - "profile.groups.head": "Ryhmät, joihin kuulut", + "profile.groups.head": "Käyttöoikeusryhmät, joihin kuulut", + + // "profile.special.groups.head": "Authorization special groups you belong to", + "profile.special.groups.head": "Erityiset käyttöoikeusryhmät, joihin kuulut", // "profile.head": "Update Profile", "profile.head": "Päivitä profiili", @@ -3603,11 +4891,8 @@ // "profile.security.form.error.matching-passwords": "The passwords do not match.", "profile.security.form.error.matching-passwords": "Salasanat eivät täsmää.", - // "profile.security.form.error.password-length": "The password should be at least 6 characters long.", - "profile.security.form.error.password-length": "Salasanan on oltava vähintään 6 merkkiä pitkä.", - - // "profile.security.form.info": "Optionally, you can enter a new password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", - "profile.security.form.info": "Voit kirjoittaa uuden salasanan alla olevaan kenttään ja varmentaa sen kirjoittamalla sen uudelleen seuraavaan kenttään. Salasanan pituus on vähintään kuusi merkkiä.", + // "profile.security.form.info": "Optionally, you can enter a new password in the box below, and confirm it by typing it again into the second box.", + "profile.security.form.info": "Voit kirjoittaa uuden salasanan alla olevaan kenttään ja varmentaa sen kirjoittamalla sen uudelleen seuraavaan kenttään.", // "profile.security.form.label.password": "Password", "profile.security.form.label.password": "Salasana", @@ -3615,6 +4900,9 @@ // "profile.security.form.label.passwordrepeat": "Retype to confirm", "profile.security.form.label.passwordrepeat": "Kirjoita uudelleen", + // "profile.security.form.label.current-password": "Current password", + "profile.security.form.label.current-password": "Nykyinen salasana", + // "profile.security.form.notifications.success.content": "Your changes to the password were saved.", "profile.security.form.notifications.success.content": "Muuttunut salasana on tallennettu.", @@ -3624,16 +4912,20 @@ // "profile.security.form.notifications.error.title": "Error changing passwords", "profile.security.form.notifications.error.title": "Virhe salasanaa muutettaessa", - // "profile.security.form.notifications.error.not-long-enough": "The password has to be at least 6 characters long.", - "profile.security.form.notifications.error.not-long-enough": "Salasanan on oltava vähintään 6 merkkiä pitkä.", + // "profile.security.form.notifications.error.change-failed": "An error occurred while trying to change the password. Please check if the current password is correct.", + "profile.security.form.notifications.error.change-failed": "Tapahtui virhe salasanaa muutettaessa. Tarkista, että nykyinen salasana on oikea.", // "profile.security.form.notifications.error.not-same": "The provided passwords are not the same.", "profile.security.form.notifications.error.not-same": "Annetut salasanat eivät täsmää.", + // "profile.security.form.notifications.error.general": "Please fill required fields of security form.", + "profile.security.form.notifications.error.general": "Täytä suojauslomakkeen vaaditut kentät.", + // "profile.title": "Update Profile", "profile.title": "Päivitä profiili", - + // "profile.card.researcher": "Researcher Profile", + "profile.card.researcher": "Tutkijaprofiili", // "project.listelement.badge": "Research Project", "project.listelement.badge": "Tutkimusprojekti", @@ -3668,7 +4960,8 @@ // "project.search.results.head": "Project Search Results", "project.search.results.head": "Projektihaun tulokset", - + // "project-relationships.search.results.head": "Project Search Results", + "project-relationships.search.results.head": "Projektihaun tulokset", // "publication.listelement.badge": "Publication", "publication.listelement.badge": "Julkaisu", @@ -3697,9 +4990,20 @@ // "publication.search.results.head": "Publication Search Results", "publication.search.results.head": "Aineistohaun tulokset", - // "publication.search.title": "DSpace Angular :: Publication Search", - "publication.search.title": "DSpace Angular :: Aineistohaku", + // "publication-relationships.search.results.head": "Publication Search Results", + "publication-relationships.search.results.head": "Aineistohaun tulokset", + // "publication.search.title": "Publication Search", + "publication.search.title": "Aineistohaku", + + // "media-viewer.next": "Next", + "media-viewer.next": "Seuraava", + + // "media-viewer.previous": "Previous", + "media-viewer.previous": "Edellinen", + + // "media-viewer.playlist": "Playlist", + "media-viewer.playlist": "Soittolista", // "register-email.title": "New user registration", "register-email.title": "Uuden käyttäjän rekisteröinti", @@ -3734,8 +5038,8 @@ // "register-page.create-profile.security.header": "Security", "register-page.create-profile.security.header": "Suojaus", - // "register-page.create-profile.security.info": "Please enter a password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", - "register-page.create-profile.security.info": "Syötä salasana alla olevaan kenttään ja vahvista se kirjoittamalla salasana uudelleen seuraavaan kenttään. Salasanan on oltava vähintään kuusi merkkiä pitkä.", + // "register-page.create-profile.security.info": "Please enter a password in the box below, and confirm it by typing it again into the second box.", + "register-page.create-profile.security.info": "Syötä salasana alla olevaan kenttään ja vahvista se kirjoittamalla salasana uudelleen seuraavaan kenttään.", // "register-page.create-profile.security.label.password": "Password *", "register-page.create-profile.security.label.password": "Salasana *", @@ -3749,14 +5053,11 @@ // "register-page.create-profile.security.error.matching-passwords": "The passwords do not match.", "register-page.create-profile.security.error.matching-passwords": "Salasanat eivät täsmää.", - // "register-page.create-profile.security.error.password-length": "The password should be at least 6 characters long.", - "register-page.create-profile.security.error.password-length": "Salasanan on oltava vähintään 6 merkkiä pitkä.", - // "register-page.create-profile.submit": "Complete Registration", "register-page.create-profile.submit": "Viimeistele rekisteröinti", // "register-page.create-profile.submit.error.content": "Something went wrong while registering a new user.", - "register-page.create-profile.submit.error.content": "Tapahtui virhe uuden käyttäjän rekisteröinnissä.", + "register-page.create-profile.submit.error.content": "Virhe uuden käyttäjän rekisteröinnissä.", // "register-page.create-profile.submit.error.head": "Registration failed", "register-page.create-profile.submit.error.head": "Rekisteröinti epäonnistui", @@ -3767,7 +5068,6 @@ // "register-page.create-profile.submit.success.head": "Registration completed", "register-page.create-profile.submit.success.head": "Rekisteröinti valmis", - // "register-page.registration.header": "New user registration", "register-page.registration.header": "Uuden käyttäjän rekisteröinti", @@ -3780,8 +5080,11 @@ // "register-page.registration.email.error.required": "Please fill in an email address", "register-page.registration.email.error.required": "Anna sähköpostiosoite", - // "register-page.registration.email.error.pattern": "Please fill in a valid email address", - "register-page.registration.email.error.pattern": "Anna toimiva sähköpostiosoite, ole hyvä", + // "register-page.registration.email.error.not-email-form": "Please fill in a valid email address.", + "register-page.registration.email.error.not-email-form": "Anna toimiva sähköpostiosoite", + + // "register-page.registration.email.error.not-valid-domain": "Use email with allowed domains: {{ domains }}", + "register-page.registration.email.error.not-valid-domain": "Käytä sähköpostiosoitetta näillä verkkoalueilla: {{ domains }}", // "register-page.registration.email.hint": "This address will be verified and used as your login name.", "register-page.registration.email.hint": "Osoite varmistetaan, ja se toimii käyttäjätunnuksenasi kirjautumisessa.", @@ -3801,7 +5104,29 @@ // "register-page.registration.error.content": "An error occured when registering the following email address: {{ email }}", "register-page.registration.error.content": "Virhe rekisteröitäessä tätä sähköpostiosoitetta: {{ email }}", + // "register-page.registration.error.recaptcha": "Error when trying to authenticate with recaptcha", + "register-page.registration.error.recaptcha": "Virhe autentikoitaessa recaptcha-toiminnolla", + // "register-page.registration.google-recaptcha.must-accept-cookies": "In order to register you must accept the Registration and Password recovery (Google reCaptcha) cookies.", + "register-page.registration.google-recaptcha.must-accept-cookies": "Rekisteröityäksesi sinun on hyväksyttävä Rekisteröinnin ja salasanan palauttamisen (Google reCaptcha) evästeet.", + + // "register-page.registration.error.maildomain": "This email address is not on the list of domains who can register. Allowed domains are {{ domains }}", + "register-page.registration.error.maildomain": "Annettu sähköpostiosoite ei ole rekisteröinnille sallittujen verkkoalueiden joukossa. Sallitut verkkoalueet ovat {{ domains }}", + + // "register-page.registration.google-recaptcha.open-cookie-settings": "Open cookie settings", + "register-page.registration.google-recaptcha.open-cookie-settings": "Avaa evästeasetukset", + + // "register-page.registration.google-recaptcha.notification.title": "Google reCaptcha", + "register-page.registration.google-recaptcha.notification.title": "Google reCaptcha", + + // "register-page.registration.google-recaptcha.notification.message.error": "An error occurred during reCaptcha verification", + "register-page.registration.google-recaptcha.notification.message.error": "Virhe reCaptcha-todennuksessa", + + // "register-page.registration.google-recaptcha.notification.message.expired": "Verification expired. Please verify again.", + "register-page.registration.google-recaptcha.notification.message.expired": "Todentaminen vanhentunut. Todenna uudelleen.", + + // "register-page.registration.info.maildomain": "Accounts can be registered for mail addresses of the domains", + "register-page.registration.info.maildomain": "Tili voidaan rekisteröidä näiden verkkoalueiden sähköpostiosoitteille", // "relationships.add.error.relationship-type.content": "No suitable match could be found for relationship type {{ type }} between the two items", "relationships.add.error.relationship-type.content": "Ei {{ type }}-tyyppistä yhteysvastaavuutta kahden tietueen välillä", @@ -3857,7 +5182,23 @@ // "relationships.isContributorOf": "Contributors", "relationships.isContributorOf": "Muut tekijät", + // "relationships.isContributorOf.OrgUnit": "Contributor (Organizational Unit)", + "relationships.isContributorOf.OrgUnit": "Osallistuja (Organisaatioyksikkö)", + // "relationships.isContributorOf.Person": "Contributor", + "relationships.isContributorOf.Person": "Osallistuja", + + // "relationships.isFundingAgencyOf.OrgUnit": "Funder", + "relationships.isFundingAgencyOf.OrgUnit": "Rahoittaja", + + // "repository.image.logo": "Repository logo", + "repository.image.logo": "Julkaisuarkiston logo", + + // "repository.title": "DSpace Repository", + "repository.title": "Julkaisuarkisto", + + // "repository.title.prefix": "DSpace Repository :: ", + "repository.title.prefix": "Julkaisuarkisto :: ", // "resource-policies.add.button": "Add", "resource-policies.add.button": "Lisää", @@ -3910,6 +5251,12 @@ // "resource-policies.edit.page.failure.content": "An error occurred while editing the resource policy.", "resource-policies.edit.page.failure.content": "Virhe muokattaessa resurssikäytäntöä.", + // "resource-policies.edit.page.target-failure.content": "An error occurred while editing the target (ePerson or group) of the resource policy.", + "resource-policies.edit.page.target-failure.content": "Tapahtui virhe muokattaessa resurssikäytännön kohdetta (käyttäjä tai ryhmä).", + + // "resource-policies.edit.page.other-failure.content": "An error occurred while editing the resource policy. The target (ePerson or group) has been successfully updated.", + "resource-policies.edit.page.other-failure.content": "Tapahtui virhe resurssikäytäntöä muokattaessa. Kohde (käyttäjä tai ryhmä) on päivitetty onnistuneesti.", + // "resource-policies.edit.page.success.content": "Operation successful", "resource-policies.edit.page.success.content": "Toiminto onnistui", @@ -3943,10 +5290,25 @@ // "resource-policies.form.eperson-group-list.table.headers.name": "Name", "resource-policies.form.eperson-group-list.table.headers.name": "Nimi", + // "resource-policies.form.eperson-group-list.modal.header": "Cannot change type", + "resource-policies.form.eperson-group-list.modal.header": "Tyypin muuttaminen ei onnistu", + + // "resource-policies.form.eperson-group-list.modal.text1.toGroup": "It is not possible to replace an ePerson with a group.", + "resource-policies.form.eperson-group-list.modal.text1.toGroup": "Käyttäjän korvaaminen ryhmällä ei ole mahdollista.", + + // "resource-policies.form.eperson-group-list.modal.text1.toEPerson": "It is not possible to replace a group with an ePerson.", + "resource-policies.form.eperson-group-list.modal.text1.toEPerson": "Ryhmän korvaaminen käyttäjällä ei ole mahdollista.", + + // "resource-policies.form.eperson-group-list.modal.text2": "Delete the current resource policy and create a new one with the desired type.", + "resource-policies.form.eperson-group-list.modal.text2": "Poista nykyinen resurssikäytäntö ja luo uusi halutulla tyypillä.", + + // "resource-policies.form.eperson-group-list.modal.close": "Ok", + "resource-policies.form.eperson-group-list.modal.close": "Ok", + // "resource-policies.form.date.end.label": "End Date", "resource-policies.form.date.end.label": "Loppupäivämäärä", - // "resource-policies.form.date.start.label": "Start Date + // "resource-policies.form.date.start.label": "Start Date", "resource-policies.form.date.start.label": "Alkupäivämäärä", // "resource-policies.form.description.label": "Description", @@ -4009,21 +5371,19 @@ // "resource-policies.table.headers.title.for.collection": "Policies for Collection", "resource-policies.table.headers.title.for.collection": "Kokoelmakäytännöt", - - // "search.description": "", "search.description": "", // "search.switch-configuration.title": "Show", "search.switch-configuration.title": "Näytä", - // "search.title": "DSpace Angular :: Search", - "search.title": "DSpace Angular :: Hae", + // "search.title": "Search", + "search.title": "Hae", // "search.breadcrumbs": "Search", "search.breadcrumbs": "Hae", - // "search.search-form.placeholder": "Search the repository ...", + // "search.search-form.placeholder": "Search the repository ...", "search.search-form.placeholder": "Hae julkaisuarkistosta ...", // "search.filters.applied.f.author": "Author", @@ -4038,7 +5398,7 @@ // "search.filters.applied.f.dateSubmitted": "Date submitted", "search.filters.applied.f.dateSubmitted": "Tallennusajankohta", - // "search.filters.applied.f.discoverable": "Private", + // "search.filters.applied.f.discoverable": "Non-discoverable", "search.filters.applied.f.discoverable": "Yksityinen", // "search.filters.applied.f.entityType": "Item Type", @@ -4068,28 +5428,41 @@ // "search.filters.applied.f.birthDate.min": "Start birth date", "search.filters.applied.f.birthDate.min": "Varhaisin syntymäaika", + // "search.filters.applied.f.supervisedBy": "Supervised by", + "search.filters.applied.f.supervisedBy": "Ohjaajana:", + // "search.filters.applied.f.withdrawn": "Withdrawn", "search.filters.applied.f.withdrawn": "Poistettu käytöstä", - - // "search.filters.filter.author.head": "Author", "search.filters.filter.author.head": "Tekijä", // "search.filters.filter.author.placeholder": "Author name", "search.filters.filter.author.placeholder": "Tekijän nimi", + // "search.filters.filter.author.label": "Search author name", + "search.filters.filter.author.label": "Hae tekijän nimellä", + // "search.filters.filter.birthDate.head": "Birth Date", "search.filters.filter.birthDate.head": "Syntymäaika", // "search.filters.filter.birthDate.placeholder": "Birth Date", "search.filters.filter.birthDate.placeholder": "Syntymäaika", + // "search.filters.filter.birthDate.label": "Search birth date", + "search.filters.filter.birthDate.label": "Hae syntymäajalla", + + // "search.filters.filter.collapse": "Collapse filter", + "search.filters.filter.collapse": "Sulje suodatin", + // "search.filters.filter.creativeDatePublished.head": "Date Published", - "search.filters.filter.creativeDatePublished.head": "Julkaisuajankohta", + "search.filters.filter.creativeDatePublished.head": "Julkaisuaika", // "search.filters.filter.creativeDatePublished.placeholder": "Date Published", - "search.filters.filter.creativeDatePublished.placeholder": "Julkaisuajankohta", + "search.filters.filter.creativeDatePublished.placeholder": "Julkaisuaika", + + // "search.filters.filter.creativeDatePublished.label": "Search date published", + "search.filters.filter.creativeDatePublished.label": "Hae julkaisuaikaa", // "search.filters.filter.creativeWorkEditor.head": "Editor", "search.filters.filter.creativeWorkEditor.head": "Toimittaja", @@ -4097,26 +5470,41 @@ // "search.filters.filter.creativeWorkEditor.placeholder": "Editor", "search.filters.filter.creativeWorkEditor.placeholder": "Toimittaja", + // "search.filters.filter.creativeWorkEditor.label": "Search editor", + "search.filters.filter.creativeWorkEditor.label": "Hae toimittajaa", + // "search.filters.filter.creativeWorkKeywords.head": "Subject", "search.filters.filter.creativeWorkKeywords.head": "Asiasana", // "search.filters.filter.creativeWorkKeywords.placeholder": "Subject", "search.filters.filter.creativeWorkKeywords.placeholder": "Asiasana", + // "search.filters.filter.creativeWorkKeywords.label": "Search subject", + "search.filters.filter.creativeWorkKeywords.label": "Hae asiasanaa", + // "search.filters.filter.creativeWorkPublisher.head": "Publisher", "search.filters.filter.creativeWorkPublisher.head": "Julkaisija", // "search.filters.filter.creativeWorkPublisher.placeholder": "Publisher", "search.filters.filter.creativeWorkPublisher.placeholder": "Julkaisija", + // "search.filters.filter.creativeWorkPublisher.label": "Search publisher", + "search.filters.filter.creativeWorkPublisher.label": "Hae julkaisijaa", + // "search.filters.filter.dateIssued.head": "Date", "search.filters.filter.dateIssued.head": "Päivämäärä", - // "search.filters.filter.dateIssued.max.placeholder": "Minimum Date", - "search.filters.filter.dateIssued.max.placeholder": "Alkupäivämäärä", + // "search.filters.filter.dateIssued.max.placeholder": "Maximum Date", + "search.filters.filter.dateIssued.max.placeholder": "Suurin päivämäärä", - // "search.filters.filter.dateIssued.min.placeholder": "Maximum Date", - "search.filters.filter.dateIssued.min.placeholder": "Loppupäivämäärä", + // "search.filters.filter.dateIssued.max.label": "End", + "search.filters.filter.dateIssued.max.label": "Loppu", + + // "search.filters.filter.dateIssued.min.placeholder": "Minimum Date", + "search.filters.filter.dateIssued.min.placeholder": "Pienin päivämäärä", + + // "search.filters.filter.dateIssued.min.label": "Start", + "search.filters.filter.dateIssued.min.label": "Alku", // "search.filters.filter.dateSubmitted.head": "Date submitted", "search.filters.filter.dateSubmitted.head": "Tallennusajankohta", @@ -4124,7 +5512,10 @@ // "search.filters.filter.dateSubmitted.placeholder": "Date submitted", "search.filters.filter.dateSubmitted.placeholder": "Tallennnusajankohta", - // "search.filters.filter.discoverable.head": "Private", + // "search.filters.filter.dateSubmitted.label": "Search date submitted", + "search.filters.filter.dateSubmitted.label": "Hakupäivä lähetetty", + + // "search.filters.filter.discoverable.head": "Non-discoverable", "search.filters.filter.discoverable.head": "Yksityinen", // "search.filters.filter.withdrawn.head": "Withdrawn", @@ -4136,6 +5527,12 @@ // "search.filters.filter.entityType.placeholder": "Item Type", "search.filters.filter.entityType.placeholder": "Tietueen tyyppi", + // "search.filters.filter.entityType.label": "Search item type", + "search.filters.filter.entityType.label": "Hae tietueen tyyppiä", + + // "search.filters.filter.expand": "Expand filter", + "search.filters.filter.expand": "Laajenna suodinta", + // "search.filters.filter.has_content_in_original_bundle.head": "Has files", "search.filters.filter.has_content_in_original_bundle.head": "On tiedostoja", @@ -4145,53 +5542,80 @@ // "search.filters.filter.itemtype.placeholder": "Type", "search.filters.filter.itemtype.placeholder": "Tyyppi", + // "search.filters.filter.itemtype.label": "Search type", + "search.filters.filter.itemtype.label": "Hakutyyppi", + // "search.filters.filter.jobTitle.head": "Job Title", "search.filters.filter.jobTitle.head": "Tehtävänimike", // "search.filters.filter.jobTitle.placeholder": "Job Title", "search.filters.filter.jobTitle.placeholder": "Tehtävänimike", + // "search.filters.filter.jobTitle.label": "Search job title", + "search.filters.filter.jobTitle.label": "Hae tehtävänimikettä", + // "search.filters.filter.knowsLanguage.head": "Known language", "search.filters.filter.knowsLanguage.head": "Tunnettu kieli", // "search.filters.filter.knowsLanguage.placeholder": "Known language", "search.filters.filter.knowsLanguage.placeholder": "Tunnettu kieli", + // "search.filters.filter.knowsLanguage.label": "Search known language", + "search.filters.filter.knowsLanguage.label": "Hae tunnettua kieltä", + // "search.filters.filter.namedresourcetype.head": "Status", "search.filters.filter.namedresourcetype.head": "Tila", // "search.filters.filter.namedresourcetype.placeholder": "Status", "search.filters.filter.namedresourcetype.placeholder": "Tila", + // "search.filters.filter.namedresourcetype.label": "Search status", + "search.filters.filter.namedresourcetype.label": "Haun tila", + // "search.filters.filter.objectpeople.head": "People", "search.filters.filter.objectpeople.head": "Käyttäjät", // "search.filters.filter.objectpeople.placeholder": "People", "search.filters.filter.objectpeople.placeholder": "Käyttäjät", + // "search.filters.filter.objectpeople.label": "Search people", + "search.filters.filter.objectpeople.label": "Hae ihmisiä", + // "search.filters.filter.organizationAddressCountry.head": "Country", "search.filters.filter.organizationAddressCountry.head": "Maa", // "search.filters.filter.organizationAddressCountry.placeholder": "Country", "search.filters.filter.organizationAddressCountry.placeholder": "Maa", + // "search.filters.filter.organizationAddressCountry.label": "Search country", + "search.filters.filter.organizationAddressCountry.label": "Hae maata", + // "search.filters.filter.organizationAddressLocality.head": "City", "search.filters.filter.organizationAddressLocality.head": "Kaupunki", // "search.filters.filter.organizationAddressLocality.placeholder": "City", "search.filters.filter.organizationAddressLocality.placeholder": "Kaupunki", + // "search.filters.filter.organizationAddressLocality.label": "Search city", + "search.filters.filter.organizationAddressLocality.label": "Hae kaupunkia", + // "search.filters.filter.organizationFoundingDate.head": "Date Founded", "search.filters.filter.organizationFoundingDate.head": "Perustamispäivämäärä", // "search.filters.filter.organizationFoundingDate.placeholder": "Date Founded", "search.filters.filter.organizationFoundingDate.placeholder": "Perustamispäivämäärä", + // "search.filters.filter.organizationFoundingDate.label": "Search date founded", + "search.filters.filter.organizationFoundingDate.label": "Hae perustamispäivämäärää", + // "search.filters.filter.scope.head": "Scope", "search.filters.filter.scope.head": "Rajaus", // "search.filters.filter.scope.placeholder": "Scope filter", - "search.filters.filter.scope.placeholder": "Haun tarkennus", + "search.filters.filter.scope.placeholder": "Hakusuodattimet", + + // "search.filters.filter.scope.label": "Search scope filter", + "search.filters.filter.scope.label": "Hae hakusuodatinta", // "search.filters.filter.show-less": "Collapse", "search.filters.filter.show-less": "Sulje", @@ -4205,13 +5629,29 @@ // "search.filters.filter.subject.placeholder": "Subject", "search.filters.filter.subject.placeholder": "Asiasana", + // "search.filters.filter.subject.label": "Search subject", + "search.filters.filter.subject.label": "Hae asiasanaa", + // "search.filters.filter.submitter.head": "Submitter", "search.filters.filter.submitter.head": "Tallentaja", // "search.filters.filter.submitter.placeholder": "Submitter", "search.filters.filter.submitter.placeholder": "Tallentaja", + // "search.filters.filter.submitter.label": "Search submitter", + "search.filters.filter.submitter.label": "Hae tallentajaa", + // "search.filters.filter.show-tree": "Browse {{ name }} tree", + "search.filters.filter.show-tree": "Selaa {{ name }}-puuta", + + // "search.filters.filter.supervisedBy.head": "Supervised By", + "search.filters.filter.supervisedBy.head": "Ohjaajana:", + + // "search.filters.filter.supervisedBy.placeholder": "Supervised By", + "search.filters.filter.supervisedBy.placeholder": "Ohjaajana:", + + // "search.filters.filter.supervisedBy.label": "Search Supervised By", + "search.filters.filter.supervisedBy.label": "Hae ohjaajan mukaan", // "search.filters.entityType.JournalIssue": "Journal Issue", "search.filters.entityType.JournalIssue": "Kausijulkaisun numero", @@ -4240,25 +5680,23 @@ // "search.filters.withdrawn.false": "No", "search.filters.withdrawn.false": "Ei", - // "search.filters.head": "Filters", "search.filters.head": "Suodattimet", // "search.filters.reset": "Reset filters", "search.filters.reset": "Tyhjennä suodattimet", - + // "search.filters.search.submit": "Submit", + "search.filters.search.submit": "Lähetä", // "search.form.search": "Search", "search.form.search": "Hae", - // "search.form.search_dspace": "Search DSpace", - "search.form.search_dspace": "Hae arkistosta", - - // "search.form.search_mydspace": "Search MyDSpace", - "search.form.search_mydspace": "Hae omista tiedoista", - + // "search.form.search_dspace": "All repository", + "search.form.search_dspace": "Koko julkaisuarkisto", + // "search.form.scope.all": "All of DSpace", + "search.form.scope.all": "Koko julkaisuarkisto", // "search.results.head": "Search Results", "search.results.head": "Hakutulokset", @@ -4272,7 +5710,17 @@ // "search.results.empty": "Your search returned no results.", "search.results.empty": "Ei hakutuloksia.", + // "search.results.view-result": "View", + "search.results.view-result": "Näytä", + // "search.results.response.500": "An error occurred during query execution, please try again later", + "search.results.response.500": "Virhe hakua suoritettaessa, yritä myöhemmin uudelleen", + + // "default.search.results.head": "Search Results", + "default.search.results.head": "Hakutulokset", + + // "default-relationships.search.results.head": "Search Results", + "default-relationships.search.results.head": "Hakutulokset", // "search.sidebar.close": "Back to results", "search.sidebar.close": "Paluu tuloksiin", @@ -4295,8 +5743,6 @@ // "search.sidebar.settings.title": "Settings", "search.sidebar.settings.title": "Asetukset", - - // "search.view-switch.show-detail": "Show detail", "search.view-switch.show-detail": "Näytä lisätiedot", @@ -4306,8 +5752,6 @@ // "search.view-switch.show-list": "Show as list", "search.view-switch.show-list": "Näytä luettelona", - - // "sorting.ASC": "Ascending", "sorting.ASC": "Laskeva", @@ -4320,10 +5764,29 @@ // "sorting.dc.title.DESC": "Title Descending", "sorting.dc.title.DESC": "Nimeke (Ö-A)", - // "sorting.score.DESC": "Relevance", - "sorting.score.DESC": "Relevanssi", + // "sorting.score.ASC": "Least Relevant", + "sorting.score.ASC": "Vähiten relevantti", + // "sorting.score.DESC": "Most Relevant", + "sorting.score.DESC": "Relevantein", + // "sorting.dc.date.issued.ASC": "Date Issued Ascending", + "sorting.dc.date.issued.ASC": "Julkaisuaika nouseva", + + // "sorting.dc.date.issued.DESC": "Date Issued Descending", + "sorting.dc.date.issued.DESC": "Julkaisuaika laskeva", + + // "sorting.dc.date.accessioned.ASC": "Accessioned Date Ascending", + "sorting.dc.date.accessioned.ASC": "Hyväksymispäivä nouseva", + + // "sorting.dc.date.accessioned.DESC": "Accessioned Date Descending", + "sorting.dc.date.accessioned.DESC": "Hyväksymispäivä laskeva", + + // "sorting.lastModified.ASC": "Last modified Ascending", + "sorting.lastModified.ASC": "Viimeksi muokattu nouseva", + + // "sorting.lastModified.DESC": "Last modified Descending", + "sorting.lastModified.DESC": "Viimeksi muokattu laskeva", // "statistics.title": "Statistics", "statistics.title": "Tilastot", @@ -4358,12 +5821,19 @@ // "statistics.table.header.views": "Views", "statistics.table.header.views": "Katseluita", + // "statistics.table.no-name": "(object name could not be loaded)", + "statistics.table.no-name": "(kohteen nimeä ei voitu ladata)", + // "submission.edit.breadcrumbs": "Edit Submission", + "submission.edit.breadcrumbs": "Muokkaa tallennusta", // "submission.edit.title": "Edit Submission", "submission.edit.title": "Muokkaa tallennusta", - // "submission.general.cannot_submit": "You have not the privilege to make a new submission.", + // "submission.general.cancel": "Cancel", + "submission.general.cancel": "Peruuta", + + // "submission.general.cannot_submit": "You don't have permission to make a new submission.", "submission.general.cannot_submit": "Sinulla ei ole oikeuksia aineiston tallentamiseen.", // "submission.general.deposit": "Deposit", @@ -4384,21 +5854,50 @@ // "submission.general.discard.submit": "Discard", "submission.general.discard.submit": "Hylkää", + // "submission.general.info.saved": "Saved", + "submission.general.info.saved": "Tallennettu", + + // "submission.general.info.pending-changes": "Unsaved changes", + "submission.general.info.pending-changes": "Tallentamattomat muutokset", + // "submission.general.save": "Save", "submission.general.save": "Tallenna", // "submission.general.save-later": "Save for later", "submission.general.save-later": "Tallenna myöhemmäksi", - // "submission.import-external.page.title": "Import metadata from an external source", "submission.import-external.page.title": "Importoi metadata ulkoisesta lähteestä", // "submission.import-external.title": "Import metadata from an external source", "submission.import-external.title": "Importoi metadata ulkoisesta lähteestä", + // "submission.import-external.title.Journal": "Import a journal from an external source", + "submission.import-external.title.Journal": "Importoi Muokkaa kausijulkaisu ulkoisesta lähteestä", + + // "submission.import-external.title.JournalIssue": "Import a journal issue from an external source", + "submission.import-external.title.JournalIssue": "Importoi kausijulkaisun numero ulkoisesta lähteestä", + + // "submission.import-external.title.JournalVolume": "Import a journal volume from an external source", + "submission.import-external.title.JournalVolume": "Importoi kausijulkaisun vuosikerta ulkoisesta lähteestä", + + // "submission.import-external.title.OrgUnit": "Import a publisher from an external source", + "submission.import-external.title.OrgUnit": "Importoi julkaisija ulkoisesta lähteestä", + + // "submission.import-external.title.Person": "Import a person from an external source", + "submission.import-external.title.Person": "Importoi käyttäjä ulkoisesta lähteestä", + + // "submission.import-external.title.Project": "Import a project from an external source", + "submission.import-external.title.Project": "Importoi projekti ulkoisesta lähteestä", + + // "submission.import-external.title.Publication": "Import a publication from an external source", + "submission.import-external.title.Publication": "Importoi julkaisu ulkoisesta lähteestä", + + // "submission.import-external.title.none": "Import metadata from an external source", + "submission.import-external.title.none": "Importoi metadata ulkoisesta lähteestä", + // "submission.import-external.page.hint": "Enter a query above to find items from the web to import in to DSpace.", - "submission.import-external.page.hint": "Anna hakulauseke etsiäksesi verkosta arkistoon importoitavia tietueita.", + "submission.import-external.page.hint": "Anna hakulauseke etsiäksesi verkosta julkaisuarkistoon importoitavia tietueita.", // "submission.import-external.back-to-my-dspace": "Back to MyDSpace", "submission.import-external.back-to-my-dspace": "Paluu omiin tietoihin", @@ -4418,27 +5917,84 @@ // "submission.import-external.source.arxiv": "arXiv", "submission.import-external.source.arxiv": "arXiv", + // "submission.import-external.source.ads": "NASA/ADS", + "submission.import-external.source.ads": "NASA/ADS", + + // "submission.import-external.source.cinii": "CiNii", + "submission.import-external.source.cinii": "CiNii", + + // "submission.import-external.source.crossref": "CrossRef", + "submission.import-external.source.crossref": "CrossRef", + + // "submission.import-external.source.datacite": "DataCite", + "submission.import-external.source.datacite": "DataCite", + + // "submission.import-external.source.scielo": "SciELO", + "submission.import-external.source.scielo": "SciELO", + + // "submission.import-external.source.scopus": "Scopus", + "submission.import-external.source.scopus": "Scopus", + + // "submission.import-external.source.vufind": "VuFind", + "submission.import-external.source.vufind": "VuFind", + + // "submission.import-external.source.wos": "Web Of Science", + "submission.import-external.source.wos": "Web Of Science", + + // "submission.import-external.source.orcidWorks": "ORCID", + "submission.import-external.source.orcidWorks": "ORCID", + + // "submission.import-external.source.epo": "European Patent Office (EPO)", + "submission.import-external.source.epo": "Euroopan patenttivirasto (EPO)", + // "submission.import-external.source.loading": "Loading ...", "submission.import-external.source.loading": "Ladataan ...", // "submission.import-external.source.sherpaJournal": "SHERPA Journals", "submission.import-external.source.sherpaJournal": "SHERPA-kausijulkaisut", + // "submission.import-external.source.sherpaJournalIssn": "SHERPA Journals by ISSN", + "submission.import-external.source.sherpaJournalIssn": "SHERPA-kausijulkaisut ISSN-tunnuksen mukaan", + // "submission.import-external.source.sherpaPublisher": "SHERPA Publishers", "submission.import-external.source.sherpaPublisher": "SHERPA-kustantajat", + // "submission.import-external.source.openAIREFunding": "Funding OpenAIRE API", + "submission.import-external.source.openAIREFunding": "OpenAIRE API-rahoitus", + // "submission.import-external.source.orcid": "ORCID", "submission.import-external.source.orcid": "ORCID-tunniste", // "submission.import-external.source.pubmed": "Pubmed", "submission.import-external.source.pubmed": "Pubmed", + // "submission.import-external.source.pubmedeu": "Pubmed Europe", + "submission.import-external.source.pubmedeu": "Euroopan Pubmed", + // "submission.import-external.source.lcname": "Library of Congress Names", "submission.import-external.source.lcname": "Library of Congress -nimet", // "submission.import-external.preview.title": "Item Preview", "submission.import-external.preview.title": "Tietueen esikatselu", + // "submission.import-external.preview.title.Publication": "Publication Preview", + "submission.import-external.preview.title.Publication": "Julkaisun esikatselu", + + // "submission.import-external.preview.title.none": "Item Preview", + "submission.import-external.preview.title.none": "Tietueen esikatselu", + + // "submission.import-external.preview.title.Journal": "Journal Preview", + "submission.import-external.preview.title.Journal": "Kausijulkaisun esikatselu", + + // "submission.import-external.preview.title.OrgUnit": "Organizational Unit Preview", + "submission.import-external.preview.title.OrgUnit": "Organisaatioyksikön esikatselu", + + // "submission.import-external.preview.title.Person": "Person Preview", + "submission.import-external.preview.title.Person": "Käyttäjän esikatselu", + + // "submission.import-external.preview.title.Project": "Project Preview", + "submission.import-external.preview.title.Project": "Projektin esikatselu", + // "submission.import-external.preview.subtitle": "The metadata below was imported from an external source. It will be pre-filled when you start the submission.", "submission.import-external.preview.subtitle": "Alla oleva metadata importoitiin ulkoisesta lähteestä. Sillä esitäytetään metadata, kun aloitat tallennuksen.", @@ -4469,6 +6025,48 @@ // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Import remote journal volume", "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Importoi kausijulkaisun vuosikerta ulkoisesta lähteestä", + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Project", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Projekti", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.none": "Import remote item", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.none": "Importoi tietue ulkoisesta lähteestä", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Event": "Import remote event", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Event": "Importoi tapahtuma ulkoisesta lähteestä", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Product": "Import remote product", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Product": "Importoi tuote ulkoisesta lähteestä", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Equipment": "Import remote equipment", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Equipment": "Importoi laite ulkoisesta lähteestä", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.OrgUnit": "Import remote organizational unit", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.OrgUnit": "Importoi organisaatioyksikkö ulkoisesta lähteestä", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Funding": "Import remote fund", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Funding": "Importoi rahoitus ulkoisesta lähteestä", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Person": "Import remote person", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Person": "Importoi käyttäjä ulkoisesta lähteestä", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Patent": "Import remote patent", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Patent": "Importoi patentti ulkoisesta lähteestä", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Project": "Import remote project", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Project": "Importoi projekti ulkoisesta lähteestä", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Import remote publication", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Importoi julkaisu ulkoisesta lähteestä", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "New Entity Added!", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "Uusi entiteetti lisätty", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Project", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Projekti", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Funding OpenAIRE API", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Funding OpenAIRE API-rahoitus", + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Import Remote Author", "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Importoi tekijä ulkoisesta lähteestä", @@ -4562,6 +6160,9 @@ // "submission.sections.describe.relationship-lookup.search-tab.search": "Go", "submission.sections.describe.relationship-lookup.search-tab.search": "Ok", + // "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Search...", + "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Haetaan...", + // "submission.sections.describe.relationship-lookup.search-tab.select-all": "Select all", "submission.sections.describe.relationship-lookup.search-tab.select-all": "Valitse kaikki", @@ -4637,13 +6238,39 @@ // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Search for Organizational Units", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Hae organisaatioyksiköitä", + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Funding OpenAIRE API", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "OpenAIRE API -rahoitus", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projects", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projektit", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Funder of the Project", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Projektin rahoittaja", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor": "Publication of the Author", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor": "Tekijän julkaisu", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Funding OpenAIRE API", + "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "OpenAIRE API API-rahoitus", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Project", + "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Projekti", + + // "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projects", + "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projektit", + + // "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Funder of the Project", + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Projektin rahoittaja", + + // "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Search...", + "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Haetaan...", + // "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Current Selection ({{ count }})", "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Nykyinen valinta ({{ count }})", // "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Journal Issues", "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Kausijulkaisun numerot", - // "submission.sections.describe.relationship-lookup.title.JournalIssue": "Journal Issues", "submission.sections.describe.relationship-lookup.title.JournalIssue": "Kausijulkaisun numerot", @@ -4689,8 +6316,11 @@ // "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Parent Organizational Unit", "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Ylempi organisaatioyksikkö", + // "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor": "Publication", + "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor": "Julkaisu", + // "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Toggle dropdown", - "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Vaihda valikon tilaa", + "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Näytä/piilota pudotusvalikko", // "submission.sections.describe.relationship-lookup.selection-tab.settings": "Settings", "submission.sections.describe.relationship-lookup.selection-tab.settings": "Asetukset", @@ -4767,6 +6397,24 @@ // "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Hakutulokset", + // "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Hakutulokset", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.epo": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.epo": "Hakutulokset", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.scopus": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.scopus": "Hakutulokset", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.scielo": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.scielo": "Hakutulokset", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Hakutulokset", + + // "submission.sections.describe.relationship-lookup.selection-tab.title": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title": "Hakutulokset", + // "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Would you like to save \"{{ value }}\" as a name variant for this person so you and others can reuse it for future submissions? If you don't you can still use it for this submission.", "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Haluatko tallentaa nimen \"{{ value }}\" käyttäjän vaihtoehtoiseksi nimeksi, jota muutkin voivat käyttää uudelleen myös tulevissa tallennuksissa? Ellet tallenna nimeä, voit silti käyttää sitä tässä tallennuksessa.", @@ -4792,14 +6440,17 @@ "submission.sections.ccLicense.option.select": "Valitse vaihtoehto…", // "submission.sections.ccLicense.link": "You’ve selected the following license:", - "submission.sections.ccLicense.link": "Olet valinunt seuraavan lisenssin:", + "submission.sections.ccLicense.link": "Olet valinnut seuraavan lisenssin:", // "submission.sections.ccLicense.confirmation": "I grant the license above", - "submission.sections.ccLicense.confirmation": "Myönnän yllä olevan lisenssin", + "submission.sections.ccLicense.confirmation": "Hyväksyn yllä olevan lisenssin", // "submission.sections.general.add-more": "Add more", "submission.sections.general.add-more": "Lisää enemmän", + // "submission.sections.general.cannot_deposit": "Deposit cannot be completed due to errors in the form.
    Please fill out all required fields to complete the deposit.", + "submission.sections.general.cannot_deposit": "Tallennus ei onnistu, koska lomakkeella on virheitä.
    Täytä kaikki pakolliset kentät viimeistelläksesi tallennuksen.", + // "submission.sections.general.collection": "Collection", "submission.sections.general.collection": "Kokoelma", @@ -4839,7 +6490,26 @@ // "submission.sections.general.sections_not_valid": "There are incomplete sections.", "submission.sections.general.sections_not_valid": "Tallennuksessa keskeneräisiä osioita.", + // "submission.sections.identifiers.info": "The following identifiers will be created for your item:", + "submission.sections.identifiers.info": "Tietueellesi luodaan seuraavat tunnisteet:", + // "submission.sections.identifiers.no_handle": "No handles have been minted for this item.", + "submission.sections.identifiers.no_handle": "Tietueelle ei ole luotu handleja.", + + // "submission.sections.identifiers.no_doi": "No DOIs have been minted for this item.", + "submission.sections.identifiers.no_doi": "Tietueelle ei ole luotu DOI-tunnuksia.", + + // "submission.sections.identifiers.handle_label": "Handle: ", + "submission.sections.identifiers.handle_label": "Handle: ", + + // "submission.sections.identifiers.doi_label": "DOI: ", + "submission.sections.identifiers.doi_label": "DOI: ", + + // "submission.sections.identifiers.otherIdentifiers_label": "Other identifiers: ", + "submission.sections.identifiers.otherIdentifiers_label": "Muut tunnisteet: ", + + // "submission.sections.submit.progressbar.accessCondition": "Item access conditions", + "submission.sections.submit.progressbar.accessCondition": "Tietueen pääsyoikeudet", // "submission.sections.submit.progressbar.CClicense": "Creative commons license", "submission.sections.submit.progressbar.CClicense": "Creative commons -lisenssi", @@ -4859,19 +6529,65 @@ // "submission.sections.submit.progressbar.detect-duplicate": "Potential duplicates", "submission.sections.submit.progressbar.detect-duplicate": "Mahdollisia kaksoiskappaleita", + // "submission.sections.submit.progressbar.identifiers": "Identifiers", + "submission.sections.submit.progressbar.identifiers": "Tunnisteet", + // "submission.sections.submit.progressbar.license": "Deposit license", "submission.sections.submit.progressbar.license": "Tallennuslisenssi", + // "submission.sections.submit.progressbar.sherpapolicy": "Sherpa policies", + "submission.sections.submit.progressbar.sherpapolicy": "Sherpa-käytännöt", + // "submission.sections.submit.progressbar.upload": "Upload files", "submission.sections.submit.progressbar.upload": "Lataa tiedostoja", + // "submission.sections.submit.progressbar.sherpaPolicies": "Publisher open access policy information", + "submission.sections.submit.progressbar.sherpaPolicies": "Tietoa julkaisijan open access -käytännöistä", + // "submission.sections.sherpa-policy.title-empty": "No publisher policy information available. If your work has an associated ISSN, please enter it above to see any related publisher open access policies.", + "submission.sections.sherpa-policy.title-empty": "Ei tietoa julkausijan käytännöistä. Jos työlläsi on ISSN-tunnus, syötä se alapuolella olevan kenttään nähdäksesi siihen liittyvät julkaisijan open access -käytännöt.", + + // "submission.sections.status.errors.title": "Errors", + "submission.sections.status.errors.title": "Virheet", + + // "submission.sections.status.valid.title": "Valid", + "submission.sections.status.valid.title": "Hyväksytty", + + // "submission.sections.status.warnings.title": "Warnings", + "submission.sections.status.warnings.title": "Varoitukset", + + // "submission.sections.status.errors.aria": "has errors", + "submission.sections.status.errors.aria": "sisältää virheitä", + + // "submission.sections.status.valid.aria": "is valid", + "submission.sections.status.valid.aria": "on validi", + + // "submission.sections.status.warnings.aria": "has warnings", + "submission.sections.status.warnings.aria": "sisältää varoituksia", + + // "submission.sections.status.info.title": "Additional Information", + "submission.sections.status.info.title": "Lisätiedot", + + // "submission.sections.status.info.aria": "Additional Information", + "submission.sections.status.info.aria": "Lisätiedot", + + // "submission.sections.toggle.open": "Open section", + "submission.sections.toggle.open": "Avaa osio", + + // "submission.sections.toggle.close": "Close section", + "submission.sections.toggle.close": "Sulje osio", + + // "submission.sections.toggle.aria.open": "Expand {{sectionHeader}} section", + "submission.sections.toggle.aria.open": "Laajenna {{sectionHeader}}-osio", + + // "submission.sections.toggle.aria.close": "Collapse {{sectionHeader}} section", + "submission.sections.toggle.aria.close": "Sulje {{sectionHeader}}-osio", // "submission.sections.upload.delete.confirm.cancel": "Cancel", "submission.sections.upload.delete.confirm.cancel": "Peruuta", // "submission.sections.upload.delete.confirm.info": "This operation can't be undone. Are you sure?", - "submission.sections.upload.delete.confirm.info": "Tätä toimintoa ei voi peruuttaa. Oletko varma?", + "submission.sections.upload.delete.confirm.info": "Tätä toimintoa ei voi perua. Oletko varma?", // "submission.sections.upload.delete.confirm.submit": "Yes, I'm sure", "submission.sections.upload.delete.confirm.submit": "Kyllä, olen varma", @@ -4882,18 +6598,36 @@ // "submission.sections.upload.delete.submit": "Delete", "submission.sections.upload.delete.submit": "Poista", + // "submission.sections.upload.download.title": "Download bitstream", + "submission.sections.upload.download.title": "Lataa tiedosto", + // "submission.sections.upload.drop-message": "Drop files to attach them to the item", "submission.sections.upload.drop-message": "Pudota tiedostot liittääksesi ne tietueeseen", + // "submission.sections.upload.edit.title": "Edit bitstream", + "submission.sections.upload.edit.title": "Muokkaa tiedostoa", + // "submission.sections.upload.form.access-condition-label": "Access condition type", "submission.sections.upload.form.access-condition-label": "Pääsyoikeustyyppi", + // "submission.sections.upload.form.access-condition-hint": "Select an access condition to apply on the bitstream once the item is deposited", + "submission.sections.upload.form.access-condition-hint": "Valitse pääsyoikeus, jota sovelletaan tiedostoon tietueen tallentamisen jälkeen", + // "submission.sections.upload.form.date-required": "Date is required.", "submission.sections.upload.form.date-required": "Päivämäärä on pakollinen tieto.", + // "submission.sections.upload.form.date-required-from": "Grant access from date is required.", + "submission.sections.upload.form.date-required-from": "Pääsyoikeuden alkupäivä on pakollinen tieto.", + + // "submission.sections.upload.form.date-required-until": "Grant access until date is required.", + "submission.sections.upload.form.date-required-until": "Pääsyoikeuden loppupäivä on pakollinen tieto.", + // "submission.sections.upload.form.from-label": "Grant access from", "submission.sections.upload.form.from-label": "Pääsyoikeus alkaa", + // "submission.sections.upload.form.from-hint": "Select the date from which the related access condition is applied", + "submission.sections.upload.form.from-hint": "Valitse päivämäärä josta lukien pääsyoikeutta sovelletaan", + // "submission.sections.upload.form.from-placeholder": "From", "submission.sections.upload.form.from-placeholder": "Alkaen", @@ -4906,6 +6640,9 @@ // "submission.sections.upload.form.until-label": "Grant access until", "submission.sections.upload.form.until-label": "Pääsyoikeus päättyy", + // "submission.sections.upload.form.until-hint": "Select the date until which the related access condition is applied", + "submission.sections.upload.form.until-hint": "Valitse päivämäärä, johon asti pääsyoikeus on voimassa", + // "submission.sections.upload.form.until-placeholder": "Until", "submission.sections.upload.form.until-placeholder": "Asti", @@ -4915,7 +6652,7 @@ // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", "submission.sections.upload.header.policy.default.withlist": "Yksittäisten tiedostojen pääsyrajoitusten lisäksi {{collectionName}}-kokoelmaan ladatut tiedostot ovat seuraavien ryhmien saatavilla:", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", "submission.sections.upload.info": "Tietueen kaikki tiedostot on lueteltu tässä. Voit päivittää tiedoston metadataa ja pääsyehtoja tai ladata lisää tiedostoja raahaamalla ne mihin hyvänsä sivun kohtaan.", // "submission.sections.upload.no-entry": "No", @@ -4936,18 +6673,149 @@ // "submission.sections.upload.upload-successful": "Upload successful", "submission.sections.upload.upload-successful": "Lataus valmis", + // "submission.sections.accesses.form.discoverable-description": "When checked, this item will be discoverable in search/browse. When unchecked, the item will only be available via a direct link and will never appear in search/browse.", + "submission.sections.accesses.form.discoverable-description": "Kun tämä on valittu, tietue on löydettävissä haussa ja selailtaessa. Kun tätä ei ole valittu, tietue on saatavilla vain suoran linkin kautta, eikä se näy haussa tai selailtaessa.", + // "submission.sections.accesses.form.discoverable-label": "Discoverable", + "submission.sections.accesses.form.discoverable-label": "Löydettävissä", - // "submission.submit.title": "Tallennus", - "submission.submit.title": "Julkaisu", + // "submission.sections.accesses.form.access-condition-label": "Access condition type", + "submission.sections.accesses.form.access-condition-label": "Pääsyoikeustyyppi", + // "submission.sections.accesses.form.access-condition-hint": "Select an access condition to apply on the item once it is deposited", + "submission.sections.accesses.form.access-condition-hint": "Valitse pääsyoikeus, jota sovelletaan tietueeseen tallentamisen jälkeen", + // "submission.sections.accesses.form.date-required": "Date is required.", + "submission.sections.accesses.form.date-required": "Päivämäärä on pakollinen tieto.", + + // "submission.sections.accesses.form.date-required-from": "Grant access from date is required.", + "submission.sections.accesses.form.date-required-from": "Pääsyoikeuden alkupäivä on pakollinen tieto.", + + // "submission.sections.accesses.form.date-required-until": "Grant access until date is required.", + "submission.sections.accesses.form.date-required-until": "Pääsyoikeuden loppupäivä on pakollinen tieto.", + + // "submission.sections.accesses.form.from-label": "Grant access from", + "submission.sections.accesses.form.from-label": "Pääsyoikeus alkaa", + + // "submission.sections.accesses.form.from-hint": "Select the date from which the related access condition is applied", + "submission.sections.accesses.form.from-hint": "Valitse päivämäärä, josta alkaen pääsyoikeutta sovelletaan", + + // "submission.sections.accesses.form.from-placeholder": "From", + "submission.sections.accesses.form.from-placeholder": "Alkaen", + + // "submission.sections.accesses.form.group-label": "Group", + "submission.sections.accesses.form.group-label": "Ryhmä", + + // "submission.sections.accesses.form.group-required": "Group is required.", + "submission.sections.accesses.form.group-required": "Ryhmä on pakollinen tieto.", + + // "submission.sections.accesses.form.until-label": "Grant access until", + "submission.sections.accesses.form.until-label": "Pääsyoikeus päättyy", + + // "submission.sections.accesses.form.until-hint": "Select the date until which the related access condition is applied", + "submission.sections.accesses.form.until-hint": "Valitse päivämäärä, johon asti pääsyoikeutta sovelletaan", + + // "submission.sections.accesses.form.until-placeholder": "Until", + "submission.sections.accesses.form.until-placeholder": "Asti", + + // "submission.sections.license.granted-label": "I confirm the license above", + "submission.sections.license.granted-label": "Vahvistan edellä olevan lisenssin", + + // "submission.sections.license.required": "You must accept the license", + "submission.sections.license.required": "Sinun on hyväksyttävä lisenssi", + + // "submission.sections.license.notgranted": "You must accept the license", + "submission.sections.license.notgranted": "Sinun on hyväksyttävä lisenssi", + + // "submission.sections.sherpa.publication.information": "Publication information", + "submission.sections.sherpa.publication.information": "Julkaisun tiedot", + + // "submission.sections.sherpa.publication.information.title": "Title", + "submission.sections.sherpa.publication.information.title": "Nimeke", + + // "submission.sections.sherpa.publication.information.issns": "ISSNs", + "submission.sections.sherpa.publication.information.issns": "ISSN-tunnukset", + + // "submission.sections.sherpa.publication.information.url": "URL", + "submission.sections.sherpa.publication.information.url": "URL", + + // "submission.sections.sherpa.publication.information.publishers": "Publisher", + "submission.sections.sherpa.publication.information.publishers": "Julkaisija", + + // "submission.sections.sherpa.publication.information.romeoPub": "Romeo Pub", + "submission.sections.sherpa.publication.information.romeoPub": "Romeo Pub", + + // "submission.sections.sherpa.publication.information.zetoPub": "Zeto Pub", + "submission.sections.sherpa.publication.information.zetoPub": "Zeto Pub", + + // "submission.sections.sherpa.publisher.policy": "Publisher Policy", + "submission.sections.sherpa.publisher.policy": "Julkaisukäytännöt", + + // "submission.sections.sherpa.publisher.policy.description": "The below information was found via Sherpa Romeo. Based on the policies of your publisher, it provides advice regarding whether an embargo may be necessary and/or which files you are allowed to upload. If you have questions, please contact your site administrator via the feedback form in the footer.", + "submission.sections.sherpa.publisher.policy.description": "Alla olevat tiedot on noudettu Sherpa Romeosta. Julkaisijan käytännöt määrittävät, vaaditaanko embargoa ja mitkä tiedostoista ovat ladattavissa. Jos sinulla on kysyttävää, ota yhteyttä ylläpitäjään.", + + // "submission.sections.sherpa.publisher.policy.openaccess": "Open Access pathways permitted by this journal's policy are listed below by article version. Click on a pathway for a more detailed view", + "submission.sections.sherpa.publisher.policy.openaccess": "Tämän kausijulkaisun käytäntöjen sallimat Open Access -reitit on lueteltu alla artikkeliversioittain. Napsauttamalla polkua saat yksityiskohtaisempia tietoja", + + // "submission.sections.sherpa.publisher.policy.more.information": "For more information, please see the following links:", + "submission.sections.sherpa.publisher.policy.more.information": "Lisätietoa saat seuraavista linkeistä:", + + // "submission.sections.sherpa.publisher.policy.version": "Version", + "submission.sections.sherpa.publisher.policy.version": "Versio", + + // "submission.sections.sherpa.publisher.policy.embargo": "Embargo", + "submission.sections.sherpa.publisher.policy.embargo": "Embargo", + + // "submission.sections.sherpa.publisher.policy.noembargo": "No Embargo", + "submission.sections.sherpa.publisher.policy.noembargo": "Ei embargoa", + + // "submission.sections.sherpa.publisher.policy.nolocation": "None", + "submission.sections.sherpa.publisher.policy.nolocation": "Ei mitään", + + // "submission.sections.sherpa.publisher.policy.license": "License", + "submission.sections.sherpa.publisher.policy.license": "Lisenssi", + + // "submission.sections.sherpa.publisher.policy.prerequisites": "Prerequisites", + "submission.sections.sherpa.publisher.policy.prerequisites": "Vaatimukset", + + // "submission.sections.sherpa.publisher.policy.location": "Location", + "submission.sections.sherpa.publisher.policy.location": "Sijainti", + + // "submission.sections.sherpa.publisher.policy.conditions": "Conditions", + "submission.sections.sherpa.publisher.policy.conditions": "Ehdot", + + // "submission.sections.sherpa.publisher.policy.refresh": "Refresh", + "submission.sections.sherpa.publisher.policy.refresh": "Päivitä", + + // "submission.sections.sherpa.record.information": "Record Information", + "submission.sections.sherpa.record.information": "Tietueen tiedot", + + // "submission.sections.sherpa.record.information.id": "ID", + "submission.sections.sherpa.record.information.id": "ID", + + // "submission.sections.sherpa.record.information.date.created": "Date Created", + "submission.sections.sherpa.record.information.date.created": "Luontipäivä", + + // "submission.sections.sherpa.record.information.date.modified": "Last Modified", + "submission.sections.sherpa.record.information.date.modified": "Viimeksi muokattu", + + // "submission.sections.sherpa.record.information.uri": "URI", + "submission.sections.sherpa.record.information.uri": "URI", + + // "submission.sections.sherpa.error.message": "There was an error retrieving sherpa informations", + "submission.sections.sherpa.error.message": "Virhe haettaessa Sherpa-tietoja", + + // "submission.submit.breadcrumbs": "New submission", + "submission.submit.breadcrumbs": "Uusi tallennus", + + // "submission.submit.title": "New submission", + "submission.submit.title": "Uusi tallennus", // "submission.workflow.generic.delete": "Delete", "submission.workflow.generic.delete": "Poista", - // "submission.workflow.generic.delete-help": "If you would to discard this item, select \"Delete\". You will then be asked to confirm it.", - "submission.workflow.generic.delete-help": "Valitse \"Poista\" hylätäksesi tietueen. Poisto pyydetään vielä vahvistamaan.", + // "submission.workflow.generic.delete-help": "Select this option to discard this item. You will then be asked to confirm it.", + "submission.workflow.generic.delete-help": "Valitse hylätäksesi tietueen. Poisto pyydetään vielä vahvistamaan.", // "submission.workflow.generic.edit": "Edit", "submission.workflow.generic.edit": "Muokkaa", @@ -4961,7 +6829,17 @@ // "submission.workflow.generic.view-help": "Select this option to view the item's metadata.", "submission.workflow.generic.view-help": "Valitse tämä katsoaksesi tietueen metadataa.", + // "submission.workflow.generic.submit_select_reviewer": "Select Reviewer", + "submission.workflow.generic.submit_select_reviewer": "Valitse tarkastaja", + // "submission.workflow.generic.submit_select_reviewer-help": "", + "submission.workflow.generic.submit_select_reviewer-help": "", + + // "submission.workflow.generic.submit_score": "Rate", + "submission.workflow.generic.submit_score": "Arvioi", + + // "submission.workflow.generic.submit_score-help": "", + "submission.workflow.generic.submit_score-help": "", // "submission.workflow.tasks.claimed.approve": "Approve", "submission.workflow.tasks.claimed.approve": "Hyväksy", @@ -4975,6 +6853,12 @@ // "submission.workflow.tasks.claimed.edit_help": "Select this option to change the item's metadata.", "submission.workflow.tasks.claimed.edit_help": "Valitse tämä muuttaaksesi tietueen metadataa.", + // "submission.workflow.tasks.claimed.decline": "Decline", + "submission.workflow.tasks.claimed.decline": "Hylkää", + + // "submission.workflow.tasks.claimed.decline_help": "", + "submission.workflow.tasks.claimed.decline_help": "", + // "submission.workflow.tasks.claimed.reject.reason.info": "Please enter your reason for rejecting the submission into the box below, indicating whether the submitter may fix a problem and resubmit.", "submission.workflow.tasks.claimed.reject.reason.info": "Syötä kenttään syy tallennuksen hylkäämiselle. Kerro myös, voiko tallentaja korjata ongelman ja lähettää aineiston uudelleen.", @@ -4999,8 +6883,6 @@ // "submission.workflow.tasks.claimed.return_help": "Return the task to the pool so that another user may perform the task.", "submission.workflow.tasks.claimed.return_help": "Palauta tehtävä tehtäväjonoon, jotta toinen käyttäjä voi suorittaa tehtävän.", - - // "submission.workflow.tasks.generic.error": "Error occurred during operation...", "submission.workflow.tasks.generic.error": "Virhe toimintoa suoritettaessa...", @@ -5013,8 +6895,6 @@ // "submission.workflow.tasks.generic.success": "Operation successful", "submission.workflow.tasks.generic.success": "Toiminto onnistui", - - // "submission.workflow.tasks.pool.claim": "Claim", "submission.workflow.tasks.pool.claim": "Ota itsellesi", @@ -5027,13 +6907,147 @@ // "submission.workflow.tasks.pool.show-detail": "Show detail", "submission.workflow.tasks.pool.show-detail": "Näytä lisätiedot", + // "submission.workspace.generic.view": "View", + "submission.workspace.generic.view": "Näytå", + // "submission.workspace.generic.view-help": "Select this option to view the item's metadata.", + "submission.workspace.generic.view-help": "Valitse tarkastellaksesi tietueen metadataa.", + + // "submitter.empty": "N/A", + "submitter.empty": "Ei saatavilla", + + // "subscriptions.title": "Subscriptions", + "subscriptions.title": "Tilaukset", + + // "subscriptions.item": "Subscriptions for items", + "subscriptions.item": "Tietueiden tilaukset", + + // "subscriptions.collection": "Subscriptions for collections", + "subscriptions.collection": "Kokoelmien tilaukset", + + // "subscriptions.community": "Subscriptions for communities", + "subscriptions.community": "Yhteisöjen tilaukset", + + // "subscriptions.subscription_type": "Subscription type", + "subscriptions.subscription_type": "Tilaustyyppi", + + // "subscriptions.frequency": "Subscription frequency", + "subscriptions.frequency": "Tilaustiheys", + + // "subscriptions.frequency.D": "Daily", + "subscriptions.frequency.D": "Päivittäin", + + // "subscriptions.frequency.M": "Monthly", + "subscriptions.frequency.M": "Kuukausittain", + + // "subscriptions.frequency.W": "Weekly", + "subscriptions.frequency.W": "Viikoittain", + + // "subscriptions.tooltip": "Subscribe", + "subscriptions.tooltip": "Tilaa", + + // "subscriptions.modal.title": "Subscriptions", + "subscriptions.modal.title": "Tilaukset", + + // "subscriptions.modal.type-frequency": "Type and frequency", + "subscriptions.modal.type-frequency": "Tyyppi ja tiheys", + + // "subscriptions.modal.close": "Close", + "subscriptions.modal.close": "Sulje", + + // "subscriptions.modal.delete-info": "To remove this subscription, please visit the \"Subscriptions\" page under your user profile", + "subscriptions.modal.delete-info": "Voit poistaa tilauksen käyttäjäprofiilisi \"Tilaukset\"-sivulla ", + + // "subscriptions.modal.new-subscription-form.type.content": "Content", + "subscriptions.modal.new-subscription-form.type.content": "Sisältö", + + // "subscriptions.modal.new-subscription-form.frequency.D": "Daily", + "subscriptions.modal.new-subscription-form.frequency.D": "Päivittäin", + + // "subscriptions.modal.new-subscription-form.frequency.W": "Weekly", + "subscriptions.modal.new-subscription-form.frequency.W": "Viikottain", + + // "subscriptions.modal.new-subscription-form.frequency.M": "Monthly", + "subscriptions.modal.new-subscription-form.frequency.M": "Kuukausittain", + + // "subscriptions.modal.new-subscription-form.submit": "Submit", + "subscriptions.modal.new-subscription-form.submit": "Lähetä", + + // "subscriptions.modal.new-subscription-form.processing": "Processing...", + "subscriptions.modal.new-subscription-form.processing": "Käsitellään...", + + // "subscriptions.modal.create.success": "Subscribed to {{ type }} successfully.", + "subscriptions.modal.create.success": "Tilaus {{ type }} onnistui.", + + // "subscriptions.modal.delete.success": "Subscription deleted successfully", + "subscriptions.modal.delete.success": "Tilaus poistettu", + + // "subscriptions.modal.update.success": "Subscription to {{ type }} updated successfully", + "subscriptions.modal.update.success": "Tilaus {{ type }} päivitetty", + + // "subscriptions.modal.create.error": "An error occurs during the subscription creation", + "subscriptions.modal.create.error": "Virhe tilausta luotaessa", + + // "subscriptions.modal.delete.error": "An error occurs during the subscription delete", + "subscriptions.modal.delete.error": "Virhe tilausta poistettaessa", + + // "subscriptions.modal.update.error": "An error occurs during the subscription update", + "subscriptions.modal.update.error": "Virhe tilausta päivitettäessä", + + // "subscriptions.table.dso": "Subject", + "subscriptions.table.dso": "Asiasana", + + // "subscriptions.table.subscription_type": "Subscription Type", + "subscriptions.table.subscription_type": "Tilaustyyppi", + + // "subscriptions.table.subscription_frequency": "Subscription Frequency", + "subscriptions.table.subscription_frequency": "Tilaustiheys", + + // "subscriptions.table.action": "Action", + "subscriptions.table.action": "Toiminto", + + // "subscriptions.table.edit": "Edit", + "subscriptions.table.edit": "Muokkaa", + + // "subscriptions.table.delete": "Delete", + "subscriptions.table.delete": "Poista", + + // "subscriptions.table.not-available": "Not available", + "subscriptions.table.not-available": "Ei saatavilla", + + // "subscriptions.table.not-available-message": "The subscribed item has been deleted, or you don't currently have the permission to view it", + "subscriptions.table.not-available-message": "Tilattu tietue on poistettu, tai sinulla ei ole oikeuksia nähdä sitä", + + // "subscriptions.table.empty.message": "You do not have any subscriptions at this time. To subscribe to email updates for a Community or Collection, use the subscription button on the object's page.", + "subscriptions.table.empty.message": "Sinulla ei tällä hetkellä ole tilauksia. Voit tilata yhteisön tai kokoelman sähköposti-ilmoitukset kohteen sivulla olevalla tilauspainikkeella.", + + // "thumbnail.default.alt": "Thumbnail Image", + "thumbnail.default.alt": "Pienoiskuva", + + // "thumbnail.default.placeholder": "No Thumbnail Available", + "thumbnail.default.placeholder": "Ei pienoiskuvaa saatavilla", + + // "thumbnail.project.alt": "Project Logo", + "thumbnail.project.alt": "Projektin logo", + + // "thumbnail.project.placeholder": "Project Placeholder Image", + "thumbnail.project.placeholder": "Projektin paikkamerkin kuva", + + // "thumbnail.orgunit.alt": "OrgUnit Logo", + "thumbnail.orgunit.alt": "Organisaatioykiskön logo", + + // "thumbnail.orgunit.placeholder": "OrgUnit Placeholder Image", + "thumbnail.orgunit.placeholder": "Organisaatioyksikön paikkamerkin kuva", + + // "thumbnail.person.alt": "Profile Picture", + "thumbnail.person.alt": "Profiilikuva", + + // "thumbnail.person.placeholder": "No Profile Picture Available", + "thumbnail.person.placeholder": "Ei profiilikuva saatavilla", // "title": "DSpace", "title": "Julkaisuarkisto", - - // "vocabulary-treeview.header": "Hierarchical tree view", "vocabulary-treeview.header": "Hierarkkinen puunäkymä", @@ -5055,7 +7069,8 @@ // "vocabulary-treeview.tree.description.srsc": "Research Subject Categories", "vocabulary-treeview.tree.description.srsc": "Tutkimusaiheiden kategoriat", - + // "vocabulary-treeview.info": "Select a subject to add as search filter", + "vocabulary-treeview.info": "Valitse asiasana hakusuodattimeksi", // "uploader.browse": "browse", "uploader.browse": "selaa", @@ -5063,6 +7078,9 @@ // "uploader.drag-message": "Drag & Drop your files here", "uploader.drag-message": "Raahaa tiedostot tähän", + // "uploader.delete.btn-title": "Delete", + "uploader.delete.btn-title": "Poista", + // "uploader.or": ", or ", "uploader.or": " tai", @@ -5081,30 +7099,44 @@ // "virtual-metadata.delete-relationship.modal-head": "Select the items for which you want to save the virtual metadata as real metadata", "virtual-metadata.delete-relationship.modal-head": "Valitse tietueet, joiden virtuaalisen metadatan haluat tallentaa varsinaiseksi metadataksi", + // "supervisedWorkspace.search.results.head": "Supervised Items", + "supervisedWorkspace.search.results.head": "Valvotut tietueet", + // "workspace.search.results.head": "Your submissions", + "workspace.search.results.head": "Tallennuksesi", // "workflowAdmin.search.results.head": "Administer Workflow", "workflowAdmin.search.results.head": "Hallinnoi työnkulkua", + // "workflow.search.results.head": "Workflow tasks", + "workflow.search.results.head": "Työnkulun tehtävät", + // "supervision.search.results.head": "Workflow and Workspace tasks", + "supervision.search.results.head": "Työnkulun ja työtilan tehtävät", + + // "workflow-item.edit.breadcrumbs": "Edit workflowitem", + "workflow-item.edit.breadcrumbs": "Muokkaa työnkulun tietuetta", + + // "workflow-item.edit.title": "Edit workflowitem", + "workflow-item.edit.title": "Muokkaa työnkulun tietuetta", // "workflow-item.delete.notification.success.title": "Deleted", "workflow-item.delete.notification.success.title": "Poistettu", // "workflow-item.delete.notification.success.content": "This workflow item was successfully deleted", - "workflow-item.delete.notification.success.content": "Tarkastamaton tietue poistettu", + "workflow-item.delete.notification.success.content": "Työnkulun tietue poistettu", // "workflow-item.delete.notification.error.title": "Something went wrong", "workflow-item.delete.notification.error.title": "Tapahtui virhe", // "workflow-item.delete.notification.error.content": "The workflow item could not be deleted", - "workflow-item.delete.notification.error.content": "Tarkastamatonta tietuetta ei voitu poistaa", + "workflow-item.delete.notification.error.content": "Työnkulun tietuetta ei voitu poistaa", // "workflow-item.delete.title": "Delete workflow item", - "workflow-item.delete.title": "Poista tarkastamaton tietue", + "workflow-item.delete.title": "Poista työnkulkuun tietue", // "workflow-item.delete.header": "Delete workflow item", - "workflow-item.delete.header": "Poista tarkastamaton tietue", + "workflow-item.delete.header": "Poista työnkulkuun tietue", // "workflow-item.delete.button.cancel": "Cancel", "workflow-item.delete.button.cancel": "Peruuta", @@ -5112,30 +7144,566 @@ // "workflow-item.delete.button.confirm": "Delete", "workflow-item.delete.button.confirm": "Poista", - // "workflow-item.send-back.notification.success.title": "Sent back to submitter", "workflow-item.send-back.notification.success.title": "Lähetetty takaisin tallentajalle", // "workflow-item.send-back.notification.success.content": "This workflow item was successfully sent back to the submitter", - "workflow-item.send-back.notification.success.content": "Tarkastamaton tietue lähetetty takaisin tallentajalle", + "workflow-item.send-back.notification.success.content": "Työnkulun tietue lähetetty takaisin tallentajalle", // "workflow-item.send-back.notification.error.title": "Something went wrong", "workflow-item.send-back.notification.error.title": "Tapahtui virhe", // "workflow-item.send-back.notification.error.content": "The workflow item could not be sent back to the submitter", - "workflow-item.send-back.notification.error.content": "Tarkastamatonta tietuetta ei voitu lähettää takaisin tallentajalle", + "workflow-item.send-back.notification.error.content": "Työnkulun tietuetta ei voitu lähettää takaisin tallentajalle", // "workflow-item.send-back.title": "Send workflow item back to submitter", - "workflow-item.send-back.title": "Lähetä tarkastamaton tietue takaisin tallentajalle", + "workflow-item.send-back.title": "Lähetä työnkulkuun tietue takaisin tallentajalle", // "workflow-item.send-back.header": "Send workflow item back to submitter", - "workflow-item.send-back.header": "Lähetä tarkastamaton tietue takaisin tallentajalle", + "workflow-item.send-back.header": "Lähetä työnkulun tietue takaisin tallentajalle", // "workflow-item.send-back.button.cancel": "Cancel", "workflow-item.send-back.button.cancel": "Peruuta", - // "workflow-item.send-back.button.confirm": "Send back" + // "workflow-item.send-back.button.confirm": "Send back", "workflow-item.send-back.button.confirm": "Lähetä takaisin", + // "workflow-item.view.breadcrumbs": "Workflow View", + "workflow-item.view.breadcrumbs": "Työnkulkunäkymä", -} + // "workspace-item.view.breadcrumbs": "Workspace View", + "workspace-item.view.breadcrumbs": "Työnkulkunäkymä", + + // "workspace-item.view.title": "Workspace View", + "workspace-item.view.title": "Työnkulkunäkymä", + + // "workspace-item.delete.breadcrumbs": "Workspace Delete", + "workspace-item.delete.breadcrumbs": "Työnkulku - poisto", + + // "workspace-item.delete.header": "Delete workspace item", + "workspace-item.delete.header": "Poista työnkulun tietue", + + // "workspace-item.delete.button.confirm": "Delete", + "workspace-item.delete.button.confirm": "Poista", + + // "workspace-item.delete.button.cancel": "Cancel", + "workspace-item.delete.button.cancel": "Peruuta", + + // "workspace-item.delete.notification.success.title": "Deleted", + "workspace-item.delete.notification.success.title": "Poistettu", + + // "workspace-item.delete.title": "This workspace item was successfully deleted", + "workspace-item.delete.title": "Työnkulun tietue poistettu", + + // "workspace-item.delete.notification.error.title": "Something went wrong", + "workspace-item.delete.notification.error.title": "Tapahtui virhe", + + // "workspace-item.delete.notification.error.content": "The workspace item could not be deleted", + "workspace-item.delete.notification.error.content": "Työnkulun tietuetta ei voitu poistaa", + + // "workflow-item.advanced.title": "Advanced workflow", + "workflow-item.advanced.title": "Laajennettu työnkulku", + + // "workflow-item.selectrevieweraction.notification.success.title": "Selected reviewer", + "workflow-item.selectrevieweraction.notification.success.title": "Valittu tarkastaja", + + // "workflow-item.selectrevieweraction.notification.success.content": "The reviewer for this workflow item has been successfully selected", + "workflow-item.selectrevieweraction.notification.success.content": "Työnkulun tarkastaja on valittu", + + // "workflow-item.selectrevieweraction.notification.error.title": "Something went wrong", + "workflow-item.selectrevieweraction.notification.error.title": "Tapahtui virhe", + + // "workflow-item.selectrevieweraction.notification.error.content": "Couldn't select the reviewer for this workflow item", + "workflow-item.selectrevieweraction.notification.error.content": "Työnkulun tietueelle ei voitu valita tarkastajaa", + + // "workflow-item.selectrevieweraction.title": "Select Reviewer", + "workflow-item.selectrevieweraction.title": "Valitse tarkastaja", + + // "workflow-item.selectrevieweraction.header": "Select Reviewer", + "workflow-item.selectrevieweraction.header": "Valitse tarkastaja", + + // "workflow-item.selectrevieweraction.button.cancel": "Cancel", + "workflow-item.selectrevieweraction.button.cancel": "Peruuta", + + // "workflow-item.selectrevieweraction.button.confirm": "Confirm", + "workflow-item.selectrevieweraction.button.confirm": "Vahvista", + + // "workflow-item.scorereviewaction.notification.success.title": "Rating review", + "workflow-item.scorereviewaction.notification.success.title": "Arviointikatselmus", + + // "workflow-item.scorereviewaction.notification.success.content": "The rating for this item workflow item has been successfully submitted", + "workflow-item.scorereviewaction.notification.success.content": "Tietueen arviointi on lähetetty", + + // "workflow-item.scorereviewaction.notification.error.title": "Something went wrong", + "workflow-item.scorereviewaction.notification.error.title": "Tapahtui virhe", + + // "workflow-item.scorereviewaction.notification.error.content": "Couldn't rate this item", + "workflow-item.scorereviewaction.notification.error.content": "Tietueen arviointi epäonnistui", + + // "workflow-item.scorereviewaction.title": "Rate this item", + "workflow-item.scorereviewaction.title": "Arvioi tietue", + + // "workflow-item.scorereviewaction.header": "Rate this item", + "workflow-item.scorereviewaction.header": "Arvioi tietue", + + // "workflow-item.scorereviewaction.button.cancel": "Cancel", + "workflow-item.scorereviewaction.button.cancel": "Peruuta", + + // "workflow-item.scorereviewaction.button.confirm": "Confirm", + "workflow-item.scorereviewaction.button.confirm": "Vahvista", + + // "idle-modal.header": "Session will expire soon", + "idle-modal.header": "Istunto vanhenee pian", + + // "idle-modal.info": "For security reasons, user sessions expire after {{ timeToExpire }} minutes of inactivity. Your session will expire soon. Would you like to extend it or log out?", + "idle-modal.info": "Turvallisuussyistä käyttäjän istunto vanhenee, kun käyttäjä on ollut epäaktiivinen {{ timeToExpire }} minuuttia. Istuntosi vanhenee pian. Haluatko pidentää istuntoasi vai kirjautua ulos?", + + // "idle-modal.log-out": "Log out", + "idle-modal.log-out": "Kirjaudu ulos", + + // "idle-modal.extend-session": "Extend session", + "idle-modal.extend-session": "Pidennä istuntoa", + + // "researcher.profile.action.processing": "Processing...", + "researcher.profile.action.processing": "Käsitellään...", + + // "researcher.profile.associated": "Researcher profile associated", + "researcher.profile.associated": "Tutkijaprofiili liitetty", + + // "researcher.profile.change-visibility.fail": "An unexpected error occurs while changing the profile visibility", + "researcher.profile.change-visibility.fail": "Odottamaton virhe muutettaessa profiilin näkyvyyttä", + + // "researcher.profile.create.new": "Create new", + "researcher.profile.create.new": "Luo uusi", + + // "researcher.profile.create.success": "Researcher profile created successfully", + "researcher.profile.create.success": "Tutkijaprofiili luotu", + + // "researcher.profile.create.fail": "An error occurs during the researcher profile creation", + "researcher.profile.create.fail": "Virhe luotaessa tutkijaprofiilia", + + // "researcher.profile.delete": "Delete", + "researcher.profile.delete": "Poista", + + // "researcher.profile.expose": "Expose", + "researcher.profile.expose": "Paljasta", + + // "researcher.profile.hide": "Hide", + "researcher.profile.hide": "Piilota", + + // "researcher.profile.not.associated": "Researcher profile not yet associated", + "researcher.profile.not.associated": "Tutkijaprofiilia ei ole vielä liitetty", + + // "researcher.profile.view": "View", + "researcher.profile.view": "Näytä", + + // "researcher.profile.private.visibility": "PRIVATE", + "researcher.profile.private.visibility": "YKSITYINEN", + + // "researcher.profile.public.visibility": "PUBLIC", + "researcher.profile.public.visibility": "JULKINEN", + + // "researcher.profile.status": "Status:", + "researcher.profile.status": "Tila :", + + // "researcherprofile.claim.not-authorized": "You are not authorized to claim this item. For more details contact the administrator(s).", + "researcherprofile.claim.not-authorized": "Sinulla ei ole valtuuksia ottaa itsellesi tätä tietuetta. Lisätietoa saat ylläpitäjiltä.", + + // "researcherprofile.error.claim.body": "An error occurred while claiming the profile, please try again later", + "researcherprofile.error.claim.body": "Tapahtui virhe profiilia haettaessa, yritä myöhemmin uudelleen", + + // "researcherprofile.error.claim.title": "Error", + "researcherprofile.error.claim.title": "Virhe", + + // "researcherprofile.success.claim.body": "Profile claimed with success", + "researcherprofile.success.claim.body": "Profiili haettu", + + // "researcherprofile.success.claim.title": "Success", + "researcherprofile.success.claim.title": "Valmis", + + // "person.page.orcid.create": "Create an ORCID ID", + "person.page.orcid.create": "Luo ORCID-tunniste", + + // "person.page.orcid.granted-authorizations": "Granted authorizations", + "person.page.orcid.granted-authorizations": "Myönnetyt valtuudet", + + // "person.page.orcid.grant-authorizations": "Grant authorizations", + "person.page.orcid.grant-authorizations": "Myönnä valtuuksia", + + // "person.page.orcid.link": "Connect to ORCID ID", + "person.page.orcid.link": "Yhdistä ORCID-tunniste", + + // "person.page.orcid.link.processing": "Linking profile to ORCID...", + "person.page.orcid.link.processing": "Liitetään profiilia ORCID-tunnisteeseen...", + + // "person.page.orcid.link.error.message": "Something went wrong while connecting the profile with ORCID. If the problem persists, contact the administrator.", + "person.page.orcid.link.error.message": "Virhe yhdistettäessä profiilia ORCID-tunnisteeseen. Jos virhe jatkuu, ota yhteyttä ylläpitäjään.", + + // "person.page.orcid.orcid-not-linked-message": "The ORCID iD of this profile ({{ orcid }}) has not yet been connected to an account on the ORCID registry or the connection is expired.", + "person.page.orcid.orcid-not-linked-message": "Tämän profiilin ORCID-tunnistetta ({{ orcid }}) ei ole vielä yhdistetty tiliin ORCID-rekisterissä tai yhteys on vanhentunut.", + + // "person.page.orcid.unlink": "Disconnect from ORCID", + "person.page.orcid.unlink": "Katkaise yhteys ORCIDiin", + + // "person.page.orcid.unlink.processing": "Processing...", + "person.page.orcid.unlink.processing": "Käsitellään...", + + // "person.page.orcid.missing-authorizations": "Missing authorizations", + "person.page.orcid.missing-authorizations": "Puuttuvia valtuuksia", + + // "person.page.orcid.missing-authorizations-message": "The following authorizations are missing:", + "person.page.orcid.missing-authorizations-message": "Seuraavat valtuudet puuttuvat:", + + // "person.page.orcid.no-missing-authorizations-message": "Great! This box is empty, so you have granted all access rights to use all functions offers by your institution.", + "person.page.orcid.no-missing-authorizations-message": "Hyvä! Tämä laatikko on tyhjä, joten olet myöntänyt kaikki käyttöoikeudet instituutiosi tarjoamiin toimintoihin.", + + // "person.page.orcid.no-orcid-message": "No ORCID iD associated yet. By clicking on the button below it is possible to link this profile with an ORCID account.", + "person.page.orcid.no-orcid-message": "ORCID-tunnistetta ei ole vielä liitetty. Painamalla alapuolella olevaa painiketta voit yhdistää tämän profiilin ORCID-tiliin.", + + // "person.page.orcid.profile-preferences": "Profile preferences", + "person.page.orcid.profile-preferences": "Profiiliasetukset", + + // "person.page.orcid.funding-preferences": "Funding preferences", + "person.page.orcid.funding-preferences": "Rahoitusasetukset", + + // "person.page.orcid.publications-preferences": "Publication preferences", + "person.page.orcid.publications-preferences": "Julkaisuasetukset", + + // "person.page.orcid.remove-orcid-message": "If you need to remove your ORCID, please contact the repository administrator", + "person.page.orcid.remove-orcid-message": "Jos haluat poistaa ORCID-tunnuksesi, ota yhteyttä julkaisuarkiston ylläpitäjään", + + // "person.page.orcid.save.preference.changes": "Update settings", + "person.page.orcid.save.preference.changes": "Muokkaa asetuksia", + + // "person.page.orcid.sync-profile.affiliation": "Affiliation", + "person.page.orcid.sync-profile.affiliation": "Affiliaatio", + + // "person.page.orcid.sync-profile.biographical": "Biographical data", + "person.page.orcid.sync-profile.biographical": "Elämäkerralliset tiedot", + + // "person.page.orcid.sync-profile.education": "Education", + "person.page.orcid.sync-profile.education": "Koulutus", + + // "person.page.orcid.sync-profile.identifiers": "Identifiers", + "person.page.orcid.sync-profile.identifiers": "Tunnisteet", + + // "person.page.orcid.sync-fundings.all": "All fundings", + "person.page.orcid.sync-fundings.all": "Kaikki rahoitukset", + + // "person.page.orcid.sync-fundings.mine": "My fundings", + "person.page.orcid.sync-fundings.mine": "Omat rahoitukset", + + // "person.page.orcid.sync-fundings.my_selected": "Selected fundings", + "person.page.orcid.sync-fundings.my_selected": "Valitut rahoitukset", + + // "person.page.orcid.sync-fundings.disabled": "Disabled", + "person.page.orcid.sync-fundings.disabled": "Poistettu käytöstä", + + // "person.page.orcid.sync-publications.all": "All publications", + "person.page.orcid.sync-publications.all": "Kaikki julkaisut", + + // "person.page.orcid.sync-publications.mine": "My publications", + "person.page.orcid.sync-publications.mine": "Omat julkaisut", + + // "person.page.orcid.sync-publications.my_selected": "Selected publications", + "person.page.orcid.sync-publications.my_selected": "Valitut julkaisut", + + // "person.page.orcid.sync-publications.disabled": "Disabled", + "person.page.orcid.sync-publications.disabled": "Poistettu käytöstä", + + // "person.page.orcid.sync-queue.discard": "Discard the change and do not synchronize with the ORCID registry", + "person.page.orcid.sync-queue.discard": "Hylkää muutos. Älä synkronoi ORCID-rekisterin kanssa.", + + // "person.page.orcid.sync-queue.discard.error": "The discarding of the ORCID queue record failed", + "person.page.orcid.sync-queue.discard.error": "ORCID-jonotietueen hylkääminen epäonnistui", + + // "person.page.orcid.sync-queue.discard.success": "The ORCID queue record have been discarded successfully", + "person.page.orcid.sync-queue.discard.success": "ORCID-jonotietue hylätty", + + // "person.page.orcid.sync-queue.empty-message": "The ORCID queue registry is empty", + "person.page.orcid.sync-queue.empty-message": "ORCID-jonorekisteri on tyhjä", + + // "person.page.orcid.sync-queue.table.header.type": "Type", + "person.page.orcid.sync-queue.table.header.type": "Tyyppi", + + // "person.page.orcid.sync-queue.table.header.description": "Description", + "person.page.orcid.sync-queue.table.header.description": "Kuvaus", + + // "person.page.orcid.sync-queue.table.header.action": "Action", + "person.page.orcid.sync-queue.table.header.action": "Toiminto", + + // "person.page.orcid.sync-queue.description.affiliation": "Affiliations", + "person.page.orcid.sync-queue.description.affiliation": "Affiliaatiot", + + // "person.page.orcid.sync-queue.description.country": "Country", + "person.page.orcid.sync-queue.description.country": "Maa", + + // "person.page.orcid.sync-queue.description.education": "Educations", + "person.page.orcid.sync-queue.description.education": "Koulutukset", + + // "person.page.orcid.sync-queue.description.external_ids": "External ids", + "person.page.orcid.sync-queue.description.external_ids": "Ulkoiset tunnisteet", + + // "person.page.orcid.sync-queue.description.other_names": "Other names", + "person.page.orcid.sync-queue.description.other_names": "Muut nimet", + + // "person.page.orcid.sync-queue.description.qualification": "Qualifications", + "person.page.orcid.sync-queue.description.qualification": "Pätevyydet", + + // "person.page.orcid.sync-queue.description.researcher_urls": "Researcher urls", + "person.page.orcid.sync-queue.description.researcher_urls": "Tutkijan URL-osoitteet", + + // "person.page.orcid.sync-queue.description.keywords": "Keywords", + "person.page.orcid.sync-queue.description.keywords": "Avainsanat", + + // "person.page.orcid.sync-queue.tooltip.insert": "Add a new entry in the ORCID registry", + "person.page.orcid.sync-queue.tooltip.insert": "Lisää uusi kohde ORCID-rekisteriin", + + // "person.page.orcid.sync-queue.tooltip.update": "Update this entry on the ORCID registry", + "person.page.orcid.sync-queue.tooltip.update": "Päivitä tämä kohde ORCID-rekisterissä", + + // "person.page.orcid.sync-queue.tooltip.delete": "Remove this entry from the ORCID registry", + "person.page.orcid.sync-queue.tooltip.delete": "Poista tämä kohde ORCID-rekisteristä", + + // "person.page.orcid.sync-queue.tooltip.publication": "Publication", + "person.page.orcid.sync-queue.tooltip.publication": "Julkaisu", + + // "person.page.orcid.sync-queue.tooltip.project": "Project", + "person.page.orcid.sync-queue.tooltip.project": "Projekti", + + // "person.page.orcid.sync-queue.tooltip.affiliation": "Affiliation", + "person.page.orcid.sync-queue.tooltip.affiliation": "Affiliaatio", + + // "person.page.orcid.sync-queue.tooltip.education": "Education", + "person.page.orcid.sync-queue.tooltip.education": "Koulutus", + + // "person.page.orcid.sync-queue.tooltip.qualification": "Qualification", + "person.page.orcid.sync-queue.tooltip.qualification": "Pätevyys", + + // "person.page.orcid.sync-queue.tooltip.other_names": "Other name", + "person.page.orcid.sync-queue.tooltip.other_names": "Toinen nimi", + + // "person.page.orcid.sync-queue.tooltip.country": "Country", + "person.page.orcid.sync-queue.tooltip.country": "Maa", + + // "person.page.orcid.sync-queue.tooltip.keywords": "Keyword", + "person.page.orcid.sync-queue.tooltip.keywords": "Asiasana", + + // "person.page.orcid.sync-queue.tooltip.external_ids": "External identifier", + "person.page.orcid.sync-queue.tooltip.external_ids": "Ulkoinen tunniste", + + // "person.page.orcid.sync-queue.tooltip.researcher_urls": "Researcher url", + "person.page.orcid.sync-queue.tooltip.researcher_urls": "Tutkijan URL-osoite", + + // "person.page.orcid.sync-queue.send": "Synchronize with ORCID registry", + "person.page.orcid.sync-queue.send": "Synkronoi ORCID-rekisterin kanssa", + + // "person.page.orcid.sync-queue.send.unauthorized-error.title": "The submission to ORCID failed for missing authorizations.", + "person.page.orcid.sync-queue.send.unauthorized-error.title": "ORCID-tunnisteen lähettäminen epäonnistui puuttuvien käyttöoikeuksien takia.", + + // "person.page.orcid.sync-queue.send.unauthorized-error.content": "Click here to grant again the required permissions. If the problem persists, contact the administrator", + "person.page.orcid.sync-queue.send.unauthorized-error.content": "Napsauta tästä myöntääksesi vaaditut käyttöoikeudet. Jos virhe jatkuu, ota yhteyttä ylläpitäjään.", + + // "person.page.orcid.sync-queue.send.bad-request-error": "The submission to ORCID failed because the resource sent to ORCID registry is not valid", + "person.page.orcid.sync-queue.send.bad-request-error": "ORCID-lähetys epäonnistui, koska ORCID-rekisteriin lähetetty resurssi ei ole kelvollinen", + + // "person.page.orcid.sync-queue.send.error": "The submission to ORCID failed", + "person.page.orcid.sync-queue.send.error": "ORCID-lähetys epäonnistui", + + // "person.page.orcid.sync-queue.send.conflict-error": "The submission to ORCID failed because the resource is already present on the ORCID registry", + "person.page.orcid.sync-queue.send.conflict-error": "ORCID-lähetys epäonnistui, koska lähetetty resurssi on jo ORCID-rekisterissä", + + // "person.page.orcid.sync-queue.send.not-found-warning": "The resource does not exists anymore on the ORCID registry.", + "person.page.orcid.sync-queue.send.not-found-warning": "Resurssia ei enää ole ORCID-rekisterissä..", + + // "person.page.orcid.sync-queue.send.success": "The submission to ORCID was completed successfully", + "person.page.orcid.sync-queue.send.success": "ORCID-lähetys onnistui", + + // "person.page.orcid.sync-queue.send.validation-error": "The data that you want to synchronize with ORCID is not valid", + "person.page.orcid.sync-queue.send.validation-error": "ORCIDin kanssa synkronoitava data ei ole kelvollista", + + // "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "The amount's currency is required", + "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "Valuutta on pakollinen tieto", + + // "person.page.orcid.sync-queue.send.validation-error.external-id.required": "The resource to be sent requires at least one identifier", + "person.page.orcid.sync-queue.send.validation-error.external-id.required": "Lähetettävällä resurssilla on oltava ainakin yksi tunniste", + + // "person.page.orcid.sync-queue.send.validation-error.title.required": "The title is required", + "person.page.orcid.sync-queue.send.validation-error.title.required": "Nimeke on pakollinen tieto", + + // "person.page.orcid.sync-queue.send.validation-error.type.required": "The dc.type is required", + "person.page.orcid.sync-queue.send.validation-error.type.required": "dc.type on pakollinen tieto", + + // "person.page.orcid.sync-queue.send.validation-error.start-date.required": "The start date is required", + "person.page.orcid.sync-queue.send.validation-error.start-date.required": "Alkupäivämäärä on pakollinen tieto", + + // "person.page.orcid.sync-queue.send.validation-error.funder.required": "The funder is required", + "person.page.orcid.sync-queue.send.validation-error.funder.required": "Rahoittaja on pakollinen tieto", + + // "person.page.orcid.sync-queue.send.validation-error.country.invalid": "Invalid 2 digits ISO 3166 country", + "person.page.orcid.sync-queue.send.validation-error.country.invalid": "Virheelliset kaksi merkkiä ISO 3166 -maatunnisteessa", + + // "person.page.orcid.sync-queue.send.validation-error.organization.required": "The organization is required", + "person.page.orcid.sync-queue.send.validation-error.organization.required": "Organisaatio on pakollinen tieto", + + // "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "The organization's name is required", + "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "Organisaation nimi on pakollinen tieto", + + // "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "The publication date must be one year after 1900", + "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "Julkaisuajan on oltava vuoden 1900 jälkeen", + + // "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "The organization to be sent requires an address", + "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "Organisaatiolla on oltava osoite", + + // "person.page.orcid.sync-queue.send.validation-error.organization.city-required": "The address of the organization to be sent requires a city", + "person.page.orcid.sync-queue.send.validation-error.organization.city-required": "Organisaation osoitteessa on oltava kaupunki", + + // "person.page.orcid.sync-queue.send.validation-error.organization.country-required": "The address of the organization to be sent requires a valid 2 digits ISO 3166 country", + "person.page.orcid.sync-queue.send.validation-error.organization.country-required": "Organisaation osoitteessa on oltava oikeelliset kaksi ISO 3166 -maatunnisteen merkkiä", + + // "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.required": "An identifier to disambiguate organizations is required. Supported ids are GRID, Ringgold, Legal Entity identifiers (LEIs) and Crossref Funder Registry identifiers", + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.required": "Tunniste vaaditaan organisaatioiden erottelemiseksi. Tuetut tunnisteet ovat GRID, Ringgold, Legal Entity identifier -tunnisteet (LEIt) ja Crossrefin rahoittaharekisterin tunnisteet (FUNDREF)", + + // "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.value-required": "The organization's identifiers requires a value", + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.value-required": "Organisaation tunnisteilla on oltava arvo", + + // "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "The organization's identifiers requires a source", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "Organisaation tunnisteilla on oltava lähde", + + // "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "The source of one of the organization identifiers is invalid. Supported sources are RINGGOLD, GRID, LEI and FUNDREF", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "Organisaation tunnisteen lähde ei ole validi. Tuetut lähteet ovat RINGGOLD, GRID, LEI ja FUNDREF", + + // "person.page.orcid.synchronization-mode": "Synchronization mode", + "person.page.orcid.synchronization-mode": "Synkronointimoodi", + + // "person.page.orcid.synchronization-mode.batch": "Batch", + "person.page.orcid.synchronization-mode.batch": "Erä", + + // "person.page.orcid.synchronization-mode.label": "Synchronization mode", + "person.page.orcid.synchronization-mode.label": "Synkronointimoodi", + + // "person.page.orcid.synchronization-mode-message": "Please select how you would like synchronization to ORCID to occur. The options include \"Manual\" (you must send your data to ORCID manually), or \"Batch\" (the system will send your data to ORCID via a scheduled script).", + "person.page.orcid.synchronization-mode-message": "Valitse, miten haluat synkronoinnin ORCIDiin tapahtuvan. Vaihtoehdot ovat \"Manuaalinen\" (sinun on lähetettävä tietosi ORCIDiin manuaalisesti) tai \"Erä\" (järjestelmä lähettää tietosi ORCIDiin ajastetun skriptin avulla).", + + // "person.page.orcid.synchronization-mode-funding-message": "Select whether to send your linked Project entities to your ORCID record's list of funding information.", + "person.page.orcid.synchronization-mode-funding-message": "Valitse, lähetetäänkö linkitetyt projektisi ORCID-rekisterin rahoitustietoluetteloon.", + + // "person.page.orcid.synchronization-mode-publication-message": "Select whether to send your linked Publication entities to your ORCID record's list of works.", + "person.page.orcid.synchronization-mode-publication-message": "Valitse, lähetetäänkö linkitetyt julkaisusi ORCID-rekisterin luetteloon.", + + // "person.page.orcid.synchronization-mode-profile-message": "Select whether to send your biographical data or personal identifiers to your ORCID record.", + "person.page.orcid.synchronization-mode-profile-message": "Valitse, lähetetäänkö elämäkerralliset tietosi tai henkilökohtaiset tunnisteesi ORCID-rekisteriin.", + + // "person.page.orcid.synchronization-settings-update.success": "The synchronization settings have been updated successfully", + "person.page.orcid.synchronization-settings-update.success": "Synkronisointiasetukset päivitetty", + + // "person.page.orcid.synchronization-settings-update.error": "The update of the synchronization settings failed", + "person.page.orcid.synchronization-settings-update.error": "Synkronisointiasetusten päivittäminen epäonnistui", + + // "person.page.orcid.synchronization-mode.manual": "Manual", + "person.page.orcid.synchronization-mode.manual": "Manuaalinen", + + // "person.page.orcid.scope.authenticate": "Get your ORCID iD", + "person.page.orcid.scope.authenticate": "Hae ORCID-tunnisteesi", + + // "person.page.orcid.scope.read-limited": "Read your information with visibility set to Trusted Parties", + // TODO New key - Add a translation + "person.page.orcid.scope.read-limited": "Read your information with visibility set to Trusted Parties", + + // "person.page.orcid.scope.activities-update": "Add/update your research activities", + "person.page.orcid.scope.activities-update": "Lisää/päivitä tutkimustoimiasi", + + // "person.page.orcid.scope.person-update": "Add/update other information about you", + "person.page.orcid.scope.person-update": "Lisää/päivitä muita tietojasi", + + // "person.page.orcid.unlink.success": "The disconnection between the profile and the ORCID registry was successful", + "person.page.orcid.unlink.success": "Yhteys katkaistu profiilin ja ORCID-rekisterin välillä", + + // "person.page.orcid.unlink.error": "An error occurred while disconnecting between the profile and the ORCID registry. Try again", + "person.page.orcid.unlink.error": "Tapahtui virhe katkaistaessa yhteyttä profiilin ja ORCID-rekisterin välillä. Yritä uudelleen", + + // "person.orcid.sync.setting": "ORCID Synchronization settings", + "person.orcid.sync.setting": "ORCIDin synkronisointiasetukset", + + // "person.orcid.registry.queue": "ORCID Registry Queue", + "person.orcid.registry.queue": "ORCIDin rekisteröintijono", + + // "person.orcid.registry.auth": "ORCID Authorizations", + "person.orcid.registry.auth": "ORCID-käyttöoikeudet", + + // "home.recent-submissions.head": "Recent Submissions", + "home.recent-submissions.head": "Viimeksi tallennetut", + + // "listable-notification-object.default-message": "This object couldn't be retrieved", + "listable-notification-object.default-message": "Kohdetta ei voitu noutaa", + + // "system-wide-alert-banner.retrieval.error": "Something went wrong retrieving the system-wide alert banner", + "system-wide-alert-banner.retrieval.error": "Virhe noudettaessa järjestelmänlaajuista hälytysbanneria", + + // "system-wide-alert-banner.countdown.prefix": "In", + "system-wide-alert-banner.countdown.prefix": "Aikaa", + + // "system-wide-alert-banner.countdown.days": "{{days}} day(s),", + "system-wide-alert-banner.countdown.days": "{{days}} päivää(ä),", + + // "system-wide-alert-banner.countdown.hours": "{{hours}} hour(s) and", + "system-wide-alert-banner.countdown.hours": "{{hours}} tunti(a) and", + + // "system-wide-alert-banner.countdown.minutes": "{{minutes}} minute(s):", + "system-wide-alert-banner.countdown.minutes": "{{minutes}} minuutti(a):", + + // "menu.section.system-wide-alert": "System-wide Alert", + "menu.section.system-wide-alert": "Järjestelmänlaajuinen hälytys", + + // "system-wide-alert.form.header": "System-wide Alert", + "system-wide-alert.form.header": "Järjestelmänlaajuinen hälytys", + + // "system-wide-alert-form.retrieval.error": "Something went wrong retrieving the system-wide alert", + "system-wide-alert-form.retrieval.error": "Virhe noudettaessa järjestelmänlaajuista hälytystä", + + // "system-wide-alert.form.cancel": "Cancel", + "system-wide-alert.form.cancel": "Peruuta", + + // "system-wide-alert.form.save": "Save", + "system-wide-alert.form.save": "Tallenna", + + // "system-wide-alert.form.label.active": "ACTIVE", + "system-wide-alert.form.label.active": "AKTIIVINEN", + + // "system-wide-alert.form.label.inactive": "INACTIVE", + "system-wide-alert.form.label.inactive": "EI-AKTIIVINEN", + + // "system-wide-alert.form.error.message": "The system wide alert must have a message", + "system-wide-alert.form.error.message": "Järjestelmänlaajuisessa hälytyksessä on oltava viesti", + + // "system-wide-alert.form.label.message": "Alert message", + "system-wide-alert.form.label.message": "Hälytysviesti", + + // "system-wide-alert.form.label.countdownTo.enable": "Enable a countdown timer", + "system-wide-alert.form.label.countdownTo.enable": "Ota käyttöön lähtölaskennan ajastin", + + // "system-wide-alert.form.label.countdownTo.hint": "Hint: Set a countdown timer. When enabled, a date can be set in the future and the system-wide alert banner will perform a countdown to the set date. When this timer ends, it will disappear from the alert. The server will NOT be automatically stopped.", + "system-wide-alert.form.label.countdownTo.hint": "Vinkki: Aseta lähtölaskennan ajastin. Kun se on käytössä, voidaan päivämäärä asettaa tulevaisuuteen, jolloin järjestelmänlaajuinen hälytysbanneri suorittaa lähtölaskennan asetettuun päivämäärään. Kun ajastin päättyy, hälytys katoaa. Palvelinta EI pysäytetä automaattisesti.", + + // "system-wide-alert.form.label.preview": "System-wide alert preview", + "system-wide-alert.form.label.preview": "Järjestelmänlaajuisen hälytyksen esikatselu", + + // "system-wide-alert.form.update.success": "The system-wide alert was successfully updated", + "system-wide-alert.form.update.success": "Järjestelmänlaajuinen hälytys päivitetty", + + // "system-wide-alert.form.update.error": "Something went wrong when updating the system-wide alert", + "system-wide-alert.form.update.error": "Virhe päivitettäessä järjestelmänlaajuista hälytystä", + + // "system-wide-alert.form.create.success": "The system-wide alert was successfully created", + "system-wide-alert.form.create.success": "Järjestelmänlaajuinen hälytys luotu", + + // "system-wide-alert.form.create.error": "Something went wrong when creating the system-wide alert", + "system-wide-alert.form.create.error": "Virhe luotaessa järjestelmänlaajuista hälytystä", + + // "admin.system-wide-alert.breadcrumbs": "System-wide Alerts", + "admin.system-wide-alert.breadcrumbs": "Järjestelmänlaajuiset hälytykset", + + // "admin.system-wide-alert.title": "System-wide Alerts", + "admin.system-wide-alert.title": "Järjestelmänlaajuiset hälytykset", + +} \ No newline at end of file From e6546b4499fe87a9308dab7ff2c6767f9f256c67 Mon Sep 17 00:00:00 2001 From: milanmajchrak Date: Thu, 20 Jul 2023 12:46:30 +0200 Subject: [PATCH 281/425] Show error message from the error response --- src/app/profile-page/profile-page.component.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/app/profile-page/profile-page.component.ts b/src/app/profile-page/profile-page.component.ts index 343314999b..d49bdedb83 100644 --- a/src/app/profile-page/profile-page.component.ts +++ b/src/app/profile-page/profile-page.component.ts @@ -161,7 +161,7 @@ export class ProfilePageComponent implements OnInit { } else { this.notificationsService.error( this.translate.instant(this.PASSWORD_NOTIFICATIONS_PREFIX + 'error.title'), - this.translate.instant(this.PASSWORD_NOTIFICATIONS_PREFIX + 'error.change-failed') + this.getPasswordErrorMessage(response) ); } }); @@ -199,4 +199,18 @@ export class ProfilePageComponent implements OnInit { return this.isResearcherProfileEnabled$.asObservable(); } + /** + * Returns an error message from a password validation request with a specific reason or + * a default message without specific reason. + * @param response from the validation password patch request. + */ + getPasswordErrorMessage(response) { + if (response.hasFailed && isNotEmpty(response.errorMessage)) { + // Response has a specific error message. Show this message in the error notification. + return this.translate.instant(response.errorMessage); + } + // Show default error message notification. + return this.translate.instant(this.PASSWORD_NOTIFICATIONS_PREFIX + 'error.change-failed'); + } + } From 4c8ec8a4f22fcc4930b898581de098e317e08b5d Mon Sep 17 00:00:00 2001 From: Hugo Dominguez Date: Fri, 4 Aug 2023 12:44:13 -0600 Subject: [PATCH 282/425] =?UTF-8?q?=F0=9F=9A=B8remove=20thumbnail=20from?= =?UTF-8?q?=20file-upload=20section=20and=20show=20bitstream=20format=20an?= =?UTF-8?q?d=20checksum?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...workspaceitem-section-upload-file.model.ts | 16 ++++++++++++-- .../file/section-upload-file.component.html | 15 +++++++------ .../section-upload-file-view.component.html | 12 +++++++++-- .../section-upload-file-view.component.ts | 21 ++++++++++++++----- 4 files changed, 47 insertions(+), 17 deletions(-) diff --git a/src/app/core/submission/models/workspaceitem-section-upload-file.model.ts b/src/app/core/submission/models/workspaceitem-section-upload-file.model.ts index 177473b7d5..59a8faf634 100644 --- a/src/app/core/submission/models/workspaceitem-section-upload-file.model.ts +++ b/src/app/core/submission/models/workspaceitem-section-upload-file.model.ts @@ -1,5 +1,5 @@ -import { SubmissionUploadFileAccessConditionObject } from './submission-upload-file-access-condition.model'; -import { WorkspaceitemSectionFormObject } from './workspaceitem-section-form.model'; +import {SubmissionUploadFileAccessConditionObject} from './submission-upload-file-access-condition.model'; +import {WorkspaceitemSectionFormObject} from './workspaceitem-section-form.model'; /** * An interface to represent submission's upload section file entry. @@ -29,6 +29,18 @@ export class WorkspaceitemSectionUploadFileObject { value: string; }; + /** + * The file check sum + */ + format: { + shortDescription: string, + description: string, + mimetype: string, + supportLevel: string, + internal: boolean, + type: string + }; + /** * The file url */ diff --git a/src/app/submission/sections/upload/file/section-upload-file.component.html b/src/app/submission/sections/upload/file/section-upload-file.component.html index 8999853d72..cd0ee512fd 100644 --- a/src/app/submission/sections/upload/file/section-upload-file.component.html +++ b/src/app/submission/sections/upload/file/section-upload-file.component.html @@ -1,16 +1,13 @@
    -
    - - -
    -
    +

    {{fileName}} ({{fileData?.sizeBytes | dsFileSize}})

    - +
    diff --git a/src/app/submission/sections/upload/file/view/section-upload-file-view.component.html b/src/app/submission/sections/upload/file/view/section-upload-file-view.component.html index b84ef6f6a8..cc12b5dea6 100644 --- a/src/app/submission/sections/upload/file/view/section-upload-file-view.component.html +++ b/src/app/submission/sections/upload/file/view/section-upload-file-view.component.html @@ -15,15 +15,23 @@ - {{entry.value | dsTruncate:['150']}} + {{entry.value | dsTruncate:['150']}} - {{'submission.sections.upload.no-entry' | translate}} {{fileDescrKey}} + {{'submission.sections.upload.no-entry' | translate}} {{fileDescrKey}} + +
    + {{'admin.registries.bitstream-formats.edit.head' | translate:{format: fileFormat} }} +
    +
    + Checksum {{fileCheckSum.checkSumAlgorithm}}: {{fileCheckSum.value}} +
    diff --git a/src/app/submission/sections/upload/file/view/section-upload-file-view.component.ts b/src/app/submission/sections/upload/file/view/section-upload-file-view.component.ts index bb2fea20f8..b0ea2487e1 100644 --- a/src/app/submission/sections/upload/file/view/section-upload-file-view.component.ts +++ b/src/app/submission/sections/upload/file/view/section-upload-file-view.component.ts @@ -1,9 +1,11 @@ -import { Component, Input, OnInit } from '@angular/core'; +import {Component, Input, OnInit} from '@angular/core'; -import { WorkspaceitemSectionUploadFileObject } from '../../../../../core/submission/models/workspaceitem-section-upload-file.model'; -import { isNotEmpty } from '../../../../../shared/empty.util'; -import { Metadata } from '../../../../../core/shared/metadata.utils'; -import { MetadataMap, MetadataValue } from '../../../../../core/shared/metadata.models'; +import { + WorkspaceitemSectionUploadFileObject +} from '../../../../../core/submission/models/workspaceitem-section-upload-file.model'; +import {isNotEmpty} from '../../../../../shared/empty.util'; +import {Metadata} from '../../../../../core/shared/metadata.utils'; +import {MetadataMap, MetadataValue} from '../../../../../core/shared/metadata.models'; /** * This component allow to show bitstream's metadata @@ -38,6 +40,13 @@ export class SubmissionSectionUploadFileViewComponent implements OnInit { */ public fileDescrKey = 'Description'; + public fileFormat!: string; + + public fileCheckSum!: { + checkSumAlgorithm: string; + value: string; + }; + /** * Initialize instance variables */ @@ -46,6 +55,8 @@ export class SubmissionSectionUploadFileViewComponent implements OnInit { this.metadata[this.fileTitleKey] = Metadata.all(this.fileData.metadata, 'dc.title'); this.metadata[this.fileDescrKey] = Metadata.all(this.fileData.metadata, 'dc.description'); } + this.fileCheckSum = this.fileData.checkSum; + this.fileFormat = this.fileData.format.shortDescription; } /** From e4b386b8156672b82561cb24e32961498a3e3dce Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Sun, 6 Aug 2023 19:57:05 +0200 Subject: [PATCH 283/425] Fix createHeadTags infinite loop when your themes don't override the headTags property --- src/app/app.component.ts | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 669411d9aa..08e6fc5333 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -316,14 +316,7 @@ export class AppComponent implements OnInit, AfterViewInit { if (hasValue(parentThemeName)) { // inherit the head tags of the parent theme return this.createHeadTags(parentThemeName); - } - const defaultThemeConfig = getDefaultThemeConfig(); - const defaultThemeName = defaultThemeConfig.name; - if ( - hasNoValue(defaultThemeName) || - themeName === defaultThemeName || - themeName === BASE_THEME_NAME - ) { + } else { // last resort, use fallback favicon.ico return [ this.createHeadTag({ @@ -336,9 +329,6 @@ export class AppComponent implements OnInit, AfterViewInit { }) ]; } - - // inherit the head tags of the default theme - return this.createHeadTags(defaultThemeConfig.name); } return headTagConfigs.map(this.createHeadTag.bind(this)); From 95abcc9ce828d7fff8d8a3786f78930ac9dd9f5c Mon Sep 17 00:00:00 2001 From: Koen Pauwels Date: Fri, 4 Aug 2023 12:25:20 +0200 Subject: [PATCH 284/425] 103818 Add warning tooltip to "Inherit policies" checkbox on item move page --- .../edit-item-page/item-move/item-move.component.html | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/app/item-page/edit-item-page/item-move/item-move.component.html b/src/app/item-page/edit-item-page/item-move/item-move.component.html index 589aac655f..475d36fb6f 100644 --- a/src/app/item-page/edit-item-page/item-move/item-move.component.html +++ b/src/app/item-page/edit-item-page/item-move/item-move.component.html @@ -21,7 +21,11 @@

    From 6791f6e311ab9ac2900f35c742c09cda9f9cd20e Mon Sep 17 00:00:00 2001 From: Koen Pauwels Date: Fri, 4 Aug 2023 17:10:06 +0200 Subject: [PATCH 285/425] 103818 Adjusted "Inherit policies" tooltip --- .../item-page/edit-item-page/item-move/item-move.component.html | 2 +- src/assets/i18n/en.json5 | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/item-page/edit-item-page/item-move/item-move.component.html b/src/app/item-page/edit-item-page/item-move/item-move.component.html index 475d36fb6f..c1a4a5b9a9 100644 --- a/src/app/item-page/edit-item-page/item-move/item-move.component.html +++ b/src/app/item-page/edit-item-page/item-move/item-move.component.html @@ -22,7 +22,7 @@

    -
    + {{ dsoNameService.getName(node.payload) }}   {{node.payload.archivedItemsCount}} -
    +
    From 05c53ad1d49da41af474322364891289494a5f02 Mon Sep 17 00:00:00 2001 From: Hrafn Malmquist Date: Tue, 22 Aug 2023 04:27:23 +0100 Subject: [PATCH 302/425] Replace h2 with a h1 --- src/app/community-list-page/community-list-page.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/community-list-page/community-list-page.component.html b/src/app/community-list-page/community-list-page.component.html index 9759f4405d..4392fb87d0 100644 --- a/src/app/community-list-page/community-list-page.component.html +++ b/src/app/community-list-page/community-list-page.component.html @@ -1,4 +1,4 @@
    -

    {{ 'communityList.title' | translate }}

    +

    {{ 'communityList.title' | translate }}

    From 5f71de885bc811152729b3fefcb6fefbeda3001e Mon Sep 17 00:00:00 2001 From: Hrafn Malmquist Date: Tue, 22 Aug 2023 04:28:28 +0100 Subject: [PATCH 303/425] Add trackby function so cdktree can differentiate between new and old nodes --- .../community-list/community-list.component.html | 2 +- .../community-list/community-list.component.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/community-list-page/community-list/community-list.component.html b/src/app/community-list-page/community-list/community-list.component.html index 38c9ed1ad6..18e9e84577 100644 --- a/src/app/community-list-page/community-list/community-list.component.html +++ b/src/app/community-list-page/community-list/community-list.component.html @@ -1,5 +1,5 @@ - + diff --git a/src/app/community-list-page/community-list/community-list.component.ts b/src/app/community-list-page/community-list/community-list.component.ts index 5b2f930813..e4ad5d8c29 100644 --- a/src/app/community-list-page/community-list/community-list.component.ts +++ b/src/app/community-list-page/community-list/community-list.component.ts @@ -30,6 +30,7 @@ export class CommunityListComponent implements OnInit, OnDestroy { ); dataSource: CommunityListDatasource; + trackBy = (index, node: FlatNode) => node.id; paginationConfig: FindListOptions; From d9b6e9d81f2fba70f7c13a1377e2f2472c20d592 Mon Sep 17 00:00:00 2001 From: Hrafn Malmquist Date: Tue, 22 Aug 2023 04:29:01 +0100 Subject: [PATCH 304/425] Improve documentation --- .../community-list-service.ts | 6 ++--- .../community-list.component.ts | 25 ++++++++++++++----- .../show-more-flat-node.model.ts | 2 +- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/app/community-list-page/community-list-service.ts b/src/app/community-list-page/community-list-service.ts index 99e9dbeb0d..67715716da 100644 --- a/src/app/community-list-page/community-list-service.ts +++ b/src/app/community-list-page/community-list-service.ts @@ -25,7 +25,7 @@ import { ShowMoreFlatNode } from './show-more-flat-node.model'; import { FindListOptions } from '../core/data/find-list-options.model'; import { AppConfig, APP_CONFIG } from 'src/config/app-config.interface'; -// Helper method to combine an flatten an array of observables of flatNode arrays +// Helper method to combine and flatten an array of observables of flatNode arrays export const combineAndFlatten = (obsList: Observable[]): Observable => observableCombineLatest([...obsList]).pipe( map((matrix: any[][]) => [].concat(...matrix)), @@ -199,7 +199,7 @@ export class CommunityListService { * Transforms a community in a list of FlatNodes containing firstly a flatnode of the community itself, * followed by flatNodes of its possible subcommunities and collection * It gets called recursively for each subcommunity to add its subcommunities and collections to the list - * Number of subcommunities and collections added, is dependant on the current page the parent is at for respectively subcommunities and collections. + * Number of subcommunities and collections added, is dependent on the current page the parent is at for respectively subcommunities and collections. * @param community Community being transformed * @param level Depth of the community in the list, subcommunities and collections go one level deeper * @param parent Flatnode of the parent community @@ -275,7 +275,7 @@ export class CommunityListService { /** * Checks if a community has subcommunities or collections by querying the respective services with a pageSize = 0 - * Returns an observable that combines the result.payload.totalElements fo the observables that the + * Returns an observable that combines the result.payload.totalElements of the observables that the * respective services return when queried * @param community Community being checked whether it is expandable (if it has subcommunities or collections) */ diff --git a/src/app/community-list-page/community-list/community-list.component.ts b/src/app/community-list-page/community-list/community-list.component.ts index e4ad5d8c29..bd1d5ecb78 100644 --- a/src/app/community-list-page/community-list/community-list.component.ts +++ b/src/app/community-list-page/community-list/community-list.component.ts @@ -59,18 +59,28 @@ export class CommunityListComponent implements OnInit, OnDestroy { this.communityListService.saveCommunityListStateToStore(this.expandedNodes, this.loadingNode); } - // whether or not this node has children (subcommunities or collections) + /** + * Whether this node has children (subcommunities or collections) + * @param _ + * @param node + */ hasChild(_: number, node: FlatNode) { return node.isExpandable$; } - // whether or not it is a show more node (contains no data, but is indication that there are more topcoms, subcoms or collections + /** + * Whether this is a show more node that contains no data, but indicates that there is + * one or more community or collection. + * @param _ + * @param node + */ isShowMore(_: number, node: FlatNode) { return node.isShowMoreNode; } /** - * Toggles the expanded variable of a node, adds it to the expanded nodes list and reloads the tree so this node is expanded + * Toggles the expanded variable of a node, adds it to the expanded nodes list and reloads the tree + * so this node is expanded * @param node Node we want to expand */ toggleExpanded(node: FlatNode) { @@ -93,9 +103,12 @@ export class CommunityListComponent implements OnInit, OnDestroy { /** * Makes sure the next page of a node is added to the tree (top community, sub community of collection) - * > Finds its parent (if not top community) and increases its corresponding collection/subcommunity currentPage - * > Reloads tree with new page added to corresponding top community lis, sub community list or collection list - * @param node The show more node indicating whether it's an increase in top communities, sub communities or collections + * > Finds its parent (if not top community) and increases its corresponding collection/subcommunity + * currentPage + * > Reloads tree with new page added to corresponding top community lis, sub community list or + * collection list + * @param node The show more node indicating whether it's an increase in top communities, sub communities + * or collections */ getNextPage(node: FlatNode): void { this.loadingNode = node; diff --git a/src/app/community-list-page/show-more-flat-node.model.ts b/src/app/community-list-page/show-more-flat-node.model.ts index 801c9e7388..c7b7162d21 100644 --- a/src/app/community-list-page/show-more-flat-node.model.ts +++ b/src/app/community-list-page/show-more-flat-node.model.ts @@ -1,6 +1,6 @@ /** * The show more links in the community tree are also represented by a flatNode so we know where in - * the tree it should be rendered an who its parent is (needed for the action resulting in clicking this link) + * the tree it should be rendered and who its parent is (needed for the action resulting in clicking this link) */ export class ShowMoreFlatNode { } From e59913acab0e782a743a4f18634e2930de9b71e8 Mon Sep 17 00:00:00 2001 From: Hrafn Malmquist Date: Tue, 22 Aug 2023 04:59:23 +0100 Subject: [PATCH 305/425] Reorder instance method to come after member declaration --- .../community-list/community-list.component.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/app/community-list-page/community-list/community-list.component.ts b/src/app/community-list-page/community-list/community-list.component.ts index bd1d5ecb78..90dd6b3c05 100644 --- a/src/app/community-list-page/community-list/community-list.component.ts +++ b/src/app/community-list-page/community-list/community-list.component.ts @@ -28,11 +28,9 @@ export class CommunityListComponent implements OnInit, OnDestroy { treeControl = new FlatTreeControl( (node: FlatNode) => node.level, (node: FlatNode) => true ); - dataSource: CommunityListDatasource; - trackBy = (index, node: FlatNode) => node.id; - paginationConfig: FindListOptions; + trackBy = (index, node: FlatNode) => node.id; constructor( protected communityListService: CommunityListService, From 4cc4192e93aea3eb7dddc8486fe1fad35b6103bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Fern=C3=A1ndez=20Celorio?= Date: Tue, 22 Aug 2023 11:59:54 +0200 Subject: [PATCH 306/425] Spanish translation updated to 7.6 --- src/assets/i18n/es.json5 | 766 ++++++++++++++++++++------------------- 1 file changed, 385 insertions(+), 381 deletions(-) diff --git a/src/assets/i18n/es.json5 b/src/assets/i18n/es.json5 index 5a0e40af42..bd393cda85 100644 --- a/src/assets/i18n/es.json5 +++ b/src/assets/i18n/es.json5 @@ -9,8 +9,6 @@ // "401.unauthorized": "unauthorized", "401.unauthorized": "no autorizado", - - // "403.help": "You don't have permission to access this page. You can use the button below to get back to the home page.", "403.help": "No tiene permisos para acceder a esta página. Puede utilizar el botón de abajo para volver a la página de inicio.", @@ -29,7 +27,6 @@ // "500.link.home-page": "Take me to the home page", "500.link.home-page": "Llévame a la página de inicio", - // "404.help": "We can't find the page you're looking for. The page may have been moved or deleted. You can use the button below to get back to the home page. ", "404.help": "No podemos encontrar la página que busca. La página puede haber sido movida o eliminada. Puede utilizar el botón de abajo para volver a la página de inicio. ", @@ -52,7 +49,7 @@ "error-page.description.404": "página no encontrada", // "error-page.orcid.generic-error": "An error occurred during login via ORCID. Make sure you have shared your ORCID account email address with DSpace. If the error persists, contact the administrator", - "error-page.orcid.generic-error": "Hubo un error en el login via ORCID. Asegúrese que ha compartido el correo electrónico de su cuenta ORCID con Dspace. Si continuase el error, contacte con el administrador", + "error-page.orcid.generic-error": "Hubo un error en el login vía ORCID. Asegúrese que ha compartido el correo electrónico de su cuenta ORCID con Dspace. Si continuase el error, contacte con el administrador", // "access-status.embargo.listelement.badge": "Embargo", "access-status.embargo.listelement.badge": "Embargo", @@ -194,7 +191,8 @@ // "admin.registries.bitstream-formats.table.name": "Name", "admin.registries.bitstream-formats.table.name": "Nombre", - // "admin.registries.bitstream-formats.table.id" : "ID", + + // "admin.registries.bitstream-formats.table.id": "ID", "admin.registries.bitstream-formats.table.id": "ID", // "admin.registries.bitstream-formats.table.return": "Back", @@ -215,8 +213,6 @@ // "admin.registries.bitstream-formats.title": "Bitstream Format Registry", "admin.registries.bitstream-formats.title": "Registro de formato Archivo", - - // "admin.registries.metadata.breadcrumbs": "Metadata registry", "admin.registries.metadata.breadcrumbs": "Registro de metadatos", @@ -256,8 +252,6 @@ // "admin.registries.metadata.title": "Metadata Registry", "admin.registries.metadata.title": "Registro de metadatos", - - // "admin.registries.schema.breadcrumbs": "Metadata schema", "admin.registries.schema.breadcrumbs": "Esquema de metadatos", @@ -275,7 +269,8 @@ // "admin.registries.schema.fields.table.field": "Field", "admin.registries.schema.fields.table.field": "Campo", - // "admin.registries.schema.fields.table.id" : "ID", + + // "admin.registries.schema.fields.table.id": "ID", "admin.registries.schema.fields.table.id": "ID", // "admin.registries.schema.fields.table.scopenote": "Scope Note", @@ -335,7 +330,29 @@ // "admin.registries.schema.title": "Metadata Schema Registry", "admin.registries.schema.title": "Registro de esquemas de metadatos", + // "admin.access-control.bulk-access.breadcrumbs": "Bulk Access Management", + "admin.access-control.bulk-access.breadcrumbs": "Gestión de Acceso Masivo", + // "administrativeBulkAccess.search.results.head": "Search Results", + "administrativeBulkAccess.search.results.head": "Resultados de la búsqueda", + + // "admin.access-control.bulk-access": "Bulk Access Management", + "admin.access-control.bulk-access": "Gestión de Acceso Masivo", + + // "admin.access-control.bulk-access.title": "Bulk Access Management", + "admin.access-control.bulk-access.title": "Gestión de Acceso Masivo", + + // "admin.access-control.bulk-access-browse.header": "Step 1: Select Objects", + "admin.access-control.bulk-access-browse.header": "Paso 1: Seleccione Objetos", + + // "admin.access-control.bulk-access-browse.search.header": "Search", + "admin.access-control.bulk-access-browse.search.header": "Buscar", + + // "admin.access-control.bulk-access-browse.selected.header": "Current selection({{number}})", + "admin.access-control.bulk-access-browse.selected.header": "Selección actual({{number}})", + + // "admin.access-control.bulk-access-settings.header": "Step 2: Operation to Perform", + "admin.access-control.bulk-access-settings.header": "Paso 2: Operación a realizar", // "admin.access-control.epeople.actions.delete": "Delete EPerson", "admin.access-control.epeople.actions.delete": "Eliminar usuario", @@ -347,7 +364,7 @@ "admin.access-control.epeople.actions.reset": "Restablecer la contraseña", // "admin.access-control.epeople.actions.stop-impersonating": "Stop impersonating EPerson", - "admin.access-control.epeople.actions.stop-impersonating": "Deja de hacerse pasar por usuario", + "admin.access-control.epeople.actions.stop-impersonating": "Dejar de hacerse pasar por usuario", // "admin.access-control.epeople.breadcrumbs": "EPeople", "admin.access-control.epeople.breadcrumbs": "Usuarios", @@ -478,8 +495,6 @@ // "admin.access-control.epeople.notification.deleted.success": "Successfully deleted EPerson: \"{{name}}\"", "admin.access-control.epeople.notification.deleted.success": "Usuario eliminado correctamente: \"{{ name }}\"", - - // "admin.access-control.groups.title": "Groups", "admin.access-control.groups.title": "Grupos", @@ -549,8 +564,6 @@ // "admin.access-control.groups.notification.deleted.failure.content": "Cause: \"{{cause}}\"", "admin.access-control.groups.notification.deleted.failure.content": "Causa: \"{{ cause }}\"", - - // "admin.access-control.groups.form.alert.permanent": "This group is permanent, so it can't be edited or deleted. You can still add and remove group members using this page.", "admin.access-control.groups.form.alert.permanent": "Este grupo es permanente, por lo que no se puede editar ni eliminar. Sin embargo, puedes añadir y eliminar miembros del grupo utilizando esta página.", @@ -791,9 +804,6 @@ // "administrativeView.search.results.head": "Administrative Search", "administrativeView.search.results.head": "Búsqueda administrativa", - - - // "admin.workflow.breadcrumbs": "Administer Workflow", "admin.workflow.breadcrumbs": "Administrar flujo de trabajo", @@ -818,8 +828,6 @@ // "admin.workflow.item.supervision": "Supervision", "admin.workflow.item.supervision": "Supervisión", - - // "admin.metadata-import.breadcrumbs": "Import Metadata", "admin.metadata-import.breadcrumbs": "Importar metadatos", @@ -844,6 +852,9 @@ // "admin.batch-import.page.help": "Select the Collection to import into. Then, drop or browse to a Simple Archive Format (SAF) zip file that includes the Items to import", "admin.batch-import.page.help": "Seleccione la Colección a la que importar. Luego, suelte o busque el archivo zip en formato Simple Archive Format (SAF) que incluye los ítems a importar", + // "admin.batch-import.page.toggle.help": "It is possible to perform import either with file upload or via URL, use above toggle to set the input source", + "admin.batch-import.page.toggle.help": "Es posible realizar una importación tanto mediante una subida de fichero como a través de una URL. Use el selector de arriba para especificar la fuente de entrada.", + // "admin.metadata-import.page.dropMsg": "Drop a metadata CSV to import", "admin.metadata-import.page.dropMsg": "Suelta un CSV de metadatos para importar", @@ -863,14 +874,26 @@ "admin.metadata-import.page.button.proceed": "Continuar", // "admin.metadata-import.page.button.select-collection": "Select Collection", - "admin.metadata-import.page.button.select-collection": "Selecciona la Colleción", + "admin.metadata-import.page.button.select-collection": "Selecciona la Colección", // "admin.metadata-import.page.error.addFile": "Select file first!", "admin.metadata-import.page.error.addFile": "¡Seleccione el archivo primero!", + // "admin.metadata-import.page.error.addFileUrl": "Insert file url first!", + "admin.metadata-import.page.error.addFileUrl": "¡Seleccione primero la URL del archivo!", + // "admin.batch-import.page.error.addFile": "Select Zip file first!", "admin.batch-import.page.error.addFile": "¡Seleccione el archivo ZIP primero!", + // "admin.metadata-import.page.toggle.upload": "Upload", + "admin.metadata-import.page.toggle.upload": "Subir", + + // "admin.metadata-import.page.toggle.url": "URL", + "admin.metadata-import.page.toggle.url": "URL", + + // "admin.metadata-import.page.urlMsg": "Insert the batch ZIP url to import", + "admin.metadata-import.page.urlMsg": "¡Seleccione primero la URL del archivo ZIP!", + // "admin.metadata-import.page.validateOnly": "Validate Only", "admin.metadata-import.page.validateOnly": "Solo Validar", @@ -895,14 +918,12 @@ // "advanced-workflow-action.rating.description-requiredDescription": "Please select a rating below and also add a review", "advanced-workflow-action.rating.description-requiredDescription": "Por favor, seleccione una evaluación y también agregue una revisión", - // "advanced-workflow-action.select-reviewer.description-single": "Please select a single reviewer below before submitting", "advanced-workflow-action.select-reviewer.description-single": "Por favor, seleccione un revisor antes de realizar el envío", // "advanced-workflow-action.select-reviewer.description-multiple": "Please select one or more reviewers below before submitting", "advanced-workflow-action.select-reviewer.description-multiple": "Por favor, seleccione uno o mas revisores antes de realizar el envío", - // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.head": "EPeople", "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.head": "Usuario", @@ -987,15 +1008,12 @@ // "auth.messages.token-refresh-failed": "Refreshing your session token failed. Please log in again.", "auth.messages.token-refresh-failed": "No se pudo actualizar el token de la sesión. Inicie sesión de nuevo.", - - - // "bitstream.download.page": "Now downloading {{bitstream}}..." , + // "bitstream.download.page": "Now downloading {{bitstream}}...", "bitstream.download.page": "Descargando {{ bitstream }}...", - // "bitstream.download.page.back": "Back" , + // "bitstream.download.page.back": "Back", "bitstream.download.page.back": "Atrás" , - // "bitstream.edit.authorizations.link": "Edit bitstream's Policies", "bitstream.edit.authorizations.link": "Editar las políticas del archivo", @@ -1047,6 +1065,9 @@ // "bitstream.edit.notifications.error.format.title": "An error occurred saving the bitstream's format", "bitstream.edit.notifications.error.format.title": "Se produjo un error al guardar el formato del archivo.", + // "bitstream.edit.notifications.error.primaryBitstream.title": "An error occurred saving the primary bitstream", + "bitstream.edit.notifications.error.primaryBitstream.title": "Se produjo un error al guardar el archivo primario", + // "bitstream.edit.form.iiifLabel.label": "IIIF Label", "bitstream.edit.form.iiifLabel.label": "Etiqueta IIIF", @@ -1071,7 +1092,6 @@ // "bitstream.edit.form.iiifHeight.hint": "The canvas height should usually match the image height.", "bitstream.edit.form.iiifHeight.hint": "La altura del marco normalmente debería coincidir con la altura de la imagen", - // "bitstream.edit.notifications.saved.content": "Your changes to this bitstream were saved.", "bitstream.edit.notifications.saved.content": "Se guardaron sus cambios en este archivo.", @@ -1095,6 +1115,7 @@ // "bitstream-request-a-copy.intro.bitstream.one": "Requesting the following file: ", "bitstream-request-a-copy.intro.bitstream.one": "Solicitando el siguiente fichero: ", + // "bitstream-request-a-copy.intro.bitstream.all": "Requesting all files. ", "bitstream-request-a-copy.intro.bitstream.all": "Solicitando todos los ficheros. ", @@ -1137,8 +1158,6 @@ // "bitstream-request-a-copy.submit.error": "Something went wrong with submitting the item request.", "bitstream-request-a-copy.submit.error": "Hubo un fallo en el envío de la solicitud de ítem.", - - // "browse.back.all-results": "All browse results", "browse.back.all-results": "Todos los resultados de la búsqueda", @@ -1151,8 +1170,11 @@ // "browse.comcol.by.subject": "By Subject", "browse.comcol.by.subject": "Por materia", + // "browse.comcol.by.srsc": "By Subject Category", + "browse.comcol.by.srsc": "Por categoría", + // "browse.comcol.by.title": "By Title", - "browse.comcol.by.title": "Por titulo", + "browse.comcol.by.title": "Por título", // "browse.comcol.head": "Browse", "browse.comcol.head": "Examinar", @@ -1181,6 +1203,9 @@ // "browse.metadata.subject.breadcrumbs": "Browse by Subject", "browse.metadata.subject.breadcrumbs": "Examinar por materia", + // "browse.metadata.srsc.breadcrumbs": "Browse by Subject Category", + "browse.metadata.srsc.breadcrumbs": "Examinar por categoría", + // "browse.metadata.title.breadcrumbs": "Browse by Title", "browse.metadata.title.breadcrumbs": "Examinar por título", @@ -1262,21 +1287,24 @@ // "browse.startsWith.type_text": "Filter results by typing the first few letters", "browse.startsWith.type_text": "Seleccione resultados tecleando las primeras letras", + // "browse.startsWith.input": "Filter", + "browse.startsWith.input": "Filtrar", + + // "browse.taxonomy.button": "Browse", + "browse.taxonomy.button": "Examinar", + // "browse.title": "Browsing {{ collection }} by {{ field }}{{ startsWith }} {{ value }}", "browse.title": "Examinando {{ collection }} por {{ field }} {{ value }}", // "browse.title.page": "Browsing {{ collection }} by {{ field }} {{ value }}", "browse.title.page": "Examinando {{ collection }} por {{ field }} {{ value }}", - // "search.browse.item-back": "Back to Results", "search.browse.item-back": "Volver a los resultados", - // "chips.remove": "Remove chip", "chips.remove": "Quitar chip", - // "claimed-approved-search-result-list-element.title": "Approved", "claimed-approved-search-result-list-element.title": "Aprobado", @@ -1286,7 +1314,6 @@ // "claimed-declined-task-search-result-list-element.title": "Declined, sent back to Review Manager's workflow", "claimed-declined-task-search-result-list-element.title": "Declinado, enviar de vuelta al Administrador de Revisión del flujo de trabajo", - // "collection.create.head": "Create a Collection", "collection.create.head": "Crear una colección", @@ -1320,8 +1347,6 @@ // "collection.delete.text": "Are you sure you want to delete collection \"{{ dso }}\"", "collection.delete.text": "¿Estás seguro de que quieres eliminar la colección \"{{ dso }}\"?", - - // "collection.edit.delete": "Delete this collection", "collection.edit.delete": "Eliminar esta colección", @@ -1331,8 +1356,6 @@ // "collection.edit.breadcrumbs": "Edit Collection", "collection.edit.breadcrumbs": "Editar colección", - - // "collection.edit.tabs.mapper.head": "Item Mapper", "collection.edit.tabs.mapper.head": "Mapeo de ítems", @@ -1393,7 +1416,6 @@ // "collection.edit.item-mapper.tabs.map": "Map new items", "collection.edit.item-mapper.tabs.map": "Asignar nuevos ítems", - // "collection.edit.logo.delete.title": "Delete logo", "collection.edit.logo.delete.title": "Eliminar logo", @@ -1421,21 +1443,23 @@ // "collection.edit.logo.upload": "Drop a Collection Logo to upload", "collection.edit.logo.upload": "Suelta un logotipo de colección para cargarlo", - - // "collection.edit.notifications.success": "Successfully edited the Collection", "collection.edit.notifications.success": "Editó con éxito la colección", // "collection.edit.return": "Back", "collection.edit.return": "Atrás", + // "collection.edit.tabs.access-control.head": "Access Control", + "collection.edit.tabs.access-control.head": "Control de acceso", + // "collection.edit.tabs.access-control.title": "Collection Edit - Access Control", + "collection.edit.tabs.access-control.title": "Edición de colección: Control de acceso", // "collection.edit.tabs.curate.head": "Curate", "collection.edit.tabs.curate.head": "Curar", // "collection.edit.tabs.curate.title": "Collection Edit - Curate", - "collection.edit.tabs.curate.title": "Edición de colección - Curar", + "collection.edit.tabs.curate.title": "Edición de colección: Curar", // "collection.edit.tabs.authorizations.head": "Authorizations", "collection.edit.tabs.authorizations.head": "Autorizaciones", @@ -1518,8 +1542,6 @@ // "collection.edit.tabs.source.title": "Collection Edit - Content Source", "collection.edit.tabs.source.title": "Edición de colección: fuente de contenido", - - // "collection.edit.template.add-button": "Add", "collection.edit.template.add-button": "Agregar", @@ -1556,8 +1578,6 @@ // "collection.edit.template.title": "Edit Template Item", "collection.edit.template.title": "Editar plantilla de ítem", - - // "collection.form.abstract": "Short Description", "collection.form.abstract": "Breve descripción", @@ -1585,13 +1605,9 @@ // "collection.form.entityType": "Entity Type", "collection.form.entityType": "Tipo de entidad", - - // "collection.listelement.badge": "Collection", "collection.listelement.badge": "Colección", - - // "collection.page.browse.recent.head": "Recent Submissions", "collection.page.browse.recent.head": "Envíos recientes", @@ -1610,8 +1626,6 @@ // "collection.page.news": "News", "collection.page.news": "Noticias", - - // "collection.select.confirm": "Confirm selected", "collection.select.confirm": "Confirmar seleccionado", @@ -1621,63 +1635,81 @@ // "collection.select.table.title": "Title", "collection.select.table.title": "Título", - // "collection.source.controls.head": "Harvest Controls", "collection.source.controls.head": "Controles de recolección", + // "collection.source.controls.test.submit.error": "Something went wrong with initiating the testing of the settings", "collection.source.controls.test.submit.error": "Hubo fallos al realizar las pruebas de comprobación de los ajustes", + // "collection.source.controls.test.failed": "The script to test the settings has failed", "collection.source.controls.test.failed": "La prueba de los ajustes ha fallado", + // "collection.source.controls.test.completed": "The script to test the settings has successfully finished", "collection.source.controls.test.completed": "El script de prueba de los ajustes ha terminado correctamente", + // "collection.source.controls.test.submit": "Test configuration", "collection.source.controls.test.submit": "Probar la configuración", + // "collection.source.controls.test.running": "Testing configuration...", "collection.source.controls.test.running": "Probando la configuración...", + // "collection.source.controls.import.submit.success": "The import has been successfully initiated", "collection.source.controls.import.submit.success": "La importación ha comenzado correctamente", + // "collection.source.controls.import.submit.error": "Something went wrong with initiating the import", "collection.source.controls.import.submit.error": "Hubo algún fallo al iniciar la importación", + // "collection.source.controls.import.submit": "Import now", "collection.source.controls.import.submit": "Importar ahora", + // "collection.source.controls.import.running": "Importing...", "collection.source.controls.import.running": "Importando...", + // "collection.source.controls.import.failed": "An error occurred during the import", "collection.source.controls.import.failed": "Ha ocurrido un error durante la importación", + // "collection.source.controls.import.completed": "The import completed", "collection.source.controls.import.completed": "La importación finalizó", + // "collection.source.controls.reset.submit.success": "The reset and reimport has been successfully initiated", "collection.source.controls.reset.submit.success": "La restauración y reimportación ha comenzado correctamente", + // "collection.source.controls.reset.submit.error": "Something went wrong with initiating the reset and reimport", "collection.source.controls.reset.submit.error": "Ha ocurrido un error al iniciar la restauración y reimportación", + // "collection.source.controls.reset.failed": "An error occurred during the reset and reimport", "collection.source.controls.reset.failed": "Ha ocurrido un error en la restauración y reimportación", + // "collection.source.controls.reset.completed": "The reset and reimport completed", "collection.source.controls.reset.completed": "Restauración y reimportación finalizadas", + // "collection.source.controls.reset.submit": "Reset and reimport", "collection.source.controls.reset.submit": "Restauración y reimportación", + // "collection.source.controls.reset.running": "Resetting and reimporting...", "collection.source.controls.reset.running": "Restaurando y reimportando...", + // "collection.source.controls.harvest.status": "Harvest status:", "collection.source.controls.harvest.status": "Estado de la Recolección:", + // "collection.source.controls.harvest.start": "Harvest start time:", "collection.source.controls.harvest.start": "Comienzo de la recolección:", + // "collection.source.controls.harvest.last": "Last time harvested:", "collection.source.controls.harvest.last": "Fecha de la última recolección:", + // "collection.source.controls.harvest.message": "Harvest info:", "collection.source.controls.harvest.message": "Información de recolección:", + // "collection.source.controls.harvest.no-information": "N/A", "collection.source.controls.harvest.no-information": "N/A", - // "collection.source.update.notifications.error.content": "The provided settings have been tested and didn't work.", "collection.source.update.notifications.error.content": "La configuración proporcionada se ha probado y no funcionó.", // "collection.source.update.notifications.error.title": "Server Error", "collection.source.update.notifications.error.title": "Error del Servidor", - - // "communityList.breadcrumbs": "Community List", "communityList.breadcrumbs": "Lista de comunidades", @@ -1690,8 +1722,6 @@ // "communityList.showMore": "Show More", "communityList.showMore": "Mostrar más", - - // "community.create.head": "Create a Community", "community.create.head": "Crear una comunidad", @@ -1734,7 +1764,6 @@ // "community.edit.breadcrumbs": "Edit Community", "community.edit.breadcrumbs": "Editar comunidad", - // "community.edit.logo.delete.title": "Delete logo", "community.edit.logo.delete.title": "Eliminar logo", @@ -1762,8 +1791,6 @@ // "community.edit.logo.upload": "Drop a Community Logo to upload", "community.edit.logo.upload": "Suelta un logotipo de la comunidad para cargar", - - // "community.edit.notifications.success": "Successfully edited the Community", "community.edit.notifications.success": "Editó con éxito la comunidad", @@ -1776,14 +1803,18 @@ // "community.edit.return": "Back", "community.edit.return": "Atrás", - - // "community.edit.tabs.curate.head": "Curate", "community.edit.tabs.curate.head": "Curar", // "community.edit.tabs.curate.title": "Community Edit - Curate", "community.edit.tabs.curate.title": "Edición de la comunidad - Curar", + // "community.edit.tabs.access-control.head": "Access Control", + "community.edit.tabs.access-control.head": "Control de acceso", + + // "community.edit.tabs.access-control.title": "Community Edit - Access Control", + "community.edit.tabs.access-control.title": "Edición de la comunidad: Control de acceso", + // "community.edit.tabs.metadata.head": "Edit Metadata", "community.edit.tabs.metadata.head": "Editar metadatos", @@ -1802,13 +1833,9 @@ // "community.edit.tabs.authorizations.title": "Community Edit - Authorizations", "community.edit.tabs.authorizations.title": "Edición de la comunidad: autorizaciones", - - // "community.listelement.badge": "Community", "community.listelement.badge": "Comunidad", - - // "comcol-role.edit.no-group": "None", "comcol-role.edit.no-group": "Ninguno", @@ -1827,28 +1854,24 @@ // "comcol-role.edit.delete.error.title": "Failed to delete the '{{ role }}' role's group", "comcol-role.edit.delete.error.title": "Error al borrar el grupo del rol '{{ role }}'", - // "comcol-role.edit.community-admin.name": "Administrators", "comcol-role.edit.community-admin.name": "Administradores", // "comcol-role.edit.collection-admin.name": "Administrators", "comcol-role.edit.collection-admin.name": "Administradores", - // "comcol-role.edit.community-admin.description": "Community administrators can create sub-communities or collections, and manage or assign management for those sub-communities or collections. In addition, they decide who can submit items to any sub-collections, edit item metadata (after submission), and add (map) existing items from other collections (subject to authorization).", "comcol-role.edit.community-admin.description": "Los administradores de la comunidad pueden crear subcomunidades o colecciones y gestionar o asignar la gestión para esas subcomunidades o colecciones. Además, deciden quién puede enviar ítems a las subcolecciones, editar los metadatos del ítem (después del envío) y agregar (mapear) ítems existentes de otras colecciones (sujeto a autorización).", // "comcol-role.edit.collection-admin.description": "Collection administrators decide who can submit items to the collection, edit item metadata (after submission), and add (map) existing items from other collections to this collection (subject to authorization for that collection).", "comcol-role.edit.collection-admin.description": "Los administradores de la colección deciden quién puede enviar ítems a la colección, editar los metadatos del ítem (después del envío) y agregar (mapear) ítems existentes de otras colecciones a esta colección (sujeto a autorización para esa colección).", - // "comcol-role.edit.submitters.name": "Submitters", "comcol-role.edit.submitters.name": "Remitentes", // "comcol-role.edit.submitters.description": "The E-People and Groups that have permission to submit new items to this collection.", "comcol-role.edit.submitters.description": "Los Usuarios y Grupos que tienen permiso para enviar nuevos ítems a esta colección.", - // "comcol-role.edit.item_read.name": "Default item read access", "comcol-role.edit.item_read.name": "Acceso de lectura predeterminado del ítem", @@ -1858,7 +1881,6 @@ // "comcol-role.edit.item_read.anonymous-group": "Default read for incoming items is currently set to Anonymous.", "comcol-role.edit.item_read.anonymous-group": "La lectura predeterminada para los ítems entrantes está configurada actualmente como Anónimo.", - // "comcol-role.edit.bitstream_read.name": "Default bitstream read access", "comcol-role.edit.bitstream_read.name": "Acceso de lectura predeterminado de archivos", @@ -1868,28 +1890,24 @@ // "comcol-role.edit.bitstream_read.anonymous-group": "Default read for incoming bitstreams is currently set to Anonymous.", "comcol-role.edit.bitstream_read.anonymous-group": "La lectura predeterminada para los archivos entrantes se establece actualmente en Anónimo.", - // "comcol-role.edit.editor.name": "Editors", "comcol-role.edit.editor.name": "Editores", // "comcol-role.edit.editor.description": "Editors are able to edit the metadata of incoming submissions, and then accept or reject them.", "comcol-role.edit.editor.description": "Los editores pueden editar los metadatos de los envíos entrantes y luego aceptarlos o rechazarlos.", - // "comcol-role.edit.finaleditor.name": "Final editors", "comcol-role.edit.finaleditor.name": "Editores finales", // "comcol-role.edit.finaleditor.description": "Final editors are able to edit the metadata of incoming submissions, but will not be able to reject them.", "comcol-role.edit.finaleditor.description": "Los editores finales pueden editar los metadatos de los envíos entrantes, pero no podrán rechazarlos.", - // "comcol-role.edit.reviewer.name": "Reviewers", "comcol-role.edit.reviewer.name": "Revisores", // "comcol-role.edit.reviewer.description": "Reviewers are able to accept or reject incoming submissions. However, they are not able to edit the submission's metadata.", "comcol-role.edit.reviewer.description": "Los revisores pueden aceptar o rechazar envíos entrantes. Sin embargo, no pueden editar los metadatos del envío.", - // "comcol-role.edit.scorereviewers.name": "Score Reviewers", "comcol-role.edit.scorereviewers.name": "Revisores de puntuación", @@ -1929,14 +1947,12 @@ // "community.all-lists.head": "Subcommunities and Collections", "community.all-lists.head": "Subcomunidades y colecciones", - // "community.sub-collection-list.head": "Collections of this Community", + // "community.sub-collection-list.head": "Collections in this Community", "community.sub-collection-list.head": "Colecciones de esta comunidad", - // "community.sub-community-list.head": "Communities of this Community", + // "community.sub-community-list.head": "Communities in this Community", "community.sub-community-list.head": "Comunidades de esta comunidad", - - // "cookies.consent.accept-all": "Accept all", "cookies.consent.accept-all": "Aceptar todo", @@ -2015,38 +2031,30 @@ // "cookies.consent.app.description.authentication": "Required for signing you in", "cookies.consent.app.description.authentication": "Requerido para iniciar sesión", - // "cookies.consent.app.title.preferences": "Preferences", "cookies.consent.app.title.preferences": "Preferencias", // "cookies.consent.app.description.preferences": "Required for saving your preferences", "cookies.consent.app.description.preferences": "Requerido para guardar sus preferencias", - - // "cookies.consent.app.title.acknowledgement": "Acknowledgement", "cookies.consent.app.title.acknowledgement": "Reconocimiento", // "cookies.consent.app.description.acknowledgement": "Required for saving your acknowledgements and consents", "cookies.consent.app.description.acknowledgement": "Requerido para guardar sus reconocimientos y consentimientos", - - // "cookies.consent.app.title.google-analytics": "Google Analytics", "cookies.consent.app.title.google-analytics": "Google Analytics", // "cookies.consent.app.description.google-analytics": "Allows us to track statistical data", "cookies.consent.app.description.google-analytics": "Nos permite rastrear datos estadísticos", - - // "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", // "cookies.consent.app.description.google-recaptcha": "We use google reCAPTCHA service during registration and password recovery", "cookies.consent.app.description.google-recaptcha": "Utilizamos el servicio google reCAPTCHA durante el registro y la recuperación de contraseña", - // "cookies.consent.purpose.functional": "Functional", "cookies.consent.purpose.functional": "Funcional", @@ -2059,10 +2067,10 @@ // "cookies.consent.purpose.sharing": "Sharing", "cookies.consent.purpose.sharing": "Compartición", - // "curation-task.task.citationpage.label": "Generate Citation Page", + // "curation-task.task.citationpage.label": "Generate Citation Page", "curation-task.task.citationpage.label": "Generar página de cita", - // "curation-task.task.checklinks.label": "Check Links in Metadata", + // "curation-task.task.checklinks.label": "Check Links in Metadata", "curation-task.task.checklinks.label": "Comprobar enlaces en metadatos", // "curation-task.task.noop.label": "NOOP", @@ -2083,8 +2091,6 @@ // "curation-task.task.register-doi.label": "Register DOI", "curation-task.task.register-doi.label": "Registro DOI", - - // "curation.form.task-select.label": "Task:", "curation.form.task-select.label": "Tarea:", @@ -2112,10 +2118,8 @@ // "curation.form.handle.hint": "Hint: Enter [your-handle-prefix]/0 to run a task across entire site (not all tasks may support this capability)", "curation.form.handle.hint": "Sugerencia: Introduzca [su-prefijo-handle]/0 para ejecutar una tarea en toda su instalación (no todas las tareas permiten esta opción)", - - // "deny-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I regret to inform you that it's not possible to send you a copy of the file(s) you have requested, concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", - "deny-request-copy.email.message": "Estimado {{ recipientName }},\nEn respuesta a su solicitud, lamento informarle que no es posible enviarle una copia de los archivos que ha solicitado, en relación con el documento: \"{{ itemUrl }}\" ({{ itemName }}), del cual soy autor.\n\nSaludos cordiales,\n{{ authorName }} <{{ authorEmail }}>", + "deny-request-copy.email.message": "Estimado {{ recipientName }},\nEn respuesta a su solicitud, lamento informarle de que no es posible enviarle una copia de los archivos que ha solicitado, en relación con el documento: \"{{ itemUrl }}\" ({{ itemName }}), del cual soy autor.\n\nSaludos cordiales,\n{{ authorName }} <{{ authorEmail }}>", // "deny-request-copy.email.subject": "Request copy of document", "deny-request-copy.email.subject": "Solicitar una copia del documento", @@ -2127,17 +2131,16 @@ "deny-request-copy.header": "Denegar copia del documento", // "deny-request-copy.intro": "This message will be sent to the applicant of the request", - "deny-request-copy.intro": "Éste es el texto que será enviado al solicitante.", + "deny-request-copy.intro": "Éste es el texto que será enviado al solicitante", // "deny-request-copy.success": "Successfully denied item request", "deny-request-copy.success": "Solicitud de copia de documento denegada", - - // "dso.name.untitled": "Untitled", "dso.name.untitled": "Sin título", - + // "dso.name.unnamed": "Unnamed", + "dso.name.unnamed": "Sin nombre", // "dso-selector.create.collection.head": "New collection", "dso-selector.create.collection.head": "Nueva colección", @@ -2259,7 +2262,7 @@ // "supervision-group-selector.notification.create.failure.title": "Error", "supervision-group-selector.notification.create.failure.title": "Error", - // "supervision-group-selector.notification.create.already-existing" : "A supervision order already exists on this item for selected group", + // "supervision-group-selector.notification.create.already-existing": "A supervision order already exists on this item for selected group", "supervision-group-selector.notification.create.already-existing": "Ya existe una orden de supervisión para este ítem en el grupo selecionado", // "confirmation-modal.export-metadata.header": "Export metadata for {{ dsoName }}", @@ -2374,7 +2377,7 @@ "error.top-level-communities": "Error al recuperar las comunidades de primer nivel", // "error.validation.license.notgranted": "You must grant this license to complete your submission. If you are unable to grant this license at this time you may save your work and return later or remove the submission.", - "error.validation.license.notgranted": "Debe conceda esta licencia de depósito para completar el envío. Si no puede conceder esta licencia en este momento, puede guardar su trabajo y regresar más tarde o bien eliminar el envío.", + "error.validation.license.notgranted": "Debe conceder esta licencia de depósito para completar el envío. Si no puede conceder esta licencia en este momento, puede guardar su trabajo y regresar más tarde o bien eliminar el envío.", // "error.validation.pattern": "This input is restricted by the current pattern: {{ pattern }}.", "error.validation.pattern": "Esta entrada está restringida por este patrón: {{ pattern }}.", @@ -2394,16 +2397,33 @@ // "error.validation.groupExists": "This group already exists", "error.validation.groupExists": "Este grupo ya existe", + // "error.validation.metadata.name.invalid-pattern": "This field cannot contain dots, commas or spaces. Please use the Element & Qualifier fields instead", + "error.validation.metadata.name.invalid-pattern": "Este campo no puede contener puntos, comas o espacios. Use preferiblemente los campos Elemento y Cualificador", + + // "error.validation.metadata.name.max-length": "This field may not contain more than 32 characters", + "error.validation.metadata.name.max-length": "Este campo no puede contener mas de 32 caracteres", + + // "error.validation.metadata.namespace.max-length": "This field may not contain more than 256 characters", + "error.validation.metadata.namespace.max-length": "Este campo no puede contener mas de 256 caracteres", + + // "error.validation.metadata.element.invalid-pattern": "This field cannot contain dots, commas or spaces. Please use the Qualifier field instead", + "error.validation.metadata.element.invalid-pattern": "Este campo no puede contener puntos, comas o espacios. Use preferiblemente el campo Cualificador", + + // "error.validation.metadata.element.max-length": "This field may not contain more than 64 characters", + "error.validation.metadata.element.max-length": "Este campo no puede contener mas de 64 caracteres", + + // "error.validation.metadata.qualifier.invalid-pattern": "This field cannot contain dots, commas or spaces", + "error.validation.metadata.qualifier.invalid-pattern": "This field cannot contain dots, commas or spaces", + + // "error.validation.metadata.qualifier.max-length": "This field may not contain more than 64 characters", + "error.validation.metadata.qualifier.max-length": "Este campo no puede contener mas de 64 caracteres", // "feed.description": "Syndication feed", "feed.description": "Hilo de sindicación", - // "file-section.error.header": "Error obtaining files for this item", "file-section.error.header": "Error al obtener archivos para este ítem", - - // "footer.copyright": "copyright © 2002-{{ year }}", "footer.copyright": "copyright © 2002-{{ year }}", @@ -2419,14 +2439,12 @@ // "footer.link.privacy-policy": "Privacy policy", "footer.link.privacy-policy": "Política de privacidad", - // "footer.link.end-user-agreement":"End User Agreement", + // "footer.link.end-user-agreement": "End User Agreement", "footer.link.end-user-agreement": "Acuerdo de usuario final", - // "footer.link.feedback":"Send Feedback", + // "footer.link.feedback": "Send Feedback", "footer.link.feedback": "Enviar Sugerencias", - - // "forgot-email.form.header": "Forgot Password", "forgot-email.form.header": "Olvido de contraseña", @@ -2460,8 +2478,6 @@ // "forgot-email.form.error.content": "An error occured when attempting to reset the password for the account associated with the following email address: {{ email }}", "forgot-email.form.error.content": "Ha ocurrido una error intentando restablecer la contraseña para la cuenta asociada al correo electrónico: {{ email }}", - - // "forgot-password.title": "Forgot Password", "forgot-password.title": "Olvido de contraseña", @@ -2504,7 +2520,6 @@ // "forgot-password.form.submit": "Submit password", "forgot-password.form.submit": "Enviar contraseña", - // "form.add": "Add more", "form.add": "Añadir más", @@ -2565,6 +2580,24 @@ // "form.no-value": "No value entered", "form.no-value": "No se introdujo ningún valor", + // "form.other-information.email": "Email", + "form.other-information.email": "Correo electrónico", + + // "form.other-information.first-name": "First Name", + "form.other-information.first-name": "Nombre", + + // "form.other-information.insolr": "In Solr Index", + "form.other-information.insolr": "en el índice Solr", + + // "form.other-information.institution": "Institution", + "form.other-information.institution": "Institución", + + // "form.other-information.last-name": "Last Name", + "form.other-information.last-name": "Apellido", + + // "form.other-information.orcid": "ORCID", + "form.other-information.orcid": "ORCID", + // "form.remove": "Remove", "form.remove": "Eliminar", @@ -2589,16 +2622,14 @@ // "form.repeatable.sort.tip": "Drop the item in the new position", "form.repeatable.sort.tip": "Suelte el ítem en la nueva posición", - - // "grant-deny-request-copy.deny": "Don't send copy", "grant-deny-request-copy.deny": "No envíe copia", // "grant-deny-request-copy.email.back": "Back", "grant-deny-request-copy.email.back": "Atrás", - // "grant-deny-request-copy.email.message": "Message", - "grant-deny-request-copy.email.message": "Mensaje", + // "grant-deny-request-copy.email.message": "Optional additional message", + "grant-deny-request-copy.email.message": "Mensaje adicional (opcional)", // "grant-deny-request-copy.email.message.empty": "Please enter a message", "grant-deny-request-copy.email.message.empty": "Por favor, introduzca un mensaje", @@ -2636,11 +2667,6 @@ // "grant-deny-request-copy.processed": "This request has already been processed. You can use the button below to get back to the home page.", "grant-deny-request-copy.processed": "Esta solicitud ya fue procesada. Puede usar los botones inferiores para regresas a la página de inicio", - - - // "grant-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I have the pleasure to send you in attachment a copy of the file(s) concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", - "grant-request-copy.email.message": "Estimado {{ recipientName }},\nRespondiendo a su solicitud, le envío anexada una copia del fichero correspondiente al documento: \"{{ itemUrl }}\" ({{ itemName }}), del que soy autor.\n\nUn cordial saludo,\n{{ authorName }} <{{ authorEmail }}>", - // "grant-request-copy.email.subject": "Request copy of document", "grant-request-copy.email.subject": "Solicitar copia de documento", @@ -2650,24 +2676,23 @@ // "grant-request-copy.header": "Grant document copy request", "grant-request-copy.header": "Conceder solicitud de copia de documento", - // "grant-request-copy.intro": "This message will be sent to the applicant of the request. The requested document(s) will be attached.", - "grant-request-copy.intro": "Este mensaje se enviará al solicitante de la copia. Se le anexará una copia del documento.", + // "grant-request-copy.intro": "A message will be sent to the applicant of the request. The requested document(s) will be attached.", + "grant-request-copy.intro": "Este mensaje se enviará al solicitante de la copia. Se le anexará una copia del documento.", // "grant-request-copy.success": "Successfully granted item request", "grant-request-copy.success": "Solicitud de ítem concedida exitosamente", - // "health.breadcrumbs": "Health", "health.breadcrumbs": "Chequeos", - // "health-page.heading" : "Health", - "health-page.heading": "Chequeos", + // "health-page.heading": "Health", + "health-page.heading": "Chequeos", - // "health-page.info-tab" : "Info", - "health-page.info-tab": "Información", + // "health-page.info-tab": "Info", + "health-page.info-tab": "Información", - // "health-page.status-tab" : "Status", - "health-page.status-tab": "Estado", + // "health-page.status-tab": "Status", + "health-page.status-tab": "Estado", // "health-page.error.msg": "The health check service is temporarily unavailable", "health-page.error.msg": "El servicio de comprobación no se encuentra temporalmente disponible", @@ -2717,7 +2742,6 @@ // "health-page.section.no-issues": "No issues detected", "health-page.section.no-issues": "No se detectaron problemas", - // "home.description": "", "home.description": "", @@ -2736,8 +2760,6 @@ // "home.top-level-communities.help": "Select a community to browse its collections.", "home.top-level-communities.help": "Seleccione una comunidad para explorar sus colecciones.", - - // "info.end-user-agreement.accept": "I have read and I agree to the End User Agreement", "info.end-user-agreement.accept": "He leído y acepto el Acuerdo de usuario final.", @@ -2762,6 +2784,9 @@ // "info.end-user-agreement.title": "End User Agreement", "info.end-user-agreement.title": "Acuerdo de usuario final", + // "info.end-user-agreement.hosting-country": "the United States", + "info.end-user-agreement.hosting-country": "los Estados Unidos de América", + // "info.privacy.breadcrumbs": "Privacy Statement", "info.privacy.breadcrumbs": "Declaracion de privacidad", @@ -2795,47 +2820,39 @@ // "info.feedback.email-label": "Your Email", "info.feedback.email-label": "Su correo electrónico", - // "info.feedback.create.success" : "Feedback Sent Successfully!", + // "info.feedback.create.success": "Feedback Sent Successfully!", "info.feedback.create.success": "Envío exitoso de sugerencia", - // "info.feedback.error.email.required" : "A valid email address is required", + // "info.feedback.error.email.required": "A valid email address is required", "info.feedback.error.email.required": "se requiere una dirección válida de correo electrónico", - // "info.feedback.error.message.required" : "A comment is required", + // "info.feedback.error.message.required": "A comment is required", "info.feedback.error.message.required": "Se requiere un comentario", - // "info.feedback.page-label" : "Page", + // "info.feedback.page-label": "Page", "info.feedback.page-label": "Página", - // "info.feedback.page_help" : "Tha page related to your feedback", + // "info.feedback.page_help": "Tha page related to your feedback", "info.feedback.page_help": "La página relacionada con su sugerencia", - - // "item.alerts.private": "This item is non-discoverable", "item.alerts.private": "Este ítem es privado", // "item.alerts.withdrawn": "This item has been withdrawn", "item.alerts.withdrawn": "Este ítem ha sido retirado", - - // "item.edit.authorizations.heading": "With this editor you can view and alter the policies of an item, plus alter policies of individual item components: bundles and bitstreams. Briefly, an item is a container of bundles, and bundles are containers of bitstreams. Containers usually have ADD/REMOVE/READ/WRITE policies, while bitstreams only have READ/WRITE policies.", "item.edit.authorizations.heading": "Con este editor puede ver y modificar las políticas de un ítem, además de modificar las políticas de los componentes individuales del ítem: paquetes y archivos. Brevemente, un ítem es un contenedor de paquetes y los paquetes son contenedores de archivos. Los contenedores suelen tener políticas AGREGAR/ELIMINAR/LEER/ESCRIBIR, mientras que los archivos solo tienen políticas LEER/ESCRIBIR.", // "item.edit.authorizations.title": "Edit item's Policies", "item.edit.authorizations.title": "Editar las políticas del ítem", - - // "item.badge.private": "Non-discoverable", "item.badge.private": "Privado", // "item.badge.withdrawn": "Withdrawn", "item.badge.withdrawn": "Retirado", - - // "item.bitstreams.upload.bundle": "Bundle", "item.bitstreams.upload.bundle": "Bloque", @@ -2869,8 +2886,6 @@ // "item.bitstreams.upload.title": "Upload bitstream", "item.bitstreams.upload.title": "Subir archivo", - - // "item.edit.bitstreams.bundle.edit.buttons.upload": "Upload", "item.edit.bitstreams.bundle.edit.buttons.upload": "Subir", @@ -2961,8 +2976,6 @@ // "item.edit.bitstreams.upload-button": "Upload", "item.edit.bitstreams.upload-button": "Subir", - - // "item.edit.delete.cancel": "Cancel", "item.edit.delete.cancel": "Cancelar", @@ -2990,7 +3003,6 @@ // "item.edit.tabs.disabled.tooltip": "You're not authorized to access this tab", "item.edit.tabs.disabled.tooltip": "No tienes autorización para acceder a esta pestaña", - // "item.edit.tabs.mapper.head": "Collection Mapper", "item.edit.tabs.mapper.head": "Mapeador de colecciones", @@ -3114,8 +3126,6 @@ // "item.edit.item-mapper.tabs.map": "Map new collections", "item.edit.item-mapper.tabs.map": "Mapear nuevas colecciones", - - // "item.edit.metadata.add-button": "Add", "item.edit.metadata.add-button": "Agregar", @@ -3200,8 +3210,6 @@ // "item.edit.metadata.save-button": "Save", "item.edit.metadata.save-button": "Guardar", - - // "item.edit.modify.overview.field": "Field", "item.edit.modify.overview.field": "Campo", @@ -3211,8 +3219,6 @@ // "item.edit.modify.overview.value": "Value", "item.edit.modify.overview.value": "Valor", - - // "item.edit.move.cancel": "Back", "item.edit.move.cancel": "Atrás", @@ -3252,8 +3258,6 @@ // "item.edit.move.title": "Move item", "item.edit.move.title": "Mover ítem", - - // "item.edit.private.cancel": "Cancel", "item.edit.private.cancel": "Cancelar", @@ -3272,8 +3276,6 @@ // "item.edit.private.success": "The item is now non-discoverable", "item.edit.private.success": "El ítem ahora es privado", - - // "item.edit.public.cancel": "Cancel", "item.edit.public.cancel": "Cancelar", @@ -3292,8 +3294,6 @@ // "item.edit.public.success": "The item is now discoverable", "item.edit.public.success": "El ítem ahora es público", - - // "item.edit.reinstate.cancel": "Cancel", "item.edit.reinstate.cancel": "Cancelar", @@ -3312,8 +3312,6 @@ // "item.edit.reinstate.success": "The item was reinstated successfully", "item.edit.reinstate.success": "El ítem se reintegró correctamente", - - // "item.edit.relationships.discard-button": "Discard", "item.edit.relationships.discard-button": "Descartar", @@ -3359,11 +3357,9 @@ // "item.edit.relationships.no-entity-type": "Add 'dspace.entity.type' metadata to enable relationships for this item", "item.edit.relationships.no-entity-type": "Agregue metadatos 'dspace.entity.type' para habilitar las relaciones para este ítem", - // "item.edit.return": "Back", "item.edit.return": "Atrás", - // "item.edit.tabs.bitstreams.head": "Bitstreams", "item.edit.tabs.bitstreams.head": "Archivos", @@ -3376,6 +3372,15 @@ // "item.edit.tabs.curate.title": "Item Edit - Curate", "item.edit.tabs.curate.title": "Edición de ítem: Curar", + // "item.edit.curate.title": "Curate Item: {{item}}", + "item.edit.curate.title": "Curar ítem: {{item}}", + + // "item.edit.tabs.access-control.head": "Access Control", + "item.edit.tabs.access-control.head": "Control de acceso", + + // "item.edit.tabs.access-control.title": "Item Edit - Access Control", + "item.edit.tabs.access-control.title": "Edición de ítem: Control de acceso", + // "item.edit.tabs.metadata.head": "Metadata", "item.edit.tabs.metadata.head": "Metadatos", @@ -3407,7 +3412,7 @@ "item.edit.tabs.status.buttons.mappedCollections.label": "Administrar colecciones mapeadas", // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", - "item.edit.tabs.status.buttons.move.button": "Mover éste ítem a una colección diferente", + "item.edit.tabs.status.buttons.move.button": "Mover este ítem a una colección diferente", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", "item.edit.tabs.status.buttons.move.label": "Mover ítem a otra colección", @@ -3434,7 +3439,7 @@ "item.edit.tabs.status.buttons.unauthorized": "No estás autorizado para realizar esta acción.", // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", - "item.edit.tabs.status.buttons.withdraw.button": "Retirar éste ítem", + "item.edit.tabs.status.buttons.withdraw.button": "Retirar este ítem", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", "item.edit.tabs.status.buttons.withdraw.label": "Retirar ítem del repositorio", @@ -3475,8 +3480,6 @@ // "item.edit.tabs.view.title": "Item Edit - View", "item.edit.tabs.view.title": "Edición de ítem - Ver", - - // "item.edit.withdraw.cancel": "Cancel", "item.edit.withdraw.cancel": "Cancelar", @@ -3498,7 +3501,6 @@ // "item.orcid.return": "Back", "item.orcid.return": "Atrás", - // "item.listelement.badge": "Item", "item.listelement.badge": "Ítem", @@ -3556,8 +3558,6 @@ // "workflow-item.search.result.list.element.supervised.remove-tooltip": "Remove supervision group", "workflow-item.search.result.list.element.supervised.remove-tooltip": "Borrar grupo de supervisión", - - // "item.page.abstract": "Abstract", "item.page.abstract": "Resumen", @@ -3648,10 +3648,10 @@ // "item.page.bitstreams.collapse": "Collapse", "item.page.bitstreams.collapse": "Contraer", - // "item.page.filesection.original.bundle" : "Original bundle", + // "item.page.filesection.original.bundle": "Original bundle", "item.page.filesection.original.bundle": "Bloque original", - // "item.page.filesection.license.bundle" : "License bundle", + // "item.page.filesection.license.bundle": "License bundle", "item.page.filesection.license.bundle": "Bloque de licencias", // "item.page.return": "Back", @@ -3696,27 +3696,30 @@ // "item.preview.dc.type": "Type:", "item.preview.dc.type": "Tipo:", - // "item.preview.oaire.citation.issue" : "Issue", + // "item.preview.oaire.citation.issue": "Issue", "item.preview.oaire.citation.issue": "Número", - // "item.preview.oaire.citation.volume" : "Volume", + // "item.preview.oaire.citation.volume": "Volume", "item.preview.oaire.citation.volume": "Volumen", - // "item.preview.dc.relation.issn" : "ISSN", + // "item.preview.dc.relation.issn": "ISSN", "item.preview.dc.relation.issn": "ISSN", - // "item.preview.dc.identifier.isbn" : "ISBN", + // "item.preview.dc.identifier.isbn": "ISBN", "item.preview.dc.identifier.isbn": "ISBN", // "item.preview.dc.identifier": "Identifier:", "item.preview.dc.identifier": "Identificador:", - // "item.preview.dc.relation.ispartof" : "Journal or Serie", + // "item.preview.dc.relation.ispartof": "Journal or Series", "item.preview.dc.relation.ispartof": "Revista o Serie", - // "item.preview.dc.identifier.doi" : "DOI", + // "item.preview.dc.identifier.doi": "DOI", "item.preview.dc.identifier.doi": "DOI", + // "item.preview.dc.publisher": "Publisher:", + "item.preview.dc.publisher": "Editor:", + // "item.preview.person.familyName": "Surname:", "item.preview.person.familyName": "Apellido:", @@ -3744,8 +3747,6 @@ // "item.preview.oaire.fundingStream": "Funding Stream:", "item.preview.oaire.fundingStream": "Línea de financiación:", - - // "item.select.confirm": "Confirm selected", "item.select.confirm": "Confirmar seleccionado", @@ -3761,7 +3762,6 @@ // "item.select.table.title": "Title", "item.select.table.title": "Título", - // "item.version.history.empty": "There are no other versions for this item yet.", "item.version.history.empty": "Aún no hay otras versiones para este ítem.", @@ -3822,11 +3822,9 @@ // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", "item.version.history.table.action.hasDraft": "No es posible crear una nueva versión puesto que existe en el historial de versiones un envío pendiente", - // "item.version.notice": "This is not the latest version of this item. The latest version can be found here.", "item.version.notice": "Esta no es la última versión de este ítem. La última versión se puede encontrar aquí.", - // "item.version.create.modal.header": "New version", "item.version.create.modal.header": "Nueva versión", @@ -3860,21 +3858,20 @@ // "item.version.create.modal.submitted.text": "The new version is being created. This may take some time if the item has a lot of relationships.", "item.version.create.modal.submitted.text": "Se está creando la nueva versión. Si el ítem tiene muchas relaciones, este proceso podría tardar.", - // "item.version.create.notification.success" : "New version has been created with version number {{version}}", + // "item.version.create.notification.success": "New version has been created with version number {{version}}", "item.version.create.notification.success": "Se ha creado una nueva versión con número {{version}}", - // "item.version.create.notification.failure" : "New version has not been created", + // "item.version.create.notification.failure": "New version has not been created", "item.version.create.notification.failure": "No se ha creado una nueva versión", - // "item.version.create.notification.inProgress" : "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.create.notification.inProgress": "A new version cannot be created because there is an inprogress submission in the version history", "item.version.create.notification.inProgress": "No es posible crear una nueva versión puesto que existe en el historial de versiones un envío pendiente", - // "item.version.delete.modal.header": "Delete version", "item.version.delete.modal.header": "Borrar versión", // "item.version.delete.modal.text": "Do you want to delete version {{version}}?", - "item.version.delete.modal.text": "Quiere borrar la versión {{version}}?", + "item.version.delete.modal.text": "¿Quiere borrar la versión {{version}}?", // "item.version.delete.modal.button.confirm": "Delete", "item.version.delete.modal.button.confirm": "Borrar", @@ -3888,21 +3885,18 @@ // "item.version.delete.modal.button.cancel.tooltip": "Do not delete this version", "item.version.delete.modal.button.cancel.tooltip": "No borrar esta versión", - // "item.version.delete.notification.success" : "Version number {{version}} has been deleted", + // "item.version.delete.notification.success": "Version number {{version}} has been deleted", "item.version.delete.notification.success": "Se ha borrado la versión número {{version}}", - // "item.version.delete.notification.failure" : "Version number {{version}} has not been deleted", + // "item.version.delete.notification.failure": "Version number {{version}} has not been deleted", "item.version.delete.notification.failure": "No se ha borrado la versión número {{version}}", + // "item.version.edit.notification.success": "The summary of version number {{version}} has been changed", + "item.version.edit.notification.success": "Se ha cambiado el resumen de la versión número {{version}}", - // "item.version.edit.notification.success" : "The summary of version number {{version}} has been changed", - "item.version.edit.notification.success": "Ha cambiado el resumen de la versión número {{version}}", - - // "item.version.edit.notification.failure" : "The summary of version number {{version}} has not been changed", + // "item.version.edit.notification.failure": "The summary of version number {{version}} has not been changed", "item.version.edit.notification.failure": "No ha cambiado el resumen de la versión número {{version}}", - - // "itemtemplate.edit.metadata.add-button": "Add", "itemtemplate.edit.metadata.add-button": "Agregar", @@ -3984,8 +3978,6 @@ // "itemtemplate.edit.metadata.save-button": "Save", "itemtemplate.edit.metadata.save-button": "Guardar", - - // "journal.listelement.badge": "Journal", "journal.listelement.badge": "Revista", @@ -4016,8 +4008,6 @@ // "journal.search.title": "Journal Search", "journal.search.title": "Búsqueda de revistas", - - // "journalissue.listelement.badge": "Journal Issue", "journalissue.listelement.badge": "Número de la revista", @@ -4045,8 +4035,6 @@ // "journalissue.page.titleprefix": "Journal Issue: ", "journalissue.page.titleprefix": "Número de la revista: ", - - // "journalvolume.listelement.badge": "Journal Volume", "journalvolume.listelement.badge": "Volumen de la revista", @@ -4065,7 +4053,6 @@ // "journalvolume.page.volume": "Volume", "journalvolume.page.volume": "Volumen", - // "iiifsearchable.listelement.badge": "Document Media", "iiifsearchable.listelement.badge": "Soporte (media) del documento", @@ -4099,7 +4086,6 @@ // "iiif.page.description": "Description: ", "iiif.page.description": "Descripción: ", - // "loading.bitstream": "Loading bitstream...", "loading.bitstream": "Cargando archivo...", @@ -4154,8 +4140,6 @@ // "loading.top-level-communities": "Loading top-level communities...", "loading.top-level-communities": "Cargando comunidades de primer nivel...", - - // "login.form.email": "Email address", "login.form.email": "Correo electrónico", @@ -4192,8 +4176,6 @@ // "login.breadcrumbs": "Login", "login.breadcrumbs": "Acceso", - - // "logout.form.header": "Log out from DSpace", "logout.form.header": "Cerrar sesión en DSpace", @@ -4203,8 +4185,6 @@ // "logout.title": "Logout", "logout.title": "Cerrar sesión", - - // "menu.header.admin": "Management", "menu.header.admin": "Gestión", @@ -4214,27 +4194,24 @@ // "menu.header.admin.description": "Management menu", "menu.header.admin.description": "Menú de gestión", - - // "menu.section.access_control": "Access Control", "menu.section.access_control": "Control de acceso", // "menu.section.access_control_authorizations": "Authorizations", "menu.section.access_control_authorizations": "Autorizaciones", + // "menu.section.access_control_bulk": "Bulk Access Management", + "menu.section.access_control_bulk": "Gestión de Acceso Masivo", + // "menu.section.access_control_groups": "Groups", "menu.section.access_control_groups": "Grupos", // "menu.section.access_control_people": "People", "menu.section.access_control_people": "Usuarios", - - // "menu.section.admin_search": "Admin Search", "menu.section.admin_search": "Búsqueda de administrador", - - // "menu.section.browse_community": "This Community", "menu.section.browse_community": "Esta comunidad", @@ -4259,22 +4236,21 @@ // "menu.section.browse_global_by_subject": "By Subject", "menu.section.browse_global_by_subject": "Por tema", + // "menu.section.browse_global_by_srsc": "By Subject Category", + "menu.section.browse_global_by_srsc": "Por categoría", + // "menu.section.browse_global_by_title": "By Title", "menu.section.browse_global_by_title": "Por titulo", // "menu.section.browse_global_communities_and_collections": "Communities & Collections", "menu.section.browse_global_communities_and_collections": "Comunidades", - - // "menu.section.control_panel": "Control Panel", "menu.section.control_panel": "Panel de control", // "menu.section.curation_task": "Curation Task", "menu.section.curation_task": "Tareas de curación", - - // "menu.section.edit": "Edit", "menu.section.edit": "Editar", @@ -4287,8 +4263,6 @@ // "menu.section.edit_item": "Item", "menu.section.edit_item": "Ítem", - - // "menu.section.export": "Export", "menu.section.export": "Exportar", @@ -4307,7 +4281,6 @@ // "menu.section.export_batch": "Batch Export (ZIP)", "menu.section.export_batch": "Exportación por lotes (ZIP)", - // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": "Sección del menú de control de acceso", @@ -4356,8 +4329,6 @@ // "menu.section.icon.unpin": "Unpin sidebar", "menu.section.icon.unpin": "Desanclar la barra lateral", - - // "menu.section.import": "Import", "menu.section.import": "Importar", @@ -4367,8 +4338,6 @@ // "menu.section.import_metadata": "Metadata", "menu.section.import_metadata": "Metadatos", - - // "menu.section.new": "New", "menu.section.new": "Nuevo", @@ -4387,24 +4356,18 @@ // "menu.section.new_process": "Process", "menu.section.new_process": "Proceso", - - // "menu.section.pin": "Pin sidebar", "menu.section.pin": "Anclar barra lateral", // "menu.section.unpin": "Unpin sidebar", "menu.section.unpin": "Desanclar la barra lateral", - - // "menu.section.processes": "Processes", "menu.section.processes": "Procesos", // "menu.section.health": "Health", "menu.section.health": "Chequeo", - - // "menu.section.registries": "Registries", "menu.section.registries": "Registros", @@ -4414,16 +4377,12 @@ // "menu.section.registries_metadata": "Metadata", "menu.section.registries_metadata": "Metadatos", - - // "menu.section.statistics": "Statistics", "menu.section.statistics": "Estadísticas", // "menu.section.statistics_task": "Statistics Task", "menu.section.statistics_task": "Tarea de estadísticas", - - // "menu.section.toggle.access_control": "Toggle Access Control section", "menu.section.toggle.access_control": "Alternar sección de control de acceso", @@ -4454,19 +4413,18 @@ // "menu.section.toggle.statistics_task": "Toggle Statistics Task section", "menu.section.toggle.statistics_task": "Alternar sección de Tarea de estadísticas", - // "menu.section.workflow": "Administer Workflow", "menu.section.workflow": "Administrar flujo de trabajo", - // "metadata-export-search.tooltip": "Export search results as CSV", "metadata-export-search.tooltip": "Exportar los resultados de búsqueda a CSV", + // "metadata-export-search.submit.success": "The export was started successfully", "metadata-export-search.submit.success": "La exportación ha comenzado satisfactoriamente", + // "metadata-export-search.submit.error": "Starting the export has failed", "metadata-export-search.submit.error": "Ha fallado el comienzo de la exportación", - // "mydspace.breadcrumbs": "MyDSpace", "mydspace.breadcrumbs": "Mi DSpace", @@ -4593,8 +4551,6 @@ // "mydspace.view-btn": "View", "mydspace.view-btn": "Ver", - - // "nav.browse.header": "All of DSpace", "nav.browse.header": "Todo DSpace", @@ -4628,25 +4584,27 @@ // "nav.search": "Search", "nav.search": "Buscar", + // "nav.search.button": "Submit search", + "nav.search.button": "Buscar", + // "nav.statistics.header": "Statistics", "nav.statistics.header": "Estadísticas", // "nav.stop-impersonating": "Stop impersonating EPerson", - "nav.stop-impersonating": "Dejar de hacerse pasar por usuario", + "nav.stop-impersonating": "Dejar de impersonar al usuario", - // "nav.subscriptions" : "Subscriptions", + // "nav.subscriptions": "Subscriptions", "nav.subscriptions": "Suscripciones", - // "nav.toggle" : "Toggle navigation", + // "nav.toggle": "Toggle navigation", "nav.toggle": "Alternar navegación", - // "nav.user.description" : "User profile bar", + // "nav.user.description": "User profile bar", "nav.user.description": "Barra de perfil de usuario", // "none.listelement.badge": "Item", "none.listelement.badge": "Ítem", - // "orgunit.listelement.badge": "Organizational Unit", "orgunit.listelement.badge": "Unidad organizativa", @@ -4674,8 +4632,6 @@ // "orgunit.page.titleprefix": "Organizational Unit: ", "orgunit.page.titleprefix": "Unidad organizativa: ", - - // "pagination.options.description": "Pagination options", "pagination.options.description": "Opciones de paginación", @@ -4691,8 +4647,6 @@ // "pagination.sort-direction": "Sort Options", "pagination.sort-direction": "Opciones de ordenación", - - // "person.listelement.badge": "Person", "person.listelement.badge": "Persona", @@ -4741,8 +4695,6 @@ // "person.search.title": "Person Search", "person.search.title": "Búsqueda de personas", - - // "process.new.select-parameters": "Parameters", "process.new.select-parameters": "Parámetros", @@ -4791,6 +4743,9 @@ // "process.new.notification.error.content": "An error occurred while creating this process", "process.new.notification.error.content": "Se produjo un error al crear este proceso.", + // "process.new.notification.error.max-upload.content": "The file exceeds the maximum upload size", + "process.new.notification.error.max-upload.content": "El fichero sobrepasa el límte máximo de subida", + // "process.new.header": "Create a new process", "process.new.header": "Crea un nuevo proceso", @@ -4800,18 +4755,16 @@ // "process.new.breadcrumbs": "Create a new process", "process.new.breadcrumbs": "Crea un nuevo proceso", - - - // "process.detail.arguments" : "Arguments", + // "process.detail.arguments": "Arguments", "process.detail.arguments": "Argumentos", - // "process.detail.arguments.empty" : "This process doesn't contain any arguments", + // "process.detail.arguments.empty": "This process doesn't contain any arguments", "process.detail.arguments.empty": "Este proceso no contiene ningún argumento", - // "process.detail.back" : "Back", + // "process.detail.back": "Back", "process.detail.back": "Atrás", - // "process.detail.output" : "Process Output", + // "process.detail.output": "Process Output", "process.detail.output": "Salida del proceso", // "process.detail.logs.button": "Retrieve process output", @@ -4823,28 +4776,29 @@ // "process.detail.logs.none": "This process has no output", "process.detail.logs.none": "Este proceso no tiene salida", - // "process.detail.output-files" : "Output Files", + // "process.detail.output-files": "Output Files", "process.detail.output-files": "Archivos de salida", - // "process.detail.output-files.empty" : "This process doesn't contain any output files", + // "process.detail.output-files.empty": "This process doesn't contain any output files", "process.detail.output-files.empty": "Este proceso no contiene ningún archivo de salida", - // "process.detail.script" : "Script", + // "process.detail.script": "Script", "process.detail.script": "Secuencia de comandos", - // "process.detail.title" : "Process: {{ id }} - {{ name }}", + // "process.detail.title": "Process: {{ id }} - {{ name }}", + "process.detail.title": "Proceso: {{ id }} - {{ name }}", - // "process.detail.start-time" : "Start time", + // "process.detail.start-time": "Start time", "process.detail.start-time": "Hora de inicio", - // "process.detail.end-time" : "Finish time", + // "process.detail.end-time": "Finish time", "process.detail.end-time": "Hora de finalización", - // "process.detail.status" : "Status", + // "process.detail.status": "Status", "process.detail.status": "Estado", - // "process.detail.create" : "Create similar process", + // "process.detail.create": "Create similar process", "process.detail.create": "Crear un proceso similar", // "process.detail.actions": "Actions", @@ -4871,24 +4825,22 @@ // "process.detail.delete.error": "Something went wrong when deleting the process", "process.detail.delete.error": "Algo falló eliminando el proceso", - - - // "process.overview.table.finish" : "Finish time (UTC)", + // "process.overview.table.finish": "Finish time (UTC)", "process.overview.table.finish": "Hora de finalización (UTC)", - // "process.overview.table.id" : "Process ID", + // "process.overview.table.id": "Process ID", "process.overview.table.id": "ID de proceso", - // "process.overview.table.name" : "Name", + // "process.overview.table.name": "Name", "process.overview.table.name": "Nombre", - // "process.overview.table.start" : "Start time (UTC)", + // "process.overview.table.start": "Start time (UTC)", "process.overview.table.start": "Hora de inicio (UTC)", - // "process.overview.table.status" : "Status", + // "process.overview.table.status": "Status", "process.overview.table.status": "Estado", - // "process.overview.table.user" : "User", + // "process.overview.table.user": "User", "process.overview.table.user": "Usuario", // "process.overview.title": "Processes Overview", @@ -4927,8 +4879,6 @@ // "process.bulk.delete.success": "{{count}} process(es) have been succesfully deleted", "process.bulk.delete.success": "{{count}} proceso(s) se han eliminado correctamente", - - // "profile.breadcrumbs": "Update Profile", "profile.breadcrumbs": "Actualización del perfil", @@ -5058,8 +5008,6 @@ // "project-relationships.search.results.head": "Project Search Results", "project-relationships.search.results.head": "Resultados de búsqueda de proyectos", - - // "publication.listelement.badge": "Publication", "publication.listelement.badge": "Publicación", @@ -5093,7 +5041,6 @@ // "publication.search.title": "Publication Search", "publication.search.title": "Búsqueda de publicaciones", - // "media-viewer.next": "Next", "media-viewer.next": "Siguiente", @@ -5103,7 +5050,6 @@ // "media-viewer.playlist": "Playlist", "media-viewer.playlist": "Lista de reproducción", - // "register-email.title": "New user registration", "register-email.title": "Registro de nuevo usuario", @@ -5167,7 +5113,6 @@ // "register-page.create-profile.submit.success.head": "Registration completed", "register-page.create-profile.submit.success.head": "Registro completado", - // "register-page.registration.header": "New user registration", "register-page.registration.header": "Registro de nuevo usuario", @@ -5209,6 +5154,7 @@ // "register-page.registration.google-recaptcha.must-accept-cookies": "In order to register you must accept the Registration and Password recovery (Google reCaptcha) cookies.", "register-page.registration.google-recaptcha.must-accept-cookies": "Para registrarse debe aceptar las cookies de Registro y recuperación de contraseña (Google reCaptcha).", + // "register-page.registration.error.maildomain": "This email address is not on the list of domains who can register. Allowed domains are {{ domains }}", "register-page.registration.error.maildomain": "Este correo electrónico no esta en la lista de dominios que pueden registrarse. Los dominios permitidos son {{ domains }}", @@ -5223,6 +5169,7 @@ // "register-page.registration.google-recaptcha.notification.message.expired": "Verification expired. Please verify again.", "register-page.registration.google-recaptcha.notification.message.expired": "Verificación caducada. Verifique de nuevo.", + // "register-page.registration.info.maildomain": "Accounts can be registered for mail addresses of the domains", "register-page.registration.info.maildomain": "Las cuentas pueden registrarse para las direcciones de correo de los dominios", @@ -5289,16 +5236,14 @@ // "relationships.isFundingAgencyOf.OrgUnit": "Funder", "relationships.isFundingAgencyOf.OrgUnit": "Financiador", - // "repository.image.logo": "Repository logo", "repository.image.logo": "Logotipo del repositorio", - // "repository.title.prefix": "DSpace Angular :: ", - "repository.title.prefix": "DSpace Angular :: ", - - // "repository.title.prefixDSpace": "DSpace Angular ::", - "repository.title.prefixDSpace": "DSpace Angular ::", + // "repository.title": "DSpace Repository", + "repository.title": "Repositorio DSpace", + // "repository.title.prefix": "DSpace Repository :: ", + "repository.title.prefix": "Repositorio DSpace :: ", // "resource-policies.add.button": "Add", "resource-policies.add.button": "Agregar", @@ -5471,8 +5416,6 @@ // "resource-policies.table.headers.title.for.collection": "Policies for Collection", "resource-policies.table.headers.title.for.collection": "Políticas para la colección", - - // "search.description": "", "search.description": "", @@ -5488,7 +5431,6 @@ // "search.search-form.placeholder": "Search the repository ...", "search.search-form.placeholder": "Buscar en el repositorio ...", - // "search.filters.applied.f.author": "Author", "search.filters.applied.f.author": "Autor", @@ -5537,8 +5479,6 @@ // "search.filters.applied.f.withdrawn": "Withdrawn", "search.filters.applied.f.withdrawn": "Retirado", - - // "search.filters.filter.author.head": "Author", "search.filters.filter.author.head": "Autor", @@ -5758,8 +5698,6 @@ // "search.filters.filter.supervisedBy.label": "Search Supervised By", "search.filters.filter.supervisedBy.label": "Búsqueda Supervisada Por", - - // "search.filters.entityType.JournalIssue": "Journal Issue", "search.filters.entityType.JournalIssue": "Número de la revista", @@ -5787,7 +5725,6 @@ // "search.filters.withdrawn.false": "No", "search.filters.withdrawn.false": "No", - // "search.filters.head": "Filters", "search.filters.head": "Filtros", @@ -5797,8 +5734,6 @@ // "search.filters.search.submit": "Submit", "search.filters.search.submit": "Enviar", - - // "search.form.search": "Search", "search.form.search": "Buscar", @@ -5808,8 +5743,6 @@ // "search.form.scope.all": "All of DSpace", "search.form.scope.all": "Todo DSpace", - - // "search.results.head": "Search Results", "search.results.head": "Resultados de la búsqueda", @@ -5834,7 +5767,6 @@ // "default-relationships.search.results.head": "Search Results", "default-relationships.search.results.head": "Resultados de la búsqueda", - // "search.sidebar.close": "Back to results", "search.sidebar.close": "Volver a resultados", @@ -5856,8 +5788,6 @@ // "search.sidebar.settings.title": "Settings", "search.sidebar.settings.title": "Ajustes", - - // "search.view-switch.show-detail": "Show detail", "search.view-switch.show-detail": "Mostrar detalle", @@ -5867,8 +5797,6 @@ // "search.view-switch.show-list": "Show as list", "search.view-switch.show-list": "Mostrar como lista", - - // "sorting.ASC": "Ascending", "sorting.ASC": "Ascendente", @@ -5905,7 +5833,6 @@ // "sorting.lastModified.DESC": "Last modified Descending", "sorting.lastModified.DESC": "Última modificación Descendente", - // "statistics.title": "Statistics", "statistics.title": "Estadísticas", @@ -5942,7 +5869,6 @@ // "statistics.table.no-name": "(object name could not be loaded)", "statistics.table.no-name": "(el nombre del objeto no pudo ser cargado)", - // "submission.edit.breadcrumbs": "Edit Submission", "submission.edit.breadcrumbs": "Editar envío", @@ -5952,7 +5878,7 @@ // "submission.general.cancel": "Cancel", "submission.general.cancel": "Cancelar", - // "submission.general.cannot_submit": "You have not the privilege to make a new submission.", + // "submission.general.cannot_submit": "You don't have permission to make a new submission.", "submission.general.cannot_submit": "No tiene los permisos para realizar un nuevo envío.", // "submission.general.deposit": "Deposit", @@ -5985,7 +5911,6 @@ // "submission.general.save-later": "Save for later", "submission.general.save-later": "Guardar para más adelante", - // "submission.import-external.page.title": "Import metadata from an external source", "submission.import-external.page.title": "Importar metadatos desde una fuente externa", @@ -6297,6 +6222,7 @@ // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Local Journals ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Revistas locales ({{ count }})", + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Local Projects ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Proyectos locales ({{ count }})", @@ -6320,16 +6246,18 @@ // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Local Journal Issues ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Números de revista locales ({{ count }})", + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Local Journal Issues ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Números de revista locales ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Local Journal Volumes ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Volúmenes de revista locales ({{ count }})", + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Local Journal Volumes ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Volúmenes de revista locales ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Sherpa Journals ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Revistas Sherpa ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Revistas Sherpa ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaPublisher": "Sherpa Publishers ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaPublisher": "Editores Sherpa ({{ count }})", @@ -6379,9 +6307,6 @@ // "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Funder of the Project", "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Financiador del Proyecto", - - - // "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Search...", "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Buscar...", @@ -6390,11 +6315,13 @@ // "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Journal Issues", "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Números de revista", + // "submission.sections.describe.relationship-lookup.title.JournalIssue": "Journal Issues", "submission.sections.describe.relationship-lookup.title.JournalIssue": "Números de revista", // "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Journal Volumes", "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Volúmenes de la revista", + // "submission.sections.describe.relationship-lookup.title.JournalVolume": "Journal Volumes", "submission.sections.describe.relationship-lookup.title.JournalVolume": "Volúmenes de la revista", @@ -6406,6 +6333,7 @@ // "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Funding Agency", "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Agencia financiadora", + // "submission.sections.describe.relationship-lookup.title.Project": "Projects", "submission.sections.describe.relationship-lookup.title.Project": "Proyectos", @@ -6453,6 +6381,7 @@ // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Selected Journal Volume", "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Volumen de revista seleccionada", + // "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Selected Projects", "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Proyectos seleccionados", @@ -6476,6 +6405,7 @@ // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Selected Issue", "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Número de revista seleccionados", + // "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Selected Journal Volume", "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Volúmenes de revista seleccionados", @@ -6484,6 +6414,7 @@ // "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Selected Funding", "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Financiamientos seleccionados", + // "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Selected Issue", "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Número seleccionado", @@ -6658,7 +6589,6 @@ // "submission.sections.submit.progressbar.sherpaPolicies": "Publisher open access policy information", "submission.sections.submit.progressbar.sherpaPolicies": "Información sobre políticas editoriales de acceso abierto", - // "submission.sections.sherpa-policy.title-empty": "No publisher policy information available. If your work has an associated ISSN, please enter it above to see any related publisher open access policies.", "submission.sections.sherpa-policy.title-empty": "No se encuentra disponible la información sobre política editorial. Si tiene un ISSN asociado, introdúzcalo arriba para ver información sobre políticas editoriales de acceso abierto.", @@ -6839,10 +6769,9 @@ // "submission.sections.license.required": "You must accept the license", "submission.sections.license.required": "Debe aceptar la licencia", - // "submission.sections.license.notgranted": "You must accept the license", + // "submission.sections.license.notgranted": "You must accept the license", "submission.sections.license.notgranted": "Debe aceptar la licencia", - // "submission.sections.sherpa.publication.information": "Publication information", "submission.sections.sherpa.publication.information": "Información de la Publicación", @@ -6868,7 +6797,7 @@ "submission.sections.sherpa.publisher.policy": "Política editorial", // "submission.sections.sherpa.publisher.policy.description": "The below information was found via Sherpa Romeo. Based on the policies of your publisher, it provides advice regarding whether an embargo may be necessary and/or which files you are allowed to upload. If you have questions, please contact your site administrator via the feedback form in the footer.", - "submission.sections.sherpa.publisher.policy.description": "La siguiente informacióm se encontró via Sherpa Romeo. En base a esas políticas, se proporcionan consejos sobre las necesidad de un embargo y de aquellos ficheros que puede utilizar. Si tiene dudas, por favor, contacte con el administrador del repositorio mediante el formulario de sugerencias.", + "submission.sections.sherpa.publisher.policy.description": "La siguiente informacióm se encontró vía Sherpa Romeo. En base a esas políticas, se proporcionan consejos sobre las necesidad de un embargo y de aquellos ficheros que puede utilizar. Si tiene dudas, por favor, contacte con el administrador del repositorio mediante el formulario de sugerencias.", // "submission.sections.sherpa.publisher.policy.openaccess": "Open Access pathways permitted by this journal's policy are listed below by article version. Click on a pathway for a more detailed view", "submission.sections.sherpa.publisher.policy.openaccess": "Los caminos hacia el Acceso Abierto que esta revista permite se relacionan, por versión de artículo, abajo. Pulse en un camino para una visión mas detallada", @@ -6921,16 +6850,12 @@ // "submission.sections.sherpa.error.message": "There was an error retrieving sherpa informations", "submission.sections.sherpa.error.message": "Hubo un error recuperando la información de Sherpa", - - // "submission.submit.breadcrumbs": "New submission", "submission.submit.breadcrumbs": "Nuevo envío", // "submission.submit.title": "New submission", "submission.submit.title": "Nuevo envío", - - // "submission.workflow.generic.delete": "Delete", "submission.workflow.generic.delete": "Eliminar", @@ -6949,21 +6874,18 @@ // "submission.workflow.generic.view-help": "Select this option to view the item's metadata.", "submission.workflow.generic.view-help": "Seleccione esta opción para ver los metadatos del ítem.", - // "submission.workflow.generic.submit_select_reviewer": "Select Reviewer", "submission.workflow.generic.submit_select_reviewer": "Seleccionar revisor", // "submission.workflow.generic.submit_select_reviewer-help": "", "submission.workflow.generic.submit_select_reviewer-help": "", - // "submission.workflow.generic.submit_score": "Rate", "submission.workflow.generic.submit_score": "Evaluar", // "submission.workflow.generic.submit_score-help": "", "submission.workflow.generic.submit_score-help": "", - // "submission.workflow.tasks.claimed.approve": "Approve", "submission.workflow.tasks.claimed.approve": "Aprobar", @@ -7006,8 +6928,6 @@ // "submission.workflow.tasks.claimed.return_help": "Return the task to the pool so that another user may perform the task.", "submission.workflow.tasks.claimed.return_help": "Devuelva la tarea al pool para que otro usuario pueda realizarla.", - - // "submission.workflow.tasks.generic.error": "Error occurred during operation...", "submission.workflow.tasks.generic.error": "Ocurrió un error durante la operación...", @@ -7020,8 +6940,6 @@ // "submission.workflow.tasks.generic.success": "Operation successful", "submission.workflow.tasks.generic.success": "Operación exitosa", - - // "submission.workflow.tasks.pool.claim": "Claim", "submission.workflow.tasks.pool.claim": "Asumir tarea", @@ -7034,13 +6952,14 @@ // "submission.workflow.tasks.pool.show-detail": "Show detail", "submission.workflow.tasks.pool.show-detail": "Mostrar detalle", - // "submission.workspace.generic.view": "View", "submission.workspace.generic.view": "Ver", // "submission.workspace.generic.view-help": "Select this option to view the item's metadata.", "submission.workspace.generic.view-help": "Seleccione esta opción para ver los metadatos del ítem.", + // "submitter.empty": "N/A", + "submitter.empty": "N/A", // "subscriptions.title": "Subscriptions", "subscriptions.title": "Suscripciones", @@ -7147,7 +7066,6 @@ // "subscriptions.table.empty.message": "You do not have any subscriptions at this time. To subscribe to email updates for a Community or Collection, use the subscription button on the object's page.", "subscriptions.table.empty.message": "Usted no tiene suscripciones. Para subscribirse a las actualizaciones por correo electrónico de una Comunidad o Colección, utilice el botón de suscripción en la página del objeto.", - // "thumbnail.default.alt": "Thumbnail Image", "thumbnail.default.alt": "Miniatura", @@ -7172,13 +7090,9 @@ // "thumbnail.person.placeholder": "No Profile Picture Available", "thumbnail.person.placeholder": "No hay imagen de perfil disponible", - - // "title": "DSpace", "title": "DSpace", - - // "vocabulary-treeview.header": "Hierarchical tree view", "vocabulary-treeview.header": "Vista de árbol jerárquico", @@ -7230,8 +7144,6 @@ // "virtual-metadata.delete-relationship.modal-head": "Select the items for which you want to save the virtual metadata as real metadata", "virtual-metadata.delete-relationship.modal-head": "Seleccione los ítems para los que desea guardar los metadatos virtuales como metadatos reales", - - // "supervisedWorkspace.search.results.head": "Supervised Items", "supervisedWorkspace.search.results.head": "Ítems supervisados", @@ -7247,8 +7159,6 @@ // "supervision.search.results.head": "Workflow and Workspace tasks", "supervision.search.results.head": "Tareas del flujo de trabajo y del espacio de trabajo", - - // "workflow-item.edit.breadcrumbs": "Edit workflowitem", "workflow-item.edit.breadcrumbs": "Editar ítem del flujo de trabajo", @@ -7279,7 +7189,6 @@ // "workflow-item.delete.button.confirm": "Delete", "workflow-item.delete.button.confirm": "Borrar", - // "workflow-item.send-back.notification.success.title": "Sent back to submitter", "workflow-item.send-back.notification.success.title": "Devolver al remitente", @@ -7313,11 +7222,33 @@ // "workspace-item.view.title": "Workspace View", "workspace-item.view.title": "Vista del flujo de trabajo", + // "workspace-item.delete.breadcrumbs": "Workspace Delete", + "workspace-item.delete.breadcrumbs": "Borrar espacio de trabajo", + + // "workspace-item.delete.header": "Delete workspace item", + "workspace-item.delete.header": "Borrar ítem del espacio de trabajo", + + // "workspace-item.delete.button.confirm": "Delete", + "workspace-item.delete.button.confirm": "Borrar", + + // "workspace-item.delete.button.cancel": "Cancel", + "workspace-item.delete.button.cancel": "Cancelar", + + // "workspace-item.delete.notification.success.title": "Deleted", + "workspace-item.delete.notification.success.title": "Borrado", + + // "workspace-item.delete.title": "This workspace item was successfully deleted", + "workspace-item.delete.title": "Este ítem del espacio de trabajo se eliminó correctamente", + + // "workspace-item.delete.notification.error.title": "Something went wrong", + "workspace-item.delete.notification.error.title": "Algo salió mal", + + // "workspace-item.delete.notification.error.content": "The workspace item could not be deleted", + "workspace-item.delete.notification.error.content": "Este ítem del espacio de trabajo no pudo borrarse", // "workflow-item.advanced.title": "Advanced workflow", "workflow-item.advanced.title": "Flujo de trabajo avanzado", - // "workflow-item.selectrevieweraction.notification.success.title": "Selected reviewer", "workflow-item.selectrevieweraction.notification.success.title": "Revisor seleccionado", @@ -7342,7 +7273,6 @@ // "workflow-item.selectrevieweraction.button.confirm": "Confirm", "workflow-item.selectrevieweraction.button.confirm": "Confirmar", - // "workflow-item.scorereviewaction.notification.success.title": "Rating review", "workflow-item.scorereviewaction.notification.success.title": "Revisión de evaluación", @@ -7379,7 +7309,7 @@ // "idle-modal.extend-session": "Extend session", "idle-modal.extend-session": "Prolongar la sesión", - // "researcher.profile.action.processing" : "Processing...", + // "researcher.profile.action.processing": "Processing...", "researcher.profile.action.processing": "Procesando...", // "researcher.profile.associated": "Researcher profile associated", @@ -7412,10 +7342,10 @@ // "researcher.profile.view": "View", "researcher.profile.view": "Ver", - // "researcher.profile.private.visibility" : "PRIVATE", + // "researcher.profile.private.visibility": "PRIVATE", "researcher.profile.private.visibility": "PRIVADO", - // "researcher.profile.public.visibility" : "PUBLIC", + // "researcher.profile.public.visibility": "PUBLIC", "researcher.profile.public.visibility": "PÚBLICO", // "researcher.profile.status": "Status:", @@ -7424,16 +7354,16 @@ // "researcherprofile.claim.not-authorized": "You are not authorized to claim this item. For more details contact the administrator(s).", "researcherprofile.claim.not-authorized": "No está autorizado pare reclamar este ítem. Contacte con el administrador para mas detalles.", - // "researcherprofile.error.claim.body" : "An error occurred while claiming the profile, please try again later", + // "researcherprofile.error.claim.body": "An error occurred while claiming the profile, please try again later", "researcherprofile.error.claim.body": "Hubo un error reclamando el perfil, por favor, inténtelo mas tarde", - // "researcherprofile.error.claim.title" : "Error", + // "researcherprofile.error.claim.title": "Error", "researcherprofile.error.claim.title": "Error", - // "researcherprofile.success.claim.body" : "Profile claimed with success", + // "researcherprofile.success.claim.body": "Profile claimed with success", "researcherprofile.success.claim.body": "Perfil reclamado con éxito", - // "researcherprofile.success.claim.title" : "Success", + // "researcherprofile.success.claim.title": "Success", "researcherprofile.success.claim.title": "Éxito", // "person.page.orcid.create": "Create an ORCID ID", @@ -7442,7 +7372,7 @@ // "person.page.orcid.granted-authorizations": "Granted authorizations", "person.page.orcid.granted-authorizations": "Autorizaciones concedidas", - // "person.page.orcid.grant-authorizations" : "Grant authorizations", + // "person.page.orcid.grant-authorizations": "Grant authorizations", "person.page.orcid.grant-authorizations": "Conceder autorizaciones", // "person.page.orcid.link": "Connect to ORCID ID", @@ -7458,7 +7388,7 @@ "person.page.orcid.orcid-not-linked-message": "El ORCID iD de este perfil ({{ orcid }}) no se ha conectado aún con una cuenta en el registro ORCID o la conexión caducó.", // "person.page.orcid.unlink": "Disconnect from ORCID", - "person.page.orcid.unlink": "Desconectar de ORCID", + "person.page.orcid.unlink": "Desconectar de ORCID", // "person.page.orcid.unlink.processing": "Processing...", "person.page.orcid.unlink.processing": "Procesando...", @@ -7490,44 +7420,44 @@ // "person.page.orcid.save.preference.changes": "Update settings", "person.page.orcid.save.preference.changes": "Actualizar configuración", - // "person.page.orcid.sync-profile.affiliation" : "Affiliation", + // "person.page.orcid.sync-profile.affiliation": "Affiliation", "person.page.orcid.sync-profile.affiliation": "Afiliación", - // "person.page.orcid.sync-profile.biographical" : "Biographical data", + // "person.page.orcid.sync-profile.biographical": "Biographical data", "person.page.orcid.sync-profile.biographical": "Biografía", - // "person.page.orcid.sync-profile.education" : "Education", + // "person.page.orcid.sync-profile.education": "Education", "person.page.orcid.sync-profile.education": "Grados", - // "person.page.orcid.sync-profile.identifiers" : "Identifiers", + // "person.page.orcid.sync-profile.identifiers": "Identifiers", "person.page.orcid.sync-profile.identifiers": "Identificadores", - // "person.page.orcid.sync-fundings.all" : "All fundings", + // "person.page.orcid.sync-fundings.all": "All fundings", "person.page.orcid.sync-fundings.all": "Todas las financiaciones", - // "person.page.orcid.sync-fundings.mine" : "My fundings", + // "person.page.orcid.sync-fundings.mine": "My fundings", "person.page.orcid.sync-fundings.mine": "Mi financiación", - // "person.page.orcid.sync-fundings.my_selected" : "Selected fundings", + // "person.page.orcid.sync-fundings.my_selected": "Selected fundings", "person.page.orcid.sync-fundings.my_selected": "Financiaciones seleccionadas", - // "person.page.orcid.sync-fundings.disabled" : "Disabled", + // "person.page.orcid.sync-fundings.disabled": "Disabled", "person.page.orcid.sync-fundings.disabled": "Deshabilitado", - // "person.page.orcid.sync-publications.all" : "All publications", + // "person.page.orcid.sync-publications.all": "All publications", "person.page.orcid.sync-publications.all": "Todas las publicaciones", - // "person.page.orcid.sync-publications.mine" : "My publications", + // "person.page.orcid.sync-publications.mine": "My publications", "person.page.orcid.sync-publications.mine": "Mis publicaciones", - // "person.page.orcid.sync-publications.my_selected" : "Selected publications", + // "person.page.orcid.sync-publications.my_selected": "Selected publications", "person.page.orcid.sync-publications.my_selected": "Publicaciones seleccionadas", - // "person.page.orcid.sync-publications.disabled" : "Disabled", + // "person.page.orcid.sync-publications.disabled": "Disabled", "person.page.orcid.sync-publications.disabled": "Deshabilitado", - // "person.page.orcid.sync-queue.discard" : "Discard the change and do not synchronize with the ORCID registry", - "person.page.orcid.sync-queue.discard": "Deshechar el cambio y no sincronizar con ORCID", + // "person.page.orcid.sync-queue.discard": "Discard the change and do not synchronize with the ORCID registry", + "person.page.orcid.sync-queue.discard": "Deshechar el cambio y no sincronizar con el registro ORCID", // "person.page.orcid.sync-queue.discard.error": "The discarding of the ORCID queue record failed", "person.page.orcid.sync-queue.discard.error": "Falló el borrado del registro ORCID en la cola", @@ -7538,13 +7468,13 @@ // "person.page.orcid.sync-queue.empty-message": "The ORCID queue registry is empty", "person.page.orcid.sync-queue.empty-message": "La cola del registro de ORCID está vacía", - // "person.page.orcid.sync-queue.table.header.type" : "Type", + // "person.page.orcid.sync-queue.table.header.type": "Type", "person.page.orcid.sync-queue.table.header.type": "Tipo", - // "person.page.orcid.sync-queue.table.header.description" : "Description", + // "person.page.orcid.sync-queue.table.header.description": "Description", "person.page.orcid.sync-queue.table.header.description": "Descripción", - // "person.page.orcid.sync-queue.table.header.action" : "Action", + // "person.page.orcid.sync-queue.table.header.action": "Action", "person.page.orcid.sync-queue.table.header.action": "Acción", // "person.page.orcid.sync-queue.description.affiliation": "Affiliations", @@ -7610,7 +7540,7 @@ // "person.page.orcid.sync-queue.tooltip.researcher_urls": "Researcher url", "person.page.orcid.sync-queue.tooltip.researcher_urls": "URL del investigador", - // "person.page.orcid.sync-queue.send" : "Synchronize with ORCID registry", + // "person.page.orcid.sync-queue.send": "Synchronize with ORCID registry", "person.page.orcid.sync-queue.send": "Sincronizar con el registro ORCID", // "person.page.orcid.sync-queue.send.unauthorized-error.title": "The submission to ORCID failed for missing authorizations.", @@ -7620,13 +7550,13 @@ "person.page.orcid.sync-queue.send.unauthorized-error.content": "Pulse aquí para conceder de nuevo los permisos requeridos. Si el problema continuase, contacte con el administrador", // "person.page.orcid.sync-queue.send.bad-request-error": "The submission to ORCID failed because the resource sent to ORCID registry is not valid", - "person.page.orcid.sync-queue.send.bad-request-error": "El envío a ORCID falló debido a que el recurso que se envión no era válido", + "person.page.orcid.sync-queue.send.bad-request-error": "El envío a ORCID falló debido a que el recurso que se envión no era válido", // "person.page.orcid.sync-queue.send.error": "The submission to ORCID failed", "person.page.orcid.sync-queue.send.error": "Falló el envío a ORCID", // "person.page.orcid.sync-queue.send.conflict-error": "The submission to ORCID failed because the resource is already present on the ORCID registry", - "person.page.orcid.sync-queue.send.conflict-error": "El envío a ORCID falló debido a que el recurso ya existía en el registro ORCID", + "person.page.orcid.sync-queue.send.conflict-error": "El envío a ORCID falló debido a que el recurso ya existía en el registro ORCID", // "person.page.orcid.sync-queue.send.not-found-warning": "The resource does not exists anymore on the ORCID registry.", "person.page.orcid.sync-queue.send.not-found-warning": "El recurso no existe ya en el registro ORCID.", @@ -7664,8 +7594,8 @@ // "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "The organization's name is required", "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "Se requiere el nombre de la organización", - // "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid" : "The publication date must be one year after 1900", - "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "la fecha de la publicación debe ser posterior a 1900", + // "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "The publication date must be one year after 1900", + "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "La fecha de publicación debe ser posterior a 1900", // "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "The organization to be sent requires an address", "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "Se requiere la dirección de la organización", @@ -7698,7 +7628,7 @@ "person.page.orcid.synchronization-mode.label": "Modo sincronización", // "person.page.orcid.synchronization-mode-message": "Please select how you would like synchronization to ORCID to occur. The options include \"Manual\" (you must send your data to ORCID manually), or \"Batch\" (the system will send your data to ORCID via a scheduled script).", - "person.page.orcid.synchronization-mode-message": "Seleccione cómo prefiere realizar la sincronización con ORCID. Puede escoger \"Manual\" (usted envía los datos a ORCID manualmente), o \"Batch\" (el sistema enviará sus datos a ORCID via un programa planificado).", + "person.page.orcid.synchronization-mode-message": "Seleccione cómo prefiere realizar la sincronización con ORCID. Puede escoger \"Manual\" (usted envía los datos a ORCID manualmente), o \"Batch\" (el sistema enviará sus datos a ORCID vía un programa planificado).", // "person.page.orcid.synchronization-mode-funding-message": "Select whether to send your linked Project entities to your ORCID record's list of funding information.", "person.page.orcid.synchronization-mode-funding-message": "Seleccione si enviará información de sus entidades conectadas de tipo Proyecto a la información de financiación de ORCID.", @@ -7744,13 +7674,13 @@ // "person.orcid.registry.auth": "ORCID Authorizations", "person.orcid.registry.auth": "Autorizaciones ORCID", + // "home.recent-submissions.head": "Recent Submissions", "home.recent-submissions.head": "Envíos recientes", // "listable-notification-object.default-message": "This object couldn't be retrieved", "listable-notification-object.default-message": "Este objeto no se pudo recuperar", - // "system-wide-alert-banner.retrieval.error": "Something went wrong retrieving the system-wide alert banner", "system-wide-alert-banner.retrieval.error": "Algo salió mal al recuperar el banner de alerta del sistema", @@ -7766,8 +7696,6 @@ // "system-wide-alert-banner.countdown.minutes": "{{minutes}} minute(s):", "system-wide-alert-banner.countdown.minutes": "{{minutes}} minuto(s):", - - // "menu.section.system-wide-alert": "System-wide Alert", "menu.section.system-wide-alert": "Alerta del Sistema", @@ -7822,5 +7750,81 @@ // "admin.system-wide-alert.title": "System-wide Alerts", "admin.system-wide-alert.title": "Alertas del sistema", + // "item-access-control-title": "This form allows you to perform changes to the access conditions of the item's metadata or its bitstreams.", + "item-access-control-title": "Esta pantalla le permite realizar cambios en las condiciones de acceso a los metadatos o a los archivos del ítem.", + + // "collection-access-control-title": "This form allows you to perform changes to the access conditions of all the items owned by this collection. Changes may be performed to either all Item metadata or all content (bitstreams).", + "collection-access-control-title": "Esta pantalla le permite realizar cambios en las condiciones de acceso de todos los ítems de la colección. Puede realizar los cambios a los metadatos o a los archivos de todos los ítems.", + + // "community-access-control-title": "This form allows you to perform changes to the access conditions of all the items owned by any collection under this community. Changes may be performed to either all Item metadata or all content (bitstreams).", + "community-access-control-title": "Esta pantalla le permite realizar cambios en las condiciones de acceso de todos los ítems de todas las colecciones de esta comunidad. Puede realizar los cambios a los metadatos o a los archivos de todos los ítems.", + + // "access-control-item-header-toggle": "Item's Metadata", + "access-control-item-header-toggle": "Metadatos del ítem", + + // "access-control-bitstream-header-toggle": "Bitstreams", + "access-control-bitstream-header-toggle": "Archivos", + + // "access-control-mode": "Mode", + "access-control-mode": "Modo", + + // "access-control-access-conditions": "Access conditions", + "access-control-access-conditions": "Condiciones de accceso", + + // "access-control-no-access-conditions-warning-message": "Currently, no access conditions are specified below. If executed, this will replace the current access conditions with the default access conditions inherited from the owning collection.", + "access-control-no-access-conditions-warning-message": "No ha especificado condiciones de acceso. Si lo ejecuta, se sustituirán las condiciones actuales con las condiones heredadas de la colección de pertenencia.", + + // "access-control-replace-all": "Replace access conditions", + "access-control-replace-all": "Sustituir condiciones de accceso", + + // "access-control-add-to-existing": "Add to existing ones", + "access-control-add-to-existing": "Añadir a las existentes", + + // "access-control-limit-to-specific": "Limit the changes to specific bitstreams", + "access-control-limit-to-specific": "Limitar los cambios a ficheros específicos", + + // "access-control-process-all-bitstreams": "Update all the bitstreams in the item", + "access-control-process-all-bitstreams": "Actualizar todos los archivos del ítem", + + // "access-control-bitstreams-selected": "bitstreams selected", + "access-control-bitstreams-selected": "archivos seleccionados", + + // "access-control-cancel": "Cancel", + "access-control-cancel": "Cancelar", + + // "access-control-execute": "Execute", + "access-control-execute": "Ejecutar", + + // "access-control-add-more": "Add more", + "access-control-add-more": "Añadir mas", + + // "access-control-select-bitstreams-modal.title": "Select bitstreams", + "access-control-select-bitstreams-modal.title": "Seleccionar archivos", + + // "access-control-select-bitstreams-modal.no-items": "No items to show.", + "access-control-select-bitstreams-modal.no-items": "No hay ítems para mostrar.", + + // "access-control-select-bitstreams-modal.close": "Close", + "access-control-select-bitstreams-modal.close": "Cerrar", + + // "access-control-option-label": "Access condition type", + "access-control-option-label": "Tipo de condición de acceso", + + // "access-control-option-note": "Choose an access condition to apply to selected objects.", + "access-control-option-note": "Seleccione una condición de acceso para aplicar a los objetos seleccionados.", + + // "access-control-option-start-date": "Grant access from", + "access-control-option-start-date": "Establecer acceso desde", + + // "access-control-option-start-date-note": "Select the date from which the related access condition is applied", + "access-control-option-start-date-note": "Escoja la fecha desde la cuál se aplicarán las condiciones de acceso especificadas", + + // "access-control-option-end-date": "Grant access until", + "access-control-option-end-date": "Establecer acceso hasta", + + // "access-control-option-end-date-note": "Select the date until which the related access condition is applied", + "access-control-option-end-date-note": "Escoja la fecha hasta la cuál se aplicarán las condiciones de acceso especificadas", + + } From 1885638ba6fadca4c99043db4ce52646bce435a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Fern=C3=A1ndez=20Celorio?= Date: Tue, 22 Aug 2023 12:57:08 +0200 Subject: [PATCH 307/425] Some lint errors fixed --- src/assets/i18n/es.json5 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/assets/i18n/es.json5 b/src/assets/i18n/es.json5 index bd393cda85..3fb0ac69af 100644 --- a/src/assets/i18n/es.json5 +++ b/src/assets/i18n/es.json5 @@ -854,7 +854,7 @@ // "admin.batch-import.page.toggle.help": "It is possible to perform import either with file upload or via URL, use above toggle to set the input source", "admin.batch-import.page.toggle.help": "Es posible realizar una importación tanto mediante una subida de fichero como a través de una URL. Use el selector de arriba para especificar la fuente de entrada.", - + // "admin.metadata-import.page.dropMsg": "Drop a metadata CSV to import", "admin.metadata-import.page.dropMsg": "Suelta un CSV de metadatos para importar", @@ -2677,7 +2677,7 @@ "grant-request-copy.header": "Conceder solicitud de copia de documento", // "grant-request-copy.intro": "A message will be sent to the applicant of the request. The requested document(s) will be attached.", - "grant-request-copy.intro": "Este mensaje se enviará al solicitante de la copia. Se le anexará una copia del documento.", + "grant-request-copy.intro": "Este mensaje se enviará al solicitante de la copia. Se le anexará una copia del documento.", // "grant-request-copy.success": "Successfully granted item request", "grant-request-copy.success": "Solicitud de ítem concedida exitosamente", @@ -2686,13 +2686,13 @@ "health.breadcrumbs": "Chequeos", // "health-page.heading": "Health", - "health-page.heading": "Chequeos", + "health-page.heading": "Chequeos", // "health-page.info-tab": "Info", - "health-page.info-tab": "Información", + "health-page.info-tab": "Información", // "health-page.status-tab": "Status", - "health-page.status-tab": "Estado", + "health-page.status-tab": "Estado", // "health-page.error.msg": "The health check service is temporarily unavailable", "health-page.error.msg": "El servicio de comprobación no se encuentra temporalmente disponible", @@ -4744,7 +4744,7 @@ "process.new.notification.error.content": "Se produjo un error al crear este proceso.", // "process.new.notification.error.max-upload.content": "The file exceeds the maximum upload size", - "process.new.notification.error.max-upload.content": "El fichero sobrepasa el límte máximo de subida", + "process.new.notification.error.max-upload.content": "El fichero sobrepasa el límte máximo de subida", // "process.new.header": "Create a new process", "process.new.header": "Crea un nuevo proceso", From b439ab4484d864a4cdcf8c17541cf9d00b62b68b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Dykas?= <96572102+michdyk@users.noreply.github.com> Date: Tue, 22 Aug 2023 13:32:16 +0200 Subject: [PATCH 308/425] Update pl.json5 Update from 7.4 to 7.6 version --- src/assets/i18n/pl.json5 | 4916 ++++++++++++++++++++------------------ 1 file changed, 2619 insertions(+), 2297 deletions(-) diff --git a/src/assets/i18n/pl.json5 b/src/assets/i18n/pl.json5 index 3512653705..7e6ef92c22 100644 --- a/src/assets/i18n/pl.json5 +++ b/src/assets/i18n/pl.json5 @@ -1,2299 +1,2621 @@ { - "401.help": "Nie masz uprawnień do dostępu do tej strony. Możesz użyć przycisku poniżej, aby powrócić do strony głównej.", - "401.link.home-page": "Zabierz mnie na stronę główną", - "401.unauthorized": "nieautoryzowany", - "403.help": "Nie masz uprawnień do dostępu do tej strony. Możesz użyć przycisku poniżej, aby wrócić do strony głównej.", - "403.link.home-page": "Zabierz mnie na stronę główną", - "403.forbidden": "zabroniony", - "404.help": "Nie możemy znaleźć strony, której szukasz. Strona mogła zostać przeniesiona lub usunięta. Możesz użyć przycisku poniżej, aby powrócić do strony głównej. ", - "404.link.home-page": "Zabierz mnie na stronę główną", - "404.page-not-found": "strona nie została znaleziona", - "admin.curation-tasks.breadcrumbs": "Systemowe zadania administracyjne", - "admin.curation-tasks.title": "Systemowe zadania administracyjne", - "admin.curation-tasks.header": "Systemowe zadania administracyjne", - "admin.registries.bitstream-formats.breadcrumbs": "Rejestr formatów", - "admin.registries.bitstream-formats.create.breadcrumbs": "Format strumienia bitów", - "admin.registries.bitstream-formats.create.failure.content": "Wystąpił błąd podczas tworzenia nowego formatu strumienia bitów.", - "admin.registries.bitstream-formats.create.failure.head": "Nie udało się", - "admin.registries.bitstream-formats.create.head": "Utwórz nowy format", - "admin.registries.bitstream-formats.create.new": "Dodaj nowy format", - "admin.registries.bitstream-formats.create.success.content": "Nowy format strumienia bitów został pomyślnie utworzony.", - "admin.registries.bitstream-formats.create.success.head": "Udało się", - "admin.registries.bitstream-formats.delete.failure.amount": "Nie udało się usunąć {{ amount }} formatu(ów)", - "admin.registries.bitstream-formats.delete.failure.head": "Nie udało się", - "admin.registries.bitstream-formats.delete.success.amount": "Udało się usunąć {{ amount }} formatu(ów)", - "admin.registries.bitstream-formats.delete.success.head": "Udało się", - "admin.registries.bitstream-formats.description": "Na liście formatów wyświetlono informacje o obsługiwanych formatach i czy są one wspierane przez system.", - "admin.registries.bitstream-formats.edit.breadcrumbs": "Format strumienia bitów", - "admin.registries.bitstream-formats.edit.description.hint": "", - "admin.registries.bitstream-formats.edit.description.label": "Opis", - "admin.registries.bitstream-formats.edit.extensions.hint": "Rozszerzenia to rozszerzenia plików, które są używane do automatycznej identyfikacji formatu przesyłanych plików. Możesz wprowadzić kilka rozszerzeń dla każdego formatu.", - "admin.registries.bitstream-formats.edit.extensions.label": "Rozszerzenia plików", - "admin.registries.bitstream-formats.edit.extensions.placeholder": "Wprowadź rozszerzenie pliku bez kropki", - "admin.registries.bitstream-formats.edit.failure.content": "Wystąpił błąd podczas edycji formatu pliku.", - "admin.registries.bitstream-formats.edit.failure.head": "Nie udało się", - "admin.registries.bitstream-formats.edit.head": "Format plików: {{ format }}", - "admin.registries.bitstream-formats.edit.internal.hint": "Formaty oznaczone jako wewnętrzne są ukryte przed użytkownikiem i wykorzystywane do celów administracyjnych.", - "admin.registries.bitstream-formats.edit.internal.label": "Wewnętrzny", - "admin.registries.bitstream-formats.edit.mimetype.hint": "Typ MIME powiązany z tym formatem, nie musi być unikalny.", - "admin.registries.bitstream-formats.edit.mimetype.label": "Typ MIME", - "admin.registries.bitstream-formats.edit.shortDescription.hint": "Unikalna nazwa dla tego formatu, (np. Microsoft Word XP lub Microsoft Word 2000)", - "admin.registries.bitstream-formats.edit.shortDescription.label": "Nazwa", - "admin.registries.bitstream-formats.edit.success.content": "Format strumienia bitów został pomyślnie edytowany.", - "admin.registries.bitstream-formats.edit.success.head": "Udało się", - "admin.registries.bitstream-formats.edit.supportLevel.hint": "Poziom wsparcia, jaki Twoja instytucja deklaruje dla tego formatu.", - "admin.registries.bitstream-formats.edit.supportLevel.label": "Obsługiwany format", - "admin.registries.bitstream-formats.head": "Rejestr formatów", - "admin.registries.bitstream-formats.no-items": "Brak formatów plików do wyświetlenia.", - "admin.registries.bitstream-formats.table.delete": "Usuń zaznaczone", - "admin.registries.bitstream-formats.table.deselect-all": "Odznacz wszystkie", - "admin.registries.bitstream-formats.table.internal": "wewnętrzne", - "admin.registries.bitstream-formats.table.mimetype": "Typ MIME", - "admin.registries.bitstream-formats.table.name": "Nazwa", - "admin.registries.bitstream-formats.table.return": "Powrót", - "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Znane", - "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Wspierane", - "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Nieznane", - "admin.registries.bitstream-formats.table.supportLevel.head": "Obsługiwany format", - "admin.registries.bitstream-formats.title": "Rejestr formatów plików", - "admin.registries.metadata.breadcrumbs": "Rejestr metadanych", - "admin.registries.metadata.description": "W rejestrze metadanych przechowywana jest lista wszystkich pól metadanych dostępnych w repozytorium. Przechowywane pola są przechowywane w kilku rejestrach. DSpace wymaga kwalifikowanego rejestru metadanych Dublin Core.", - "admin.registries.metadata.form.create": "Utwórz schemat metadanych", - "admin.registries.metadata.form.edit": "Edytuj schemat metadanych", - "admin.registries.metadata.form.name": "Nazwa", - "admin.registries.metadata.form.namespace": "Nazwa schematu", - "admin.registries.metadata.head": "Rejestr metadanych", - "admin.registries.metadata.schemas.no-items": "Brak rejestrów metadanych do pokazania.", - "admin.registries.metadata.schemas.table.delete": "Usuń zaznaczone", - "admin.registries.metadata.schemas.table.id": "ID", - "admin.registries.metadata.schemas.table.name": "Nazwa", - "admin.registries.metadata.schemas.table.namespace": "Nazwa schematu", - "admin.registries.metadata.title": "Rejestr metadanych", - "admin.registries.schema.breadcrumbs": "Schemat metadanych", - "admin.registries.schema.description": "Ten schemat metadanych jest stworzony na podstawie \"{{namespace}}\".", - "admin.registries.schema.fields.head": "Pola schematu metadanych", - "admin.registries.schema.fields.no-items": "Brak pól metadanych do pokazania.", - "admin.registries.schema.fields.table.delete": "Usuń zaznaczone", - "admin.registries.schema.fields.table.field": "Pole", - "admin.registries.schema.fields.table.scopenote": "Uwagi", - "admin.registries.schema.form.create": "Stwórz pole metadanych", - "admin.registries.schema.form.edit": "Edytuj pole metadanych", - "admin.registries.schema.form.element": "Element", - "admin.registries.schema.form.qualifier": "Kwalifikator", - "admin.registries.schema.form.scopenote": "Uwagi", - "admin.registries.schema.head": "Schemat metadanych", - "admin.registries.schema.notification.created": "Udało się utworzyć schemat metdanych \"{{prefix}}\"", - "admin.registries.schema.notification.deleted.failure": "Nie udało się usunąć {{amount}} schematów metadanych", - "admin.registries.schema.notification.deleted.success": "Udało się usunąć {{amount}} schematów metadanych", - "admin.registries.schema.notification.edited": "Udało się edytować schemat metadanych \"{{prefix}}\"", - "admin.registries.schema.notification.failure": "Błąd", - "admin.registries.schema.notification.field.created": "Udało się utworzyć pole metadanych \"{{field}}\"", - "admin.registries.schema.notification.field.deleted.failure": "Nie udało się usunąć {{amount}} pól metadanych", - "admin.registries.schema.notification.field.deleted.success": "Udało się usunąć {{amount}} pól metadanych", - "admin.registries.schema.notification.field.edited": "SUdało się edytować pole metadanych \"{{field}}\"", - "admin.registries.schema.notification.success": "Udało się", - "admin.registries.schema.return": "Powrót", - "admin.registries.schema.title": "Rejestr schematów metadanych", - "admin.access-control.epeople.actions.delete": "Usuń użytkownika", - "admin.access-control.epeople.actions.impersonate": "Personifikuj użytkownika", - "admin.access-control.epeople.actions.reset": "Zresetuj hasło", - "admin.access-control.epeople.actions.stop-impersonating": "Przestań personifikować użytkownika", - "admin.access-control.epeople.breadcrumbs": "Użytkownicy", - "admin.access-control.epeople.title": "Użytkownicy", - "admin.access-control.epeople.head": "Użytkownicy", - "admin.access-control.epeople.search.head": "Wyszukaj", - "admin.access-control.epeople.button.see-all": "Przeglądaj wszystko", - "admin.access-control.epeople.search.scope.metadata": "Metadane", - "admin.access-control.epeople.search.scope.email": "E-mail", - "admin.access-control.epeople.search.button": "Wyszukaj", - "admin.access-control.epeople.search.placeholder": "Wyszukaj użytkownika...", - "admin.access-control.epeople.button.add": "Dodaj użytkownika", - "admin.access-control.epeople.table.id": "ID", - "admin.access-control.epeople.table.name": "Nazwa", - "admin.access-control.epeople.table.email": "E-mail", - "admin.access-control.epeople.table.edit": "Edytuj", - "admin.access-control.epeople.table.edit.buttons.edit": "Edytuj \"{{name}}\"", - "admin.access-control.epeople.table.edit.buttons.edit-disabled": "Brak uprawnień do edycji wybranej grupy", - "admin.access-control.epeople.table.edit.buttons.remove": "Usuń \"{{name}}\"", - "admin.access-control.epeople.no-items": "Brak użytkowników do wyświetlenia.", - "admin.access-control.epeople.form.create": "Utwórz użytkownika", - "admin.access-control.epeople.form.edit": "Edytuj użytkownika", - "admin.access-control.epeople.form.firstName": "Imię", - "admin.access-control.epeople.form.lastName": "Nazwisko", - "admin.access-control.epeople.form.email": "E-mail", - "admin.access-control.epeople.form.emailHint": "Adres e-mail musi być poprawny", - "admin.access-control.epeople.form.canLogIn": "Możliwość zalogowania", - "admin.access-control.epeople.form.requireCertificate": "Wymagany certyfikat", - "admin.access-control.epeople.form.return": "Powrót", - "admin.access-control.epeople.form.notification.created.success": "Udało się utworzyć użytkownika \"{{name}}\"", - "admin.access-control.epeople.form.notification.created.failure": "Nie udało się utworzyć użytkownika \"{{name}}\"", - "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Nie udało się utworzyć użytkownika \"{{name}}\", email \"{{email}}\" już w użyciu.", - "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Nie udało się utworzyć użytkownika \"{{name}}\", email \"{{email}}\" już w użyciu.", - "admin.access-control.epeople.form.notification.edited.success": "Udało się edytować użytkownika \"{{name}}\"", - "admin.access-control.epeople.form.notification.edited.failure": "Nie udało się edytować użytkownika \"{{name}}\"", - "admin.access-control.epeople.form.notification.deleted.success": "Udało się usunąć użytkownika \"{{name}}\"", - "admin.access-control.epeople.form.notification.deleted.failure": "Nie udało się usunąć użytkownika \"{{name}}\"", - "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Członek grup:", - "admin.access-control.epeople.form.table.id": "ID", - "admin.access-control.epeople.form.table.name": "Nazwa", - "admin.access-control.epeople.form.table.collectionOrCommunity": "Zbiór/kolekcja", - "admin.access-control.epeople.form.memberOfNoGroups": "Ten użytkownik nie jest członkiem żadnej grupy", - "admin.access-control.epeople.form.goToGroups": "Dodaj do grup", - "admin.access-control.epeople.notification.deleted.failure": "Nie udało się usunąć użytkownika: \"{{name}}\"", - "admin.access-control.epeople.notification.deleted.success": "Udało się usunąć użytkownika: \"{{name}}\"", - "admin.access-control.groups.title": "Grupy", - "admin.access-control.groups.breadcrumbs": "Grupy", - "admin.access-control.groups.singleGroup.breadcrumbs": "Edytuj grupę", - "admin.access-control.groups.title.singleGroup": "Edytuj grupę", - "admin.access-control.groups.title.addGroup": "Nowa grupa", - "admin.access-control.groups.addGroup.breadcrumbs": "Nowa grupa", - "admin.access-control.groups.head": "Grupy/role", - "admin.access-control.groups.button.add": "Dodaj grupę", - "admin.access-control.groups.search.head": "Szukaj grup", - "admin.access-control.groups.button.see-all": "Przeszukaj wszystko", - "admin.access-control.groups.search.button": "Wyszukaj", - "admin.access-control.groups.search.placeholder": "Wyszukaj grupy...", - "admin.access-control.groups.table.id": "ID", - "admin.access-control.groups.table.name": "Nazwa", - "admin.access-control.groups.table.collectionOrCommunity": "Zbiór/kolekcja", - "admin.access-control.groups.table.members": "Członkowie", - "admin.access-control.groups.table.edit": "Edytuj", - "admin.access-control.groups.table.edit.buttons.edit": "Edytuj \"{{name}}\"", - "admin.access-control.groups.no-items": "Nie znaleziono grup z podaną frazą lub podanym UUID", - "admin.access-control.groups.notification.deleted.success": "Udało się usunąć grupę \"{{name}}\"", - "admin.access-control.groups.notification.deleted.failure.title": "Nie udało się usunąć grupy \"{{name}}\"", - "admin.access-control.groups.notification.deleted.failure.content": "Powód: \"{{cause}}\"", - "admin.access-control.groups.form.alert.permanent": "Ta grupa jest stała, więc nie może być edytowana ani usunięta. Nadal możesz dodawać i usuwać członków grupy za pomocą tej strony.", - "admin.access-control.groups.form.alert.workflowGroup": "Ta grupa nie może być edytowana lub usunięta, ponieważ odnosi się do roli lub bierze udział w procesie \"{{name}}\" {{comcol}}. Możesz ją usunąć ze strony \"assign roles\" edycji {{comcol}}. Wciąż może dodawać i usuwać członków tej grupy, korzystając z tej strony.", - "admin.access-control.groups.form.head.create": "Utwórz grupę", - "admin.access-control.groups.form.head.edit": "Edytuj grupę", - "admin.access-control.groups.form.groupName": "Nazwa grupy", - "admin.access-control.groups.form.groupCommunity": "Zbiór lub kolekcja", - "admin.access-control.groups.form.groupDescription": "Opis", - "admin.access-control.groups.form.notification.created.success": "Udało się utworzyć grupę \"{{name}}\"", - "admin.access-control.groups.form.notification.created.failure": "Nie udało się utworzyć grupy \"{{name}}\"", - "admin.access-control.groups.form.notification.created.failure.groupNameInUse": "Nie udało się utworzyć grupy o nazwie: \"{{name}}\", upewnij się, że nazwa nie jest już używana.", - "admin.access-control.groups.form.notification.edited.failure": "Nie udało się edytować grupy \"{{name}}\"", - "admin.access-control.groups.form.notification.edited.failure.groupNameInUse": "Nazwa \"{{name}}\" już w użyciu!", - "admin.access-control.groups.form.notification.edited.success": "Udało się edytować grupę \"{{name}}\"", - "admin.access-control.groups.form.actions.delete": "Usuń grupę", - "admin.access-control.groups.form.delete-group.modal.header": "Usuń grupę \"{{ dsoName }}\"", - "admin.access-control.groups.form.delete-group.modal.info": "Czy na pewno chcesz usunąć grupę \"{{ dsoName }}\"", - "admin.access-control.groups.form.delete-group.modal.cancel": "Anuluj", - "admin.access-control.groups.form.delete-group.modal.confirm": "Usuń", - "admin.access-control.groups.form.notification.deleted.success": "Udało się usunąć grupę \"{{ name }}\"", - "admin.access-control.groups.form.notification.deleted.failure.title": "Nie udało się usunąć grupy \"{{ name }}\"", - "admin.access-control.groups.form.notification.deleted.failure.content": "Powód: \"{{ cause }}\"", - "admin.access-control.groups.form.members-list.head": "Użytkownik", - "admin.access-control.groups.form.members-list.search.head": "Dodaj użytkownika", - "admin.access-control.groups.form.members-list.button.see-all": "Pokaż wszystkich", - "admin.access-control.groups.form.members-list.headMembers": "Aktualni członkowie", - "admin.access-control.groups.form.members-list.search.scope.metadata": "Metadane", - "admin.access-control.groups.form.members-list.search.scope.email": "E-mail", - "admin.access-control.groups.form.members-list.search.button": "Wyszukaj", - "admin.access-control.groups.form.members-list.table.id": "ID", - "admin.access-control.groups.form.members-list.table.name": "Nazwa", - "admin.access-control.groups.form.members-list.table.identity": "Tożsamość", - "admin.access-control.groups.form.members-list.table.email": "E-mail", - "admin.access-control.groups.form.members-list.table.netid": "NetID", - "admin.access-control.groups.form.members-list.table.edit": "Usuń / Dodaj", - "admin.access-control.groups.form.members-list.table.edit.buttons.remove": "Usuń użytkownika o nazwie \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.success.addMember": "Udało się dodać użytkownika o nazwie: \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.failure.addMember": "Nie udało się dodać użytkownika o nazwie: \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Udało się usunąć użytkownika o nazwie: \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Nie udało się usunąć użytkownika o nazwie: \"{{name}}\"", - "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Dodaj użytkownika o nazwie \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup": "Brak aktywnej grupy, najpierw wpisz nazwę grupy.", - "admin.access-control.groups.form.members-list.no-members-yet": "Brak użytkowników w grupie, wyszukaj ich i dodaj.", - "admin.access-control.groups.form.members-list.no-items": "Nie znaleziono użytkowników podczas wyszukiwania", - "admin.access-control.groups.form.subgroups-list.notification.failure": "Coś poszło nie tak: \"{{cause}}\"", - "admin.access-control.groups.form.subgroups-list.head": "Grupy", - "admin.access-control.groups.form.subgroups-list.search.head": "Dodaj podgrupę", - "admin.access-control.groups.form.subgroups-list.button.see-all": "Przeglądaj wszystkie", - "admin.access-control.groups.form.subgroups-list.headSubgroups": "Aktualne podgrupy", - "admin.access-control.groups.form.subgroups-list.search.button": "Wyszukaj", - "admin.access-control.groups.form.subgroups-list.table.id": "ID", - "admin.access-control.groups.form.subgroups-list.table.name": "Nazwa", - "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Zbiór/kolekcja", - "admin.access-control.groups.form.subgroups-list.table.edit": "Usuń / Dodaj", - "admin.access-control.groups.form.subgroups-list.table.edit.buttons.remove": "Usuń podgrupę o nazwie \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.table.edit.buttons.add": "Dodaj podgrupę o nazwie \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Aktualna grupa", - "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup": "Udało się dodać podgrupę: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.failure.addSubgroup": "Nie udało się dodać podgrupy: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Udało się usunąć podgrupę: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Nie udało się usunąć podgrupy: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "Brak aktywnej grupy, najpierw wpisz nazwę grupy.", - "admin.access-control.groups.form.subgroups-list.notification.failure.subgroupToAddIsActiveGroup": "Ta grupa jest już stworzona i nie może zostać dodana pononwie.", - "admin.access-control.groups.form.subgroups-list.no-items": "Nie znaleziono grup z tą nazwą lub UUID", - "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "Brak podgrup w grupie.", - "admin.access-control.groups.form.return": "Powrót", - "admin.search.breadcrumbs": "Wyszukiwanie administracyjne", - "admin.search.collection.edit": "Edytuj", - "admin.search.community.edit": "Edytuj", - "admin.search.item.delete": "Usuń", - "admin.search.item.edit": "Edytuj", - "admin.search.item.make-private": "Ukryj", - "admin.search.item.make-public": "Upublicznij", - "admin.search.item.move": "Przenieś", - "admin.search.item.reinstate": "Zmień instancję", - "admin.search.item.withdraw": "Wycofane", - "admin.search.title": "Wyszukiwanie administracyjne", - "administrativeView.search.results.head": "Wyszukiwanie administracyjne", - "admin.workflow.breadcrumbs": "Zarządzaj procesem", - "admin.workflow.title": "Zarządzaj procesem", - "admin.workflow.item.workflow": "Proces", - "admin.workflow.item.delete": "Usuń", - "admin.workflow.item.send-back": "Odeślij z powrotem", - "admin.metadata-import.breadcrumbs": "Importuj metadane", - "admin.metadata-import.title": "Importuj metadane", - "admin.metadata-import.page.header": "Importuj metadane", - "admin.metadata-import.page.help": "Tutaj możesz zaimportować pliki CSV, w których znajdują się metadane do operacji wsadowej. Zaimportuj je poprzez upuszczenie ich lub znajdź je na swoim komputerze", - "admin.metadata-import.page.dropMsg": "Upuść plik w formacie CSV", - "admin.metadata-import.page.dropMsgReplace": "Upuść, aby zastąpić metadane w formacie CSV do importu", - "admin.metadata-import.page.button.return": "Powrót", - "admin.metadata-import.page.button.proceed": "Zastosuj", - "admin.metadata-import.page.error.addFile": "Najpierw wybierz plik!", - "auth.errors.invalid-user": "Niewłaściwy adres e-mail lub hasło.", - "auth.messages.expired": "Twoja sesja wygasła. Zaloguj się ponownie.", - "auth.messages.token-refresh-failed": "Odświeżenie sesji nie powiodło się. Zaloguj się ponownie.", - "bitstream.download.page": "Pobieranie {{bitstream}}...", - "bitstream.download.page.back": "Powrót", - "bitstream.edit.authorizations.link": "Edytuj polityki plików", - "bitstream.edit.authorizations.title": "Edytuj polityki plików", - "bitstream.edit.return": "Powrót", - "bitstream.edit.bitstream": "Pliki: ", - "bitstream.edit.form.description.hint": "Opcjonalnie wprowadź krótki opis pliku, np.: \"Główna część artykułu\" lub \"Dane z eksperymentu\".", - "bitstream.edit.form.description.label": "Opis", - "bitstream.edit.form.embargo.hint": "Pierwszy dzień, od kiedy dostęp zostanie udzielony. Tej daty nie może być edytować w tym formularzu. Aby wybrać okres embarga czasowego, wybierz Status pozycji tab, kliknij Autoryzacje..., stwórz lub edytuj plik PRZEYCZTAJ zasady i wybierz określoną Datę początkową.", - "bitstream.edit.form.embargo.label": "Embargo do wybranej daty", - "bitstream.edit.form.fileName.hint": "Zmiana nazwy pliku dla strumienia bitów. Zauważ, że zmieni to wyświetlany adres URL strumienia bitów, ale stare linki nadal będą działać, o ile nie zmieni się identyfikator sekwencji.", - "bitstream.edit.form.fileName.label": "Nazwa pliku", - "bitstream.edit.form.newFormat.label": "Opisz nowy format", - "bitstream.edit.form.newFormat.hint": "Program, którego użyto do stworzenia pliku i numer wersji (np.: \"ACMESoft SuperApp version 1.5\").", - "bitstream.edit.form.primaryBitstream.label": "Pierwotny plik", - "bitstream.edit.form.selectedFormat.hint": "Jeśli formatu nie ma na powyższej liście, wybierz \"format not in list\" above i opisz jako \"Describe new format\".", - "bitstream.edit.form.selectedFormat.label": "Wybrany format", - "bitstream.edit.form.selectedFormat.unknown": "Tego formatu nie ma na liście", - "bitstream.edit.notifications.error.format.title": "Wystąpił błąd podczas zapisu formatu pliku", - "bitstream.edit.notifications.saved.content": "Zmiany w pliku zostały zapisane.", - "bitstream.edit.notifications.saved.title": "Plik został zapisany", - "bitstream.edit.title": "Edytuj plik", - "bitstream-request-a-copy.alert.canDownload1": "Masz już dostęp do tego pliki. Jeśli chcesz go pobrać, kliknij ", - "bitstream-request-a-copy.alert.canDownload2": "tutaj", - "bitstream-request-a-copy.header": "Wystąp o kopię wybranego pliku", - "bitstream-request-a-copy.intro": "Wpisz następujące informacje, aby wystąpić o kopię tej pozycji: ", - "bitstream-request-a-copy.intro.bitstream.one": "Wystąpienie o dostęp do następujących plików: ", - "bitstream-request-a-copy.intro.bitstream.all": "Wystąpienie o dostęp do wszystkich plików. ", - "bitstream-request-a-copy.name.label": "Imię *", - "bitstream-request-a-copy.name.error": "Imię jest wymagane", - "bitstream-request-a-copy.email.label": "Adres e-mail *", - "bitstream-request-a-copy.email.hint": "Plik zostanie przesłany na podany adres e-mail", - "bitstream-request-a-copy.email.error": "Proszę wprowadzić prawidłowy adres e-mail", - "bitstream-request-a-copy.allfiles.label": "Pliki", - "bitstream-request-a-copy.files-all-false.label": "Tylko plik, dla którego wystąpiono o dostęp", - "bitstream-request-a-copy.files-all-true.label": "Wszystkie pliki (w tej pozycji) z ograniczonym dostępem", - "bitstream-request-a-copy.message.label": "Wiadomość", - "bitstream-request-a-copy.return": "Powrót", - "bitstream-request-a-copy.submit": "Wystąp o kopię", - "bitstream-request-a-copy.submit.success": "Wystąpienie o dostęp do pliku zostało przesłane.", - "bitstream-request-a-copy.submit.error": "Coś poszło nie tak podczas wysyłania wystąpienia o dostęp do pliku", - "browse.comcol.by.author": "wg autorów", - "browse.comcol.by.dateissued": "wg daty wydania", - "browse.comcol.by.subject": "wg tematu", - "browse.comcol.by.title": "wg tytułu", - "browse.comcol.head": "Przeglądaj", - "browse.empty": "Brak rekordów do wyświetlenia.", - "browse.metadata.author": "Autor", - "browse.metadata.dateissued": "Data wydania", - "browse.metadata.subject": "Temat", - "browse.metadata.title": "Tytuł", - "browse.metadata.author.breadcrumbs": "Przeglądaj wg autorów", - "browse.metadata.dateissued.breadcrumbs": "Przeglądaj wg daty wydania", - "browse.metadata.subject.breadcrumbs": "Przeglądaj wg tematów", - "browse.metadata.title.breadcrumbs": "Przeglądaj wg tytułów", - "browse.startsWith.choose_start": "(Wybierz start)", - "browse.startsWith.choose_year": "(Wybierz rok)", - "browse.startsWith.choose_year.label": "Wybierz rok wydania", - "browse.startsWith.jump": "Przejdź do miejsca w indeksie:", - "browse.startsWith.months.april": "kwiecień", - "browse.startsWith.months.august": "sierpień", - "browse.startsWith.months.december": "grudzień", - "browse.startsWith.months.february": "luty", - "browse.startsWith.months.january": "styczeń", - "browse.startsWith.months.july": "lipiec", - "browse.startsWith.months.june": "czerwiec", - "browse.startsWith.months.march": "marzec", - "browse.startsWith.months.may": "maj", - "browse.startsWith.months.none": "(wybierz miesiąc)", - "browse.startsWith.months.none.label": "Wybierz miesiąc wydania", - "browse.startsWith.months.november": "listopad", - "browse.startsWith.months.october": "październik", - "browse.startsWith.months.september": "wrzesień", - "browse.startsWith.submit": "Zastosuj", - "browse.startsWith.type_date": "Lub wybierz datę (rok-miesiąc) i kliknij 'Przeglądaj'", - "browse.startsWith.type_date.label": "Lub wybierz datę (rok-miesiąc) i kliknij przycisk przeglądania", - "browse.startsWith.type_text": "Wpisz kilka pierwszych liter i kliknij przycisk przeglądania", - "browse.title": "Przeglądaj {{ collection }} wg {{ field }} {{ value }}", - "chips.remove": "Usuń chip", - "collection.create.head": "Utwórz kolekcję", - "collection.create.notifications.success": "Udało się utworzyć kolekcję", - "collection.create.sub-head": "Udało się utworzyć kolekcję dla zbioru {{ parent }}", - "collection.curate.header": "Administrator kolekcji: {{collection}}", - "collection.delete.cancel": "Anuluj", - "collection.delete.confirm": "Zatwierdź", - "collection.delete.processing": "Usuwanie", - "collection.delete.head": "Usuń kolekcję", - "collection.delete.notification.fail": "Kolekcja nie może być usunięt", - "collection.delete.notification.success": "Udało się usunąć kolekcję", - "collection.delete.text": "Czy na pewno chcesz usunąć kolekcję \"{{ dso }}\"", - "collection.edit.delete": "Usuń kolekcję", - "collection.edit.head": "Edytuj kolekcję", - "collection.edit.breadcrumbs": "Edytuj kolekcję", - "collection.edit.tabs.mapper.head": "Item Mapper", - "collection.edit.tabs.item-mapper.title": "Edytuj kolekcję - Item Mapper", - "collection.edit.item-mapper.cancel": "Anuluj", - "collection.edit.item-mapper.collection": "Kolekcja: \"{{name}}\"", - "collection.edit.item-mapper.confirm": "Mapuj wybrane elementy", - "collection.edit.item-mapper.description": "To jest narzędzie mapowania elementów, które pozwala administratorom kolekcji mapować elementy z innych kolekcji do tej kolekcji. Możesz wyszukiwać elementy z innych kolekcji i mapować je lub przeglądać listę aktualnie zmapowanych elementów.", - "collection.edit.item-mapper.head": "Item Mapper - Mapuj pozycje z innych kolekcji", - "collection.edit.item-mapper.no-search": "Wpisz co chcesz wyszukać", - "collection.edit.item-mapper.notifications.map.error.content": "Wystąpiły błędy podczas mapowania {{amount}} pozycji.", - "collection.edit.item-mapper.notifications.map.error.head": "Mapowanie błędów", - "collection.edit.item-mapper.notifications.map.success.content": "Udało się zmapować {{amount}} pozycji.", - "collection.edit.item-mapper.notifications.map.success.head": "Mapowanie zakończone", - "collection.edit.item-mapper.notifications.unmap.error.content": "Błędy wystąpiły podczas usuwania mapowania z {{amount}} elementów.", - "collection.edit.item-mapper.notifications.unmap.error.head": "Usuń błędy mapowania", - "collection.edit.item-mapper.notifications.unmap.success.content": "Udało się usunąć błędy mapowania z {{amount}} elementów.", - "collection.edit.item-mapper.notifications.unmap.success.head": "Usuwanie mapowania zakończone", - "collection.edit.item-mapper.remove": "Usuń wybrane mapowanie elementów", - "collection.edit.item-mapper.search-form.placeholder": "Wyszukaj pozycje...", - "collection.edit.item-mapper.tabs.browse": "Wyszukaj mapowane elementy", - "collection.edit.item-mapper.tabs.map": "Mapuj nowe elementy", - "collection.edit.logo.delete.title": "Usuń", - "collection.edit.logo.delete-undo.title": "Cofnij usunięcie", - "collection.edit.logo.label": "Logo kolekcji", - "collection.edit.logo.notifications.add.error": "Przesyłanie logo kolekcji nie powiodło się. Proszę zweryfikować zawartość przed ponowną ", - "collection.edit.logo.notifications.add.success": "Udało się przesłać logo kolekcji.", - "collection.edit.logo.notifications.delete.success.title": "Logo usunięte", - "collection.edit.logo.notifications.delete.success.content": "Udało się usunąć logo kolekcji", - "collection.edit.logo.notifications.delete.error.title": "Błąd podczas usuwania loga", - "collection.edit.logo.upload": "Upuść logo kolekcji, aby je wgrać", - "collection.edit.notifications.success": "Udało się edytować kolekcję", - "collection.edit.return": "Powrót", - "collection.edit.tabs.curate.head": "Kurator", - "collection.edit.tabs.curate.title": "Edytowanie kolekcji - kurator", - "collection.edit.tabs.authorizations.head": "Autoryzacje", - "collection.edit.tabs.authorizations.title": "Edytowanie kolekcji - autoryzacje", - "collection.edit.tabs.metadata.head": "Edytuj metadane", - "collection.edit.tabs.metadata.title": "Edytowanie kolekcji - metadane", - "collection.edit.tabs.roles.head": "Przypisz role", - "collection.edit.tabs.roles.title": "Edytowanie kolekcji - role", - "collection.edit.tabs.source.external": "Ta kolekcja pobiera swoją zawartość z zewnętrznego źródła", - "collection.edit.tabs.source.form.errors.oaiSource.required": "Musisz wskazać id docelowej kolekcji.", - "collection.edit.tabs.source.form.harvestType": "Odczytywanie zawartości", - "collection.edit.tabs.source.form.head": "Skonfiguruj zewnętrzne źródło", - "collection.edit.tabs.source.form.metadataConfigId": "Format metadanych", - "collection.edit.tabs.source.form.oaiSetId": "Określony zestaw ID OAI", - "collection.edit.tabs.source.form.oaiSource": "Dostawca OAI", - "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_BITSTREAMS": "Odczytaj metadane i pliki (wymaga wsparcia ORE)", - "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_REF": "Odczytaj metadane i bibliografię (wymaga wsparcia ORE)", - "collection.edit.tabs.source.form.options.harvestType.METADATA_ONLY": "Odczytaj tylko metadane", - "collection.edit.tabs.source.head": "Źródło treści", - "collection.edit.tabs.source.notifications.discarded.content": "Twoje zmiany zostały odrzucone. Aby odzyskać swoje zmiany wybierz 'Powrót'", - "collection.edit.tabs.source.notifications.discarded.title": "Zmiany odrzucone", - "collection.edit.tabs.source.notifications.invalid.content": "Zmiany nie zostały zapisane. Sprawdź czy wszystkie pola są wypełnione poprawne przed zapisem.", - "collection.edit.tabs.source.notifications.invalid.title": "Nieprawidłowe metadane", - "collection.edit.tabs.source.notifications.saved.content": "Zmiany wprowadzone w kolekcji zostały zapisane.", - "collection.edit.tabs.source.notifications.saved.title": "Źródło treści zapisane", - "collection.edit.tabs.source.title": "Collection Edit - Źródło treści", - "collection.edit.template.add-button": "Dodaj", - "collection.edit.template.breadcrumbs": "Szablon pozycji", - "collection.edit.template.cancel": "Anuluj", - "collection.edit.template.delete-button": "Usuń", - "collection.edit.template.edit-button": "Edytuj", - "collection.edit.template.error": "Wystąpił błąd podczas odzyskiwania szablonu pozycji", - "collection.edit.template.head": "Edytuj szablon dla kolekcji \"{{ collection }}\"", - "collection.edit.template.label": "Szablon pozycji", - "collection.edit.template.loading": "ładowanie szablonu pozycji...", - "collection.edit.template.notifications.delete.error": "Nie udało się usunąć szablonu pozycji", - "collection.edit.template.notifications.delete.success": "Udało się usunąć szablon pozycji", - "collection.edit.template.title": "Edytuj szablon pozycji", - "collection.form.abstract": "Opis skrócony", - "collection.form.description": "Tekst powitalny (HTML)", - "collection.form.errors.title.required": "Wpisz nazwę kolekcji", - "collection.form.license": "Licencja", - "collection.form.provenance": "Pochodzenie", - "collection.form.rights": "Tekst praw autorskich (HTML)", - "collection.form.tableofcontents": "Wiadomości (HTML)", - "collection.form.title": "Nazwa", - "collection.form.entityType": "Typ danych", - "collection.page.browse.recent.head": "Ostatnie zgłoszenia", - "collection.page.browse.recent.empty": "Brak pozycji do wyświetlenia", - "collection.page.edit": "Edytuj kolekcję", - "collection.page.handle": "Stały URI dla kolekcji", - "collection.page.license": "Licencja", - "collection.page.news": "Wiadomości", - "collection.select.confirm": "Zaakceptuj zaznaczone", - "collection.select.empty": "Brak kolekcji do wyświetlenia", - "collection.select.table.title": "Tytuł", - "collection.source.controls.head": "Kontrolki odczytywania", - "collection.source.controls.test.submit.error": "Coś poszło nie tak podczas rozpoczynania testów ustawień", - "collection.source.controls.test.failed": "Scenariusz testowy ustawień nie zadziałał", - "collection.source.controls.test.completed": "Scenariusz testowy ustawień został zakończony", - "collection.source.controls.test.submit": "Konfiguracja testowa", - "collection.source.controls.test.running": "Testowanie konfiguracji...", - "collection.source.controls.import.submit.success": "Import został rozpoczęty", - "collection.source.controls.import.submit.error": "Coś poszło nie tak podczas rozpoczynania importu", - "collection.source.controls.import.submit": "Importuj teraz", - "collection.source.controls.import.running": "Importowanie...", - "collection.source.controls.import.failed": "Wystąpił błąd podczas importu", - "collection.source.controls.import.completed": "Import zakończony", - "collection.source.controls.reset.submit.success": "Reset ustawień i powtórny import zostały rozpoczęte poprawnie", - "collection.source.controls.reset.submit.error": "Coś poszło nie tak podczas rozpoczynania zresetowanego, powtórnego importu", - "collection.source.controls.reset.failed": "Wystąpił błąd podczas resetowania ustawień i ponownego importu", - "collection.source.controls.reset.completed": "Reset ustawień i powtórny import zostały zakończone", - "collection.source.controls.reset.submit": "Resetowanie i powtórny import", - "collection.source.controls.reset.running": "Resetowanie i powtórny import...", - "collection.source.controls.harvest.status": "Status odczytywania:", - "collection.source.controls.harvest.start": "Czas rozpoczęcia odczytywania:", - "collection.source.controls.harvest.last": "Czas ostatniego odczytywania:", - "collection.source.controls.harvest.message": "Informacje nt. odczytywania:", - "collection.source.controls.harvest.no-information": "bd.", - "collection.source.update.notifications.error.content": "Te ustawienia zostały przetestowane i nie działają.", - "collection.source.update.notifications.error.title": "Błąd serwera", - "communityList.breadcrumbs": "Lista zbiorów", - "communityList.tabTitle": "Lista zbiorów", - "communityList.title": "Lista zbiorów", - "communityList.showMore": "Pokaż więcej", - "community.create.head": "Utwórz zbiór", - "community.create.notifications.success": "Udało się utworzyć zbiór", - "community.create.sub-head": "Utwórz podzbiór dla zbioru {{ parent }}", - "community.curate.header": "Zarządzaj zbiorem: {{community}}", - "community.delete.cancel": "Anuluj", - "community.delete.confirm": "Potwierdź", - "community.delete.processing": "Usuwanie...", - "community.delete.head": "Usuń zbiór", - "community.delete.notification.fail": "Zbiór nie może być usunięty", - "community.delete.notification.success": "Udało się usunąć zbiór", - "community.delete.text": "Czy na pewno chcesz usunąć zbiór \"{{ dso }}\"", - "community.edit.delete": "Usuń ten zbiór", - "community.edit.head": "Edytuj zbiór", - "community.edit.breadcrumbs": "Edytuj zbiór", - "community.edit.logo.delete.title": "Usuń logo", - "community.edit.logo.delete-undo.title": "Cofnij usunięcie", - "community.edit.logo.label": "Logo zbioru", - "community.edit.logo.notifications.add.error": "Przesłanie loga zbioru nie powiodło się. Sprawdź czy wszystkie parametry są odpowiednie przed próbą ponownego przesłania.", - "community.edit.logo.notifications.add.success": "Przesłanie loga powiodło się.", - "community.edit.logo.notifications.delete.success.title": "Logo usunięte", - "community.edit.logo.notifications.delete.success.content": "Usunięcie loga zbioru powiodło się", - "community.edit.logo.notifications.delete.error.title": "Błąd podczas usuwania loga", - "community.edit.logo.upload": "Upuść logo zbioru, aby je przesłać", - "community.edit.notifications.success": "Udało się edytować zbiór", - "community.edit.notifications.unauthorized": "Nie masz uprawnień, aby wykonać te zmiany", - "community.edit.notifications.error": "Wystąpił błąd podczas edycji zbioru", - "community.edit.return": "Cofnij", - "community.edit.tabs.curate.head": "Administruj", - "community.edit.tabs.curate.title": "Edycja zbioru - administrator", - "community.edit.tabs.metadata.head": "Edytuj metadane", - "community.edit.tabs.metadata.title": "Edycja zbioru - metadane", - "community.edit.tabs.roles.head": "Przypisz role", - "community.edit.tabs.roles.title": "Edycja zbioru - role", - "community.edit.tabs.authorizations.head": "Uprawnienia", - "community.edit.tabs.authorizations.title": "Edycja zbioru - uprawnienia", - "community.listelement.badge": "Zbiór", - "comcol-role.edit.no-group": "Brak", - "comcol-role.edit.create": "Utwórz", - "comcol-role.edit.restrict": "Ogranicz", - "comcol-role.edit.delete": "Usuń", - "comcol-role.edit.community-admin.name": "Administratorzy", - "comcol-role.edit.collection-admin.name": "Administratorzy", - "comcol-role.edit.community-admin.description": "Administratorzy zbioru mogą tworzyć podzbiory lub kolekcje i zarządzać nimi lub przydzielać zarządzanie tymi podzbiorami lub kolekcji innym użytkownikom. Ponadto decydują, kto może przesyłać elementy do dowolnych podkolekcji, edytować metadane pozycji (po przesłaniu) i dodawać (mapować) istniejące pozycje z innych kolekcji (z zastrzeżeniem autoryzacji).", - "comcol-role.edit.collection-admin.description": "Administratorzy kolekcji decydują o tym, kto może przesyłać pozycje do kolekcji, edytować metadane pozycji (po ich przesłaniu) oraz dodawać (mapować) istniejące elementy z innych kolekcji do tej kolekcji (z zastrzeżeniem uprawnień dla danej kolekcji).", - "comcol-role.edit.submitters.name": "Zgłaszający", - "comcol-role.edit.submitters.description": "Użytkownicy i grupy, którzy mają uprawnienia do przesyłania nowych pozycji do tej kolekcji.", - "comcol-role.edit.item_read.name": "Domyślny dostęp do odczytu pozycji", - "comcol-role.edit.item_read.description": "Użytkownicy i grupy, które mogą odczytywać nowe pozycje zgłoszone do tej kolekcji. Zmiany w tej roli nie działają wstecz. Istniejące pozycje w systemie będą nadal widoczne dla osób, które miały dostęp do odczytu w momencie ich dodania.", - "comcol-role.edit.item_read.anonymous-group": "Domyślny odczyt dla nowych pozycji jest obecnie ustawiony na Anonimowy.", - "comcol-role.edit.bitstream_read.name": "Domyślny dostęp do oczytu plików", - "comcol-role.edit.bitstream_read.description": "Administratorzy zbiorów mogą tworzyć podzbiory lub kolekcje, a także zarządzać nimi. Ponadto decydują o tym, kto może przesyłać elementy do podkolekcji, edytować metadane pozycji (po ich przesłaniu) oraz dodawać (mapować) istniejące pozycje z innych kolekcji (pod warunkiem posiadania odpowiednich uprawnień).", - "comcol-role.edit.bitstream_read.anonymous-group": "Domyślny status odczytu dla nowych plików to Anonimowy.", - "comcol-role.edit.editor.name": "Redaktorzy", - "comcol-role.edit.editor.description": "Redaktorzy mogą edytować metadane nowych pozycji, a następnie akceptować je lub odrzucać.", - "comcol-role.edit.finaleditor.name": "Redaktorzy końcowi", - "comcol-role.edit.finaleditor.description": "Redaktorzy końcowi mogą edytować metadane nowych pozycji, ale nie mogę odrzucać pozycji.", - "comcol-role.edit.reviewer.name": "Recenzenci", - "comcol-role.edit.reviewer.description": "Recenzenci mogą akceptować lub odrzucać nowe pozycje, ale nie mogę edytować ich metadanych.", - "community.form.abstract": "Opis skrócony", - "community.form.description": "Wstęp (HTML)", - "community.form.errors.title.required": "Wprowadź nazwę zbioru", - "community.form.rights": "Prawa autoskie (HTML)", - "community.form.tableofcontents": "Wiadomości (HTML)", - "community.form.title": "Nazwa", - "community.page.edit": "Edytuj ten zbiór", - "community.page.handle": "Stały URI zbioru", - "community.page.license": "Licencja", - "community.page.news": "Wiadomości", - "community.all-lists.head": "Podzbiory i kolekcje", - "community.sub-collection-list.head": "Kolekcje w tym zbiorze", - "community.sub-community-list.head": "Kolekcje w tym zbiorze", - "cookies.consent.accept-all": "Zaakceptuj wszystko", - "cookies.consent.accept-selected": "Zaakceptuj wybrane", - "cookies.consent.app.opt-out.description": "Aplikacja jest domyślnie włączona (możesz ją wyłączyć)", - "cookies.consent.app.opt-out.title": "(możesz ją wyłaczyć)", - "cookies.consent.app.purpose": "cel", - "cookies.consent.app.required.description": "Ta aplikacja jest zawsze wymagana", - "cookies.consent.app.required.title": "(zawsze wymagana)", - "cookies.consent.update": "Od ostatniej wizyty zostały wprowadzone zmiany. Zweryfikuj swoje zgody.", - "cookies.consent.close": "Zamknij", - "cookies.consent.decline": "Odrzuć", - "cookies.consent.content-notice.description": "Zbieramy i przetwarzamy Twoje dane do następujących celów: weryfikacja, preferencje, zgody i statystyka.
    Jeśli chcesz się dowiedzieć więcej, przycztaj naszą {privacyPolicy}.", - "cookies.consent.content-notice.learnMore": "Dostosuj", - "cookies.consent.content-modal.description": "Tutaj są wyświetlane informacje, które zbieramy o Tobie. Możesz je dostosować według swojego uznania.", - "cookies.consent.content-modal.privacy-policy.name": "polityka prywatności", - "cookies.consent.content-modal.privacy-policy.text": "Aby dowiedzieć się więcej przeczytaj naszą {privacyPolicy}.", - "cookies.consent.content-modal.title": "Informacje, które zbieramy", - "cookies.consent.app.title.authentication": "Logowanie", - "cookies.consent.app.description.authentication": "Musisz się zalogować", - "cookies.consent.app.title.preferences": "Preferencje", - "cookies.consent.app.description.preferences": "Wymagane, aby zapisać Twoje preferencje", - "cookies.consent.app.title.acknowledgement": "Zgody", - "cookies.consent.app.description.acknowledgement": "Wymagane, aby zapisać Twoje preferencje", - "cookies.consent.app.title.google-analytics": "Google Analytics", - "cookies.consent.app.description.google-analytics": "Pozwól na śledzenie do celów statystycznych", - "cookies.consent.purpose.functional": "Funkcjonalne", - "cookies.consent.purpose.statistical": "Statystyczne", - "curation-task.task.checklinks.label": "Sprawdź odnośniki w metadanych", - "curation-task.task.noop.label": "NOOP", - "curation-task.task.profileformats.label": "Profil formatów plików", - "curation-task.task.requiredmetadata.label": "Sprawdź poprawność wymaganych metadanych", - "curation-task.task.translate.label": "Microsoft Translator", - "curation-task.task.vscan.label": "Skan antywirusowy", - "curation.form.task-select.label": "Zadanie:", - "curation.form.submit": "Start", - "curation.form.submit.success.head": "Udało się rozpocząć zadanie administratora", - "curation.form.submit.success.content": "Zostaniesz przeniesiony na stronę procesu.", - "curation.form.submit.error.head": "Nie udało się się zakończyć zadania administratora", - "curation.form.submit.error.content": "Wystąpił błąd podczas rozpoczynania zadania administracyjnego.", - "curation.form.handle.label": "Automatyzacja:", - "curation.form.handle.hint": "Wskazówka: Wpisz [prefix swojego identyfikatora]/0, aby zautomatyzować zadanie (nie wszystkie zadania mogą wspierać tę funkcję)", - "deny-request-copy.email.message": "Drogi użytkowniku {{ recipientName }},\nW odpowiedzi na Państwa zapytanie, przykro mi poinformować, że to niemożliwe, aby przestać kopię pliku, o który Państwo prosili: \"{{ itemUrl }}\" ({{ itemName }}), którego jestem autorem.\n\nPozdrawiam serdecznie,\n{{ authorName }} <{{ authorEmail }}>", - "deny-request-copy.email.subject": "Wystąp o kopię dokumentu", - "deny-request-copy.error": "Wystąpił błąd", - "deny-request-copy.header": "Odrzuć prośbę o przesłanie kopii dokumentu", - "deny-request-copy.intro": "Ta wiadomość zostanie przesłana do osoby, która wystąpiła o dostęp", - "deny-request-copy.success": "Z powodzeniem odrzucono prośbę o udostępnienie pozycji", - "dso.name.untitled": "Brak tytułu", - "dso-selector.claim.item.head": "Wskazówki profilu", - "dso-selector.claim.item.body": "Istnieją profile, które mogą odnosić się do Ciebie. Jeśli, któryś z tych profilów jest Twój, wybierz go i przejdź do szczegółów, z opcji wybierz opcję przypisania profilu. W innym przypadku możesz utworzyć nowy profil z szablonu, wybierając przycisk poniżej.", - "dso-selector.claim.item.create-from-scratch": "Utwórz nowy", - "dso-selector.claim.item.not-mine-label": "Żaden nie jest mój", - "dso-selector.create.collection.head": "Nowa kolekcja", - "dso-selector.create.collection.sub-level": "Utwórz nową kolekcję w", - "dso-selector.create.community.head": "Nowy zbiór", - "dso-selector.create.community.sub-level": "Utwórz nowy zbiór", - "dso-selector.create.community.top-level": "Utwórz nowy nadrzędny zbiór", - "dso-selector.create.item.head": "Nowa pozycja", - "dso-selector.create.item.sub-level": "Utwórz nową pozycję w", - "dso-selector.create.submission.head": "Nowe zgłoszenie", - "dso-selector.edit.collection.head": "Edytuj kolekcję", - "dso-selector.edit.community.head": "Edytuj zbiór", - "dso-selector.edit.item.head": "Edytuj pozycję", - "dso-selector.error.title": "Wystąpił błąd podczas wyszukiwania typu {{ type }}", - "dso-selector.export-metadata.dspaceobject.head": "Eksportuj metadane z", - "dso-selector.no-results": "Nie znaleziono {{ type }}", - "dso-selector.placeholder": "Wyszukaj {{ type }}", - "dso-selector.select.collection.head": "Wybierz kolekcję", - "dso-selector.set-scope.community.head": "Wybierz wyszukiwanie zakresu", - "dso-selector.set-scope.community.button": "Wyszukaj w całym DSpace", - "dso-selector.set-scope.community.input-header": "Wyszukaj zbiór lub kolekcję", - "confirmation-modal.export-metadata.header": "Eksportuj metadane z {{ dsoName }}", - "confirmation-modal.export-metadata.info": "Czy na pewno chcesz eksportować metadane z {{ dsoName }}", - "confirmation-modal.export-metadata.cancel": "Anuluj", - "confirmation-modal.export-metadata.confirm": "Eksportuj", - "confirmation-modal.delete-eperson.header": "Usuń użytkownika \"{{ dsoName }}\"", - "confirmation-modal.delete-eperson.info": "Czy na pewno chcesz usunąć użytkownika \"{{ dsoName }}\"", - "confirmation-modal.delete-eperson.cancel": "Anuluj", - "confirmation-modal.delete-eperson.confirm": "Usuń", - "error.bitstream": "Wystąpił błąd podczas tworzenia plików", - "error.browse-by": "Wystąpił błąd podczas tworzenia pozycji", - "error.collection": "Wystąpił błąd podczas tworzenia kolekcji", - "error.collections": "Wystąpił błąd podczas tworzenia kolekcji", - "error.community": "Wystąpił błąd podczas tworzenia ziboru", - "error.identifier": "Nie znaleziono pozycji z podanym identyfikatorem", - "error.default": "Błąd", - "error.item": "Wystąpił błąd podczas tworzenia pozycji", - "error.items": "Wystąpił błąd podczas tworzenia pozycji", - "error.objects": "Wystąpił błąd podczas tworzenia obiektów", - "error.recent-submissions": "Wystąpił błąd podczas tworzenia ostatniego zgłoszenia", - "error.search-results": "Wystąpił błąd podczas tworzenia wyników wyszukiwania", - "error.sub-collections": "Wystąpił błąd podczas tworzenia podkolekcji", - "error.sub-communities": "Wystąpił błąd podczas tworzenia podzbiorów", - "error.submission.sections.init-form-error": "Wystąpił błąd w czasie inicjalizacji sekcji, sprawdź konfigurację. Szczegóły poniżej:

    ", - "error.top-level-communities": "Błąd podczas pobierania nadrzędnego zbioru", - "error.validation.license.notgranted": "Musisz wyrazić tę zgodę, aby przesłać swoje zgłoszenie. Jeśli nie możesz wyrazić zgody w tym momencie, możesz zapisać swoją pracę i wrócić do niej później lub usunąć zgłoszenie.", - "error.validation.pattern": "Te dane wejściowe są ograniczone przez aktualny wzór: {{ pattern }}.", - "error.validation.filerequired": "Przesłanie pliku jest obowiązkowe", - "error.validation.required": "Pole jest wymagane", - "error.validation.NotValidEmail": "E-mail nie jest poprawny", - "error.validation.emailTaken": "E-mail jest już zarejestrowany", - "error.validation.groupExists": "Ta grupa już istnieje", - "file-section.error.header": "Błąd podczas uzyskiwania plików dla tej pozycji", - "footer.copyright": "copyright © 2002-{{ year }}", - "footer.link.dspace": "oprogramowanie DSpace", - "footer.link.lyrasis": "LYRASIS", - "footer.link.cookies": "Ustawienia plików cookies", - "footer.link.privacy-policy": "Polityka prywatności", - "footer.link.end-user-agreement": "Umowa użytkownika", - "forgot-email.form.header": "Nie pamiętam hasła", - "forgot-email.form.info": "Zarejestruj się, aby otrzymywać wiadomości o nowych pozycjach w obserowanych kolekcjach, a także przesyłać nowe pozycje do repozytorium.", - "forgot-email.form.email": "Adres e-mail *", - "forgot-email.form.email.error.required": "Uzupełnij adres e-mail", - "forgot-email.form.email.error.pattern": "Uzupełnij prawidłowy adres e-mail", - "forgot-email.form.email.hint": "Ten adres e-mail będzie zweryfikowany i będziesz go używać jako swój login.", - "forgot-email.form.submit": "Wyślij", - "forgot-email.form.success.head": "Wysłano wiadomość weryfikacyjną", - "forgot-email.form.success.content": "Wiadomość została wysłana na adres e-mail {{ email }}. Zawiera ona unikatowy link i dalsze instrukcje postępowania.", - "forgot-email.form.error.head": "Błąd podczas rejestracji adresu e-mail", - "forgot-email.form.error.content": "Wystąpił błąd poczas próby rejestracji tego adresu e-mail: {{ email }}", - "forgot-password.title": "Nie pamiętam hasła", - "forgot-password.form.head": "Nie pamiętam hasła", - "forgot-password.form.info": "Wpisz nowe hasło w polu poniżej i potwierdź je wpisując je ponownie w drugim polu. Hasło powinno mieć co najmniej sześć znaków.", - "forgot-password.form.card.security": "Bezpieczeństwo", - "forgot-password.form.identification.header": "Identifikacja", - "forgot-password.form.identification.email": "Adres e-mail: ", - "forgot-password.form.label.password": "Hasło", - "forgot-password.form.label.passwordrepeat": "Potwierdź hasło", - "forgot-password.form.error.empty-password": "Wpisz hasło poniżej.", - "forgot-password.form.error.matching-passwords": "Hasła nie są identyczne.", - "forgot-password.form.notification.error.title": "Błąd podczas próby ustawienia nowego hasła", - "forgot-password.form.notification.success.content": "Resetowanie hasła udało się. Zalogowano jako stworzony przed momemntem użytkownik.", - "forgot-password.form.notification.success.title": "Resetowanie hasła udane", - "forgot-password.form.submit": "Wpisz hasło", - "form.add": "Dodaj", - "form.add-help": "Wybierz ten przycisk, aby dodać aktualny wpis lub dodać następny", - "form.cancel": "Anuluj", - "form.clear": "Wyczyść", - "form.clear-help": "Kliknij tutaj, aby usunąć wybraną wartość", - "form.discard": "Odrzuć", - "form.drag": "Przeciągnij", - "form.edit": "Edytuj", - "form.edit-help": "Kliknij tutaj, aby edytować wybraną wartość", - "form.first-name": "Imię", - "form.last-name": "Nazwisko", - "form.loading": "Ładowanie...", - "form.lookup": "Przeglądaj", - "form.lookup-help": "Kliknij tutaj, aby zobaczyć istniejące powiązania", - "form.no-results": "Nie znaleziono rezultatów", - "form.no-value": "Nie wprowadzono wartości", - "form.remove": "Usuń", - "form.save": "Zapisz", - "form.save-help": "Zapisz zmiany", - "form.search": "Wyszukaj", - "form.search-help": "Kliknij tutaj, aby wyszukać w istniejących komentarzach", - "form.submit": "Zapisz", - "form.repeatable.sort.tip": "Upuść nową pozycję w nowym miejscu", - "grant-deny-request-copy.deny": "Nie przesyłaj kopii", - "grant-deny-request-copy.email.back": "Cofnij", - "grant-deny-request-copy.email.message": "Wiadomości", - "grant-deny-request-copy.email.message.empty": "Proszę wprowadzić wiadomość", - "grant-deny-request-copy.email.permissions.info": "W tym miejscu możesz przemyśleć ograniczenie dostępu do dokumentu, aby odpowiadać na mniej próśb o dostęp. Jeśli chcesz wystąpić do administratorów reposytorium o zniesienie restrykcji, zaznacz okienko poniżej.", - "grant-deny-request-copy.email.permissions.label": "Ustaw jako otwarty dostęp", - "grant-deny-request-copy.email.send": "Wyślij", - "grant-deny-request-copy.email.subject": "Temat", - "grant-deny-request-copy.email.subject.empty": "Wpisz temat", - "grant-deny-request-copy.grant": "Wyślij kopię", - "grant-deny-request-copy.header": "Prośba o przesłanie kopii dokumentu", - "grant-deny-request-copy.home-page": "Zabierz mnie na stronę główną", - "grant-deny-request-copy.intro1": "Jeśli jesteś jednym z autorów dokumentu {{ name }}, wybierz jedną z poniższych opcji, aby odpowiedzieć zapytaniu użytkownika.", - "grant-deny-request-copy.intro2": "Po wybraniu opcji, zostaną wyświetlone sugerowane odpowiedzi, które można edytować.", - "grant-deny-request-copy.processed": "Ta prośba jest już procesowana. Możesz użyć przycisku poniżej, aby wrócić do strony głównej.", - "grant-request-copy.email.message": "Drogi użytkowniku {{ recipientName }},\nW odpowiedzi na Państwa zapytanie, miło mi poinformować, że w załączniku przesyłam kopię dokumentu, o który Państwo prosili: \"{{ itemUrl }}\" ({{ itemName }}), którego jestem autorem.\n\nPozdrawiam serdecznie,\n{{ authorName }} <{{ authorEmail }}>", - "grant-request-copy.email.subject": "Prośba o kopię dokumentu", - "grant-request-copy.error": "Wystąpił błąd", - "grant-request-copy.header": "Zezwól na wysłanie kopii dokumentu", - "grant-request-copy.intro": "To wiadomość zostanie wysłana do osoby, która wystąpiła o dostęp. Wskazane dokumenty zostaną dołączone jako załącznik.", - "grant-request-copy.success": "Prośba o dostęp do dokumentu została przyjęta", - "home.description": "", - "home.breadcrumbs": "Strona główna", - "home.search-form.placeholder": "Przeszukaj repozytorium...", - "home.title": "Strona główna", - "home.top-level-communities.head": "Zbiory w DSpace", - "home.top-level-communities.help": "Przeszukaj kolekcje", - "info.end-user-agreement.accept": "Przeczytałem/am i akceptuję umowę użytkownika", - "info.end-user-agreement.accept.error": "Błąd wystąpił podczas akceptowania umowy użytkownika", - "info.end-user-agreement.accept.success": "Udało się zaktualizować umowę użytkownika", - "info.end-user-agreement.breadcrumbs": "Umowa użytkownika", - "info.end-user-agreement.buttons.cancel": "Anuluj", - "info.end-user-agreement.buttons.save": "Zapisz", - "info.end-user-agreement.head": "Umowa użytkownika", - "info.end-user-agreement.title": "Umowa użytkownika", - "info.privacy.breadcrumbs": "Oświadczenie polityki prywatności", - "info.privacy.head": "Oświadczenie polityki prywatności", - "info.privacy.title": "Oświadczenie polityki prywatności", - "item.alerts.private": "Ta pozycja jest prywatna", - "item.alerts.withdrawn": "Ta pozycja została wycofana", - "item.edit.authorizations.heading": "Za pomocą tego edytora możesz przeglądać i zmieniać polityki dla danej pozycji, a także zmieniać polityki dla poszczególnych części pozycji: paczek i strumieni bitów. W skrócie, pozycja jest kontenerem pakietów, a pakiety są kontenerami strumieni bitów. Kontenery zazwyczaj mają polityki ADD/REMOVE/READ/WRITE, natomiast strumienie bitów mają tylko polityki READ/WRITE.", - "item.edit.authorizations.title": "Edytuj politykę tej pozycji", - "item.badge.private": "Prywatny status publikacji", - "item.badge.withdrawn": "Wycofane publikacje", - "item.bitstreams.upload.bundle": "Pakiet", - "item.bitstreams.upload.bundle.placeholder": "Wybierz pakiet", - "item.bitstreams.upload.bundle.new": "Utworz pakiet", - "item.bitstreams.upload.bundles.empty": "Ta pozycja nie zawiera żadnych pakietów, do których można przesłać strumień bitów.", - "item.bitstreams.upload.cancel": "Anuluj", - "item.bitstreams.upload.drop-message": "Upuść plik, aby przesłać", - "item.bitstreams.upload.item": "Pozycja: ", - "item.bitstreams.upload.notifications.bundle.created.content": "Udało się utworzyć nowy pakiet.", - "item.bitstreams.upload.notifications.bundle.created.title": "Utwórz pakiet", - "item.bitstreams.upload.notifications.upload.failed": "Zweryfikuj pliki przed spróbowaniem ponownie.", - "item.bitstreams.upload.title": "Prześlij strumień bitów", - "item.edit.bitstreams.bundle.edit.buttons.upload": "Prześlij", - "item.edit.bitstreams.bundle.displaying": "Obecnie wyświetlono {{ amount }} plików z {{ total }}.", - "item.edit.bitstreams.bundle.load.all": "Załaduj wszystkie ({{ total }})", - "item.edit.bitstreams.bundle.load.more": "Załaduj więcej", - "item.edit.bitstreams.bundle.name": "PACZKA: {{ name }}", - "item.edit.bitstreams.discard-button": "Odrzuć", - "item.edit.bitstreams.edit.buttons.download": "Pobierz", - "item.edit.bitstreams.edit.buttons.drag": "Przeciągnij", - "item.edit.bitstreams.edit.buttons.edit": "Edytuj", - "item.edit.bitstreams.edit.buttons.remove": "Usuń", - "item.edit.bitstreams.edit.buttons.undo": "Cofnij zmiany", - "item.edit.bitstreams.empty": "Ta pozycja nie zawiera żadnych strumieni bitów. Wybierz strumienie do załadowania, aby je utworzyć.", - "item.edit.bitstreams.headers.actions": "Akcje", - "item.edit.bitstreams.headers.bundle": "Paczka", - "item.edit.bitstreams.headers.description": "Opis", - "item.edit.bitstreams.headers.format": "Format", - "item.edit.bitstreams.headers.name": "Nazwa", - "item.edit.bitstreams.notifications.discarded.content": "Twoje zmiany zostały odrzucone. Aby je przywrócić, wybierz przycisk 'Cofnij'", - "item.edit.bitstreams.notifications.discarded.title": "Zmiany odrzucone", - "item.edit.bitstreams.notifications.move.failed.title": "Błąd podczas przenoszenia plików", - "item.edit.bitstreams.notifications.move.saved.content": "Zmiany pozycji dla pliku tej pozycji oraz jego paczki zostały zapisane.", - "item.edit.bitstreams.notifications.move.saved.title": "Zmiana pozycji została zapisana", - "item.edit.bitstreams.notifications.outdated.content": "Pozycja została w międzyczasie zmieniona przez innego użytkownika. Twoje zmiany zostały cofnięte, aby uniknąć ewentualnych konfliktów", - "item.edit.bitstreams.notifications.outdated.title": "Zmiany nieaktualne", - "item.edit.bitstreams.notifications.remove.failed.title": "Błąd podczas usuwania pliku", - "item.edit.bitstreams.notifications.remove.saved.content": "Twoje zmiany dotyczące usunięcia plików z tej pozycji zostały zapisane.", - "item.edit.bitstreams.notifications.remove.saved.title": "Zmiany dotyczące usunięcia zapisane", - "item.edit.bitstreams.reinstate-button": "Cofnij", - "item.edit.bitstreams.save-button": "Zapisz", - "item.edit.bitstreams.upload-button": "Prześlij", - "item.edit.delete.cancel": "Anuluj", - "item.edit.delete.confirm": "Usuń", - "item.edit.delete.description": "Czy jesteś pewien, że ta pozycja powinna zostać całkowicie usunięta? Ostrożnie: Teraz nie pozostanie po tej pozycji żaden ślad.", - "item.edit.delete.error": "Błąd wystąpił podczas usuwania pozycji", - "item.edit.delete.header": "Usuń pozycję: {{ id }}", - "item.edit.delete.success": "Ta pozycja została usunięta", - "item.edit.head": "Edytuj pozycję", - "item.edit.breadcrumbs": "Edytuj pozycję", - "item.edit.tabs.disabled.tooltip": "Nie masz dostępu do tej strony", - "item.edit.tabs.mapper.head": "Mapper kolekcji", - "item.edit.tabs.item-mapper.title": "Edytowanie pozycji - Mapper kolekcji", - "item.edit.item-mapper.buttons.add": "Mapowanie pozycji do wybranych kolekcji", - "item.edit.item-mapper.buttons.remove": "Usuń mapowanie pozycji do wybranych kolekcji", - "item.edit.item-mapper.cancel": "Anuluj", - "item.edit.item-mapper.description": "To jest narzędzie do mapowania elementów, które pozwala administratorom mapować tę pozycję do innych kolekcji. Możesz wyszukiwać kolekcje i je mapować lub przeglądać listę kolekcji, do których dana pozycja jest aktualnie zmapowana.", - "item.edit.item-mapper.head": "Mapper pozycji - Mapowanie pozycji do kolekcji", - "item.edit.item-mapper.item": "Pozycja: \"{{name}}\"", - "item.edit.item-mapper.no-search": "Wpisz zapytanie, które chcesz wyszukać", - "item.edit.item-mapper.notifications.add.error.content": "Wystąpiły błędy dla mapowania pozycji w {{amount}} kolekcjach.", - "item.edit.item-mapper.notifications.add.error.head": "Błędy mapowania", - "item.edit.item-mapper.notifications.add.success.content": "Udało się zmapować elementy dla {{amount}} kolekcji.", - "item.edit.item-mapper.notifications.add.success.head": "Mapowanie zakończone", - "item.edit.item-mapper.notifications.remove.error.content": "Wystąpiły błędy podczas usuwania mapowania do {{amount}} kolekcji.", - "item.edit.item-mapper.notifications.remove.error.head": "Usunięcie mapowania błędów", - "item.edit.item-mapper.notifications.remove.success.content": "Udało się usunąć mapowanie pozycji w {{amount}} kolekcjach.", - "item.edit.item-mapper.notifications.remove.success.head": "Usuwanie mapowania zakończone", - "item.edit.item-mapper.search-form.placeholder": "Przeszukaj kolekcje...", - "item.edit.item-mapper.tabs.browse": "Przeglądaj zmapowane kolekcje", - "item.edit.item-mapper.tabs.map": "Mapuj nowe kolekcje", - "item.edit.metadata.add-button": "Dodaj", - "item.edit.metadata.discard-button": "Odrzuć", - "item.edit.metadata.edit.buttons.edit": "Edytuj", - "item.edit.metadata.edit.buttons.remove": "Usuń", - "item.edit.metadata.edit.buttons.undo": "Cofnij zmiany", - "item.edit.metadata.edit.buttons.unedit": "Zatrzymaj edycję", - "item.edit.metadata.empty": "Ta pozycja nie zawiera żadnych metadanych. Wybierz Dodaj, aby dodać metadane.", - "item.edit.metadata.headers.edit": "Edytuj", - "item.edit.metadata.headers.field": "Pole", - "item.edit.metadata.headers.language": "Język", - "item.edit.metadata.headers.value": "Wartość", - "item.edit.metadata.metadatafield.invalid": "Wybierz aktualne pole metadanych", - "item.edit.metadata.notifications.discarded.content": "Twoje zmiany zostały odrzucone. Aby wgrać je ponownie wybierz przycisk 'Cofnij'", - "item.edit.metadata.notifications.discarded.title": "Zmiany odrzucone", - "item.edit.metadata.notifications.error.title": "Wystąpił błąd", - "item.edit.metadata.notifications.invalid.content": "Twoje zmiany nie zostały zapisane. Przed zapisaniem upewnij się, że wszystkie pola są wypełnione prawidłowo.", - "item.edit.metadata.notifications.invalid.title": "Nieprawidłowe metadane", - "item.edit.metadata.notifications.outdated.content": "Pozycja została w międzyczasie zmieniona przez innego użytkownika. Twoje zmiany zostały cofnięte, aby zapobiec ewentualnym konfliktom", - "item.edit.metadata.notifications.outdated.title": "Zmiany nieaktualne", - "item.edit.metadata.notifications.saved.content": "Twoje zmiany metadanych tej pozycji zostały zapisane.", - "item.edit.metadata.notifications.saved.title": "Metadane zostały zapisane", - "item.edit.metadata.reinstate-button": "Cofnij", - "item.edit.metadata.save-button": "Zapisz", - "item.edit.modify.overview.field": "Pole", - "item.edit.modify.overview.language": "Język", - "item.edit.modify.overview.value": "Wartość", - "item.edit.move.cancel": "Anuluj", - "item.edit.move.save-button": "Zapisz", - "item.edit.move.discard-button": "Odrzuć", - "item.edit.move.description": "Wybierz kolekcję, do której chcesz przenieść tę pozycję. Aby zawęzić listę wyświetlanych kolekcji, możesz wprowadzić zapytanie w polu wyszukiwania.", - "item.edit.move.error": "Wystąpił błąd podczas przenoszenia pozycji", - "item.edit.move.head": "Przenieś pozycję: {{id}}", - "item.edit.move.inheritpolicies.checkbox": "Dziedziczenie polityk", - "item.edit.move.inheritpolicies.description": "Dziedzczenie domyślnych polityk z kolekcji docelowej", - "item.edit.move.move": "Przenieś", - "item.edit.move.processing": "Przenoszenie...", - "item.edit.move.search.placeholder": "Wpisz zapytanie, aby wyszukać w kolekcjach", - "item.edit.move.success": "Pozycja została przeniesiona", - "item.edit.move.title": "Przenieś pozycję", - "item.edit.private.cancel": "Anuluj", - "item.edit.private.confirm": "Ukryj", - "item.edit.private.description": "Czy chcesz ukryć tę pozycję?", - "item.edit.private.error": "Wystąpił błąd podczas ukrywania pozycji", - "item.edit.private.header": "Ukryj pozycję: {{ id }}", - "item.edit.private.success": "Pozycja jest teraz ukryta", - "item.edit.public.cancel": "Anuluj", - "item.edit.public.confirm": "Upublicznij", - "item.edit.public.description": "Czy chcesz upublicznić tę pozycję?", - "item.edit.public.error": "Wystąpił błąd podczas upubliczniania pozycji", - "item.edit.public.header": "Upublicznij pozycję: {{ id }}", - "item.edit.public.success": "Pozycja jest teraz publiczna", - "item.edit.reinstate.cancel": "Anuluj", - "item.edit.reinstate.confirm": "Przywróć", - "item.edit.reinstate.description": "Czy chcesz przywrócić tę pozycję?", - "item.edit.reinstate.error": "Wystąpił błąd podczas przywracania pozycji", - "item.edit.reinstate.header": "Przywróć pozycję: {{ id }}", - "item.edit.reinstate.success": "Pozycja została przywrócona", - "item.edit.relationships.discard-button": "Odrzuć", - "item.edit.relationships.edit.buttons.add": "Dodaj", - "item.edit.relationships.edit.buttons.remove": "Usuń", - "item.edit.relationships.edit.buttons.undo": "Cofnij zmiany", - "item.edit.relationships.no-relationships": "Brak relacji", - "item.edit.relationships.notifications.discarded.content": "Twoje zmiany zostały cofnięte. Aby przywrócić zmiany wybierz przycisk 'Cofnij'", - "item.edit.relationships.notifications.discarded.title": "Zmiany zostały cofnięte", - "item.edit.relationships.notifications.failed.title": "Wystąpił błąd podczas edytowania relacji", - "item.edit.relationships.notifications.outdated.content": "Ta pozycja została właśnie zmieniona przez innego użytkownika. Twoje zmiany zostały cofnięte, aby uniknąć konfliktów", - "item.edit.relationships.notifications.outdated.title": "Zmiany są nieaktualne", - "item.edit.relationships.notifications.saved.content": "Twoje zmiany w relacjach tej pozycji zostały zapisane.", - "item.edit.relationships.notifications.saved.title": "Relacje zostały zapisane", - "item.edit.relationships.reinstate-button": "Cofnij", - "item.edit.relationships.save-button": "Zapisz", - "item.edit.relationships.no-entity-type": "Dodaj metadaną 'dspace.entity.type', aby umożliwić dodawanie relacji do pozycji", - "item.edit.return": "Cofnij", - "item.edit.tabs.bitstreams.head": "Pliki", - "item.edit.tabs.bitstreams.title": "Edycja pozycji - pliki", - "item.edit.tabs.curate.head": "Administruj", - "item.edit.tabs.curate.title": "Edytowanie pozycji - administruj", - "item.edit.tabs.metadata.head": "Metadane", - "item.edit.tabs.metadata.title": "Edycja pozycji - metadane", - "item.edit.tabs.relationships.head": "Relacje", - "item.edit.tabs.relationships.title": "Edycja pozycja - relacje", - "item.edit.tabs.status.buttons.authorizations.button": "Dostępy...", - "item.edit.tabs.status.buttons.authorizations.label": "Określu dostęp do pozycji", - "item.edit.tabs.status.buttons.delete.button": "Usuń permanentnie", - "item.edit.tabs.status.buttons.delete.label": "Usuń pozycję permanentnie", - "item.edit.tabs.status.buttons.mappedCollections.button": "Zmapowane kolekcje", - "item.edit.tabs.status.buttons.mappedCollections.label": "Zarządzaj mapowanymi kolekcjami", - "item.edit.tabs.status.buttons.move.button": "Przenieś...", - "item.edit.tabs.status.buttons.move.label": "Przenieś pozycję do innej kolekcji", - "item.edit.tabs.status.buttons.private.button": "Ukryj...", - "item.edit.tabs.status.buttons.private.label": "Ukry pozycję", - "item.edit.tabs.status.buttons.public.button": "Upublicznij...", - "item.edit.tabs.status.buttons.public.label": "Upublicznij pozycję", - "item.edit.tabs.status.buttons.reinstate.button": "Przywróć...", - "item.edit.tabs.status.buttons.reinstate.label": "Przywróć pozycję", - "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", - "item.edit.tabs.status.buttons.withdraw.button": "Wycofaj...", - "item.edit.tabs.status.buttons.withdraw.label": "Wycofaj z repozytorium", - "item.edit.tabs.status.description": "Witamy na stronie zarządzania pozycjami. Z tego miejsca możesz wycofać, przywrócić, przenieść lub usunąć daną pozycję. Możesz również aktualizować lub dodawać nowe metadane lub pliki..", - "item.edit.tabs.status.head": "Status", - "item.edit.tabs.status.labels.handle": "Identyfikator", - "item.edit.tabs.status.labels.id": "ID pozycji", - "item.edit.tabs.status.labels.itemPage": "Strona pozycji", - "item.edit.tabs.status.labels.lastModified": "Ostatnia modyfikacja", - "item.edit.tabs.status.title": "Edycja pozycji - Status", - "item.edit.tabs.versionhistory.head": "Historia wersji", - "item.edit.tabs.versionhistory.title": "Edycja pozycji - historia wersji", - "item.edit.tabs.versionhistory.under-construction": "Edytowanie lub dodawanie nowych wersji jest niedostępne w tego poziomu interfejsu.", - "item.edit.tabs.view.head": "Widok pozycji", - "item.edit.tabs.view.title": "Edycja pozycji - widok", - "item.edit.withdraw.cancel": "Anuluj", - "item.edit.withdraw.confirm": "Wycofaj", - "item.edit.withdraw.description": "Czy na pewno chcesz wycofać pozycję?", - "item.edit.withdraw.error": "Wystąpił błąd podczas wycofywania pozycji", - "item.edit.withdraw.header": "Wycofaj pozycję: {{ id }}", - "item.edit.withdraw.success": "Pozycja została wycofana", - "item.listelement.badge": "Pozycja", - "item.page.description": "Opis", - "item.page.journal-issn": "ISSN czasopisma", - "item.page.journal-title": "Tytuł czasopisma", - "item.page.publisher": "Wydawca", - "item.page.titleprefix": "Pozycja: ", - "item.page.volume-title": "Tytuł tomu", - "item.search.results.head": "Wyniki wyszukiwania pozycji", - "item.search.title": "Wyszukiwanie pozycji", - "item.page.abstract": "Abstrakt", - "item.page.author": "Autorzy", - "item.page.citation": "Cytowanie", - "item.page.collections": "Kolekcje", - "item.page.collections.loading": "Ładowanie...", - "item.page.collections.load-more": "Załaduj więcej", - "item.page.date": "Data", - "item.page.edit": "Edytuj pozycję", - "item.page.files": "Pliki", - "item.page.filesection.description": "Opis:", - "item.page.filesection.download": "Pobierz", - "item.page.filesection.format": "Format:", - "item.page.filesection.name": "Nazwa:", - "item.page.filesection.size": "Rozmiar:", - "item.page.journal.search.title": "Artykuły w czasopiśmie", - "item.page.link.full": "Zobacz szczegóły", - "item.page.link.simple": "Uproszczony widok", - "item.page.person.search.title": "Artykuły tego autora", - "item.page.related-items.view-more": "Pokaż o {{ amount }} więcej", - "item.page.related-items.view-less": "Ukryj {{ amount }}", - "item.page.relationships.isAuthorOfPublication": "Publikacje", - "item.page.relationships.isJournalOfPublication": "Publikacje", - "item.page.relationships.isOrgUnitOfPerson": "Autorzy", - "item.page.relationships.isOrgUnitOfProject": "Projekty naukowe", - "item.page.subject": "Słowa kluczowe", - "item.page.uri": "URI", - "item.page.bitstreams.view-more": "Pokaż więcej", - "item.page.bitstreams.collapse": "Pokaż mniej", - "item.page.filesection.original.bundle": "Oryginalne pliki", - "item.page.filesection.license.bundle": "Licencja", - "item.page.return": "Powrót", - "item.page.version.create": "Utwórz nową wersję", - "item.page.version.hasDraft": "Nowa wersja nie może zostać utworzona, ponieważ istnieje już oczekujące na akceptację zgłoszenie dokumentu tego pliku", - "item.preview.dc.identifier.doi": "DOI", - "item.preview.dc.relation.ispartof": "Czasopismo lub seria", - "item.preview.dc.identifier.isbn": "ISBN", - "item.preview.dc.identifier.uri": "Identyfikator:", - "item.preview.dc.contributor.author": "Autorzy:", - "item.preview.dc.date.issued": "Data publikacji:", - "item.preview.dc.description.abstract": "Abstrakt:", - "item.preview.dc.identifier.other": "Inny identyfikator:", - "item.preview.dc.language.iso": "Język:", - "item.preview.dc.title": "Tytuł:", - "item.preview.dc.title.alternative": "Tytuł alternatywny", - "item.preview.dc.type": "Typ:", - "item.preview.dc.identifier": "Identyfikator:", - "item.preview.dc.relation.issn": "ISSN", - "item.preview.oaire.citation.issue": "Numer wydania", - "item.preview.oaire.citation.volume": "Numer tomu", - "item.preview.person.familyName": "Nazwisko:", - "item.preview.person.givenName": "Nazwa:", - "item.preview.person.identifier.orcid": "ORCID:", - "item.preview.project.funder.name": "Fundator:", - "item.preview.project.funder.identifier": "Identyfikator fundatora:", - "item.preview.oaire.awardNumber": "ID finansowania:", - "item.preview.dc.coverage.spatial": "Jurysdykcja:", - "item.preview.oaire.fundingStream": "Źródło finansowania:", - "item.select.confirm": "Potwierdź zaznaczone", - "item.select.empty": "Brak pozycji do wyświetlenia", - "item.select.table.author": "Autor", - "item.select.table.collection": "Kolekcja", - "item.select.table.title": "Tytuł", - "item.version.history.empty": "Jeszcze nie ma innych wersji tej pozycji.", - "item.version.history.head": "Poprzednie wersje", - "item.version.history.return": "Powrót", - "item.version.history.selected": "Wybrane wersje", - "item.version.history.selected.alert": "W tym momencie wyświetlono wersję {{version}} pozycji.", - "item.version.history.table.version": "Wersja", - "item.version.history.table.item": "Pozycja", - "item.version.history.table.editor": "Redaktor", - "item.version.history.table.date": "Data", - "item.version.history.table.summary": "Podsumowanie", - "item.version.history.table.workspaceItem": "Wersja robocza", - "item.version.history.table.workflowItem": "Pozycja workflow", - "item.version.history.table.actions": "Akcja", - "item.version.history.table.action.editWorkspaceItem": "Edytuj wersję roboczą pozycji", - "item.version.history.table.action.editSummary": "Edytuj podsumowanie", - "item.version.history.table.action.saveSummary": "Zapisz edycje podsumowania", - "item.version.history.table.action.discardSummary": "Odrzuć edycje podsumowania", - "item.version.history.table.action.newVersion": "Utwórz nową wersję z tej wersji", - "item.version.history.table.action.deleteVersion": "Wersja usunięta", - "item.version.history.table.action.hasDraft": "Nowa wersja nie może zostać utworzona, ponieważ istnieje już oczekujące na akceptację zgłoszenie dokumentu tego pliku", - "item.version.notice": "To nie jest najnowsza wersja tej pozycji. Najnowsza wersja jest dostępna tutaj.", - "item.version.create.modal.header": "Nowa wersja", - "item.version.create.modal.text": "Utwórz nową wersję tej pozycji", - "item.version.create.modal.text.startingFrom": "zaczynając od wersji {{version}}", - "item.version.create.modal.button.confirm": "Utwórz", - "item.version.create.modal.button.confirm.tooltip": "Utwórz nową wersję", - "item.version.create.modal.button.cancel": "Anuluj", - "item.version.create.modal.button.cancel.tooltip": "Nie stwarzaj nowej wersji", - "item.version.create.modal.form.summary.label": "Podsumowanie", - "item.version.create.modal.form.summary.placeholder": "Wprowadź podsumowanie nowej wersji", - "item.version.create.notification.success": "Nowa wersja została utworzona z numerem {{version}}", - "item.version.create.notification.failure": "Nowa wersja nie została utworzona", - "item.version.create.notification.inProgress": "Nowa wersja nie może być utworzona, ponieważ propozycja innej wersji jest już złożona do zaakceptowania", - "item.version.delete.modal.header": "Usuń wersję", - "item.version.delete.modal.text": "Czy chcesz usunąć wersję {{version}}?", - "item.version.delete.modal.button.confirm": "Usuń", - "item.version.delete.modal.button.confirm.tooltip": "Usuń wersję", - "item.version.delete.modal.button.cancel": "Anuluj", - "item.version.delete.modal.button.cancel.tooltip": "Nie usuwaj tej wersji", - "item.version.delete.notification.success": "Wersja {{version}} została usunięta", - "item.version.delete.notification.failure": "Wersja {{version}} nie została usunięta", - "item.version.edit.notification.success": "Podsumowanie wersji {{version}} zostało zmienione", - "item.version.edit.notification.failure": "Podsumowanie wersji {{version}} nie zostało zmienione", - "journal.listelement.badge": "Czasopismo", - "journal.page.description": "Opis", - "journal.page.edit": "Edytuj tę pozycję", - "journal.page.editor": "Redaktor naczelny", - "journal.page.issn": "ISSN", - "journal.page.publisher": "Wydawca", - "journal.page.titleprefix": "Czasopismo: ", - "journal.search.results.head": "Wyniki wyszukiwania czasopism", - "journal.search.title": "Wyszukiwanie czasopism", - "journalissue.listelement.badge": "Numer czasopisma", - "journalissue.page.description": "Opis", - "journalissue.page.edit": "Edytuj pozycję", - "journalissue.page.issuedate": "Data wydania", - "journalissue.page.journal-issn": "ISSN czasopisma", - "journalissue.page.journal-title": "Tytuł czasopisma", - "journalissue.page.keyword": "Słowa kluczowe", - "journalissue.page.number": "Numer", - "journalissue.page.titleprefix": "Wydanie czasopisma: ", - "journalvolume.listelement.badge": "Numer tomu czasopisma", - "journalvolume.page.description": "Opis", - "journalvolume.page.edit": "Edytuj pozycję", - "journalvolume.page.issuedate": "Data wydania", - "journalvolume.page.titleprefix": "Numer tomu czasopisma: ", - "journalvolume.page.volume": "Numer wydania", - "iiifsearchable.listelement.badge": "Multimedia dokumentu", - "iiifsearchable.page.titleprefix": "Dokument: ", - "iiifsearchable.page.doi": "Stały link: ", - "iiifsearchable.page.issue": "Wydanie: ", - "iiifsearchable.page.description": "Opis: ", - "iiifviewer.fullscreen.notice": "Wyświetl na pełnym ekranie dla lepszego widoku.", - "iiif.listelement.badge": "Multimedia obrazu", - "iiif.page.titleprefix": "Obraz: ", - "iiif.page.doi": "Stały link: ", - "iiif.page.issue": "Numer wydania: ", - "iiif.page.description": "Opis: ", - "loading.bitstream": "Ładowanie pliku...", - "loading.bitstreams": "Ładowanie plików...", - "loading.browse-by": "Ładowanie pozycji...", - "loading.browse-by-page": "Ładowanie strony...", - "loading.collection": "Ładowanie kolekcji...", - "loading.collections": "Ładowanie kolekcji...", - "loading.content-source": "Ładowanie źródła treści...", - "loading.community": "Ładowanie zbioru...", - "loading.default": "Ładowanie...", - "loading.item": "Ładowanie pozycji...", - "loading.items": "Ładowanie pozycji...", - "loading.mydspace-results": "Ładowanie pozycji...", - "loading.objects": "Ładowanie...", - "loading.recent-submissions": "Ładowanie ostatnich zgłoszeń...", - "loading.search-results": "Ładowanie wyników wyszukiwania...", - "loading.sub-collections": "Ładowanie podkolekcji...", - "loading.sub-communities": "Ładowanie podzbioru...", - "loading.top-level-communities": "Ładowanie zbioru wyszego szczebla...", - "login.form.email": "Adres e-mail", - "login.form.forgot-password": "Nie pamiętasz hasła?", - "login.form.header": "Zaloguj się do DSpace", - "login.form.new-user": "Nie masz konta? Zarejestruj się.", - "login.form.or-divider": "lub", - "login.form.orcid": "Zaloguj za pomocą ORCID", - "login.form.oidc": "Zaloguj za pomocą OIDC", - "login.form.password": "Hasło", - "login.form.shibboleth": "Zaloguj za pomocą Shibboleth", - "login.form.submit": "Zaloguj się", - "login.title": "Zaloguj", - "login.breadcrumbs": "Zaloguj", - "logout.form.header": "Wyloguj się z DSpace", - "logout.form.submit": "Wyloguj się", - "logout.title": "Wylogowywanie", - "menu.header.admin": "Panel administracyjny", - "menu.header.image.logo": "Logo repozytorium", - "menu.header.admin.description": "Menu administratora", - "menu.section.access_control": "Uprawnienia", - "menu.section.access_control_authorizations": "Dostępy", - "menu.section.access_control_groups": "Grupy", - "menu.section.access_control_people": "Użytkownicy", - "menu.section.admin_search": "Wyszukiwanie administracyjne", - "menu.section.browse_community": "Ten zbiór", - "menu.section.browse_community_by_author": "Wg autorów", - "menu.section.browse_community_by_issue_date": "Wg daty wydania", - "menu.section.browse_community_by_title": "Wg tytułów", - "menu.section.browse_global": "Wszystko na DSpace", - "menu.section.browse_global_by_author": "Wg autorów", - "menu.section.browse_global_by_dateissued": "Wg daty wydania", - "menu.section.browse_global_by_subject": "Wg tematu", - "menu.section.browse_global_by_title": "Wg tytułu", - "menu.section.browse_global_communities_and_collections": "Zbiory i kolekcje", - "menu.section.control_panel": "Panel sterowania", - "menu.section.curation_task": "Zadanie administracyjne", - "menu.section.edit": "Edytuj", - "menu.section.edit_collection": "Kolekcja", - "menu.section.edit_community": "Zbiór", - "menu.section.edit_item": "Pozycja", - "menu.section.export": "Eksport", - "menu.section.export_collection": "Kolekcja", - "menu.section.export_community": "Zbiór", - "menu.section.export_item": "Pozycja", - "menu.section.export_metadata": "Metadane", - "menu.section.icon.access_control": "Sekcja menu Uprawnienia", - "menu.section.icon.admin_search": "Sekcja menu Wyszukiwanie administracyjne", - "menu.section.icon.control_panel": "Sekcja menu Panel sterowania", - "menu.section.icon.curation_tasks": "Sekcja menu Zadanie administracyjne", - "menu.section.icon.edit": "Sekcja menu Edycja", - "menu.section.icon.export": "Sekcja menu Eksport", - "menu.section.icon.find": "Sekcja menu Wyszukiwanie", - "menu.section.icon.import": "Sekcja menu Import", - "menu.section.icon.new": "Sekcja menu Dodaj", - "menu.section.icon.pin": "Przypnij boczny pasek", - "menu.section.icon.processes": "Sekcja menu Procesy", - "menu.section.icon.registries": "Sekcja menu Rejestry", - "menu.section.icon.statistics_task": "Sekcja menu Zadanie statystyczne", - "menu.section.icon.workflow": "Sekcja menu Zarządzanie workflow", - "menu.section.icon.unpin": "Odepnij boczny pasek", - "menu.section.import": "Import", - "menu.section.import_batch": "Import masowy (ZIP)", - "menu.section.import_metadata": "Metadane", - "menu.section.new": "Dodaj", - "menu.section.new_collection": "Kolekcja", - "menu.section.new_community": "Zbiór", - "menu.section.new_item": "Pozycja", - "menu.section.new_item_version": "Wersja pozycji", - "menu.section.new_process": "Proces", - "menu.section.pin": "Przypnij pasek boczny", - "menu.section.unpin": "Odepnij pasek boczny", - "menu.section.processes": "Procesy", - "menu.section.registries": "Rejestry", - "menu.section.registries_format": "Formaty", - "menu.section.registries_metadata": "Metadane", - "menu.section.statistics": "Statystyki", - "menu.section.statistics_task": "Zadanie statystyczne", - "menu.section.toggle.access_control": "Przełącz sekcję Uprawnienia", - "menu.section.toggle.control_panel": "Przełącz sekcję Panel sterowania", - "menu.section.toggle.curation_task": "Przełącz sekcję Zadanie kuratora", - "menu.section.toggle.edit": "Przełącz sekcję Edytuj", - "menu.section.toggle.export": "Przełącz sekcję Eksport", - "menu.section.toggle.find": "Przełącz sekcję Wyszukiwanie", - "menu.section.toggle.import": "Przełącz sekcję Import", - "menu.section.toggle.new": "Przełącz nową sekcję", - "menu.section.toggle.registries": "Przełącz sekcję Rejestry", - "menu.section.toggle.statistics_task": "Przełącz sekcję Zadanie statystyczne", - "menu.section.workflow": "Zarządzaj Workflow", - "mydspace.breadcrumbs": "Mój DSpace", - "mydspace.description": "", - "mydspace.messages.controller-help": "Wybierz tę opcję, aby przesłać wiadomość do zgłaszającego.", - "mydspace.messages.description-placeholder": "Wpisz swoją wiadomość tutaj...", - "mydspace.messages.hide-msg": "Ukryj wiadomość", - "mydspace.messages.mark-as-read": "Oznacz jako przeczytane", - "mydspace.messages.mark-as-unread": "Oznacz jako nieprzeczytane", - "mydspace.messages.no-content": "Brak treści.", - "mydspace.messages.no-messages": "Brak wiadomości.", - "mydspace.messages.send-btn": "Wysłano", - "mydspace.messages.show-msg": "Pokaż wiadomość", - "mydspace.messages.subject-placeholder": "Temat...", - "mydspace.messages.submitter-help": "Wybierz tę opcję, aby przesłać wiadomość do osoby kontrolującej.", - "mydspace.messages.title": "Wiadomości", - "mydspace.messages.to": "Do", - "mydspace.new-submission": "Nowe zgłoszenie", - "mydspace.new-submission-external": "Import medatanych z zewnętrznego źródła", - "mydspace.new-submission-external-short": "Import metadanych", - "mydspace.results.head": "Twoje zadania", - "mydspace.results.no-abstract": "Brak abstraktu", - "mydspace.results.no-authors": "Brak autorów", - "mydspace.results.no-collections": "Brak kolekcji", - "mydspace.results.no-date": "Brak daty", - "mydspace.results.no-files": "Brak plików", - "mydspace.results.no-results": "Brak pozycji do wyświetlenia", - "mydspace.results.no-title": "Brak tytułu", - "mydspace.results.no-uri": "Brak Uri", - "mydspace.search-form.placeholder": "Wyszukaj w mydspace...", - "mydspace.show.workflow": "Wszystkie zadania", - "mydspace.show.workspace": "Twoje zadania", - "mydspace.status.mydspaceArchived": "Zarchiwizowano", - "mydspace.status.mydspaceValidation": "Walidacja", - "mydspace.status.mydspaceWaitingController": "Oczekiwanie na redaktora", - "mydspace.status.mydspaceWorkflow": "Workflow", - "mydspace.status.mydspaceWorkspace": "Wersja robocza", - "mydspace.title": "Mój DSpace", - "mydspace.upload.upload-failed": "Bład podczas tworzenia nowej wersji roboczej. Sprawdź poprawność plików i spróbuj ponownie.", - "mydspace.upload.upload-failed-manyentries": "Plik jest niemożliwy do przetworzenia. Wykryto wiele wejść, a dopuszczalne jest tylko jedno dla jednego pliku.", - "mydspace.upload.upload-failed-moreonefile": "Zapytanie niemożliwe do przetworzenia. Tylko jeden plik jest dopuszczalny.", - "mydspace.upload.upload-multiple-successful": "Utworzono {{qty}} przestrzeni roboczych.", - "mydspace.view-btn": "Widok", - "nav.browse.header": "Cały DSpace", - "nav.community-browse.header": "Wg zbiorów", - "nav.language": "Zmień język", - "nav.login": "Zaloguj", - "nav.logout": "Menu profilu użytkownika i wylogowywanie", - "nav.main.description": "Główny pasek nawigacji", - "nav.mydspace": "Mój DSpace", - "nav.profile": "Profil", - "nav.search": "Wyszukiwanie", - "nav.statistics.header": "Statystyki", - "nav.stop-impersonating": "Przestań impersonifikować użytkownika", - "nav.toggle": "Przełącz nawigację", - "nav.user.description": "Pasek profilu użytkownika", - "none.listelement.badge": "Pozycja", - "person.listelement.badge": "Osoba", - "person.listelement.no-title": "Nie znaleziono imienia", - "person.page.birthdate": "Data urodzenia", - "person.page.edit": "Edytuj pozycję", - "person.page.email": "Adres e-mail", - "person.page.firstname": "Imię", - "person.page.jobtitle": "Stanowisko", - "person.page.lastname": "Nazwisko", - "person.page.link.full": "Pokaż wszystkie metadane", - "person.page.orcid": "ORCID", - "person.page.orcid.create": "Utwórz ORCID ID", - "person.page.orcid.granted-authorizations": "Udzielone dostępy", - "person.page.orcid.grant-authorizations": "Udziel dostępu", - "person.page.orcid.link": "Połącz z ORCID ID", - "person.page.orcid.orcid-not-linked-message": "ORCID iD tego profilu ({{ orcid }}) nie jest połączony z bazą ORCID lub połączenie wygasło.", - "person.page.orcid.unlink": "Odepnij z ORCID", - "person.page.orcid.unlink.processing": "Procesowanie...", - "person.page.orcid.missing-authorizations": "Brak dostępów", - "person.page.orcid.missing-authorizations-message": "Brakuj następujących dostępów:", - "person.page.orcid.no-missing-authorizations-message": "Świetnie! To miejsce jest puste, co oznacza, że masz dostęp do wszystkich uprawnień, które są dostępne w Twojej instytucji.", - "person.page.orcid.no-orcid-message": "Brak przypisanego ORCID iD. Poprez wybranie przycisku poniżej możesz powiązać ten profil wraz z kontem ORCID.", - "person.page.orcid.profile-preferences": "Preferencje profilu", - "person.page.orcid.funding-preferences": "Preferencje finansowania", - "person.page.orcid.publications-preferences": "Preferencje publikacji", - "person.page.orcid.remove-orcid-message": "Jeśli chcesz usunąć Twój ORCID, skontaktuj się z administratorem repozytorium", - "person.page.orcid.save.preference.changes": "Aktualizuj ustawienia", - "person.page.orcid.sync-profile.affiliation": "Afiliacja", - "person.page.orcid.sync-profile.biographical": "Biografia", - "person.page.orcid.sync-profile.education": "Edukacja", - "person.page.orcid.sync-profile.identifiers": "Identyfikatory", - "person.page.orcid.sync-fundings.all": "Wszystkie źrodła finansowania", - "person.page.orcid.sync-fundings.mine": "Moje źrodła finansowania", - "person.page.orcid.sync-fundings.my_selected": "Wybrane źródła finansowania", - "person.page.orcid.sync-fundings.disabled": "Nieaktywne", - "person.page.orcid.sync-publications.all": "Wszystkie publikacje", - "person.page.orcid.sync-publications.mine": "Moje publikacje", - "person.page.orcid.sync-publications.my_selected": "Wybrane publikacje", - "person.page.orcid.sync-publications.disabled": "Nieaktywne", - "person.page.orcid.sync-queue.discard": "Odrzuć zmianę i nie synchronizuj z ORCID", - "person.page.orcid.sync-queue.discard.error": "Rekord kolejki ORCID nie został odrzucony", - "person.page.orcid.sync-queue.discard.success": "Rekord kolejki ORCID został odrzucony", - "person.page.orcid.sync-queue.empty-message": "Rejestr kolejki w ORCID jest pusty", - "person.page.orcid.sync-queue.description.affiliation": "Afiliacje", - "person.page.orcid.sync-queue.description.country": "Kraj", - "person.page.orcid.sync-queue.description.education": "Edukacja", - "person.page.orcid.sync-queue.description.external_ids": "Zewnętrzne identyfikatory", - "person.page.orcid.sync-queue.description.other_names": "Inne imiona", - "person.page.orcid.sync-queue.description.qualification": "Kwalifikacje", - "person.page.orcid.sync-queue.description.researcher_urls": "URL naukowca", - "person.page.orcid.sync-queue.description.keywords": "Słowa kluczowe", - "person.page.orcid.sync-queue.tooltip.insert": "Dodaj nowy wpis w rejestrze ORCID", - "person.page.orcid.sync-queue.tooltip.update": "Aktualizuj ten wpis w rejestrze ORCID", - "person.page.orcid.sync-queue.tooltip.delete": "Usuń ten wpis z rejestru ORCID", - "person.page.orcid.sync-queue.tooltip.publication": "Publikacja", - "person.page.orcid.sync-queue.tooltip.affiliation": "Afiliacja", - "person.page.orcid.sync-queue.tooltip.education": "Edukacja", - "person.page.orcid.sync-queue.tooltip.qualification": "Kwalifikacje", - "person.page.orcid.sync-queue.tooltip.other_names": "Inna nazwa", - "person.page.orcid.sync-queue.tooltip.country": "Kraj", - "person.page.orcid.sync-queue.tooltip.keywords": "Słowa kluczowe", - "person.page.orcid.sync-queue.tooltip.external_ids": "Zewnętrzny identyfikator", - "person.page.orcid.sync-queue.tooltip.researcher_urls": "URL naukowca", - "person.page.orcid.sync-queue.send": "Synchronizuj z rejestrem ORCID", - "person.page.orcid.sync-queue.send.unauthorized-error.title": "Wysłanie zgłoszenia do ORCID nieudane z powodu braku uprawnień.", - "person.page.orcid.sync-queue.send.unauthorized-error.content": "Wybierz here, aby wystąpić o niezbędne uprawnienia. Jeśli problem wciąż występuje, skontaktuj się z administratorem", - "person.page.orcid.sync-queue.send.bad-request-error": "Wysłanie zgłoszenia do ORCID nie powiodło się ponieważ źródła wysłane do rejestru ORCID nie jest poprawne", - "person.page.orcid.sync-queue.send.error": "Wysłanie zgłoszenia do ORCID nie powiodło się", - "person.page.orcid.sync-queue.send.conflict-error": "Zgłoszenie do ORCID nie powiodło się, ponieważ ta pozycja jest już dodana do rejestru ORCID", - "person.page.orcid.sync-queue.send.not-found-warning": "Pozycja nie istnieje już w rejestrze ORCID.", - "person.page.orcid.sync-queue.send.success": "Zgłoszenie do ORCID zostało zakończone pomyślnie", - "person.page.orcid.sync-queue.send.validation-error": "Dane, które chcesz zsynchronizować z ORCID nie są poprawne", - "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "Waluta jest wymagana", - "person.page.orcid.sync-queue.send.validation-error.external-id.required": "Aby wysłać pozycję, należy podać przynajmniej jeden identyfikator", - "person.page.orcid.sync-queue.send.validation-error.title.required": "Tytuł jest wymagany", - "person.page.orcid.sync-queue.send.validation-error.type.required": "Typ jest wymagany", - "person.page.orcid.sync-queue.send.validation-error.start-date.required": "Data początkowa jest wymagana", - "person.page.orcid.sync-queue.send.validation-error.funder.required": "Instytucja finansująca jest wymagana", - "person.page.orcid.sync-queue.send.validation-error.organization.required": "Instytucja jest wymagana", - "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "Nazwa instytucji jest wymagana", - "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "Aby wysłać instytucję, należy podać adres", - "person.page.orcid.sync-queue.send.validation-error.organization.city-required": "Aby wysłać adres, należy podać miasto", - "person.page.orcid.sync-queue.send.validation-error.organization.country-required": "Aby wysłać adres, należy podać kraj", - "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.required": "Wymagany jest identyfikator umożliwiający rozróżnienie instytucji. Obsługiwane identyfikatory to GRID, Ringgold, kod LEI oraz identyfikatory z rejestru instytucji finansujących Crossref.", - "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.value-required": "Należy uzupełnić wartość w identyfikatorze instytucji", - "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "Należy uzupełnić źródło w identyfikatorze instytucji", - "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "Źródło jednego z identyfikatorów organizcji jest niepoprawne. Wspierane źródła to RINGGOLD, GRID, LEI and FUNDREF", - "person.page.orcid.synchronization-mode": "Tryb synchronizacji", - "person.page.orcid.synchronization-mode.batch": "Wsad", - "person.page.orcid.synchronization-mode.label": "Tryb synchronizacji", - "person.page.orcid.synchronization-mode-message": "Włącz tryb 'Manual' synchronizacja, aby wyłaczyć tryb synchronizacji wsadowej, wtedy dane do rejestru ORCID będą musiały zostać wysłane ręcznie", - "person.page.orcid.synchronization-settings-update.success": "Opcje synchronizacji zostały zaktualizowane", - "person.page.orcid.synchronization-settings-update.error": "Opcje synchronizacji nie zostały zaktualizowane", - "person.page.orcid.synchronization-mode.manual": "Ręczna", - "person.page.orcid.scope.authenticate": "Uzyskaj swój ORCID iD", - "person.page.orcid.scope.read-limited": "Przeczytaj informacje o ustawieniach widoczności z firmami trzeciami", - "person.page.orcid.scope.activities-update": "Dodaj/aktualizuj swoje aktywności naukowe", - "person.page.orcid.scope.person-update": "Dodaj/aktualizuj inne informacje o Tobie", - "person.page.orcid.unlink.success": "Odłączenie Twojego profilu od rejestru ORCID powiodło się", - "person.page.orcid.unlink.error": "Wystąpił błąd podczas odłączania Twojego profilu od rejestru ORCID. Spróbuj ponownie", - "person.page.staffid": "ID pracownika", - "person.page.titleprefix": "Osoba: ", - "person.search.results.head": "Wyniki wyszukiwania użytkowników", - "person.search.title": "Wyniki wyszukiwania użytkowników", - "process.new.select-parameters": "Parametry", - "process.new.cancel": "Anuluj", - "process.new.submit": "Zapisz", - "process.new.select-script": "Skrypt", - "process.new.select-script.placeholder": "Wybierz skrypt...", - "process.new.select-script.required": "Skrypt jest wymagany", - "process.new.parameter.file.upload-button": "Wybierz plik...", - "process.new.parameter.file.required": "Proszę wybrać plik", - "process.new.parameter.string.required": "Wartość parametru jest wymagana", - "process.new.parameter.type.value": "wartość", - "process.new.parameter.type.file": "plik", - "process.new.parameter.required.missing": "Te parametry są wymagane, ale nie zostały uzupełnione:", - "process.new.notification.success.title": "Udało się", - "process.new.notification.success.content": "Udało się stworzyć proces", - "process.new.notification.error.title": "Błąd", - "process.new.notification.error.content": "Wystąpił błąd podczas tworzenia procesu", - "process.new.header": "Utwórz nowy proces", - "process.new.title": "Utwórz nowy proces", - "process.new.breadcrumbs": "Utwórz nowy proces", - "process.detail.arguments": "Argumenty", - "process.detail.arguments.empty": "Do tego procesu nie zostały przypisane żadne argumenty", - "process.detail.back": "Cofnij", - "process.detail.output": "Dane wyjściowe procesu", - "process.detail.logs.button": "Odzyskaj dane wyjściowe procesu", - "process.detail.logs.loading": "Odzyskiwanie", - "process.detail.logs.none": "Ten proces nie ma danych wyjściowych", - "process.detail.output-files": "Pliki", - "process.detail.output-files.empty": "Ten proces nie ma żadnych plików danych wyjściowych", - "process.detail.script": "Skrypt", - "process.detail.title": "Proces: {{ id }} - {{ name }}", - "process.detail.start-time": "Czas rozpoczęcia procesu", - "process.detail.end-time": "Czas zakończenia procesu", - "process.detail.status": "Status", - "process.detail.create": "Stwórz podobny proces", - "process.overview.table.finish": "Czas zakończenia (UTC)", - "process.overview.table.id": "Identyfikator procesu", - "process.overview.table.name": "Nazwa", - "process.overview.table.start": "Czas rozpoczęcia (UTC)", - "process.overview.table.status": "Status", - "process.overview.table.user": "Użytkownik", - "process.overview.title": "Przegląd procesów", - "process.overview.breadcrumbs": "Przegląd procesów", - "process.overview.new": "Nowy", - "profile.breadcrumbs": "Zaktualizuj profil", - "profile.card.identify": "Dane", - "profile.card.security": "Bezpieczeństwo", - "profile.form.submit": "Zaktualizuj profil", - "profile.groups.head": "Posiadane uprawnienia do kolekcji", - "profile.head": "Zaktualizuj profil", - "profile.metadata.form.error.firstname.required": "Imię jest wymagane", - "profile.metadata.form.error.lastname.required": "Nazwisko jest wymagane", - "profile.metadata.form.label.email": "Adres e-mail", - "profile.metadata.form.label.firstname": "Imię", - "profile.metadata.form.label.language": "Język", - "profile.metadata.form.label.lastname": "Nazwisko", - "profile.metadata.form.label.phone": "Telefon kontaktowy", - "profile.metadata.form.notifications.success.content": "Zmiany w profilu zostały zapisane.", - "profile.metadata.form.notifications.success.title": "Profil zapisany", - "profile.notifications.warning.no-changes.content": "Nie dokonano żadnych zmian w profilu.", - "profile.notifications.warning.no-changes.title": "Brak zmian", - "profile.security.form.error.matching-passwords": "Hasła nie są identyczne.", - "profile.security.form.info": "Możesz wprowadzić nowe hasło w polu poniżej i zatwierdzić poprzez ponowne wpisanie. Hasło musi mieć przynajmniej 6 znaków.", - "profile.security.form.label.password": "Hasło", - "profile.security.form.label.passwordrepeat": "Potwierdź hasło", - "profile.security.form.notifications.success.content": "Twoje zmiany w haśle zostały zapisane.", - "profile.security.form.notifications.success.title": "Hasło zapisane", - "profile.security.form.notifications.error.title": "Błąd podczas próby zmiany hasła", - "profile.security.form.notifications.error.not-same": "Hasła nie są identyczne.", - "profile.title": "Zaktualizuj profil", - "profile.card.researcher": "Profil naukowca", - "project.listelement.badge": "Projekt badawczy", - "project.page.contributor": "Autorzy", - "project.page.description": "Opis", - "project.page.edit": "Edytuj pozycję", - "project.page.expectedcompletion": "Spodziewany termin zakończenia", - "project.page.funder": "Instytucje finansujące", - "project.page.id": "ID", - "project.page.keyword": "Słowa kluczowe", - "project.page.status": "Status", - "project.page.titleprefix": "Projekt badawczy: ", - "project.search.results.head": "Wyniki wyszukiwania projektów", - "publication.listelement.badge": "Publikacja", - "publication.page.description": "Opis", - "publication.page.edit": "Edytuj pozycję", - "publication.page.journal-issn": "ISSN czasopisma", - "publication.page.journal-title": "Tytuł czasopisma", - "publication.page.publisher": "Wydawca", - "publication.page.titleprefix": "Publikacja: ", - "publication.page.volume-title": "Tytuł tomu", - "publication.search.results.head": "Wyniki wyszukiwania publikacji", - "publication.search.title": "Wyszukiwanie publikacji", - "media-viewer.next": "Nowy", - "media-viewer.previous": "Poprzedni", - "media-viewer.playlist": "Playlista", - "register-email.title": "Rejestracja nowego użytkownika", - "register-page.create-profile.header": "Stwórz profil", - "register-page.create-profile.identification.header": "Dane", - "register-page.create-profile.identification.email": "Adres e-mail", - "register-page.create-profile.identification.first-name": "Imię *", - "register-page.create-profile.identification.first-name.error": "Wpisz imię", - "register-page.create-profile.identification.last-name": "Nazwisko *", - "register-page.create-profile.identification.last-name.error": "Wpisz nazwisko", - "register-page.create-profile.identification.contact": "Telefon kontaktowy", - "register-page.create-profile.identification.language": "Język", - "register-page.create-profile.security.header": "Bezpieczeństwo", - "register-page.create-profile.security.info": "Wprowadź nowe hasło w polu poniżej i zatwierdź poprzez ponowne wpisanie w drugim polu. Hasło musi mieć przynajmniej 6 znaków.", - "register-page.create-profile.security.label.password": "Hasło *", - "register-page.create-profile.security.label.passwordrepeat": "Potwierdź hasło *", - "register-page.create-profile.security.error.empty-password": "Wprowadź hasło w polu poniżej.", - "register-page.create-profile.security.error.matching-passwords": "Hasła nie są identyczne.", - "register-page.create-profile.submit": "Rejestracja zakończona", - "register-page.create-profile.submit.error.content": "Coś się nie udało podczas rejestracji nowego użytkownika.", - "register-page.create-profile.submit.error.head": "Rejestracja nie powiodła się", - "register-page.create-profile.submit.success.content": "Rejestracja powiodła się. Zalogowano jako stworzony użytkownik.", - "register-page.create-profile.submit.success.head": "Rejestracja zakończona", - "register-page.registration.header": "Rejestracja nowego użytkownika", - "register-page.registration.info": "Zarejestruj się, aby otrzymywać wiadomości o nowych pozycjach w obserowanych kolekcjach, a także przesyłać nowe pozycje do repozytorium.", - "register-page.registration.email": "Adres e-mail *", - "register-page.registration.email.error.required": "Wypełnij adres e-mail", - "register-page.registration.email.error.pattern": "Wypełnij poprawny adres e-mail", - "register-page.registration.email.hint": "Ten adres e-mail będzie zweryfikowany i będziesz go używać jako swój login.", - "register-page.registration.submit": "Zarejestruj się", - "register-page.registration.success.head": "Wiadomość weryfikacyjna zostałą wysłana", - "register-page.registration.success.content": "Wiadomość została wysłana na adres e-mail {{ email }}. Zawiera ona unikatowy link i dalsze instrukcje postępowania.", - "register-page.registration.error.head": "Błąd podczas próby rejestracji adresu e-mail", - "register-page.registration.error.content": "Błąd podczas próby rejestracji adresu e-mail: {{ email }}", - "relationships.add.error.relationship-type.content": "Nie znaleziono dopasowania dla typu relacji {{ type }} pomiędzy dwoma pozycjami", - "relationships.add.error.server.content": "Błąd serwera", - "relationships.add.error.title": "Nie można dodać relacji", - "relationships.isAuthorOf": "Autorzy", - "relationships.isAuthorOf.Person": "Autorzy (osoby)", - "relationships.isAuthorOf.OrgUnit": "Autorzy (jednostki organizacyjne)", - "relationships.isIssueOf": "Numery czasopisma", - "relationships.isJournalIssueOf": "Numer czasopisma", - "relationships.isJournalOf": "Czasopisma", - "relationships.isOrgUnitOf": "Jednostki organizacyjne", - "relationships.isPersonOf": "Autorzy", - "relationships.isProjectOf": "Projekty badawcze", - "relationships.isPublicationOf": "Publikacje", - "relationships.isPublicationOfJournalIssue": "Artykuły", - "relationships.isSingleJournalOf": "Czasopismo", - "relationships.isSingleVolumeOf": "Tom czasopisma", - "relationships.isVolumeOf": "Tomy czasopisma", - "relationships.isContributorOf": "Autorzy", - "relationships.isContributorOf.OrgUnit": "Autor (Jednostka organizacyjna)", - "relationships.isContributorOf.Person": "Autor", - "relationships.isFundingAgencyOf.OrgUnit": "Instytucja finansująca", - "repository.image.logo": "Logo repozytorium", - "repository.title.prefix": "DSpace Angular :: ", - "researcher.profile.action.processing": "Procesowanie...", - "researcher.profile.associated": "Przypisanie profilu badacza", - "researcher.profile.create.new": "Utwórz nowy", - "researcher.profile.create.success": "Profil badacza został utworzony", - "researcher.profile.create.fail": "Wystąpił błąd poczas tworzenia profilu badacza.", - "researcher.profile.delete": "Usuń", - "researcher.profile.expose": "Ujawnij", - "researcher.profile.hide": "Ukryj", - "researcher.profile.not.associated": "Profil badacza nie został jeszcze przypisany", - "researcher.profile.view": "Widok", - "researcher.profile.private.visibility": "PRYWATNY", - "researcher.profile.public.visibility": "PUBLICZNY", - "researcher.profile.status": "Status:", - "researcherprofile.claim.not-authorized": "Nie masz uprawnień, aby wystąpić o tę pozycję. Aby otrzymać więcej szczegółów, skontaktuj się z administratorami.", - "researcherprofile.error.claim.body": "Wystąpił błąd podczas wystąpienia z prośbą o przypisanie profilu. Spróbuj ponownie później.", - "researcherprofile.error.claim.title": "Błąd", - "researcherprofile.success.claim.body": "Wystąpienie z prośbą o przypisanie profilu udane", - "researcherprofile.success.claim.title": "Sukces", - "repository.title.prefixDSpace": "DSpace Angular ::", - "resource-policies.add.button": "Dodaj", - "resource-policies.add.for.": "Dodaj nową politykę", - "resource-policies.add.for.bitstream": "Dodaj nową politykę dla plików", - "resource-policies.add.for.bundle": "Dodaj nową politykę paczek", - "resource-policies.add.for.item": "Dodaj nową politykę pozycji", - "resource-policies.add.for.community": "Dodaj nową politykę zbioru", - "resource-policies.add.for.collection": "Dodaj nową politykę kolekcji", - "resource-policies.create.page.heading": "Utwórz nową politykę zasobu dla ", - "resource-policies.create.page.failure.content": "Wystąpił błąd podczas dodawania polityki zasobów.", - "resource-policies.create.page.success.content": "Działanie powiodło się", - "resource-policies.create.page.title": "Utwórz nową politykę zasobu", - "resource-policies.delete.btn": "Usuń zaznaczone", - "resource-policies.delete.btn.title": "Usuń zaznaczone polityki zasobów", - "resource-policies.delete.failure.content": "Wystąpił błąd podczas usuwania wybranych polityk zasobów.", - "resource-policies.delete.success.content": "Działanie powiodło się", - "resource-policies.edit.page.heading": "Edytuj politykę zasobu ", - "resource-policies.edit.page.failure.content": "Wystąpił błąd poczas edytowania polityki zasobu.", - "resource-policies.edit.page.success.content": "Działanie udało się", - "resource-policies.edit.page.title": "Edytuj politykę zasobu", - "resource-policies.form.action-type.label": "Wybierz ten typ akcji", - "resource-policies.form.action-type.required": "Musisz wybrać akcję polityki zasobu.", - "resource-policies.form.eperson-group-list.label": "Użytkownik lub grupa, która otrzyma uprawnienia.", - "resource-policies.form.eperson-group-list.select.btn": "Wybierz", - "resource-policies.form.eperson-group-list.tab.eperson": "Wyszukaj użytkownika", - "resource-policies.form.eperson-group-list.tab.group": "Wyszukaj grupę", - "resource-policies.form.eperson-group-list.table.headers.action": "Akcja", - "resource-policies.form.eperson-group-list.table.headers.id": "ID", - "resource-policies.form.eperson-group-list.table.headers.name": "Nazwa", - "resource-policies.form.date.end.label": "Data zakończenia", - "resource-policies.form.date.start.label": "Data rozpoczęcia", - "resource-policies.form.description.label": "Opis", - "resource-policies.form.name.label": "Nazwa", - "resource-policies.form.policy-type.label": "Wybierz typ polityki", - "resource-policies.form.policy-type.required": "Musisz wybrać typ polityki zasobu.", - "resource-policies.table.headers.action": "Akcja", - "resource-policies.table.headers.date.end": "Data zakończenia", - "resource-policies.table.headers.date.start": "Data rozpoczęcia", - "resource-policies.table.headers.edit": "Edytuj", - "resource-policies.table.headers.edit.group": "Edytuj grupę", - "resource-policies.table.headers.edit.policy": "Edytuj politykę", - "resource-policies.table.headers.eperson": "Użytkownik", - "resource-policies.table.headers.group": "Grupa", - "resource-policies.table.headers.id": "ID", - "resource-policies.table.headers.name": "Nazwa", - "resource-policies.table.headers.policyType": "typ", - "resource-policies.table.headers.title.for.bitstream": "Polityki dla plików", - "resource-policies.table.headers.title.for.bundle": "Polityki dla paczek", - "resource-policies.table.headers.title.for.item": "Polityki dla pozycji", - "resource-policies.table.headers.title.for.community": "Polityki dla zbioru", - "resource-policies.table.headers.title.for.collection": "Polityki dla kolekcji", - "search.description": "", - "search.switch-configuration.title": "Pokaż", - "search.title": "Szukaj", - "search.breadcrumbs": "Szukaj", - "search.search-form.placeholder": "Szukaj w repozytorium...", - "search.filters.applied.f.author": "Autor", - "search.filters.applied.f.dateIssued.max": "Data zakończenia", - "search.filters.applied.f.dateIssued.min": "Data rozpoczęcia", - "search.filters.applied.f.dateSubmitted": "Data zgłoszenia", - "search.filters.applied.f.discoverable": "Ukryty", - "search.filters.applied.f.entityType": "Typ pozycji", - "search.filters.applied.f.has_content_in_original_bundle": "Ma przypisane pliki", - "search.filters.applied.f.itemtype": "Typ", - "search.filters.applied.f.namedresourcetype": "Status", - "search.filters.applied.f.subject": "Temat", - "search.filters.applied.f.submitter": "Zgłaszający", - "search.filters.applied.f.jobTitle": "Stanowisko", - "search.filters.applied.f.birthDate.max": "Data zakończenia tworzenia", - "search.filters.applied.f.birthDate.min": "Data rozpoczęcia tworzenia", - "search.filters.applied.f.withdrawn": "Wycofane", - "search.filters.filter.author.head": "Autor", - "search.filters.filter.author.placeholder": "Autor", - "search.filters.filter.author.label": "Wyszukaj autora", - "search.filters.filter.birthDate.head": "Data urodzenia", - "search.filters.filter.birthDate.placeholder": "Data urodzenia", - "search.filters.filter.birthDate.label": "Wyszukaj datę urodzenia", - "search.filters.filter.collapse": "Ukryj filtr", - "search.filters.filter.creativeDatePublished.head": "Data opublikowania", - "search.filters.filter.creativeDatePublished.placeholder": "Data opublikowania", - "search.filters.filter.creativeDatePublished.label": "Wyszukaj datę opublikowania", - "search.filters.filter.creativeWorkEditor.head": "Redaktor", - "search.filters.filter.creativeWorkEditor.placeholder": "Redaktor", - "search.filters.filter.creativeWorkEditor.label": "Wyszukaj redaktora", - "search.filters.filter.creativeWorkKeywords.head": "Słowo kluczowe", - "search.filters.filter.creativeWorkKeywords.placeholder": "Słowo kluczowe", - "search.filters.filter.creativeWorkKeywords.label": "Wyszukaj temat", - "search.filters.filter.creativeWorkPublisher.head": "Wydawca", - "search.filters.filter.creativeWorkPublisher.placeholder": "Wydawca", - "search.filters.filter.creativeWorkPublisher.label": "Wyszukaj wydawcę", - "search.filters.filter.dateIssued.head": "Data", - "search.filters.filter.dateIssued.max.placeholder": "Data maksymalna", - "search.filters.filter.dateIssued.max.label": "Koniec", - "search.filters.filter.dateIssued.min.placeholder": "Data minimalna", - "search.filters.filter.dateIssued.min.label": "Start", - "search.filters.filter.dateSubmitted.head": "Data zgłoszenia", - "search.filters.filter.dateSubmitted.placeholder": "Data zgłoszenia", - "search.filters.filter.dateSubmitted.label": "Wyszukaj datę zgłoszenia", - "search.filters.filter.discoverable.head": "Ukryty", - "search.filters.filter.withdrawn.head": "Wycofane", - "search.filters.filter.entityType.head": "Typ pozycji", - "search.filters.filter.entityType.placeholder": "Typ pozycji", - "search.filters.filter.entityType.label": "Wyszukaj typ pozycji", - "search.filters.filter.expand": "Rozwiń filtr", - "search.filters.filter.has_content_in_original_bundle.head": "Ma przypisane pliki", - "search.filters.filter.itemtype.head": "Typ", - "search.filters.filter.itemtype.placeholder": "Typ", - "search.filters.filter.itemtype.label": "Wyszukaj typ", - "search.filters.filter.jobTitle.head": "Stanowisko", - "search.filters.filter.jobTitle.placeholder": "Stanowisko", - "search.filters.filter.jobTitle.label": "Wyszukaj stanowisko", - "search.filters.filter.knowsLanguage.head": "Znajomość języka", - "search.filters.filter.knowsLanguage.placeholder": "Znajomość języka", - "search.filters.filter.knowsLanguage.label": "Wyszukaj wg znajomości języka", - "search.filters.filter.namedresourcetype.head": "Status", - "search.filters.filter.namedresourcetype.placeholder": "Status", - "search.filters.filter.namedresourcetype.label": "Wyszukaj status", - "search.filters.filter.objectpeople.head": "Osoby", - "search.filters.filter.objectpeople.placeholder": "Osoby", - "search.filters.filter.objectpeople.label": "Wyszukaj użytkowników", - "search.filters.filter.organizationAddressCountry.head": "Kraj", - "search.filters.filter.organizationAddressCountry.placeholder": "Kraj", - "search.filters.filter.organizationAddressCountry.label": "Wyszukaj kraj", - "search.filters.filter.organizationAddressLocality.head": "Miasto", - "search.filters.filter.organizationAddressLocality.placeholder": "Miasto", - "search.filters.filter.organizationAddressLocality.label": "Wyszukaj miasto", - "search.filters.filter.organizationFoundingDate.head": "Data założenia", - "search.filters.filter.organizationFoundingDate.placeholder": "Data założenia", - "search.filters.filter.organizationFoundingDate.label": "Wyszukaj datę założenia", - "search.filters.filter.scope.head": "Zakres", - "search.filters.filter.scope.placeholder": "Filtr zakresu", - "search.filters.filter.scope.label": "Wyszukaj filtr zakresu", - "search.filters.filter.show-less": "Pokaż mniej", - "search.filters.filter.show-more": "Pokaż więcej", - "search.filters.filter.subject.head": "Temat", - "search.filters.filter.subject.placeholder": "Temat", - "search.filters.filter.subject.label": "Wyszukaj temat", - "search.filters.filter.submitter.head": "Zgłaszający", - "search.filters.filter.submitter.placeholder": "Zgłaszający", - "search.filters.filter.submitter.label": "Wyszukaj zgłaszającego", - "search.filters.entityType.JournalIssue": "Numer czasopisma", - "search.filters.entityType.JournalVolume": "Tom czasopisma", - "search.filters.entityType.OrgUnit": "Jednostka organizacyjna", - "search.filters.has_content_in_original_bundle.true": "Tak", - "search.filters.has_content_in_original_bundle.false": "Nie", - "search.filters.discoverable.true": "Nie", - "search.filters.discoverable.false": "Tak", - "search.filters.withdrawn.true": "Tak", - "search.filters.withdrawn.false": "Nie", - "search.filters.head": "Filtry", - "search.filters.reset": "Resetuj filtry", - "search.filters.search.submit": "Zastosuj", - "search.form.search": "Wyszukaj", - "search.form.search_dspace": "W repozytorium", - "search.form.scope.all": "W całym DSpace", - "search.results.head": "Wyniki wyszukiwania", - "default.search.results.head": "Wyniki wyszukiwania", - "search.results.no-results": "Twoj wyszukiwanie nie zwróciło żadnych rezultatów. Masz problem ze znalezieniem tego czego szukasz? Spróbuj użyć", - "search.results.no-results-link": "fraz podobnych do Twojego wyszukiwania", - "search.results.empty": "Twoje wyszukiwanie nie zwróciło żadnych rezultatów.", - "search.sidebar.close": "Wróć do wyników wyszukiwania", - "search.sidebar.filters.title": "Filtry", - "search.sidebar.open": "Narzędzia wyszukiwania", - "search.sidebar.results": "wyniki", - "search.sidebar.settings.rpp": "Wyników na stronie", - "search.sidebar.settings.sort-by": "Sortuj według", - "search.sidebar.settings.title": "Ustawienia", - "search.view-switch.show-detail": "Wyświetl widok szczegółowy", - "search.view-switch.show-grid": "Wyświetl jako siatkę", - "search.view-switch.show-list": "Wyświetl jako listę", - "sorting.ASC": "Rosnąco", - "sorting.DESC": "Malejąco", - "sorting.dc.title.ASC": "Tytułami rosnąco", - "sorting.dc.title.DESC": "Tytułami malejąco", - "sorting.score.ASC": "Najmniej trafne", - "sorting.score.DESC": "Najbardziej trafne", - "sorting.dc.date.issued.ASC": "Data wydania rosnąco", - "sorting.dc.date.issued.DESC": "Data wydania malejąco", - "sorting.dc.date.accessioned.ASC": "Data dostępu rosnąco", - "sorting.dc.date.accessioned.DESC": "Data dostępu malejąco", - "sorting.lastModified.ASC": "Ostatnia modyfikacja rosnąco", - "sorting.lastModified.DESC": "Ostatnia modyfikacja malejąco", - "statistics.title": "Statystyki", - "statistics.header": "Statystyki dla {{ scope }}", - "statistics.breadcrumbs": "Statystyki", - "statistics.page.no-data": "Brak dostępnych danych", - "statistics.table.no-data": "Brak dostępnych danych", - "statistics.table.header.views": "Wyświetlenia", - "submission.edit.breadcrumbs": "Edytuj zgłoszenie", - "submission.edit.title": "Edytuj zgłoszenie", - "submission.general.cancel": "Anuluj", - "submission.general.cannot_submit": "Nie masz uprawnień, aby utworzyć nowe zgłoszenie.", - "submission.general.deposit": "Deponuj", - "submission.general.discard.confirm.cancel": "Anuluj", - "submission.general.discard.confirm.info": "Czy na pewno? To działanie nie może zostać cofnięte.", - "submission.general.discard.confirm.submit": "Tak, na pewno", - "submission.general.discard.confirm.title": "Odrzuć zgłoszenie", - "submission.general.discard.submit": "Odrzuć", - "submission.general.info.saved": "Zapisane", - "submission.general.info.pending-changes": "Niezapisane zmiany", - "submission.general.save": "Zapisz", - "submission.general.save-later": "Zapisz wersję roboczą", - "submission.import-external.page.title": "Importuj metdane z zewnętrznego źródła", - "submission.import-external.title": "Importuj metadane z zewnętrznego źródła", - "submission.import-external.title.Journal": "Importuj czasopismo z zewnętrznego źródła", - "submission.import-external.title.JournalIssue": "Importuj numer czasopisma z zewnętrznego źródła", - "submission.import-external.title.JournalVolume": "Importuj tom czasopisma z zewnętrznego źródła", - "submission.import-external.title.OrgUnit": "Importuj wydawcę z zewnętrznego źródła", - "submission.import-external.title.Person": "Importuj osobę z zewnętrznego źródła", - "submission.import-external.title.Project": "Importuj projekt z zewnętrznego źródła", - "submission.import-external.title.Publication": "Importuj publikację z zewnętrznego źródła", - "submission.import-external.title.none": "Importuj metadane z zewnętrznego źródła", - "submission.import-external.page.hint": "Enter a query above to find items from the web to import in to DSpace.", - "submission.import-external.back-to-my-dspace": "Powrót do MyDSpace", - "submission.import-external.search.placeholder": "Wyszukaj zewnętrzne źródła danych", - "submission.import-external.search.button": "Szukaj", - "submission.import-external.search.button.hint": "Zacznij wpisywać frazę, aby wyszukać", - "submission.import-external.search.source.hint": "Wybierz zewnętrzne źródło", - "submission.import-external.source.ads": "NASA/ADS", - "submission.import-external.source.arxiv": "arXiv", - "submission.import-external.source.cinii": "CiNii", - "submission.import-external.source.crossref": "CrossRef", - "submission.import-external.source.loading": "ładowanie...", - "submission.import-external.source.sherpaJournal": "Czasopisma w SHERPA", - "submission.import-external.source.sherpaJournalIssn": "Czasopisma w SHERPA wg ISSN", - "submission.import-external.source.sherpaPublisher": "Wydawcy w SHERPA", - "submission.import-external.source.openAIREFunding": "Finansowanie OpenAIRE API", - "submission.import-external.source.orcid": "ORCID", - "submission.import-external.source.orcidWorks": "ORCID", - "submission.import-external.source.pubmed": "Pubmed", - "submission.import-external.source.pubmedeu": "Pubmed Europe", - "submission.import-external.source.lcname": "Nazwy Biblioteki Kongresu", - "submission.import-external.source.scielo": "SciELO", - "submission.import-external.source.scopus": "Scopus", - "submission.import-external.source.vufind": "VuFind", - "submission.import-external.source.wos": "Web Of Science", - "submission.import-external.source.epo": "Europejski Urząd Patentowy (EPO)", - "submission.import-external.preview.title.Journal": "Podgląd czasopisma", - "submission.import-external.preview.title.OrgUnit": "Podgląd organizacji", - "submission.import-external.preview.title.Person": "Podgląd osoby", - "submission.import-external.preview.title.Project": "Podgląd projektu", - "submission.import-external.preview.title.Publication": "Podgląd publikacji", - "submission.import-external.preview.subtitle": "Metadane poniżej zostały zaimportowane z zewnętrznego źródła. Niektóre pola zostaną uzupełnione automatycznie, kiedy rozpoczniesz zgłaszanie pozycji.", - "submission.import-external.preview.button.import": "Rozpocznij zgłoszenie", - "submission.import-external.preview.error.import.title": "Błąd zgłoszenia", - "submission.import-external.preview.error.import.body": "Wystąpił błąd podczas procesu importowania pozycji z zewnętrznego źródła.", - "submission.sections.describe.relationship-lookup.close": "Zamknij", - "submission.sections.describe.relationship-lookup.external-source.added": "Udało się dodać wpis do selekcji", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Importuj zdalnego autora", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Importuj zdalne czasopismo", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Importuj zdalny numer czasopisma", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Importuj zdalny tom czasopisma", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Projekt", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "Nowy typ danych dodany!", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Projekt", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Finansowanie OpenAIRE API", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Importuj zdalnego autora", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Person": "Importuj zdalną osobę", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Product": "Importuj zdalny produkt", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Equipment": "Importuj zdalną aparaturę badawczą", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Event": "Importuj zdalne wydarzenie", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Funding": "Importuj zdalną instytucję finansującą", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.OrgUnit": "Importuj zdalnego wydawcę", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Patent": "Importuj zdalnie patent", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Project": "Importuj zdalnie projekt", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Importuj zdalnie publikację", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Udało się dodać autora do selekcji", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.new-entity": "Udało się zaimportować i dodać zewnętrznego autora do selekcji", - "submission.sections.describe.relationship-lookup.external-source.import-modal.authority": "Nadrzędność", - "submission.sections.describe.relationship-lookup.external-source.import-modal.authority.new": "Importuj jako nową, lokalną, nadrzędną pozycję", - "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel": "Anuluj", - "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Wybierz kolekcję do zaimportowania nowych pozycji", - "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Typ danych", - "submission.sections.describe.relationship-lookup.external-source.import-modal.entities.new": "Importuj jako nowy lokalny typ danych", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "Importuj z LC Name", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "Importuj z ORCID", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "Importuj z Sherpa Journal", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "Importuj z Sherpa Publisher", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "Importuj z PubMed", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "Importuj z arXiv", - "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Import", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Importuj zdalne czasopismo", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Successfully added local journal to the selection", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Successfully imported and added external journal to the selection", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title": "Importuj zdalny numer czasopisma", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Udało się dodać lokalne czasopismo do zaznaczenia", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity": "Udało się zaimportować i dodać czasopismo zewnętrzne do zaznaczenia", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.title": "Importuj zdalny numer czasopisma", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Udało się dodać lokalny numer czasopismo do zaznaczenia", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Udało się zaimportować i dodać zewnętrzny numer czasopisma do zaznaczenia", - "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Wybierz lokalne powiązanie:", - "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Odznacz wszystko", - "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Odznacz stronę", - "submission.sections.describe.relationship-lookup.search-tab.loading": "Ładowanie...", - "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Wyszukaj zapytanie", - "submission.sections.describe.relationship-lookup.search-tab.search": "Zastosuj", - "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Wyszukaj...", - "submission.sections.describe.relationship-lookup.search-tab.select-all": "Zaznacz wszystko", - "submission.sections.describe.relationship-lookup.search-tab.select-page": "Zaznacz stronę", - "submission.sections.describe.relationship-lookup.selected": "Zaznacz {{ size }} pozycji", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Autorzy lokalni ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Czasopisma lokalne ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Projekty lokalne ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Publikacje lokalne ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Autorzy lokalni ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Lokalne jednostki organizacyjne ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Lokalne paczki danych ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Lokalne pliki danych ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Lokalne czasopisma ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Lokalne numery czasopism ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Lokalne numery czasopism ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Lokalne tomy czasopism ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Lokalne tomy czasopism ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Sherpa Journals ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaPublisher": "Sherpa Publishers ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid": "ORCID ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "LC Names ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.arxiv": "arXiv ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Wyszukaj instytucje finansujące", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Wyszukaj finansowanie", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Wyszukaj jednostki organizacyjne", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Finansowanie OpenAIRE API", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projekty", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Instytucja finansująca projekt", - "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Finansowanie OpenAIRE API", - "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Projekt", - "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projekty", - "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Instytucja finansująca projekt", - "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Wyszukaj...", - "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Aktualne zaznaczenie ({{ count }})", - "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Numery czasopisma", - "submission.sections.describe.relationship-lookup.title.JournalIssue": "Numery czasopisma", - "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Tomy czasopisma", - "submission.sections.describe.relationship-lookup.title.JournalVolume": "Tomy czasopisma", - "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Czasopisma", - "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication": "Autorzy", - "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Instytucja finansująca", - "submission.sections.describe.relationship-lookup.title.Project": "Projekty", - "submission.sections.describe.relationship-lookup.title.Publication": "Publikacje", - "submission.sections.describe.relationship-lookup.title.Person": "Autorzy", - "submission.sections.describe.relationship-lookup.title.OrgUnit": "Jednostki organizacyjne", - "submission.sections.describe.relationship-lookup.title.DataPackage": "Paczki danych", - "submission.sections.describe.relationship-lookup.title.DataFile": "Pliki danych", - "submission.sections.describe.relationship-lookup.title.Funding Agency": "Instytucja finansująca", - "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Finansowanie", - "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Nadrzędna jednostka organizacyjna", - "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Przełącz na listę rozwijaną", - "submission.sections.describe.relationship-lookup.selection-tab.settings": "Ustawienia", - "submission.sections.describe.relationship-lookup.selection-tab.no-selection": "Twoje zaznaczenie jest puste.", - "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Wybrani autorzy", - "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Wybrane czasopisma", - "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Wybrane tomy czasopisma", - "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Wybrane projekty", - "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Wybrane publikacje", - "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Wybrani autorzy", - "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Wybrane jednostki organizacyjne", - "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Wybrane pakiety danych", - "submission.sections.describe.relationship-lookup.selection-tab.title.DataFile": "Wybrane pliki danych", - "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Wybrane czasopisma", - "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Wybrany numer wydania", - "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Wybrany tom czasopisma", - "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Wybrane instytucje finansujące", - "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Wybrane finansowanie", - "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Wybrany numer wydania", - "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Wybrana jednostka organizacyjna", - "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.epo": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.scopus": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.scielo": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Czy chcesz zapisać \"{{ value }}\" jako wariant imienia dla tego użytkownika, aby Ty lub inni użytkownicy mogli używać tego wariantu w przyszłych zgłoszeniach?. Jeśli nie, nadal możesz użyć tego wariantu w tym zgłoszeniu.", - "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Zapisz nowy wariant imienia", - "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Użyj tylko w tym zgłoszeniu", - "submission.sections.ccLicense.type": "Typ licencji", - "submission.sections.ccLicense.select": "Wybierz typ licencji…", - "submission.sections.ccLicense.change": "Zmień typ licencji…", - "submission.sections.ccLicense.none": "Brak dostępnych licencji", - "submission.sections.ccLicense.option.select": "Wybierz opcję…", - "submission.sections.ccLicense.link": "Wybrano licencję:", - "submission.sections.ccLicense.confirmation": "Udzielam powyższej licencji", - "submission.sections.general.add-more": "Dodaj więcej", - "submission.sections.general.collection": "Kolekcja", - "submission.sections.general.deposit_error_notice": "Wystąpił błąd podczas zgłaszania pozycji. Spróbuj ponownie później.", - "submission.sections.general.deposit_success_notice": "Udało się wprowadzić pozycję.", - "submission.sections.general.discard_error_notice": "Wystąpił błąd podczas odrzucania pozycji. Spróbuj ponownie później.", - "submission.sections.general.discard_success_notice": "Udało się odrzucić pozycję.", - "submission.sections.general.metadata-extracted": "Nowe metadane zostany rozpakowane i dodane do sekcji {{sectionId}}.", - "submission.sections.general.metadata-extracted-new-section": "Nowa sekcja {{sectionId}} została dodana do zgłoszenia.", - "submission.sections.general.no-collection": "Nie znaleziono kolekcji", - "submission.sections.general.no-sections": "Opcje niedostępne", - "submission.sections.general.save_error_notice": "Wystąpił błąd podczas zapisywania numeru. Spróbuj ponownie później. Po odświeżeniu strony niezapisane zmiany mogą zostać utracone.", - "submission.sections.general.save_success_notice": "Udało się zapisać zgłoszenie.", - "submission.sections.general.search-collection": "Szukaj kolekcji", - "submission.sections.general.sections_not_valid": "Niektóre sekcje są niekompletne.", - "submission.sections.submit.progressbar.CClicense": "Licencja Creative Commons", - "submission.sections.submit.progressbar.describe.recycle": "Odzyskaj", - "submission.sections.submit.progressbar.describe.stepcustom": "Opisz", - "submission.sections.submit.progressbar.describe.stepone": "Opisz", - "submission.sections.submit.progressbar.describe.steptwo": "Opisz", - "submission.sections.submit.progressbar.detect-duplicate": "Potencjalne duplikaty", - "submission.sections.submit.progressbar.license": "Zdeponuj licencję", - "submission.sections.submit.progressbar.upload": "Prześlij pliki", - "submission.sections.status.errors.title": "Błędy", - "submission.sections.status.valid.title": "Poprawność", - "submission.sections.status.warnings.title": "Ostrzeżenia", - "submission.sections.status.errors.aria": "ma błędy", - "submission.sections.status.valid.aria": "jest poprawne", - "submission.sections.status.warnings.aria": "ma ostrzeżenia", - "submission.sections.toggle.open": "Otwórz sekcję", - "submission.sections.toggle.close": "Zamknij sekcję", - "submission.sections.toggle.aria.open": "Rozwiń sekcję {{sectionHeader}}", - "submission.sections.toggle.aria.close": "Zwiń sekcję {{sectionHeader}}", - "submission.sections.upload.delete.confirm.cancel": "Anuluj", - "submission.sections.upload.delete.confirm.info": "Czy na pewno? To działanie nie może zostać cofnięte.", - "submission.sections.upload.delete.confirm.submit": "Tak, na pewno", - "submission.sections.upload.delete.confirm.title": "Usuń plik", - "submission.sections.upload.delete.submit": "Usuń", - "submission.sections.upload.download.title": "Pobierz plik", - "submission.sections.upload.drop-message": "Upuść pliki, aby załączyć je do tej pozycji", - "submission.sections.upload.edit.title": "Edytuj plik", - "submission.sections.upload.form.access-condition-label": "Typ dostępu", - "submission.sections.upload.form.date-required": "Data jest wymagana.", - "submission.sections.upload.form.date-required-from": "Data przyznania dostępu od jest wymagana.", - "submission.sections.upload.form.date-required-until": "Data przyznania dostępu do jest wymagana.", - "submission.sections.upload.form.from-label": "Pozwól na dostęp od", - "submission.sections.upload.form.from-placeholder": "Od", - "submission.sections.upload.form.group-label": "Grupa", - "submission.sections.upload.form.group-required": "Grupa jest wymagana", - "submission.sections.upload.form.until-label": "Pozwól na dostęp do", - "submission.sections.upload.form.until-placeholder": "Do", - "submission.sections.upload.header.policy.default.nolist": "Pliki wgrane do kolekcji {{collectionName}} będą dostępne dla poniższych grup:", - "submission.sections.upload.header.policy.default.withlist": "Zwróć uwagę na to, że pliki w kolekcji {{collectionName}} będą dostępne dla poniższych grup, z wyjątkiem tych, które zostały wyłączone z dostępu:", - "submission.sections.upload.info": "Tutaj znajdują się wszystkie pliki dodane w tym momencie do pozycji. Możesz zaktualizować metadane pliku i warunki dostępu lub przesłać dodatkowe pliki, przeciągając i opuszczając je gdziekolwiek na tej stronie", - "submission.sections.upload.no-entry": "Nie", - "submission.sections.upload.no-file-uploaded": "Pliki nie zostały jeszcze wgrane.", - "submission.sections.upload.save-metadata": "Zapisz metadane", - "submission.sections.upload.undo": "Anuluj", - "submission.sections.upload.upload-failed": "Przesyłanie nieudane", - "submission.sections.upload.upload-successful": "Przesyłanie udane", - "submission.submit.breadcrumbs": "Nowe zgłoszenie", - "submission.submit.title": "Nowe zgłoszenie", - "submission.workflow.generic.delete": "Usuń", - "submission.workflow.generic.delete-help": "Jeśli chcesz odrzucić tę pozycję, wybierz \"Delete\". Będzie wymagane potwierdzenie tej decyzji.", - "submission.workflow.generic.edit": "Edytuj", - "submission.workflow.generic.edit-help": "Wybierz tę opcję, aby zmienić metadane pozycji.", - "submission.workflow.generic.view": "Podgląd", - "submission.workflow.generic.view-help": "Wybierz tę opcję, aby wyświetlić metadane pozycji.", - "submission.workflow.tasks.claimed.approve": "Zatwierdź", - "submission.workflow.tasks.claimed.approve_help": "Jeśli ta pozycja ma zostać zatwierdzona i wprowadzona do kolekcji, wybierz \"Approve\".", - "submission.workflow.tasks.claimed.edit": "Edytuj", - "submission.workflow.tasks.claimed.edit_help": "Wybierz tę opcję, aby zmienić metadane pozycji.", - "submission.workflow.tasks.claimed.reject.reason.info": "Proszę wpisać powód odrzucenia zgłoszenia w poniższe pole, wskazując, czy zgłaszający może poprawić problem i ponownie przesłać zgłoszenie.", - "submission.workflow.tasks.claimed.reject.reason.placeholder": "Opisz powód odrzucenia zgłoszenia", - "submission.workflow.tasks.claimed.reject.reason.submit": "Odrzuć pozycję", - "submission.workflow.tasks.claimed.reject.reason.title": "Powód", - "submission.workflow.tasks.claimed.reject.submit": "Odrzuć", - "submission.workflow.tasks.claimed.reject_help": "Jeśli po przejrzeniu pozycji stwierdzono, że nie nadaje się ona do włączenia do kolekcji, wybierz opcję \"Reject\". Zostaniesz wtedy poproszony o określenie powodu odrzucenia, i wskazanie czy zgłaszający powinien wprowadzić zmiany i przesłać ponownie pozycję.", - "submission.workflow.tasks.claimed.return": "Cofnij do puli zadań", - "submission.workflow.tasks.claimed.return_help": "Cofnij zadanie do puli, aby inny użytkownik mógł się go podjąć.", - "submission.workflow.tasks.generic.error": "Podczas działania wystąpił błąd...", - "submission.workflow.tasks.generic.processing": "Procesowanie...", - "submission.workflow.tasks.generic.submitter": "Zgłaszający", - "submission.workflow.tasks.generic.success": "Udało się", - "submission.workflow.tasks.pool.claim": "Podejmij pracę", - "submission.workflow.tasks.pool.claim_help": "Przypisz to zadanie do siebie.", - "submission.workflow.tasks.pool.hide-detail": "Ukryj szczegóły", - "submission.workflow.tasks.pool.show-detail": "Pokaż szczegóły", - "thumbnail.default.alt": "Miniatura", - "thumbnail.default.placeholder": "Brak miniatury", - "thumbnail.project.alt": "Logo projektu", - "thumbnail.project.placeholder": "Obraz zastępczy projketu", - "thumbnail.orgunit.alt": "Logo jednostki organizacyjnej", - "thumbnail.orgunit.placeholder": "Obraz zastępczy jednostki organizacyjnej", - "thumbnail.person.alt": "Zdjęcie profilowe", - "thumbnail.person.placeholder": "Brak zdjęcia profilowego", - "title": "DSpace", - "vocabulary-treeview.header": "Widok drzewka", - "vocabulary-treeview.load-more": "Pokaż więcej", - "vocabulary-treeview.search.form.reset": "Resetuj", - "vocabulary-treeview.search.form.search": "Szukaj", - "vocabulary-treeview.search.no-result": "Brak pozycji do wyświetlenia", - "vocabulary-treeview.tree.description.nsi": "The Norwegian Science Index", - "vocabulary-treeview.tree.description.srsc": "Kategorie tematów badań", - "uploader.browse": "wyszukaj na swoim urządzeniu", - "uploader.drag-message": "Przeciągnij i upuść pliki tutaj", - "uploader.delete.btn-title": "Usuń", - "uploader.or": ", lub ", - "uploader.processing": "Procesowanie", - "uploader.queue-length": "Długość kolejki", - "virtual-metadata.delete-item.info": "Wybierz typy, dla których chcesz zapisać wirtualne metadane jako rzeczywiste metadane", - "virtual-metadata.delete-item.modal-head": "Wirtualne metadane tego powiązania", - "virtual-metadata.delete-relationship.modal-head": "Wybierz pozycje, dla których chcesz zapisać wirtualne metadane jako rzeczywiste metadane", - "workflowAdmin.search.results.head": "Zarządzaj procesami", - "workflow-item.edit.breadcrumbs": "Edytuj pozycję procesu", - "workflow-item.edit.title": "Edytuj pozycję procesu", - "workflow-item.delete.notification.success.title": "Usunięte", - "workflow-item.delete.notification.success.content": "Ten element procesu został usunięty", - "workflow-item.delete.notification.error.title": "Coś poszło nie tak", - "workflow-item.delete.notification.error.content": "Ten element procesu nie mógł zostać usunięty", - "workflow-item.delete.title": "Usuń element procesu", - "workflow-item.delete.header": "Usuń element procesu", - "workflow-item.delete.button.cancel": "Anuluj", - "workflow-item.delete.button.confirm": "Usuń", - "workflow-item.send-back.notification.success.title": "SOdeślij do zgłaszającego", - "workflow-item.send-back.notification.success.content": "Ten element procesu został odesłany do zgłaszającego", - "workflow-item.send-back.notification.error.title": "Coś poszło nie tak", - "workflow-item.send-back.notification.error.content": "Ten element procesu nie mógł zostać odesłany do zgłaszającego", - "workflow-item.send-back.title": "Odeślij element procesu do zgłaszającego", - "workflow-item.send-back.header": "Odeślij element procesu do zgłaszającego", - "workflow-item.send-back.button.cancel": "Anuluj", - "workflow-item.send-back.button.confirm": "Odeślij", - "workflow-item.view.breadcrumbs": "Widok procesu", - "idle-modal.header": "Sesja wkrótce wygaśnie", - "idle-modal.info": "Ze względów bezpieczeństwa sesja wygaśnie po {{ timeToExpire }} minutach nieaktywności. Twoja sesja wkrótce wygaśnie. Czy chcesz ją przedłużyć albo wylogować się?", - "idle-modal.log-out": "Wyloguj", - "idle-modal.extend-session": "Wydłuż sesję", - "workspace.search.results.head": "Twoje zadania", - "orgunit.listelement.badge": "Jednostka organizacyjna", - "orgunit.page.city": "Miasto", - "orgunit.page.country": "Kraj", - "orgunit.page.dateestablished": "Data założenia", - "orgunit.page.description": "Opis", - "orgunit.page.edit": "Edytuj pozycję", - "orgunit.page.id": "ID", - "orgunit.page.titleprefix": "Jednostka organizacyjna: ", - "pagination.options.description": "Opcje strony", - "pagination.results-per-page": "Wyników na stronę", - "pagination.showing.detail": "{{ range }} z {{ total }}", - "pagination.showing.label": "Teraz wyświetlane ", - "pagination.sort-direction": "Opcje sortowania", - "cookies.consent.purpose.sharing": "Udostępnianie", - "item.preview.dc.identifier.issn": "ISSN", - "500.page-internal-server-error": "Usługa niedostępna", - "500.help": "Serwer jest tymczasowo niezdolny do obsługi Twojego żądania z powodu przestoju konserwacyjnego lub problemów z przepustowością. Prosimy spróbować ponownie później.", - "500.link.home-page": "Zabierz mnie na stronę główną", - "error-page.description.401": "brak autoryzacji", - "error-page.description.403": "brak dostępu", - "error-page.description.500": "usługa niedostępna", - "error-page.description.404": "nie znaleziono strony", - "error-page.orcid.generic-error": "Podczas logowania za pomocą ORCID wystąpił błąd. Upewnij się, że udostępniłeś DSpace adres e-mail swojego konta ORCID. Jeśli błąd nadal występuje, skontaktuj się z administratorem", - "access-status.embargo.listelement.badge": "Embargo", - "access-status.metadata.only.listelement.badge": "Tylko metadane", - "access-status.open.access.listelement.badge": "Open Access", - "access-status.restricted.listelement.badge": "Brak dostępu", - "access-status.unknown.listelement.badge": "Nieznane", - "admin.access-control.groups.table.edit.buttons.remove": "Usuń \"{{name}}\"", - "admin.metadata-import.page.validateOnly": "Tylko waliduj", - "admin.metadata-import.page.validateOnly.hint": "Po wybraniu tej opcji przesłany plik CSV zostanie poddany walidacji. Otrzymasz raport o wykrytych zmianach, ale żadne zmiany nie zostaną zapisane.", - "bitstream.edit.form.iiifLabel.label": "Etykieta canvyIIIF", - "bitstream.edit.form.iiifLabel.hint": "Etykieta dla tego obrazu. Jeśli nie została dostarczona, zostanie użyta domyślna etykieta.", - "bitstream.edit.form.iiifToc.label": "Spis treści IIIF", - "bitstream.edit.form.iiifToc.hint": "Dodanie tekstu tutaj zapoczątkuje nowy zakres spisu treści.", - "bitstream.edit.form.iiifWidth.label": "Szerokość canvy IIIF", - "bitstream.edit.form.iiifWidth.hint": "Szerokość canvy jest zwykle równa szerokości obrazu.", - "bitstream.edit.form.iiifHeight.label": "Wysokość canvy IIIF", - "bitstream.edit.form.iiifHeight.hint": "Wysokość canvy jest zwykle równa szerokości obrazu.", - "browse.back.all-results": "Wszystkie wyniki wyszukiwania", - "pagination.next.button": "Następny", - "pagination.previous.button": "Poprzedni", - "pagination.next.button.disabled.tooltip": "Brak więcej stron z wynikami wyszukiwania", - "browse.startsWith": ", zaczyna się od {{ startsWith }}", - "browse.title.page": "Przeszukiwanie {{ collection }} wg {{ field }} {{ value }}", - "collection.edit.item.authorizations.load-bundle-button": "Załaduj więcej paczek", - "collection.edit.item.authorizations.load-more-button": "Załaduj więcej", - "collection.edit.item.authorizations.show-bitstreams-button": "Pokaż polityki plików dla paczek", - "comcol-role.edit.create.error.title": "Nie udało się utworzyć grupy dla roli '{{ role }}'", - "curation.form.submit.error.invalid-handle": "Nie ustalono identyfikatora dla tego obiektu", - "confirmation-modal.delete-profile.header": "Usuń profil", - "confirmation-modal.delete-profile.info": "Czy na pewno chcesz usunąć profil", - "confirmation-modal.delete-profile.cancel": "Anuluj", - "confirmation-modal.delete-profile.confirm": "Usuń", - "error.invalid-search-query": "Zapytanie nie jest poprawne. Wejdź na Solr query syntax, aby dowiedzieć się o najlepszych praktykach i dodatkowych informacjach o tym błędzie.", - "feed.description": "Aktualności", - "footer.link.feedback": "Prześlij uwagi", - "form.group-collapse": "Zwiń", - "form.group-collapse-help": "Kliknij tutaj, aby zwinąć", - "form.group-expand": "Rozwiń", - "form.group-expand-help": "Kliknij tutaj, aby rozwinąć", - "health.breadcrumbs": "Stan systemu", - "health-page.heading": "Stan systemu", - "health-page.info-tab": "Informacje", - "health-page.status-tab": "Status", - "health-page.error.msg": "Serwis stanu systemu jest tymczasowo niedostępny", - "health-page.property.status": "Kod statusu", - "health-page.section.db.title": "Baza danych", - "health-page.section.geoIp.title": "GeoIp", - "health-page.section.solrAuthorityCore.title": "Autentykacja", - "health-page.section.solrOaiCore.title": "OAI", - "health-page.section.solrSearchCore.title": "Wyszukiwarka", - "health-page.section.solrStatisticsCore.title": "Statystyki", - "health-page.section-info.app.title": "Backend aplikacji", - "health-page.section-info.java.title": "Java", - "health-page.status": "Status", - "health-page.status.ok.info": "operacyjny", - "health-page.status.error.info": "Wykryte problemy", - "health-page.status.warning.info": "Wykryte potencjalne problemy", - "health-page.title": "Stan systemu", - "health-page.section.no-issues": "Nie wykryto żadnych problemów", - "info.feedback.breadcrumbs": "Uwagi", - "info.feedback.head": "Uwagi", - "info.feedback.title": "Uwagi", - "info.feedback.info": "Dziękujemy za podzielenie się opinią na temat systemu DSpace. Doceniamy Twój wkład w lepsze działanie systemu!", - "info.feedback.email_help": "Ten adres zostanie użyty, aby przesłać odpowiedź na uwagi.", - "info.feedback.send": "Prześlij uwagi", - "info.feedback.comments": "Komentarz", - "info.feedback.email-label": "Twoj adres e-mail", - "info.feedback.create.success": "Uwagi przesłane!", - "info.feedback.error.email.required": "Poprawny adres e-mail jest wymagany", - "info.feedback.error.message.required": "Treść komentarza jest wymagana", - "info.feedback.page-label": "Strona", - "info.feedback.page_help": "Ta strona odnosi się do uwag.", - "item.orcid.return": "Powrót", - "item.truncatable-part.show-more": "Pokaż więcej", - "item.truncatable-part.show-less": "Pokaż mniej", - "item.page.orcid.title": "ORCID", - "item.page.orcid.tooltip": "Otwórz ustawienia ORCID", - "item.page.claim.button": "Podejmij pracę", - "item.page.claim.tooltip": "Podejmij pracę jako profil", - "item.version.create.modal.submitted.header": "Tworzenie nowej wersji...", - "item.version.create.modal.submitted.text": "Nowa wersja została utworzona. Mogło to trwać chwilę, jeśli pozycja ma wiele powiązań.", - "journal-relationships.search.results.head": "Wyniki wyszukiwania czasopism", - "menu.section.icon.health": "Sekcja menu Stan systemu", - "menu.section.health": "Stan systemu", - "metadata-export-search.tooltip": "Eksportuj wyniki wyszukiwania w formacie CSV", - "metadata-export-search.submit.success": "Eksport rozpoczął się", - "metadata-export-search.submit.error": "Eksport nie rozpoczął się", - "person.page.name": "Nazwa", - "person-relationships.search.results.head": "Wyniki wyszukiwania osób", - "profile.special.groups.head": "Autoryzacja do specjalnych grup, do których należysz", - "project-relationships.search.results.head": "Wyniki wyszukiwania projektów", - "publication-relationships.search.results.head": "Wyniki wyszukiwania publikacji", - "resource-policies.edit.page.target-failure.content": "Wystąpił błąd podczas edycji (użytkownika lub grupy) związany z polityką zasobu.", - "resource-policies.edit.page.other-failure.content": "Wystąpił błąd podczas edycji polityki zasobu. Użytkownik lub grupa zostały zaktualizowane pomyślnie.", - "resource-policies.form.eperson-group-list.modal.header": "Nie można zmienić typu", - "resource-policies.form.eperson-group-list.modal.text1.toGroup": "Nie można zastąpić użytkownika grupą.", - "resource-policies.form.eperson-group-list.modal.text1.toEPerson": "Nie można zastąpić grupy użytkownikiem.", - "resource-policies.form.eperson-group-list.modal.text2": "Usuń obecną polityke zasobu i stwórz nową o określonym typie.", - "resource-policies.form.eperson-group-list.modal.close": "Ok", - "search.results.view-result": "Widok", - "default-relationships.search.results.head": "Wyniki wyszukiwania", - "statistics.table.title.TotalVisits": "Wyświetlnia ogółem", - "statistics.table.title.TotalVisitsPerMonth": "Wyświetlenia w miesiącu", - "statistics.table.title.TotalDownloads": "Pobrania", - "statistics.table.title.TopCountries": "Wyświetlenia wg krajów", - "statistics.table.title.TopCities": "Wyświetlenia wg miast", - "submission.import-external.preview.title": "Podgląd pozycji", - "submission.import-external.preview.title.none": "Podgląd pozycji", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.none": "Import pozycji zdalnie", - "submission.sections.general.cannot_deposit": "Nie można zakończyć deponowania, ponieważ w formularzu wystąpiły błędy.
    Aby zakończyć deponowanie, wypełnij wszystkie obowiązkowe pola.", - "submission.sections.submit.progressbar.accessCondition": "Warunki dostępu do pozycji", - "submission.sections.submit.progressbar.sherpapolicy": "Polityki Sherpa", - "submission.sections.submit.progressbar.sherpaPolicies": "Informacje o polityce open access wydawcy.", - "submission.sections.status.info.title": "Dodatkowe informacje", - "submission.sections.status.info.aria": "Dodatkowe informacje", - "submission.sections.upload.form.access-condition-hint": "Wybierz w jaki sposób pliki dla tej pozycji po jest zdeponowaniu będą mogły być udostępnione", - "submission.sections.upload.form.from-hint": "Wybierz datę, od której ma zostać zastosowany warunek dostępu", - "submission.sections.upload.form.until-hint": "Wybierz datę, do której ma zostać zastosowany warunek dostępu", - "submission.sections.accesses.form.discoverable-description": "Jeśli checkbox jest zaznaczony, pozycja będzie wyświetlana w wynikach wyszukiwania. Jeśli checkbox jest odznaczony, dostęp do pozycji będzie dostępny tylko przez bezpośredni link, pozycja nie będzie wyświetlana w wynikach wyszukiwania.", - "submission.sections.accesses.form.discoverable-label": "Niemożliwe do wyszukania", - "submission.sections.accesses.form.access-condition-label": "Typ warunku dostępu", - "submission.sections.accesses.form.access-condition-hint": "Wybierz warunek dostępu, aby przypisać go do pozycji, kiedy zostanie zdeponowany.", - "submission.sections.accesses.form.date-required": "Data jest wymagana.", - "submission.sections.accesses.form.date-required-from": "Początkowa data przyznania dostępu jest wymagana.", - "submission.sections.accesses.form.date-required-until": "Końcowa data przyznania dostępu jest wymagana.", - "submission.sections.accesses.form.from-label": "Udziel dostępu od", - "submission.sections.accesses.form.from-hint": "Wybierz datę, od kiedy zostanie przyznany dostęp do tej pozycji", - "submission.sections.accesses.form.from-placeholder": "Od", - "submission.sections.accesses.form.group-label": "Grupa", - "submission.sections.accesses.form.group-required": "Grupa jest wymagana.", - "submission.sections.accesses.form.until-label": "Udziel dostępu do", - "submission.sections.accesses.form.until-hint": "Wybierz datę, do kiedy zostanie przyznany dostęp do tej pozycji", - "submission.sections.accesses.form.until-placeholder": "Do", - "submission.sections.sherpa.publication.information": "Informacje o publikacji", - "submission.sections.sherpa.publication.information.title": "Tytuł", - "submission.sections.sherpa.publication.information.issns": "Numery ISSN", - "submission.sections.sherpa.publication.information.url": "URL", - "submission.sections.sherpa.publication.information.publishers": "Wydawca", - "submission.sections.sherpa.publication.information.romeoPub": "Wydawca Romeo", - "submission.sections.sherpa.publication.information.zetoPub": "Wydawca Zeto", - "submission.sections.sherpa.publisher.policy": "Polityka wydawnicza", - "submission.sections.sherpa.publisher.policy.description": "Poniższe informacje zostały znalezione za pośrednictwem Sherpa Romeo. W oparciu o politykę Twojego wydawcy, zawiera ona porady dotyczące tego, czy embargo może być konieczne i/lub jakie pliki możesz przesłać. Jeśli masz pytania, skontaktuj się z administratorem strony poprzez formularz.", - "submission.sections.sherpa.publisher.policy.openaccess": "Rodzaje Open Access dozwolone przez politykę wydawniczą tego czasopisma są wymienione poniżej. Kliknij na wybrany rodzaj, aby przejść do szczegółowego widoku", - "submission.sections.sherpa.publisher.policy.more.information": "Aby uzuyskać więcej informacji, kliknij tutaj:", - "submission.sections.sherpa.publisher.policy.version": "Wersja", - "submission.sections.sherpa.publisher.policy.embargo": "Embargo", - "submission.sections.sherpa.publisher.policy.noembargo": "Brak embargo", - "submission.sections.sherpa.publisher.policy.nolocation": "Brak", - "submission.sections.sherpa.publisher.policy.license": "Licencja", - "submission.sections.sherpa.publisher.policy.prerequisites": "Wymagania wstępne", - "submission.sections.sherpa.publisher.policy.location": "Lokalizacja", - "submission.sections.sherpa.publisher.policy.conditions": "Wymagania", - "submission.sections.sherpa.publisher.policy.refresh": "Odśwież", - "submission.sections.sherpa.record.information": "Informacje o rekordzie", - "submission.sections.sherpa.record.information.id": "ID", - "submission.sections.sherpa.record.information.date.created": "Data utworzenia", - "submission.sections.sherpa.record.information.date.modified": "Ostatnia modyfikacja", - "submission.sections.sherpa.record.information.uri": "URI", - "submission.sections.sherpa.error.message": "Wystąpił błąd podczas pobierania informacji z Sherpa", - "submission.workspace.generic.view": "Podgląd", - "submission.workspace.generic.view-help": "Wybierz tę opcje, aby zobaczyć metadane.", - "workflow.search.results.head": "Zadania na workflow", - "workspace-item.view.breadcrumbs": "Widok wersji roboczej", - "workspace-item.view.title": "Widok wersji roboczej", - "researcher.profile.change-visibility.fail": "Wystąpił niespodziewany błąd podczas zmiany widoczności profilu", - "person.page.orcid.link.processing": "Łączenie profilu z ORCID...", - "person.page.orcid.link.error.message": "Coś poszło nie tak podczas łączenia z ORCID. Jeśli problem będzie się powtarzał, skontaktuj się z administratorem.", - "person.page.orcid.sync-queue.table.header.type": "Typ", - "person.page.orcid.sync-queue.table.header.description": "Opis", - "person.page.orcid.sync-queue.table.header.action": "Akcja", - "person.page.orcid.sync-queue.tooltip.project": "Projekt", - "person.page.orcid.sync-queue.send.validation-error.country.invalid": "Niewłaściwy dwuznakowy kod kraju ISO 3166", - "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "Wymagana data publikacji to co najmniej rok po 1900", - "person.page.orcid.synchronization-mode-funding-message": "Wybierz, czy chcesz wysłać swoje projekty na swoją listę informacji o projektach w profilu ORCID.", - "person.page.orcid.synchronization-mode-publication-message": "Wybierz, czy chcesz wysłać swoje publikacje na swoją listę informacji o publikacjach w profilu ORCID.", - "person.page.orcid.synchronization-mode-profile-message": "Wybierz, czy chcesz wysłać swoje dane bibliograficzne lub osobiste identyfikatory do swojego profilu ORCID.", - "person.orcid.sync.setting": "Ustawienia synchronizacji z ORCID", - "person.orcid.registry.queue": "Kolejka rejestru z ORCID", - "person.orcid.registry.auth": "Autoryzacje z ORCID", - "home.recent-submissions.head": "Najnowsze publikacje", - "submission.sections.sherpa-policy.title-empty": "Nie wybrano ISSN i informacje o polityce wydawniczej czasopisma są niedostępne", - "admin.batch-import.breadcrumbs": "Import zbiorczy", - "admin.batch-import.page.dropMsg": "Drop a batch ZIP to import", - "admin.batch-import.page.dropMsgReplace": "Drop to replace the batch ZIP to import", - "admin.batch-import.page.error.addFile": "Najpierw wybierz plik (ZIP)", - "admin.batch-import.page.header": "Import masowy", - "admin.batch-import.page.help": "Wybierz kolekcję do zaimportowania kolekcji. Potem, upuść lub przeszukaj plik SAF, który zawiera pozycje do importu", - "admin.batch-import.page.remove": "usuń", - "admin.batch-import.page.validateOnly.hint": "Jeśli wybrano, importowany plik ZIP będzie walidowany. Otrzymasz raport ze zmianami, ale żadne zmiany nie zostaną wykonane zapisane.", - "collection.form.correctionSubmissionDefinition": "Wzór zgłoszenia do prośby o korektę", - "comcol-role.edit.delete.error.title": "Nie udało się usunąć roli '{{ role }}' dla grup", - "confirmation-modal.export-batch.header": "Eksport maasowy (ZIP) {{ dsoName }}", - "confirmation-modal.export-batch.info": "Czy na pewno chcesz wyeksportować plik ZIP z {{ dsoName }}", - "dso-selector.export-batch.dspaceobject.head": "Eksport masowy (ZIP) z", - "menu.section.export_batch": "Eksport masowy (ZIP)", - "nav.user-profile-menu-and-logout": "Profil użytkownika i wylogowywanie", - "process.detail.actions": "Akcje", - "process.detail.delete.body": "Czy na pewno chcesz usunąć bieżący proces?", - "process.detail.delete.button": "Usuń proces", - "process.detail.delete.cancel": "Anuluj", - "process.detail.delete.confirm": "Usuń proces", - "process.detail.delete.error": "Nie udało się usunąć procesu", - "process.detail.delete.header": "Usuń proces", - "process.detail.delete.success": "Proces został usunięty.", - "admin.batch-import.title": "Masowy import", - "admin.metadata-import.page.button.select-collection": "Wybierz kolekcję", - "admin.registries.bitstream-formats.table.id": "ID", - "admin.registries.schema.fields.table.id": "ID", - "cookies.consent.app.description.google-recaptcha": "Podczas rejestracji i odzyskiwania hasła używamy narzędzia google reCAPTCHA", - "cookies.consent.app.disable-all.description": "Przełącz, aby zaakceptować lub odrzucić wszystkie", - "cookies.consent.app.disable-all.title": "Akceptowacja lub odrzucenie wszystkich", - "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", - "cookies.consent.content-modal.service": "usługa", - "cookies.consent.content-modal.services": "usługi", - "cookies.consent.content-notice.description.no-privacy": "Zbieramy i przetwarzamy Twoje dane w celu: autentykacji, ustawień preferencji i zgód oraz do celów statystycznych.", - "cookies.consent.content-notice.title": "Zgoda na ciasteczka", - "cookies.consent.ok": "Zgadzam się", - "cookies.consent.purpose.registration-password-recovery": "Rejestracja i odzyskiwanie hasła", - "cookies.consent.save": "Zapisz", - "curation-task.task.citationpage.label": "Generuj stronę z cytowaniem", - "dso-selector.import-batch.dspaceobject.head": "Import masowy z", - "orgunit.listelement.no-title": "Brak tytyłu", - "process.bulk.delete.error.body": "Proces z ID {{processId}} nie może być usunięty. Pozostałe procesy zostaną usunięte.", - "process.bulk.delete.error.head": "Błąd podczas usuwania procesu", - "process.bulk.delete.success": "{{count}} proces/y został/y usunięte", - "process.overview.delete": "Usuń {{count}} proces/y", - "process.overview.delete.body": "Czy na pewno usunąć {{count}} proces/y?", - "process.overview.delete.clear": "Wyczyść selekcję procesów do usunięcia", - "process.overview.delete.header": "Usuń procesy", - "process.overview.delete.processing": "{{count}} procesów zostanie usuniętych. Poczekaj, gdy usuwanie się zakończy. Może to zająć chwilę.", - "process.overview.table.actions": "Akcje", - "profile.security.form.label.current-password": "Aktualne hasło", - "profile.security.form.notifications.error.change-failed": "Wystąpił błąd podczas próby zmiany hasła. Sprawdź czy aktualne hasło jest prawidłowe.", - "profile.security.form.notifications.error.general": "Uzupełnij wymagane pola dla bezpieczeństwa na formularzu", - "register-page.registration.error.recaptcha": "Wystąpił błąd podczas próby autentykacji przez reCAPTCHA", - "register-page.registration.google-recaptcha.must-accept-cookies": "Aby się zarejestrować, musisz zaakceptować ciasteczka dla rejestracji i odzyskiwania hasła (Google reCaptcha).", - "register-page.registration.google-recaptcha.notification.message.error": "Wystąpił błąd podczas weryfikacji reCaptcha", - "register-page.registration.google-recaptcha.notification.message.expired": "Weryfikacja wygasła. Zweryfikuj ponownie.", - "register-page.registration.google-recaptcha.notification.title": "Google reCaptcha", - "register-page.registration.google-recaptcha.open-cookie-settings": "Otwórz ustawienia plików cookies", - "search.results.response.500": "Wystąpił błąd podczas wysyłania zapytania. Spróbuj ponownie później", - "submission.sections.license.granted-label": "Potwierdzam akceptację powyższej licencji", - "submission.sections.license.notgranted": "Najpierw musisz zaakceptować licencję", - "submission.sections.license.required": "Najpierw musisz zaakceptować licencję", - "confirmation-modal.export-batch.confirm": "Eksportuj", - "confirmation-modal.export-batch.cancel": "Anuluj", + "401.help":"Nie masz uprawnień do dostępu do tej strony. Możesz użyć przycisku poniżej, aby powrócić do strony głównej.", + "401.link.home-page":"Zabierz mnie na stronę główną", + "401.unauthorized":"nieautoryzowany", + "403.help":"Nie masz uprawnień do dostępu do tej strony. Możesz użyć przycisku poniżej, aby wrócić do strony głównej.", + "403.link.home-page":"Zabierz mnie na stronę główną", + "403.forbidden":"zabroniony", + "404.help":"Nie możemy znaleźć strony, której szukasz. Strona mogła zostać przeniesiona lub usunięta. Możesz użyć przycisku poniżej, aby powrócić do strony głównej. ", + "404.link.home-page":"Zabierz mnie na stronę główną", + "404.page-not-found":"strona nie została znaleziona", + "admin.curation-tasks.breadcrumbs":"Systemowe zadania administracyjne", + "admin.curation-tasks.title":"Systemowe zadania administracyjne", + "admin.curation-tasks.header":"Systemowe zadania administracyjne", + "admin.registries.bitstream-formats.breadcrumbs":"Rejestr formatów", + "admin.registries.bitstream-formats.create.breadcrumbs":"Format strumienia bitów", + "admin.registries.bitstream-formats.create.failure.content":"Wystąpił błąd podczas tworzenia nowego formatu strumienia bitów.", + "admin.registries.bitstream-formats.create.failure.head":"Nie udało się", + "admin.registries.bitstream-formats.create.head":"Utwórz nowy format", + "admin.registries.bitstream-formats.create.new":"Dodaj nowy format", + "admin.registries.bitstream-formats.create.success.content":"Nowy format strumienia bitów został pomyślnie utworzony.", + "admin.registries.bitstream-formats.create.success.head":"Udało się", + "admin.registries.bitstream-formats.delete.failure.amount":"Nie udało się usunąć {{ amount }} formatu(ów)", + "admin.registries.bitstream-formats.delete.failure.head":"Nie udało się", + "admin.registries.bitstream-formats.delete.success.amount":"Udało się usunąć {{ amount }} formatu(ów)", + "admin.registries.bitstream-formats.delete.success.head":"Udało się", + "admin.registries.bitstream-formats.description":"Na liście formatów wyświetlono informacje o obsługiwanych formatach i czy są one wspierane przez system.", + "admin.registries.bitstream-formats.edit.breadcrumbs":"Format strumienia bitów", + "admin.registries.bitstream-formats.edit.description.hint":"", + "admin.registries.bitstream-formats.edit.description.label":"Opis", + "admin.registries.bitstream-formats.edit.extensions.hint":"Rozszerzenia to rozszerzenia plików, które są używane do automatycznej identyfikacji formatu przesyłanych plików. Możesz wprowadzić kilka rozszerzeń dla każdego formatu.", + "admin.registries.bitstream-formats.edit.extensions.label":"Rozszerzenia plików", + "admin.registries.bitstream-formats.edit.extensions.placeholder":"Wprowadź rozszerzenie pliku bez kropki", + "admin.registries.bitstream-formats.edit.failure.content":"Wystąpił błąd podczas edycji formatu pliku.", + "admin.registries.bitstream-formats.edit.failure.head":"Nie udało się", + "admin.registries.bitstream-formats.edit.head":"Format plików: {{ format }}", + "admin.registries.bitstream-formats.edit.internal.hint":"Formaty oznaczone jako wewnętrzne są ukryte przed użytkownikiem i wykorzystywane do celów administracyjnych.", + "admin.registries.bitstream-formats.edit.internal.label":"Wewnętrzny", + "admin.registries.bitstream-formats.edit.mimetype.hint":"Typ MIME powiązany z tym formatem, nie musi być unikalny.", + "admin.registries.bitstream-formats.edit.mimetype.label":"Typ MIME", + "admin.registries.bitstream-formats.edit.shortDescription.hint":"Unikalna nazwa dla tego formatu, (np. Microsoft Word XP lub Microsoft Word 2000)", + "admin.registries.bitstream-formats.edit.shortDescription.label":"Nazwa", + "admin.registries.bitstream-formats.edit.success.content":"Format strumienia bitów został pomyślnie edytowany.", + "admin.registries.bitstream-formats.edit.success.head":"Udało się", + "admin.registries.bitstream-formats.edit.supportLevel.hint":"Poziom wsparcia, jaki Twoja instytucja deklaruje dla tego formatu.", + "admin.registries.bitstream-formats.edit.supportLevel.label":"Obsługiwany format", + "admin.registries.bitstream-formats.head":"Rejestr formatów", + "admin.registries.bitstream-formats.no-items":"Brak formatów plików do wyświetlenia.", + "admin.registries.bitstream-formats.table.delete":"Usuń zaznaczone", + "admin.registries.bitstream-formats.table.deselect-all":"Odznacz wszystkie", + "admin.registries.bitstream-formats.table.internal":"wewnętrzne", + "admin.registries.bitstream-formats.table.mimetype":"Typ MIME", + "admin.registries.bitstream-formats.table.name":"Nazwa", + "admin.registries.bitstream-formats.table.return":"Powrót", + "admin.registries.bitstream-formats.table.supportLevel.KNOWN":"Znane", + "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED":"Wspierane", + "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN":"Nieznane", + "admin.registries.bitstream-formats.table.supportLevel.head":"Obsługiwany format", + "admin.registries.bitstream-formats.title":"Rejestr formatów plików", + "admin.registries.metadata.breadcrumbs":"Rejestr metadanych", + "admin.registries.metadata.description":"W rejestrze metadanych przechowywana jest lista wszystkich pól metadanych dostępnych w repozytorium. Przechowywane pola są przechowywane w kilku rejestrach. DSpace wymaga kwalifikowanego rejestru metadanych Dublin Core.", + "admin.registries.metadata.form.create":"Utwórz schemat metadanych", + "admin.registries.metadata.form.edit":"Edytuj schemat metadanych", + "admin.registries.metadata.form.name":"Nazwa", + "admin.registries.metadata.form.namespace":"Nazwa schematu", + "admin.registries.metadata.head":"Rejestr metadanych", + "admin.registries.metadata.schemas.no-items":"Brak rejestrów metadanych do pokazania.", + "admin.registries.metadata.schemas.table.delete":"Usuń zaznaczone", + "admin.registries.metadata.schemas.table.id":"ID", + "admin.registries.metadata.schemas.table.name":"Nazwa", + "admin.registries.metadata.schemas.table.namespace":"Nazwa schematu", + "admin.registries.metadata.title":"Rejestr metadanych", + "admin.registries.schema.breadcrumbs":"Schemat metadanych", + "admin.registries.schema.description":"Ten schemat metadanych jest stworzony na podstawie \"{{namespace}}\".", + "admin.registries.schema.fields.head":"Pola schematu metadanych", + "admin.registries.schema.fields.no-items":"Brak pól metadanych do pokazania.", + "admin.registries.schema.fields.table.delete":"Usuń zaznaczone", + "admin.registries.schema.fields.table.field":"Pole", + "admin.registries.schema.fields.table.scopenote":"Uwagi", + "admin.registries.schema.form.create":"Stwórz pole metadanych", + "admin.registries.schema.form.edit":"Edytuj pole metadanych", + "admin.registries.schema.form.element":"Element", + "admin.registries.schema.form.qualifier":"Kwalifikator", + "admin.registries.schema.form.scopenote":"Uwagi", + "admin.registries.schema.head":"Schemat metadanych", + "admin.registries.schema.notification.created":"Udało się utworzyć schemat metdanych \"{{prefix}}\"", + "admin.registries.schema.notification.deleted.failure":"Nie udało się usunąć {{amount}} schematów metadanych", + "admin.registries.schema.notification.deleted.success":"Udało się usunąć {{amount}} schematów metadanych", + "admin.registries.schema.notification.edited":"Udało się edytować schemat metadanych \"{{prefix}}\"", + "admin.registries.schema.notification.failure":"Błąd", + "admin.registries.schema.notification.field.created":"Udało się utworzyć pole metadanych \"{{field}}\"", + "admin.registries.schema.notification.field.deleted.failure":"Nie udało się usunąć {{amount}} pól metadanych", + "admin.registries.schema.notification.field.deleted.success":"Udało się usunąć {{amount}} pól metadanych", + "admin.registries.schema.notification.field.edited":"SUdało się edytować pole metadanych \"{{field}}\"", + "admin.registries.schema.notification.success":"Udało się", + "admin.registries.schema.return":"Powrót", + "admin.registries.schema.title":"Rejestr schematów metadanych", + "admin.access-control.epeople.actions.delete":"Usuń użytkownika", + "admin.access-control.epeople.actions.impersonate":"Personifikuj użytkownika", + "admin.access-control.epeople.actions.reset":"Zresetuj hasło", + "admin.access-control.epeople.actions.stop-impersonating":"Przestań personifikować użytkownika", + "admin.access-control.epeople.breadcrumbs":"Użytkownicy", + "admin.access-control.epeople.title":"Użytkownicy", + "admin.access-control.epeople.head":"Użytkownicy", + "admin.access-control.epeople.search.head":"Wyszukaj", + "admin.access-control.epeople.button.see-all":"Przeglądaj wszystko", + "admin.access-control.epeople.search.scope.metadata":"Metadane", + "admin.access-control.epeople.search.scope.email":"E-mail", + "admin.access-control.epeople.search.button":"Wyszukaj", + "admin.access-control.epeople.search.placeholder":"Wyszukaj użytkownika...", + "admin.access-control.epeople.button.add":"Dodaj użytkownika", + "admin.access-control.epeople.table.id":"ID", + "admin.access-control.epeople.table.name":"Nazwa", + "admin.access-control.epeople.table.email":"E-mail", + "admin.access-control.epeople.table.edit":"Edytuj", + "admin.access-control.epeople.table.edit.buttons.edit":"Edytuj \"{{name}}\"", + "admin.access-control.epeople.table.edit.buttons.edit-disabled":"Brak uprawnień do edycji wybranej grupy", + "admin.access-control.epeople.table.edit.buttons.remove":"Usuń \"{{name}}\"", + "admin.access-control.epeople.no-items":"Brak użytkowników do wyświetlenia.", + "admin.access-control.epeople.form.create":"Utwórz użytkownika", + "admin.access-control.epeople.form.edit":"Edytuj użytkownika", + "admin.access-control.epeople.form.firstName":"Imię", + "admin.access-control.epeople.form.lastName":"Nazwisko", + "admin.access-control.epeople.form.email":"E-mail", + "admin.access-control.epeople.form.emailHint":"Adres e-mail musi być poprawny", + "admin.access-control.epeople.form.canLogIn":"Możliwość zalogowania", + "admin.access-control.epeople.form.requireCertificate":"Wymagany certyfikat", + "admin.access-control.epeople.form.return":"Powrót", + "admin.access-control.epeople.form.notification.created.success":"Udało się utworzyć użytkownika \"{{name}}\"", + "admin.access-control.epeople.form.notification.created.failure":"Nie udało się utworzyć użytkownika \"{{name}}\"", + "admin.access-control.epeople.form.notification.created.failure.emailInUse":"Nie udało się utworzyć użytkownika \"{{name}}\", email \"{{email}}\" już w użyciu.", + "admin.access-control.epeople.form.notification.edited.failure.emailInUse":"Nie udało się utworzyć użytkownika \"{{name}}\", email \"{{email}}\" już w użyciu.", + "admin.access-control.epeople.form.notification.edited.success":"Udało się edytować użytkownika \"{{name}}\"", + "admin.access-control.epeople.form.notification.edited.failure":"Nie udało się edytować użytkownika \"{{name}}\"", + "admin.access-control.epeople.form.notification.deleted.success":"Udało się usunąć użytkownika \"{{name}}\"", + "admin.access-control.epeople.form.notification.deleted.failure":"Nie udało się usunąć użytkownika \"{{name}}\"", + "admin.access-control.epeople.form.groupsEPersonIsMemberOf":"Członek grup:", + "admin.access-control.epeople.form.table.id":"ID", + "admin.access-control.epeople.form.table.name":"Nazwa", + "admin.access-control.epeople.form.table.collectionOrCommunity":"Zbiór/kolekcja", + "admin.access-control.epeople.form.memberOfNoGroups":"Ten użytkownik nie jest członkiem żadnej grupy", + "admin.access-control.epeople.form.goToGroups":"Dodaj do grup", + "admin.access-control.epeople.notification.deleted.failure":"Nie udało się usunąć użytkownika: \"{{name}}\"", + "admin.access-control.epeople.notification.deleted.success":"Udało się usunąć użytkownika: \"{{name}}\"", + "admin.access-control.groups.title":"Grupy", + "admin.access-control.groups.breadcrumbs":"Grupy", + "admin.access-control.groups.singleGroup.breadcrumbs":"Edytuj grupę", + "admin.access-control.groups.title.singleGroup":"Edytuj grupę", + "admin.access-control.groups.title.addGroup":"Nowa grupa", + "admin.access-control.groups.addGroup.breadcrumbs":"Nowa grupa", + "admin.access-control.groups.head":"Grupy/role", + "admin.access-control.groups.button.add":"Dodaj grupę", + "admin.access-control.groups.search.head":"Szukaj grup", + "admin.access-control.groups.button.see-all":"Przeszukaj wszystko", + "admin.access-control.groups.search.button":"Wyszukaj", + "admin.access-control.groups.search.placeholder":"Wyszukaj grupy...", + "admin.access-control.groups.table.id":"ID", + "admin.access-control.groups.table.name":"Nazwa", + "admin.access-control.groups.table.collectionOrCommunity":"Zbiór/kolekcja", + "admin.access-control.groups.table.members":"Członkowie", + "admin.access-control.groups.table.edit":"Edytuj", + "admin.access-control.groups.table.edit.buttons.edit":"Edytuj \"{{name}}\"", + "admin.access-control.groups.no-items":"Nie znaleziono grup z podaną frazą lub podanym UUID", + "admin.access-control.groups.notification.deleted.success":"Udało się usunąć grupę \"{{name}}\"", + "admin.access-control.groups.notification.deleted.failure.title":"Nie udało się usunąć grupy \"{{name}}\"", + "admin.access-control.groups.notification.deleted.failure.content":"Powód: \"{{cause}}\"", + "admin.access-control.groups.form.alert.permanent":"Ta grupa jest stała, więc nie może być edytowana ani usunięta. Nadal możesz dodawać i usuwać członków grupy za pomocą tej strony.", + "admin.access-control.groups.form.alert.workflowGroup":"Ta grupa nie może być edytowana lub usunięta, ponieważ odnosi się do roli lub bierze udział w procesie \"{{name}}\" {{comcol}}. Możesz ją usunąć ze strony \"assign roles\" edycji {{comcol}}. Wciąż może dodawać i usuwać członków tej grupy, korzystając z tej strony.", + "admin.access-control.groups.form.head.create":"Utwórz grupę", + "admin.access-control.groups.form.head.edit":"Edytuj grupę", + "admin.access-control.groups.form.groupName":"Nazwa grupy", + "admin.access-control.groups.form.groupCommunity":"Zbiór lub kolekcja", + "admin.access-control.groups.form.groupDescription":"Opis", + "admin.access-control.groups.form.notification.created.success":"Udało się utworzyć grupę \"{{name}}\"", + "admin.access-control.groups.form.notification.created.failure":"Nie udało się utworzyć grupy \"{{name}}\"", + "admin.access-control.groups.form.notification.created.failure.groupNameInUse":"Nie udało się utworzyć grupy o nazwie: \"{{name}}\", upewnij się, że nazwa nie jest już używana.", + "admin.access-control.groups.form.notification.edited.failure":"Nie udało się edytować grupy \"{{name}}\"", + "admin.access-control.groups.form.notification.edited.failure.groupNameInUse":"Nazwa \"{{name}}\" już w użyciu!", + "admin.access-control.groups.form.notification.edited.success":"Udało się edytować grupę \"{{name}}\"", + "admin.access-control.groups.form.actions.delete":"Usuń grupę", + "admin.access-control.groups.form.delete-group.modal.header":"Usuń grupę \"{{ dsoName }}\"", + "admin.access-control.groups.form.delete-group.modal.info":"Czy na pewno chcesz usunąć grupę \"{{ dsoName }}\"", + "admin.access-control.groups.form.delete-group.modal.cancel":"Anuluj", + "admin.access-control.groups.form.delete-group.modal.confirm":"Usuń", + "admin.access-control.groups.form.notification.deleted.success":"Udało się usunąć grupę \"{{ name }}\"", + "admin.access-control.groups.form.notification.deleted.failure.title":"Nie udało się usunąć grupy \"{{ name }}\"", + "admin.access-control.groups.form.notification.deleted.failure.content":"Powód: \"{{ cause }}\"", + "admin.access-control.groups.form.members-list.head":"Użytkownik", + "admin.access-control.groups.form.members-list.search.head":"Dodaj użytkownika", + "admin.access-control.groups.form.members-list.button.see-all":"Pokaż wszystkich", + "admin.access-control.groups.form.members-list.headMembers":"Aktualni członkowie", + "admin.access-control.groups.form.members-list.search.scope.metadata":"Metadane", + "admin.access-control.groups.form.members-list.search.scope.email":"E-mail", + "admin.access-control.groups.form.members-list.search.button":"Wyszukaj", + "admin.access-control.groups.form.members-list.table.id":"ID", + "admin.access-control.groups.form.members-list.table.name":"Nazwa", + "admin.access-control.groups.form.members-list.table.identity":"Tożsamość", + "admin.access-control.groups.form.members-list.table.email":"E-mail", + "admin.access-control.groups.form.members-list.table.netid":"NetID", + "admin.access-control.groups.form.members-list.table.edit":"Usuń / Dodaj", + "admin.access-control.groups.form.members-list.table.edit.buttons.remove":"Usuń użytkownika o nazwie \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.success.addMember":"Udało się dodać użytkownika o nazwie: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.failure.addMember":"Nie udało się dodać użytkownika o nazwie: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.success.deleteMember":"Udało się usunąć użytkownika o nazwie: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.failure.deleteMember":"Nie udało się usunąć użytkownika o nazwie: \"{{name}}\"", + "admin.access-control.groups.form.members-list.table.edit.buttons.add":"Dodaj użytkownika o nazwie \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup":"Brak aktywnej grupy, najpierw wpisz nazwę grupy.", + "admin.access-control.groups.form.members-list.no-members-yet":"Brak użytkowników w grupie, wyszukaj ich i dodaj.", + "admin.access-control.groups.form.members-list.no-items":"Nie znaleziono użytkowników podczas wyszukiwania", + "admin.access-control.groups.form.subgroups-list.notification.failure":"Coś poszło nie tak: \"{{cause}}\"", + "admin.access-control.groups.form.subgroups-list.head":"Grupy", + "admin.access-control.groups.form.subgroups-list.search.head":"Dodaj podgrupę", + "admin.access-control.groups.form.subgroups-list.button.see-all":"Przeglądaj wszystkie", + "admin.access-control.groups.form.subgroups-list.headSubgroups":"Aktualne podgrupy", + "admin.access-control.groups.form.subgroups-list.search.button":"Wyszukaj", + "admin.access-control.groups.form.subgroups-list.table.id":"ID", + "admin.access-control.groups.form.subgroups-list.table.name":"Nazwa", + "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity":"Zbiór/kolekcja", + "admin.access-control.groups.form.subgroups-list.table.edit":"Usuń / Dodaj", + "admin.access-control.groups.form.subgroups-list.table.edit.buttons.remove":"Usuń podgrupę o nazwie \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.table.edit.buttons.add":"Dodaj podgrupę o nazwie \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup":"Aktualna grupa", + "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup":"Udało się dodać podgrupę: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure.addSubgroup":"Nie udało się dodać podgrupy: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup":"Udało się usunąć podgrupę: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup":"Nie udało się usunąć podgrupy: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup":"Brak aktywnej grupy, najpierw wpisz nazwę grupy.", + "admin.access-control.groups.form.subgroups-list.notification.failure.subgroupToAddIsActiveGroup":"Ta grupa jest już stworzona i nie może zostać dodana pononwie.", + "admin.access-control.groups.form.subgroups-list.no-items":"Nie znaleziono grup z tą nazwą lub UUID", + "admin.access-control.groups.form.subgroups-list.no-subgroups-yet":"Brak podgrup w grupie.", + "admin.access-control.groups.form.return":"Powrót", + "admin.search.breadcrumbs":"Wyszukiwanie administracyjne", + "admin.search.collection.edit":"Edytuj", + "admin.search.community.edit":"Edytuj", + "admin.search.item.delete":"Usuń", + "admin.search.item.edit":"Edytuj", + "admin.search.item.make-private":"Ukryj", + "admin.search.item.make-public":"Upublicznij", + "admin.search.item.move":"Przenieś", + "admin.search.item.reinstate":"Zmień instancję", + "admin.search.item.withdraw":"Wycofane", + "admin.search.title":"Wyszukiwanie administracyjne", + "administrativeView.search.results.head":"Wyszukiwanie administracyjne", + "admin.workflow.breadcrumbs":"Zarządzaj procesem", + "admin.workflow.title":"Zarządzaj procesem", + "admin.workflow.item.workflow":"Proces", + "admin.workflow.item.delete":"Usuń", + "admin.workflow.item.send-back":"Odeślij z powrotem", + "admin.metadata-import.breadcrumbs":"Importuj metadane", + "admin.metadata-import.title":"Importuj metadane", + "admin.metadata-import.page.header":"Importuj metadane", + "admin.metadata-import.page.help":"Tutaj możesz zaimportować pliki CSV, w których znajdują się metadane do operacji wsadowej. Zaimportuj je poprzez upuszczenie ich lub znajdź je na swoim komputerze", + "admin.metadata-import.page.dropMsg":"Upuść plik w formacie CSV", + "admin.metadata-import.page.dropMsgReplace":"Upuść, aby zastąpić metadane w formacie CSV do importu", + "admin.metadata-import.page.button.return":"Powrót", + "admin.metadata-import.page.button.proceed":"Zastosuj", + "admin.metadata-import.page.error.addFile":"Najpierw wybierz plik!", + "auth.errors.invalid-user":"Niewłaściwy adres e-mail lub hasło.", + "auth.messages.expired":"Twoja sesja wygasła. Zaloguj się ponownie.", + "auth.messages.token-refresh-failed":"Odświeżenie sesji nie powiodło się. Zaloguj się ponownie.", + "bitstream.download.page":"Pobieranie {{bitstream}}...", + "bitstream.download.page.back":"Powrót", + "bitstream.edit.authorizations.link":"Edytuj polityki plików", + "bitstream.edit.authorizations.title":"Edytuj polityki plików", + "bitstream.edit.return":"Powrót", + "bitstream.edit.bitstream":"Pliki: ", + "bitstream.edit.form.description.hint":"Opcjonalnie wprowadź krótki opis pliku, np.: \"Główna część artykułu\" lub \"Dane z eksperymentu\".", + "bitstream.edit.form.description.label":"Opis", + "bitstream.edit.form.embargo.hint":"Pierwszy dzień, od kiedy dostęp zostanie udzielony. Tej daty nie może być edytować w tym formularzu. Aby wybrać okres embarga czasowego, wybierz Status pozycji tab, kliknij Autoryzacje..., stwórz lub edytuj plik PRZEYCZTAJ zasady i wybierz określoną Datę początkową.", + "bitstream.edit.form.embargo.label":"Embargo do wybranej daty", + "bitstream.edit.form.fileName.hint":"Zmiana nazwy pliku dla strumienia bitów. Zauważ, że zmieni to wyświetlany adres URL strumienia bitów, ale stare linki nadal będą działać, o ile nie zmieni się identyfikator sekwencji.", + "bitstream.edit.form.fileName.label":"Nazwa pliku", + "bitstream.edit.form.newFormat.label":"Opisz nowy format", + "bitstream.edit.form.newFormat.hint":"Program, którego użyto do stworzenia pliku i numer wersji (np.: \"ACMESoft SuperApp version 1.5\").", + "bitstream.edit.form.primaryBitstream.label":"Pierwotny plik", + "bitstream.edit.form.selectedFormat.hint":"Jeśli formatu nie ma na powyższej liście, wybierz \"format not in list\" above i opisz jako \"Describe new format\".", + "bitstream.edit.form.selectedFormat.label":"Wybrany format", + "bitstream.edit.form.selectedFormat.unknown":"Tego formatu nie ma na liście", + "bitstream.edit.notifications.error.format.title":"Wystąpił błąd podczas zapisu formatu pliku", + "bitstream.edit.notifications.saved.content":"Zmiany w pliku zostały zapisane.", + "bitstream.edit.notifications.saved.title":"Plik został zapisany", + "bitstream.edit.title":"Edytuj plik", + "bitstream-request-a-copy.alert.canDownload1":"Masz już dostęp do tego pliki. Jeśli chcesz go pobrać, kliknij ", + "bitstream-request-a-copy.alert.canDownload2":"tutaj", + "bitstream-request-a-copy.header":"Wystąp o kopię wybranego pliku", + "bitstream-request-a-copy.intro":"Wpisz następujące informacje, aby wystąpić o kopię tej pozycji: ", + "bitstream-request-a-copy.intro.bitstream.one":"Wystąpienie o dostęp do następujących plików: ", + "bitstream-request-a-copy.intro.bitstream.all":"Wystąpienie o dostęp do wszystkich plików. ", + "bitstream-request-a-copy.name.label":"Imię *", + "bitstream-request-a-copy.name.error":"Imię jest wymagane", + "bitstream-request-a-copy.email.label":"Adres e-mail *", + "bitstream-request-a-copy.email.hint":"Plik zostanie przesłany na podany adres e-mail", + "bitstream-request-a-copy.email.error":"Proszę wprowadzić prawidłowy adres e-mail", + "bitstream-request-a-copy.allfiles.label":"Pliki", + "bitstream-request-a-copy.files-all-false.label":"Tylko plik, dla którego wystąpiono o dostęp", + "bitstream-request-a-copy.files-all-true.label":"Wszystkie pliki (w tej pozycji) z ograniczonym dostępem", + "bitstream-request-a-copy.message.label":"Wiadomość", + "bitstream-request-a-copy.return":"Powrót", + "bitstream-request-a-copy.submit":"Wystąp o kopię", + "bitstream-request-a-copy.submit.success":"Wystąpienie o dostęp do pliku zostało przesłane.", + "bitstream-request-a-copy.submit.error":"Coś poszło nie tak podczas wysyłania wystąpienia o dostęp do pliku", + "browse.comcol.by.author":"wg autorów", + "browse.comcol.by.dateissued":"wg daty wydania", + "browse.comcol.by.subject":"wg tematu", + "browse.comcol.by.title":"wg tytułu", + "browse.comcol.head":"Przeglądaj", + "browse.empty":"Brak rekordów do wyświetlenia.", + "browse.metadata.author":"Autor", + "browse.metadata.dateissued":"Data wydania", + "browse.metadata.subject":"Temat", + "browse.metadata.title":"Tytuł", + "browse.metadata.author.breadcrumbs":"Przeglądaj wg autorów", + "browse.metadata.dateissued.breadcrumbs":"Przeglądaj wg daty wydania", + "browse.metadata.subject.breadcrumbs":"Przeglądaj wg tematów", + "browse.metadata.title.breadcrumbs":"Przeglądaj wg tytułów", + "browse.startsWith.choose_start":"(Wybierz start)", + "browse.startsWith.choose_year":"(Wybierz rok)", + "browse.startsWith.choose_year.label":"Wybierz rok wydania", + "browse.startsWith.jump":"Przejdź do miejsca w indeksie:", + "browse.startsWith.months.april":"kwiecień", + "browse.startsWith.months.august":"sierpień", + "browse.startsWith.months.december":"grudzień", + "browse.startsWith.months.february":"luty", + "browse.startsWith.months.january":"styczeń", + "browse.startsWith.months.july":"lipiec", + "browse.startsWith.months.june":"czerwiec", + "browse.startsWith.months.march":"marzec", + "browse.startsWith.months.may":"maj", + "browse.startsWith.months.none":"(wybierz miesiąc)", + "browse.startsWith.months.none.label":"Wybierz miesiąc wydania", + "browse.startsWith.months.november":"listopad", + "browse.startsWith.months.october":"październik", + "browse.startsWith.months.september":"wrzesień", + "browse.startsWith.submit":"Zastosuj", + "browse.startsWith.type_date":"Lub wybierz datę (rok-miesiąc) i kliknij 'Przeglądaj'", + "browse.startsWith.type_date.label":"Lub wybierz datę (rok-miesiąc) i kliknij przycisk przeglądania", + "browse.startsWith.type_text":"Wpisz kilka pierwszych liter i kliknij przycisk przeglądania", + "browse.title":"Przeglądaj {{ collection }} wg {{ field }} {{ value }}", + "chips.remove":"Usuń chip", + "collection.create.head":"Utwórz kolekcję", + "collection.create.notifications.success":"Udało się utworzyć kolekcję", + "collection.create.sub-head":"Udało się utworzyć kolekcję dla zbioru {{ parent }}", + "collection.curate.header":"Administrator kolekcji: {{collection}}", + "collection.delete.cancel":"Anuluj", + "collection.delete.confirm":"Zatwierdź", + "collection.delete.processing":"Usuwanie", + "collection.delete.head":"Usuń kolekcję", + "collection.delete.notification.fail":"Kolekcja nie może być usunięt", + "collection.delete.notification.success":"Udało się usunąć kolekcję", + "collection.delete.text":"Czy na pewno chcesz usunąć kolekcję \"{{ dso }}\"", + "collection.edit.delete":"Usuń kolekcję", + "collection.edit.head":"Edytuj kolekcję", + "collection.edit.breadcrumbs":"Edytuj kolekcję", + "collection.edit.tabs.mapper.head":"Item Mapper", + "collection.edit.tabs.item-mapper.title":"Edytuj kolekcję - Item Mapper", + "collection.edit.item-mapper.cancel":"Anuluj", + "collection.edit.item-mapper.collection":"Kolekcja: \"{{name}}\"", + "collection.edit.item-mapper.confirm":"Mapuj wybrane elementy", + "collection.edit.item-mapper.description":"To jest narzędzie mapowania elementów, które pozwala administratorom kolekcji mapować elementy z innych kolekcji do tej kolekcji. Możesz wyszukiwać elementy z innych kolekcji i mapować je lub przeglądać listę aktualnie zmapowanych elementów.", + "collection.edit.item-mapper.head":"Item Mapper - Mapuj pozycje z innych kolekcji", + "collection.edit.item-mapper.no-search":"Wpisz co chcesz wyszukać", + "collection.edit.item-mapper.notifications.map.error.content":"Wystąpiły błędy podczas mapowania {{amount}} pozycji.", + "collection.edit.item-mapper.notifications.map.error.head":"Mapowanie błędów", + "collection.edit.item-mapper.notifications.map.success.content":"Udało się zmapować {{amount}} pozycji.", + "collection.edit.item-mapper.notifications.map.success.head":"Mapowanie zakończone", + "collection.edit.item-mapper.notifications.unmap.error.content":"Błędy wystąpiły podczas usuwania mapowania z {{amount}} elementów.", + "collection.edit.item-mapper.notifications.unmap.error.head":"Usuń błędy mapowania", + "collection.edit.item-mapper.notifications.unmap.success.content":"Udało się usunąć błędy mapowania z {{amount}} elementów.", + "collection.edit.item-mapper.notifications.unmap.success.head":"Usuwanie mapowania zakończone", + "collection.edit.item-mapper.remove":"Usuń wybrane mapowanie elementów", + "collection.edit.item-mapper.search-form.placeholder":"Wyszukaj pozycje...", + "collection.edit.item-mapper.tabs.browse":"Wyszukaj mapowane elementy", + "collection.edit.item-mapper.tabs.map":"Mapuj nowe elementy", + "collection.edit.logo.delete.title":"Usuń", + "collection.edit.logo.delete-undo.title":"Cofnij usunięcie", + "collection.edit.logo.label":"Logo kolekcji", + "collection.edit.logo.notifications.add.error":"Przesyłanie logo kolekcji nie powiodło się. Proszę zweryfikować zawartość przed ponowną ", + "collection.edit.logo.notifications.add.success":"Udało się przesłać logo kolekcji.", + "collection.edit.logo.notifications.delete.success.title":"Logo usunięte", + "collection.edit.logo.notifications.delete.success.content":"Udało się usunąć logo kolekcji", + "collection.edit.logo.notifications.delete.error.title":"Błąd podczas usuwania loga", + "collection.edit.logo.upload":"Upuść logo kolekcji, aby je wgrać", + "collection.edit.notifications.success":"Udało się edytować kolekcję", + "collection.edit.return":"Powrót", + "collection.edit.tabs.curate.head":"Kurator", + "collection.edit.tabs.curate.title":"Edytowanie kolekcji - kurator", + "collection.edit.tabs.authorizations.head":"Autoryzacje", + "collection.edit.tabs.authorizations.title":"Edytowanie kolekcji - autoryzacje", + "collection.edit.tabs.metadata.head":"Edytuj metadane", + "collection.edit.tabs.metadata.title":"Edytowanie kolekcji - metadane", + "collection.edit.tabs.roles.head":"Przypisz role", + "collection.edit.tabs.roles.title":"Edytowanie kolekcji - role", + "collection.edit.tabs.source.external":"Ta kolekcja pobiera swoją zawartość z zewnętrznego źródła", + "collection.edit.tabs.source.form.errors.oaiSource.required":"Musisz wskazać id docelowej kolekcji.", + "collection.edit.tabs.source.form.harvestType":"Odczytywanie zawartości", + "collection.edit.tabs.source.form.head":"Skonfiguruj zewnętrzne źródło", + "collection.edit.tabs.source.form.metadataConfigId":"Format metadanych", + "collection.edit.tabs.source.form.oaiSetId":"Określony zestaw ID OAI", + "collection.edit.tabs.source.form.oaiSource":"Dostawca OAI", + "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_BITSTREAMS":"Odczytaj metadane i pliki (wymaga wsparcia ORE)", + "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_REF":"Odczytaj metadane i bibliografię (wymaga wsparcia ORE)", + "collection.edit.tabs.source.form.options.harvestType.METADATA_ONLY":"Odczytaj tylko metadane", + "collection.edit.tabs.source.head":"Źródło treści", + "collection.edit.tabs.source.notifications.discarded.content":"Twoje zmiany zostały odrzucone. Aby odzyskać swoje zmiany wybierz 'Powrót'", + "collection.edit.tabs.source.notifications.discarded.title":"Zmiany odrzucone", + "collection.edit.tabs.source.notifications.invalid.content":"Zmiany nie zostały zapisane. Sprawdź czy wszystkie pola są wypełnione poprawne przed zapisem.", + "collection.edit.tabs.source.notifications.invalid.title":"Nieprawidłowe metadane", + "collection.edit.tabs.source.notifications.saved.content":"Zmiany wprowadzone w kolekcji zostały zapisane.", + "collection.edit.tabs.source.notifications.saved.title":"Źródło treści zapisane", + "collection.edit.tabs.source.title":"Collection Edit - Źródło treści", + "collection.edit.template.add-button":"Dodaj", + "collection.edit.template.breadcrumbs":"Szablon pozycji", + "collection.edit.template.cancel":"Anuluj", + "collection.edit.template.delete-button":"Usuń", + "collection.edit.template.edit-button":"Edytuj", + "collection.edit.template.error":"Wystąpił błąd podczas odzyskiwania szablonu pozycji", + "collection.edit.template.head":"Edytuj szablon dla kolekcji \"{{ collection }}\"", + "collection.edit.template.label":"Szablon pozycji", + "collection.edit.template.loading":"ładowanie szablonu pozycji...", + "collection.edit.template.notifications.delete.error":"Nie udało się usunąć szablonu pozycji", + "collection.edit.template.notifications.delete.success":"Udało się usunąć szablon pozycji", + "collection.edit.template.title":"Edytuj szablon pozycji", + "collection.form.abstract":"Opis skrócony", + "collection.form.description":"Tekst powitalny (HTML)", + "collection.form.errors.title.required":"Wpisz nazwę kolekcji", + "collection.form.license":"Licencja", + "collection.form.provenance":"Pochodzenie", + "collection.form.rights":"Tekst praw autorskich (HTML)", + "collection.form.tableofcontents":"Wiadomości (HTML)", + "collection.form.title":"Nazwa", + "collection.form.entityType":"Typ danych", + "collection.page.browse.recent.head":"Ostatnie zgłoszenia", + "collection.page.browse.recent.empty":"Brak pozycji do wyświetlenia", + "collection.page.edit":"Edytuj kolekcję", + "collection.page.handle":"Stały URI dla kolekcji", + "collection.page.license":"Licencja", + "collection.page.news":"Wiadomości", + "collection.select.confirm":"Zaakceptuj zaznaczone", + "collection.select.empty":"Brak kolekcji do wyświetlenia", + "collection.select.table.title":"Tytuł", + "collection.source.controls.head":"Kontrolki odczytywania", + "collection.source.controls.test.submit.error":"Coś poszło nie tak podczas rozpoczynania testów ustawień", + "collection.source.controls.test.failed":"Scenariusz testowy ustawień nie zadziałał", + "collection.source.controls.test.completed":"Scenariusz testowy ustawień został zakończony", + "collection.source.controls.test.submit":"Konfiguracja testowa", + "collection.source.controls.test.running":"Testowanie konfiguracji...", + "collection.source.controls.import.submit.success":"Import został rozpoczęty", + "collection.source.controls.import.submit.error":"Coś poszło nie tak podczas rozpoczynania importu", + "collection.source.controls.import.submit":"Importuj teraz", + "collection.source.controls.import.running":"Importowanie...", + "collection.source.controls.import.failed":"Wystąpił błąd podczas importu", + "collection.source.controls.import.completed":"Import zakończony", + "collection.source.controls.reset.submit.success":"Reset ustawień i powtórny import zostały rozpoczęte poprawnie", + "collection.source.controls.reset.submit.error":"Coś poszło nie tak podczas rozpoczynania zresetowanego, powtórnego importu", + "collection.source.controls.reset.failed":"Wystąpił błąd podczas resetowania ustawień i ponownego importu", + "collection.source.controls.reset.completed":"Reset ustawień i powtórny import zostały zakończone", + "collection.source.controls.reset.submit":"Resetowanie i powtórny import", + "collection.source.controls.reset.running":"Resetowanie i powtórny import...", + "collection.source.controls.harvest.status":"Status odczytywania:", + "collection.source.controls.harvest.start":"Czas rozpoczęcia odczytywania:", + "collection.source.controls.harvest.last":"Czas ostatniego odczytywania:", + "collection.source.controls.harvest.message":"Informacje nt. odczytywania:", + "collection.source.controls.harvest.no-information":"bd.", + "collection.source.update.notifications.error.content":"Te ustawienia zostały przetestowane i nie działają.", + "collection.source.update.notifications.error.title":"Błąd serwera", + "communityList.breadcrumbs":"Lista zbiorów", + "communityList.tabTitle":"Lista zbiorów", + "communityList.title":"Lista zbiorów", + "communityList.showMore":"Pokaż więcej", + "community.create.head":"Utwórz zbiór", + "community.create.notifications.success":"Udało się utworzyć zbiór", + "community.create.sub-head":"Utwórz podzbiór dla zbioru {{ parent }}", + "community.curate.header":"Zarządzaj zbiorem: {{community}}", + "community.delete.cancel":"Anuluj", + "community.delete.confirm":"Potwierdź", + "community.delete.processing":"Usuwanie...", + "community.delete.head":"Usuń zbiór", + "community.delete.notification.fail":"Zbiór nie może być usunięty", + "community.delete.notification.success":"Udało się usunąć zbiór", + "community.delete.text":"Czy na pewno chcesz usunąć zbiór \"{{ dso }}\"", + "community.edit.delete":"Usuń ten zbiór", + "community.edit.head":"Edytuj zbiór", + "community.edit.breadcrumbs":"Edytuj zbiór", + "community.edit.logo.delete.title":"Usuń logo", + "community.edit.logo.delete-undo.title":"Cofnij usunięcie", + "community.edit.logo.label":"Logo zbioru", + "community.edit.logo.notifications.add.error":"Przesłanie loga zbioru nie powiodło się. Sprawdź czy wszystkie parametry są odpowiednie przed próbą ponownego przesłania.", + "community.edit.logo.notifications.add.success":"Przesłanie loga powiodło się.", + "community.edit.logo.notifications.delete.success.title":"Logo usunięte", + "community.edit.logo.notifications.delete.success.content":"Usunięcie loga zbioru powiodło się", + "community.edit.logo.notifications.delete.error.title":"Błąd podczas usuwania loga", + "community.edit.logo.upload":"Upuść logo zbioru, aby je przesłać", + "community.edit.notifications.success":"Udało się edytować zbiór", + "community.edit.notifications.unauthorized":"Nie masz uprawnień, aby wykonać te zmiany", + "community.edit.notifications.error":"Wystąpił błąd podczas edycji zbioru", + "community.edit.return":"Cofnij", + "community.edit.tabs.curate.head":"Administruj", + "community.edit.tabs.curate.title":"Edycja zbioru - administrator", + "community.edit.tabs.metadata.head":"Edytuj metadane", + "community.edit.tabs.metadata.title":"Edycja zbioru - metadane", + "community.edit.tabs.roles.head":"Przypisz role", + "community.edit.tabs.roles.title":"Edycja zbioru - role", + "community.edit.tabs.authorizations.head":"Uprawnienia", + "community.edit.tabs.authorizations.title":"Edycja zbioru - uprawnienia", + "community.listelement.badge":"Zbiór", + "comcol-role.edit.no-group":"Brak", + "comcol-role.edit.create":"Utwórz", + "comcol-role.edit.restrict":"Ogranicz", + "comcol-role.edit.delete":"Usuń", + "comcol-role.edit.community-admin.name":"Administratorzy", + "comcol-role.edit.collection-admin.name":"Administratorzy", + "comcol-role.edit.community-admin.description":"Administratorzy zbioru mogą tworzyć podzbiory lub kolekcje i zarządzać nimi lub przydzielać zarządzanie tymi podzbiorami lub kolekcji innym użytkownikom. Ponadto decydują, kto może przesyłać elementy do dowolnych podkolekcji, edytować metadane pozycji (po przesłaniu) i dodawać (mapować) istniejące pozycje z innych kolekcji (z zastrzeżeniem autoryzacji).", + "comcol-role.edit.collection-admin.description":"Administratorzy kolekcji decydują o tym, kto może przesyłać pozycje do kolekcji, edytować metadane pozycji (po ich przesłaniu) oraz dodawać (mapować) istniejące elementy z innych kolekcji do tej kolekcji (z zastrzeżeniem uprawnień dla danej kolekcji).", + "comcol-role.edit.submitters.name":"Zgłaszający", + "comcol-role.edit.submitters.description":"Użytkownicy i grupy, którzy mają uprawnienia do przesyłania nowych pozycji do tej kolekcji.", + "comcol-role.edit.item_read.name":"Domyślny dostęp do odczytu pozycji", + "comcol-role.edit.item_read.description":"Użytkownicy i grupy, które mogą odczytywać nowe pozycje zgłoszone do tej kolekcji. Zmiany w tej roli nie działają wstecz. Istniejące pozycje w systemie będą nadal widoczne dla osób, które miały dostęp do odczytu w momencie ich dodania.", + "comcol-role.edit.item_read.anonymous-group":"Domyślny odczyt dla nowych pozycji jest obecnie ustawiony na Anonimowy.", + "comcol-role.edit.bitstream_read.name":"Domyślny dostęp do oczytu plików", + "comcol-role.edit.bitstream_read.description":"Administratorzy zbiorów mogą tworzyć podzbiory lub kolekcje, a także zarządzać nimi. Ponadto decydują o tym, kto może przesyłać elementy do podkolekcji, edytować metadane pozycji (po ich przesłaniu) oraz dodawać (mapować) istniejące pozycje z innych kolekcji (pod warunkiem posiadania odpowiednich uprawnień).", + "comcol-role.edit.bitstream_read.anonymous-group":"Domyślny status odczytu dla nowych plików to Anonimowy.", + "comcol-role.edit.editor.name":"Redaktorzy", + "comcol-role.edit.editor.description":"Redaktorzy mogą edytować metadane nowych pozycji, a następnie akceptować je lub odrzucać.", + "comcol-role.edit.finaleditor.name":"Redaktorzy końcowi", + "comcol-role.edit.finaleditor.description":"Redaktorzy końcowi mogą edytować metadane nowych pozycji, ale nie mogę odrzucać pozycji.", + "comcol-role.edit.reviewer.name":"Recenzenci", + "comcol-role.edit.reviewer.description":"Recenzenci mogą akceptować lub odrzucać nowe pozycje, ale nie mogę edytować ich metadanych.", + "community.form.abstract":"Opis skrócony", + "community.form.description":"Wstęp (HTML)", + "community.form.errors.title.required":"Wprowadź nazwę zbioru", + "community.form.rights":"Prawa autoskie (HTML)", + "community.form.tableofcontents":"Wiadomości (HTML)", + "community.form.title":"Nazwa", + "community.page.edit":"Edytuj ten zbiór", + "community.page.handle":"Stały URI zbioru", + "community.page.license":"Licencja", + "community.page.news":"Wiadomości", + "community.all-lists.head":"Podzbiory i kolekcje", + "community.sub-collection-list.head":"Kolekcje w tym zbiorze", + "community.sub-community-list.head":"Kolekcje w tym zbiorze", + "cookies.consent.accept-all":"Zaakceptuj wszystko", + "cookies.consent.accept-selected":"Zaakceptuj wybrane", + "cookies.consent.app.opt-out.description":"Aplikacja jest domyślnie włączona (możesz ją wyłączyć)", + "cookies.consent.app.opt-out.title":"(możesz ją wyłaczyć)", + "cookies.consent.app.purpose":"cel", + "cookies.consent.app.required.description":"Ta aplikacja jest zawsze wymagana", + "cookies.consent.app.required.title":"(zawsze wymagana)", + "cookies.consent.update":"Od ostatniej wizyty zostały wprowadzone zmiany. Zweryfikuj swoje zgody.", + "cookies.consent.close":"Zamknij", + "cookies.consent.decline":"Odrzuć", + "cookies.consent.content-notice.description":"Zbieramy i przetwarzamy Twoje dane do następujących celów: weryfikacja, preferencje, zgody i statystyka.
    Jeśli chcesz się dowiedzieć więcej, przycztaj naszą {privacyPolicy}.", + "cookies.consent.content-notice.learnMore":"Dostosuj", + "cookies.consent.content-modal.description":"Tutaj są wyświetlane informacje, które zbieramy o Tobie. Możesz je dostosować według swojego uznania.", + "cookies.consent.content-modal.privacy-policy.name":"polityka prywatności", + "cookies.consent.content-modal.privacy-policy.text":"Aby dowiedzieć się więcej przeczytaj naszą {privacyPolicy}.", + "cookies.consent.content-modal.title":"Informacje, które zbieramy", + "cookies.consent.app.title.authentication":"Logowanie", + "cookies.consent.app.description.authentication":"Musisz się zalogować", + "cookies.consent.app.title.preferences":"Preferencje", + "cookies.consent.app.description.preferences":"Wymagane, aby zapisać Twoje preferencje", + "cookies.consent.app.title.acknowledgement":"Zgody", + "cookies.consent.app.description.acknowledgement":"Wymagane, aby zapisać Twoje preferencje", + "cookies.consent.app.title.google-analytics":"Google Analytics", + "cookies.consent.app.description.google-analytics":"Pozwól na śledzenie do celów statystycznych", + "cookies.consent.purpose.functional":"Funkcjonalne", + "cookies.consent.purpose.statistical":"Statystyczne", + "curation-task.task.checklinks.label":"Sprawdź odnośniki w metadanych", + "curation-task.task.noop.label":"NOOP", + "curation-task.task.profileformats.label":"Profil formatów plików", + "curation-task.task.requiredmetadata.label":"Sprawdź poprawność wymaganych metadanych", + "curation-task.task.translate.label":"Microsoft Translator", + "curation-task.task.vscan.label":"Skan antywirusowy", + "curation.form.task-select.label":"Zadanie:", + "curation.form.submit":"Start", + "curation.form.submit.success.head":"Udało się rozpocząć zadanie administratora", + "curation.form.submit.success.content":"Zostaniesz przeniesiony na stronę procesu.", + "curation.form.submit.error.head":"Nie udało się się zakończyć zadania administratora", + "curation.form.submit.error.content":"Wystąpił błąd podczas rozpoczynania zadania administracyjnego.", + "curation.form.handle.label":"Automatyzacja:", + "curation.form.handle.hint":"Wskazówka: Wpisz [prefix swojego identyfikatora]/0, aby zautomatyzować zadanie (nie wszystkie zadania mogą wspierać tę funkcję)", + "deny-request-copy.email.message":"Drogi użytkowniku {{ recipientName }},\nW odpowiedzi na Państwa zapytanie, przykro mi poinformować, że to niemożliwe, aby przestać kopię pliku, o który Państwo prosili: \"{{ itemUrl }}\" ({{ itemName }}), którego jestem autorem.\n\nPozdrawiam serdecznie,\n{{ authorName }} <{{ authorEmail }}>", + "deny-request-copy.email.subject":"Wystąp o kopię dokumentu", + "deny-request-copy.error":"Wystąpił błąd", + "deny-request-copy.header":"Odrzuć prośbę o przesłanie kopii dokumentu", + "deny-request-copy.intro":"Ta wiadomość zostanie przesłana do osoby, która wystąpiła o dostęp", + "deny-request-copy.success":"Z powodzeniem odrzucono prośbę o udostępnienie pozycji", + "dso.name.untitled":"Brak tytułu", + "dso-selector.claim.item.head":"Wskazówki profilu", + "dso-selector.claim.item.body":"Istnieją profile, które mogą odnosić się do Ciebie. Jeśli, któryś z tych profilów jest Twój, wybierz go i przejdź do szczegółów, z opcji wybierz opcję przypisania profilu. W innym przypadku możesz utworzyć nowy profil z szablonu, wybierając przycisk poniżej.", + "dso-selector.claim.item.create-from-scratch":"Utwórz nowy", + "dso-selector.claim.item.not-mine-label":"Żaden nie jest mój", + "dso-selector.create.collection.head":"Nowa kolekcja", + "dso-selector.create.collection.sub-level":"Utwórz nową kolekcję w", + "dso-selector.create.community.head":"Nowy zbiór", + "dso-selector.create.community.sub-level":"Utwórz nowy zbiór", + "dso-selector.create.community.top-level":"Utwórz nowy nadrzędny zbiór", + "dso-selector.create.item.head":"Nowa pozycja", + "dso-selector.create.item.sub-level":"Utwórz nową pozycję w", + "dso-selector.create.submission.head":"Nowe zgłoszenie", + "dso-selector.edit.collection.head":"Edytuj kolekcję", + "dso-selector.edit.community.head":"Edytuj zbiór", + "dso-selector.edit.item.head":"Edytuj pozycję", + "dso-selector.error.title":"Wystąpił błąd podczas wyszukiwania typu {{ type }}", + "dso-selector.export-metadata.dspaceobject.head":"Eksportuj metadane z", + "dso-selector.no-results":"Nie znaleziono {{ type }}", + "dso-selector.placeholder":"Wyszukaj {{ type }}", + "dso-selector.select.collection.head":"Wybierz kolekcję", + "dso-selector.set-scope.community.head":"Wybierz wyszukiwanie zakresu", + "dso-selector.set-scope.community.button":"Wyszukaj w całym DSpace", + "dso-selector.set-scope.community.input-header":"Wyszukaj zbiór lub kolekcję", + "confirmation-modal.export-metadata.header":"Eksportuj metadane z {{ dsoName }}", + "confirmation-modal.export-metadata.info":"Czy na pewno chcesz eksportować metadane z {{ dsoName }}", + "confirmation-modal.export-metadata.cancel":"Anuluj", + "confirmation-modal.export-metadata.confirm":"Eksportuj", + "confirmation-modal.delete-eperson.header":"Usuń użytkownika \"{{ dsoName }}\"", + "confirmation-modal.delete-eperson.info":"Czy na pewno chcesz usunąć użytkownika \"{{ dsoName }}\"", + "confirmation-modal.delete-eperson.cancel":"Anuluj", + "confirmation-modal.delete-eperson.confirm":"Usuń", + "error.bitstream":"Wystąpił błąd podczas tworzenia plików", + "error.browse-by":"Wystąpił błąd podczas tworzenia pozycji", + "error.collection":"Wystąpił błąd podczas tworzenia kolekcji", + "error.collections":"Wystąpił błąd podczas tworzenia kolekcji", + "error.community":"Wystąpił błąd podczas tworzenia ziboru", + "error.identifier":"Nie znaleziono pozycji z podanym identyfikatorem", + "error.default":"Błąd", + "error.item":"Wystąpił błąd podczas tworzenia pozycji", + "error.items":"Wystąpił błąd podczas tworzenia pozycji", + "error.objects":"Wystąpił błąd podczas tworzenia obiektów", + "error.recent-submissions":"Wystąpił błąd podczas tworzenia ostatniego zgłoszenia", + "error.search-results":"Wystąpił błąd podczas tworzenia wyników wyszukiwania", + "error.sub-collections":"Wystąpił błąd podczas tworzenia podkolekcji", + "error.sub-communities":"Wystąpił błąd podczas tworzenia podzbiorów", + "error.submission.sections.init-form-error":"Wystąpił błąd w czasie inicjalizacji sekcji, sprawdź konfigurację. Szczegóły poniżej:

    ", + "error.top-level-communities":"Błąd podczas pobierania nadrzędnego zbioru", + "error.validation.license.notgranted":"Musisz wyrazić tę zgodę, aby przesłać swoje zgłoszenie. Jeśli nie możesz wyrazić zgody w tym momencie, możesz zapisać swoją pracę i wrócić do niej później lub usunąć zgłoszenie.", + "error.validation.pattern":"Te dane wejściowe są ograniczone przez aktualny wzór: {{ pattern }}.", + "error.validation.filerequired":"Przesłanie pliku jest obowiązkowe", + "error.validation.required":"Pole jest wymagane", + "error.validation.NotValidEmail":"E-mail nie jest poprawny", + "error.validation.emailTaken":"E-mail jest już zarejestrowany", + "error.validation.groupExists":"Ta grupa już istnieje", + "file-section.error.header":"Błąd podczas uzyskiwania plików dla tej pozycji", + "footer.copyright":"copyright © 2002-{{ year }}", + "footer.link.dspace":"oprogramowanie DSpace", + "footer.link.lyrasis":"LYRASIS", + "footer.link.cookies":"Ustawienia plików cookies", + "footer.link.privacy-policy":"Polityka prywatności", + "footer.link.end-user-agreement":"Umowa użytkownika", + "forgot-email.form.header":"Nie pamiętam hasła", + "forgot-email.form.info":"Zarejestruj się, aby otrzymywać wiadomości o nowych pozycjach w obserowanych kolekcjach, a także przesyłać nowe pozycje do repozytorium.", + "forgot-email.form.email":"Adres e-mail *", + "forgot-email.form.email.error.required":"Uzupełnij adres e-mail", + "forgot-email.form.email.error.pattern":"Uzupełnij prawidłowy adres e-mail", + "forgot-email.form.email.hint":"Ten adres e-mail będzie zweryfikowany i będziesz go używać jako swój login.", + "forgot-email.form.submit":"Wyślij", + "forgot-email.form.success.head":"Wysłano wiadomość weryfikacyjną", + "forgot-email.form.success.content":"Wiadomość została wysłana na adres e-mail {{ email }}. Zawiera ona unikatowy link i dalsze instrukcje postępowania.", + "forgot-email.form.error.head":"Błąd podczas rejestracji adresu e-mail", + "forgot-email.form.error.content":"Wystąpił błąd poczas próby rejestracji tego adresu e-mail: {{ email }}", + "forgot-password.title":"Nie pamiętam hasła", + "forgot-password.form.head":"Nie pamiętam hasła", + "forgot-password.form.info":"Wpisz nowe hasło w polu poniżej i potwierdź je wpisując je ponownie w drugim polu. Hasło powinno mieć co najmniej sześć znaków.", + "forgot-password.form.card.security":"Bezpieczeństwo", + "forgot-password.form.identification.header":"Identifikacja", + "forgot-password.form.identification.email":"Adres e-mail: ", + "forgot-password.form.label.password":"Hasło", + "forgot-password.form.label.passwordrepeat":"Potwierdź hasło", + "forgot-password.form.error.empty-password":"Wpisz hasło poniżej.", + "forgot-password.form.error.matching-passwords":"Hasła nie są identyczne.", + "forgot-password.form.notification.error.title":"Błąd podczas próby ustawienia nowego hasła", + "forgot-password.form.notification.success.content":"Resetowanie hasła udało się. Zalogowano jako stworzony przed momemntem użytkownik.", + "forgot-password.form.notification.success.title":"Resetowanie hasła udane", + "forgot-password.form.submit":"Wpisz hasło", + "form.add":"Dodaj", + "form.add-help":"Wybierz ten przycisk, aby dodać aktualny wpis lub dodać następny", + "form.cancel":"Anuluj", + "form.clear":"Wyczyść", + "form.clear-help":"Kliknij tutaj, aby usunąć wybraną wartość", + "form.discard":"Odrzuć", + "form.drag":"Przeciągnij", + "form.edit":"Edytuj", + "form.edit-help":"Kliknij tutaj, aby edytować wybraną wartość", + "form.first-name":"Imię", + "form.last-name":"Nazwisko", + "form.loading":"Ładowanie...", + "form.lookup":"Przeglądaj", + "form.lookup-help":"Kliknij tutaj, aby zobaczyć istniejące powiązania", + "form.no-results":"Nie znaleziono rezultatów", + "form.no-value":"Nie wprowadzono wartości", + "form.remove":"Usuń", + "form.save":"Zapisz", + "form.save-help":"Zapisz zmiany", + "form.search":"Wyszukaj", + "form.search-help":"Kliknij tutaj, aby wyszukać w istniejących komentarzach", + "form.submit":"Zapisz", + "form.repeatable.sort.tip":"Upuść nową pozycję w nowym miejscu", + "grant-deny-request-copy.deny":"Nie przesyłaj kopii", + "grant-deny-request-copy.email.back":"Cofnij", + "grant-deny-request-copy.email.message":"Wiadomości", + "grant-deny-request-copy.email.message.empty":"Proszę wprowadzić wiadomość", + "grant-deny-request-copy.email.permissions.info":"W tym miejscu możesz przemyśleć ograniczenie dostępu do dokumentu, aby odpowiadać na mniej próśb o dostęp. Jeśli chcesz wystąpić do administratorów reposytorium o zniesienie restrykcji, zaznacz okienko poniżej.", + "grant-deny-request-copy.email.permissions.label":"Ustaw jako otwarty dostęp", + "grant-deny-request-copy.email.send":"Wyślij", + "grant-deny-request-copy.email.subject":"Temat", + "grant-deny-request-copy.email.subject.empty":"Wpisz temat", + "grant-deny-request-copy.grant":"Wyślij kopię", + "grant-deny-request-copy.header":"Prośba o przesłanie kopii dokumentu", + "grant-deny-request-copy.home-page":"Zabierz mnie na stronę główną", + "grant-deny-request-copy.intro1":"Jeśli jesteś jednym z autorów dokumentu {{ name }}, wybierz jedną z poniższych opcji, aby odpowiedzieć zapytaniu użytkownika.", + "grant-deny-request-copy.intro2":"Po wybraniu opcji, zostaną wyświetlone sugerowane odpowiedzi, które można edytować.", + "grant-deny-request-copy.processed":"Ta prośba jest już procesowana. Możesz użyć przycisku poniżej, aby wrócić do strony głównej.", + "grant-request-copy.email.message":"Drogi użytkowniku {{ recipientName }},\nW odpowiedzi na Państwa zapytanie, miło mi poinformować, że w załączniku przesyłam kopię dokumentu, o który Państwo prosili: \"{{ itemUrl }}\" ({{ itemName }}), którego jestem autorem.\n\nPozdrawiam serdecznie,\n{{ authorName }} <{{ authorEmail }}>", + "grant-request-copy.email.subject":"Prośba o kopię dokumentu", + "grant-request-copy.error":"Wystąpił błąd", + "grant-request-copy.header":"Zezwól na wysłanie kopii dokumentu", + "grant-request-copy.intro":"To wiadomość zostanie wysłana do osoby, która wystąpiła o dostęp. Wskazane dokumenty zostaną dołączone jako załącznik.", + "grant-request-copy.success":"Prośba o dostęp do dokumentu została przyjęta", + "home.description":"", + "home.breadcrumbs":"Strona główna", + "home.search-form.placeholder":"Przeszukaj repozytorium...", + "home.title":"Strona główna", + "home.top-level-communities.head":"Zbiory w DSpace", + "home.top-level-communities.help":"Przeszukaj kolekcje", + "info.end-user-agreement.accept":"Przeczytałem/am i akceptuję umowę użytkownika", + "info.end-user-agreement.accept.error":"Błąd wystąpił podczas akceptowania umowy użytkownika", + "info.end-user-agreement.accept.success":"Udało się zaktualizować umowę użytkownika", + "info.end-user-agreement.breadcrumbs":"Umowa użytkownika", + "info.end-user-agreement.buttons.cancel":"Anuluj", + "info.end-user-agreement.buttons.save":"Zapisz", + "info.end-user-agreement.head":"Umowa użytkownika", + "info.end-user-agreement.title":"Umowa użytkownika", + "info.privacy.breadcrumbs":"Oświadczenie polityki prywatności", + "info.privacy.head":"Oświadczenie polityki prywatności", + "info.privacy.title":"Oświadczenie polityki prywatności", + "item.alerts.private":"Ta pozycja jest prywatna", + "item.alerts.withdrawn":"Ta pozycja została wycofana", + "item.edit.authorizations.heading":"Za pomocą tego edytora możesz przeglądać i zmieniać polityki dla danej pozycji, a także zmieniać polityki dla poszczególnych części pozycji: paczek i strumieni bitów. W skrócie, pozycja jest kontenerem pakietów, a pakiety są kontenerami strumieni bitów. Kontenery zazwyczaj mają polityki ADD/REMOVE/READ/WRITE, natomiast strumienie bitów mają tylko polityki READ/WRITE.", + "item.edit.authorizations.title":"Edytuj politykę tej pozycji", + "item.badge.private":"Prywatny status publikacji", + "item.badge.withdrawn":"Wycofane publikacje", + "item.bitstreams.upload.bundle":"Pakiet", + "item.bitstreams.upload.bundle.placeholder":"Wybierz pakiet", + "item.bitstreams.upload.bundle.new":"Utworz pakiet", + "item.bitstreams.upload.bundles.empty":"Ta pozycja nie zawiera żadnych pakietów, do których można przesłać strumień bitów.", + "item.bitstreams.upload.cancel":"Anuluj", + "item.bitstreams.upload.drop-message":"Upuść plik, aby przesłać", + "item.bitstreams.upload.item":"Pozycja: ", + "item.bitstreams.upload.notifications.bundle.created.content":"Udało się utworzyć nowy pakiet.", + "item.bitstreams.upload.notifications.bundle.created.title":"Utwórz pakiet", + "item.bitstreams.upload.notifications.upload.failed":"Zweryfikuj pliki przed spróbowaniem ponownie.", + "item.bitstreams.upload.title":"Prześlij strumień bitów", + "item.edit.bitstreams.bundle.edit.buttons.upload":"Prześlij", + "item.edit.bitstreams.bundle.displaying":"Obecnie wyświetlono {{ amount }} plików z {{ total }}.", + "item.edit.bitstreams.bundle.load.all":"Załaduj wszystkie ({{ total }})", + "item.edit.bitstreams.bundle.load.more":"Załaduj więcej", + "item.edit.bitstreams.bundle.name":"PACZKA: {{ name }}", + "item.edit.bitstreams.discard-button":"Odrzuć", + "item.edit.bitstreams.edit.buttons.download":"Pobierz", + "item.edit.bitstreams.edit.buttons.drag":"Przeciągnij", + "item.edit.bitstreams.edit.buttons.edit":"Edytuj", + "item.edit.bitstreams.edit.buttons.remove":"Usuń", + "item.edit.bitstreams.edit.buttons.undo":"Cofnij zmiany", + "item.edit.bitstreams.empty":"Ta pozycja nie zawiera żadnych strumieni bitów. Wybierz strumienie do załadowania, aby je utworzyć.", + "item.edit.bitstreams.headers.actions":"Akcje", + "item.edit.bitstreams.headers.bundle":"Paczka", + "item.edit.bitstreams.headers.description":"Opis", + "item.edit.bitstreams.headers.format":"Format", + "item.edit.bitstreams.headers.name":"Nazwa", + "item.edit.bitstreams.notifications.discarded.content":"Twoje zmiany zostały odrzucone. Aby je przywrócić, wybierz przycisk 'Cofnij'", + "item.edit.bitstreams.notifications.discarded.title":"Zmiany odrzucone", + "item.edit.bitstreams.notifications.move.failed.title":"Błąd podczas przenoszenia plików", + "item.edit.bitstreams.notifications.move.saved.content":"Zmiany pozycji dla pliku tej pozycji oraz jego paczki zostały zapisane.", + "item.edit.bitstreams.notifications.move.saved.title":"Zmiana pozycji została zapisana", + "item.edit.bitstreams.notifications.outdated.content":"Pozycja została w międzyczasie zmieniona przez innego użytkownika. Twoje zmiany zostały cofnięte, aby uniknąć ewentualnych konfliktów", + "item.edit.bitstreams.notifications.outdated.title":"Zmiany nieaktualne", + "item.edit.bitstreams.notifications.remove.failed.title":"Błąd podczas usuwania pliku", + "item.edit.bitstreams.notifications.remove.saved.content":"Twoje zmiany dotyczące usunięcia plików z tej pozycji zostały zapisane.", + "item.edit.bitstreams.notifications.remove.saved.title":"Zmiany dotyczące usunięcia zapisane", + "item.edit.bitstreams.reinstate-button":"Cofnij", + "item.edit.bitstreams.save-button":"Zapisz", + "item.edit.bitstreams.upload-button":"Prześlij", + "item.edit.delete.cancel":"Anuluj", + "item.edit.delete.confirm":"Usuń", + "item.edit.delete.description":"Czy jesteś pewien, że ta pozycja powinna zostać całkowicie usunięta? Ostrożnie: Teraz nie pozostanie po tej pozycji żaden ślad.", + "item.edit.delete.error":"Błąd wystąpił podczas usuwania pozycji", + "item.edit.delete.header":"Usuń pozycję: {{ id }}", + "item.edit.delete.success":"Ta pozycja została usunięta", + "item.edit.head":"Edytuj pozycję", + "item.edit.breadcrumbs":"Edytuj pozycję", + "item.edit.tabs.disabled.tooltip":"Nie masz dostępu do tej strony", + "item.edit.tabs.mapper.head":"Mapper kolekcji", + "item.edit.tabs.item-mapper.title":"Edytowanie pozycji - Mapper kolekcji", + "item.edit.item-mapper.buttons.add":"Mapowanie pozycji do wybranych kolekcji", + "item.edit.item-mapper.buttons.remove":"Usuń mapowanie pozycji do wybranych kolekcji", + "item.edit.item-mapper.cancel":"Anuluj", + "item.edit.item-mapper.description":"To jest narzędzie do mapowania elementów, które pozwala administratorom mapować tę pozycję do innych kolekcji. Możesz wyszukiwać kolekcje i je mapować lub przeglądać listę kolekcji, do których dana pozycja jest aktualnie zmapowana.", + "item.edit.item-mapper.head":"Mapper pozycji - Mapowanie pozycji do kolekcji", + "item.edit.item-mapper.item":"Pozycja: \"{{name}}\"", + "item.edit.item-mapper.no-search":"Wpisz zapytanie, które chcesz wyszukać", + "item.edit.item-mapper.notifications.add.error.content":"Wystąpiły błędy dla mapowania pozycji w {{amount}} kolekcjach.", + "item.edit.item-mapper.notifications.add.error.head":"Błędy mapowania", + "item.edit.item-mapper.notifications.add.success.content":"Udało się zmapować elementy dla {{amount}} kolekcji.", + "item.edit.item-mapper.notifications.add.success.head":"Mapowanie zakończone", + "item.edit.item-mapper.notifications.remove.error.content":"Wystąpiły błędy podczas usuwania mapowania do {{amount}} kolekcji.", + "item.edit.item-mapper.notifications.remove.error.head":"Usunięcie mapowania błędów", + "item.edit.item-mapper.notifications.remove.success.content":"Udało się usunąć mapowanie pozycji w {{amount}} kolekcjach.", + "item.edit.item-mapper.notifications.remove.success.head":"Usuwanie mapowania zakończone", + "item.edit.item-mapper.search-form.placeholder":"Przeszukaj kolekcje...", + "item.edit.item-mapper.tabs.browse":"Przeglądaj zmapowane kolekcje", + "item.edit.item-mapper.tabs.map":"Mapuj nowe kolekcje", + "item.edit.metadata.add-button":"Dodaj", + "item.edit.metadata.discard-button":"Odrzuć", + "item.edit.metadata.edit.buttons.edit":"Edytuj", + "item.edit.metadata.edit.buttons.remove":"Usuń", + "item.edit.metadata.edit.buttons.undo":"Cofnij zmiany", + "item.edit.metadata.edit.buttons.unedit":"Zatrzymaj edycję", + "item.edit.metadata.empty":"Ta pozycja nie zawiera żadnych metadanych. Wybierz Dodaj, aby dodać metadane.", + "item.edit.metadata.headers.edit":"Edytuj", + "item.edit.metadata.headers.field":"Pole", + "item.edit.metadata.headers.language":"Język", + "item.edit.metadata.headers.value":"Wartość", + "item.edit.metadata.metadatafield.invalid":"Wybierz aktualne pole metadanych", + "item.edit.metadata.notifications.discarded.content":"Twoje zmiany zostały odrzucone. Aby wgrać je ponownie wybierz przycisk 'Cofnij'", + "item.edit.metadata.notifications.discarded.title":"Zmiany odrzucone", + "item.edit.metadata.notifications.error.title":"Wystąpił błąd", + "item.edit.metadata.notifications.invalid.content":"Twoje zmiany nie zostały zapisane. Przed zapisaniem upewnij się, że wszystkie pola są wypełnione prawidłowo.", + "item.edit.metadata.notifications.invalid.title":"Nieprawidłowe metadane", + "item.edit.metadata.notifications.outdated.content":"Pozycja została w międzyczasie zmieniona przez innego użytkownika. Twoje zmiany zostały cofnięte, aby zapobiec ewentualnym konfliktom", + "item.edit.metadata.notifications.outdated.title":"Zmiany nieaktualne", + "item.edit.metadata.notifications.saved.content":"Twoje zmiany metadanych tej pozycji zostały zapisane.", + "item.edit.metadata.notifications.saved.title":"Metadane zostały zapisane", + "item.edit.metadata.reinstate-button":"Cofnij", + "item.edit.metadata.save-button":"Zapisz", + "item.edit.modify.overview.field":"Pole", + "item.edit.modify.overview.language":"Język", + "item.edit.modify.overview.value":"Wartość", + "item.edit.move.cancel":"Anuluj", + "item.edit.move.save-button":"Zapisz", + "item.edit.move.discard-button":"Odrzuć", + "item.edit.move.description":"Wybierz kolekcję, do której chcesz przenieść tę pozycję. Aby zawęzić listę wyświetlanych kolekcji, możesz wprowadzić zapytanie w polu wyszukiwania.", + "item.edit.move.error":"Wystąpił błąd podczas przenoszenia pozycji", + "item.edit.move.head":"Przenieś pozycję: {{id}}", + "item.edit.move.inheritpolicies.checkbox":"Dziedziczenie polityk", + "item.edit.move.inheritpolicies.description":"Dziedzczenie domyślnych polityk z kolekcji docelowej", + "item.edit.move.move":"Przenieś", + "item.edit.move.processing":"Przenoszenie...", + "item.edit.move.search.placeholder":"Wpisz zapytanie, aby wyszukać w kolekcjach", + "item.edit.move.success":"Pozycja została przeniesiona", + "item.edit.move.title":"Przenieś pozycję", + "item.edit.private.cancel":"Anuluj", + "item.edit.private.confirm":"Ukryj", + "item.edit.private.description":"Czy chcesz ukryć tę pozycję?", + "item.edit.private.error":"Wystąpił błąd podczas ukrywania pozycji", + "item.edit.private.header":"Ukryj pozycję: {{ id }}", + "item.edit.private.success":"Pozycja jest teraz ukryta", + "item.edit.public.cancel":"Anuluj", + "item.edit.public.confirm":"Upublicznij", + "item.edit.public.description":"Czy chcesz upublicznić tę pozycję?", + "item.edit.public.error":"Wystąpił błąd podczas upubliczniania pozycji", + "item.edit.public.header":"Upublicznij pozycję: {{ id }}", + "item.edit.public.success":"Pozycja jest teraz publiczna", + "item.edit.reinstate.cancel":"Anuluj", + "item.edit.reinstate.confirm":"Przywróć", + "item.edit.reinstate.description":"Czy chcesz przywrócić tę pozycję?", + "item.edit.reinstate.error":"Wystąpił błąd podczas przywracania pozycji", + "item.edit.reinstate.header":"Przywróć pozycję: {{ id }}", + "item.edit.reinstate.success":"Pozycja została przywrócona", + "item.edit.relationships.discard-button":"Odrzuć", + "item.edit.relationships.edit.buttons.add":"Dodaj", + "item.edit.relationships.edit.buttons.remove":"Usuń", + "item.edit.relationships.edit.buttons.undo":"Cofnij zmiany", + "item.edit.relationships.no-relationships":"Brak relacji", + "item.edit.relationships.notifications.discarded.content":"Twoje zmiany zostały cofnięte. Aby przywrócić zmiany wybierz przycisk 'Cofnij'", + "item.edit.relationships.notifications.discarded.title":"Zmiany zostały cofnięte", + "item.edit.relationships.notifications.failed.title":"Wystąpił błąd podczas edytowania relacji", + "item.edit.relationships.notifications.outdated.content":"Ta pozycja została właśnie zmieniona przez innego użytkownika. Twoje zmiany zostały cofnięte, aby uniknąć konfliktów", + "item.edit.relationships.notifications.outdated.title":"Zmiany są nieaktualne", + "item.edit.relationships.notifications.saved.content":"Twoje zmiany w relacjach tej pozycji zostały zapisane.", + "item.edit.relationships.notifications.saved.title":"Relacje zostały zapisane", + "item.edit.relationships.reinstate-button":"Cofnij", + "item.edit.relationships.save-button":"Zapisz", + "item.edit.relationships.no-entity-type":"Dodaj metadaną 'dspace.entity.type', aby umożliwić dodawanie relacji do pozycji", + "item.edit.return":"Cofnij", + "item.edit.tabs.bitstreams.head":"Pliki", + "item.edit.tabs.bitstreams.title":"Edycja pozycji - pliki", + "item.edit.tabs.curate.head":"Administruj", + "item.edit.tabs.curate.title":"Edytowanie pozycji - administruj", + "item.edit.tabs.metadata.head":"Metadane", + "item.edit.tabs.metadata.title":"Edycja pozycji - metadane", + "item.edit.tabs.relationships.head":"Relacje", + "item.edit.tabs.relationships.title":"Edycja pozycja - relacje", + "item.edit.tabs.status.buttons.authorizations.button":"Dostępy...", + "item.edit.tabs.status.buttons.authorizations.label":"Określu dostęp do pozycji", + "item.edit.tabs.status.buttons.delete.button":"Usuń permanentnie", + "item.edit.tabs.status.buttons.delete.label":"Usuń pozycję permanentnie", + "item.edit.tabs.status.buttons.mappedCollections.button":"Zmapowane kolekcje", + "item.edit.tabs.status.buttons.mappedCollections.label":"Zarządzaj mapowanymi kolekcjami", + "item.edit.tabs.status.buttons.move.button":"Przenieś...", + "item.edit.tabs.status.buttons.move.label":"Przenieś pozycję do innej kolekcji", + "item.edit.tabs.status.buttons.private.button":"Ukryj...", + "item.edit.tabs.status.buttons.private.label":"Ukry pozycję", + "item.edit.tabs.status.buttons.public.button":"Upublicznij...", + "item.edit.tabs.status.buttons.public.label":"Upublicznij pozycję", + "item.edit.tabs.status.buttons.reinstate.button":"Przywróć...", + "item.edit.tabs.status.buttons.reinstate.label":"Przywróć pozycję", + "item.edit.tabs.status.buttons.unauthorized":"You're not authorized to perform this action", + "item.edit.tabs.status.buttons.withdraw.button":"Wycofaj...", + "item.edit.tabs.status.buttons.withdraw.label":"Wycofaj z repozytorium", + "item.edit.tabs.status.description":"Witamy na stronie zarządzania pozycjami. Z tego miejsca możesz wycofać, przywrócić, przenieść lub usunąć daną pozycję. Możesz również aktualizować lub dodawać nowe metadane lub pliki..", + "item.edit.tabs.status.head":"Status", + "item.edit.tabs.status.labels.handle":"Identyfikator", + "item.edit.tabs.status.labels.id":"ID pozycji", + "item.edit.tabs.status.labels.itemPage":"Strona pozycji", + "item.edit.tabs.status.labels.lastModified":"Ostatnia modyfikacja", + "item.edit.tabs.status.title":"Edycja pozycji - Status", + "item.edit.tabs.versionhistory.head":"Historia wersji", + "item.edit.tabs.versionhistory.title":"Edycja pozycji - historia wersji", + "item.edit.tabs.versionhistory.under-construction":"Edytowanie lub dodawanie nowych wersji jest niedostępne w tego poziomu interfejsu.", + "item.edit.tabs.view.head":"Widok pozycji", + "item.edit.tabs.view.title":"Edycja pozycji - widok", + "item.edit.withdraw.cancel":"Anuluj", + "item.edit.withdraw.confirm":"Wycofaj", + "item.edit.withdraw.description":"Czy na pewno chcesz wycofać pozycję?", + "item.edit.withdraw.error":"Wystąpił błąd podczas wycofywania pozycji", + "item.edit.withdraw.header":"Wycofaj pozycję: {{ id }}", + "item.edit.withdraw.success":"Pozycja została wycofana", + "item.listelement.badge":"Pozycja", + "item.page.description":"Opis", + "item.page.journal-issn":"ISSN czasopisma", + "item.page.journal-title":"Tytuł czasopisma", + "item.page.publisher":"Wydawca", + "item.page.titleprefix":"Pozycja: ", + "item.page.volume-title":"Tytuł tomu", + "item.search.results.head":"Wyniki wyszukiwania pozycji", + "item.search.title":"Wyszukiwanie pozycji", + "item.page.abstract":"Abstrakt", + "item.page.author":"Autorzy", + "item.page.citation":"Cytowanie", + "item.page.collections":"Kolekcje", + "item.page.collections.loading":"Ładowanie...", + "item.page.collections.load-more":"Załaduj więcej", + "item.page.date":"Data", + "item.page.edit":"Edytuj pozycję", + "item.page.files":"Pliki", + "item.page.filesection.description":"Opis:", + "item.page.filesection.download":"Pobierz", + "item.page.filesection.format":"Format:", + "item.page.filesection.name":"Nazwa:", + "item.page.filesection.size":"Rozmiar:", + "item.page.journal.search.title":"Artykuły w czasopiśmie", + "item.page.link.full":"Zobacz szczegóły", + "item.page.link.simple":"Uproszczony widok", + "item.page.person.search.title":"Artykuły tego autora", + "item.page.related-items.view-more":"Pokaż o {{ amount }} więcej", + "item.page.related-items.view-less":"Ukryj {{ amount }}", + "item.page.relationships.isAuthorOfPublication":"Publikacje", + "item.page.relationships.isJournalOfPublication":"Publikacje", + "item.page.relationships.isOrgUnitOfPerson":"Autorzy", + "item.page.relationships.isOrgUnitOfProject":"Projekty naukowe", + "item.page.subject":"Słowa kluczowe", + "item.page.uri":"URI", + "item.page.bitstreams.view-more":"Pokaż więcej", + "item.page.bitstreams.collapse":"Pokaż mniej", + "item.page.filesection.original.bundle":"Oryginalne pliki", + "item.page.filesection.license.bundle":"Licencja", + "item.page.return":"Powrót", + "item.page.version.create":"Utwórz nową wersję", + "item.page.version.hasDraft":"Nowa wersja nie może zostać utworzona, ponieważ istnieje już oczekujące na akceptację zgłoszenie dokumentu tego pliku", + "item.preview.dc.identifier.doi":"DOI", + "item.preview.dc.relation.ispartof":"Czasopismo lub seria", + "item.preview.dc.identifier.isbn":"ISBN", + "item.preview.dc.identifier.uri":"Identyfikator:", + "item.preview.dc.contributor.author":"Autorzy:", + "item.preview.dc.date.issued":"Data publikacji:", + "item.preview.dc.description.abstract":"Abstrakt:", + "item.preview.dc.identifier.other":"Inny identyfikator:", + "item.preview.dc.language.iso":"Język:", + "item.preview.dc.title":"Tytuł:", + "item.preview.dc.title.alternative":"Tytuł alternatywny", + "item.preview.dc.type":"Typ:", + "item.preview.dc.identifier":"Identyfikator:", + "item.preview.dc.relation.issn":"ISSN", + "item.preview.oaire.citation.issue":"Numer wydania", + "item.preview.oaire.citation.volume":"Numer tomu", + "item.preview.person.familyName":"Nazwisko:", + "item.preview.person.givenName":"Nazwa:", + "item.preview.person.identifier.orcid":"ORCID:", + "item.preview.project.funder.name":"Fundator:", + "item.preview.project.funder.identifier":"Identyfikator fundatora:", + "item.preview.oaire.awardNumber":"ID finansowania:", + "item.preview.dc.coverage.spatial":"Jurysdykcja:", + "item.preview.oaire.fundingStream":"Źródło finansowania:", + "item.select.confirm":"Potwierdź zaznaczone", + "item.select.empty":"Brak pozycji do wyświetlenia", + "item.select.table.author":"Autor", + "item.select.table.collection":"Kolekcja", + "item.select.table.title":"Tytuł", + "item.version.history.empty":"Jeszcze nie ma innych wersji tej pozycji.", + "item.version.history.head":"Poprzednie wersje", + "item.version.history.return":"Powrót", + "item.version.history.selected":"Wybrane wersje", + "item.version.history.selected.alert":"W tym momencie wyświetlono wersję {{version}} pozycji.", + "item.version.history.table.version":"Wersja", + "item.version.history.table.item":"Pozycja", + "item.version.history.table.editor":"Redaktor", + "item.version.history.table.date":"Data", + "item.version.history.table.summary":"Podsumowanie", + "item.version.history.table.workspaceItem":"Wersja robocza", + "item.version.history.table.workflowItem":"Pozycja workflow", + "item.version.history.table.actions":"Akcja", + "item.version.history.table.action.editWorkspaceItem":"Edytuj wersję roboczą pozycji", + "item.version.history.table.action.editSummary":"Edytuj podsumowanie", + "item.version.history.table.action.saveSummary":"Zapisz edycje podsumowania", + "item.version.history.table.action.discardSummary":"Odrzuć edycje podsumowania", + "item.version.history.table.action.newVersion":"Utwórz nową wersję z tej wersji", + "item.version.history.table.action.deleteVersion":"Wersja usunięta", + "item.version.history.table.action.hasDraft":"Nowa wersja nie może zostać utworzona, ponieważ istnieje już oczekujące na akceptację zgłoszenie dokumentu tego pliku", + "item.version.notice":"To nie jest najnowsza wersja tej pozycji. Najnowsza wersja jest dostępna tutaj.", + "item.version.create.modal.header":"Nowa wersja", + "item.version.create.modal.text":"Utwórz nową wersję tej pozycji", + "item.version.create.modal.text.startingFrom":"zaczynając od wersji {{version}}", + "item.version.create.modal.button.confirm":"Utwórz", + "item.version.create.modal.button.confirm.tooltip":"Utwórz nową wersję", + "item.version.create.modal.button.cancel":"Anuluj", + "item.version.create.modal.button.cancel.tooltip":"Nie stwarzaj nowej wersji", + "item.version.create.modal.form.summary.label":"Podsumowanie", + "item.version.create.modal.form.summary.placeholder":"Wprowadź podsumowanie nowej wersji", + "item.version.create.notification.success":"Nowa wersja została utworzona z numerem {{version}}", + "item.version.create.notification.failure":"Nowa wersja nie została utworzona", + "item.version.create.notification.inProgress":"Nowa wersja nie może być utworzona, ponieważ propozycja innej wersji jest już złożona do zaakceptowania", + "item.version.delete.modal.header":"Usuń wersję", + "item.version.delete.modal.text":"Czy chcesz usunąć wersję {{version}}?", + "item.version.delete.modal.button.confirm":"Usuń", + "item.version.delete.modal.button.confirm.tooltip":"Usuń wersję", + "item.version.delete.modal.button.cancel":"Anuluj", + "item.version.delete.modal.button.cancel.tooltip":"Nie usuwaj tej wersji", + "item.version.delete.notification.success":"Wersja {{version}} została usunięta", + "item.version.delete.notification.failure":"Wersja {{version}} nie została usunięta", + "item.version.edit.notification.success":"Podsumowanie wersji {{version}} zostało zmienione", + "item.version.edit.notification.failure":"Podsumowanie wersji {{version}} nie zostało zmienione", + "journal.listelement.badge":"Czasopismo", + "journal.page.description":"Opis", + "journal.page.edit":"Edytuj tę pozycję", + "journal.page.editor":"Redaktor naczelny", + "journal.page.issn":"ISSN", + "journal.page.publisher":"Wydawca", + "journal.page.titleprefix":"Czasopismo: ", + "journal.search.results.head":"Wyniki wyszukiwania czasopism", + "journal.search.title":"Wyszukiwanie czasopism", + "journalissue.listelement.badge":"Numer czasopisma", + "journalissue.page.description":"Opis", + "journalissue.page.edit":"Edytuj pozycję", + "journalissue.page.issuedate":"Data wydania", + "journalissue.page.journal-issn":"ISSN czasopisma", + "journalissue.page.journal-title":"Tytuł czasopisma", + "journalissue.page.keyword":"Słowa kluczowe", + "journalissue.page.number":"Numer", + "journalissue.page.titleprefix":"Wydanie czasopisma: ", + "journalvolume.listelement.badge":"Numer tomu czasopisma", + "journalvolume.page.description":"Opis", + "journalvolume.page.edit":"Edytuj pozycję", + "journalvolume.page.issuedate":"Data wydania", + "journalvolume.page.titleprefix":"Numer tomu czasopisma: ", + "journalvolume.page.volume":"Numer wydania", + "iiifsearchable.listelement.badge":"Multimedia dokumentu", + "iiifsearchable.page.titleprefix":"Dokument: ", + "iiifsearchable.page.doi":"Stały link: ", + "iiifsearchable.page.issue":"Wydanie: ", + "iiifsearchable.page.description":"Opis: ", + "iiifviewer.fullscreen.notice":"Wyświetl na pełnym ekranie dla lepszego widoku.", + "iiif.listelement.badge":"Multimedia obrazu", + "iiif.page.titleprefix":"Obraz: ", + "iiif.page.doi":"Stały link: ", + "iiif.page.issue":"Numer wydania: ", + "iiif.page.description":"Opis: ", + "loading.bitstream":"Ładowanie pliku...", + "loading.bitstreams":"Ładowanie plików...", + "loading.browse-by":"Ładowanie pozycji...", + "loading.browse-by-page":"Ładowanie strony...", + "loading.collection":"Ładowanie kolekcji...", + "loading.collections":"Ładowanie kolekcji...", + "loading.content-source":"Ładowanie źródła treści...", + "loading.community":"Ładowanie zbioru...", + "loading.default":"Ładowanie...", + "loading.item":"Ładowanie pozycji...", + "loading.items":"Ładowanie pozycji...", + "loading.mydspace-results":"Ładowanie pozycji...", + "loading.objects":"Ładowanie...", + "loading.recent-submissions":"Ładowanie ostatnich zgłoszeń...", + "loading.search-results":"Ładowanie wyników wyszukiwania...", + "loading.sub-collections":"Ładowanie podkolekcji...", + "loading.sub-communities":"Ładowanie podzbioru...", + "loading.top-level-communities":"Ładowanie zbioru wyszego szczebla...", + "login.form.email":"Adres e-mail", + "login.form.forgot-password":"Nie pamiętasz hasła?", + "login.form.header":"Zaloguj się do DSpace", + "login.form.new-user":"Nie masz konta? Zarejestruj się.", + "login.form.or-divider":"lub", + "login.form.orcid":"Zaloguj za pomocą ORCID", + "login.form.oidc":"Zaloguj za pomocą OIDC", + "login.form.password":"Hasło", + "login.form.shibboleth":"Zaloguj za pomocą Shibboleth", + "login.form.submit":"Zaloguj się", + "login.title":"Zaloguj", + "login.breadcrumbs":"Zaloguj", + "logout.form.header":"Wyloguj się z DSpace", + "logout.form.submit":"Wyloguj się", + "logout.title":"Wylogowywanie", + "menu.header.admin":"Panel administracyjny", + "menu.header.image.logo":"Logo repozytorium", + "menu.header.admin.description":"Menu administratora", + "menu.section.access_control":"Uprawnienia", + "menu.section.access_control_authorizations":"Dostępy", + "menu.section.access_control_groups":"Grupy", + "menu.section.access_control_people":"Użytkownicy", + "menu.section.admin_search":"Wyszukiwanie administracyjne", + "menu.section.browse_community":"Ten zbiór", + "menu.section.browse_community_by_author":"Wg autorów", + "menu.section.browse_community_by_issue_date":"Wg daty wydania", + "menu.section.browse_community_by_title":"Wg tytułów", + "menu.section.browse_global":"Wszystko na DSpace", + "menu.section.browse_global_by_author":"Wg autorów", + "menu.section.browse_global_by_dateissued":"Wg daty wydania", + "menu.section.browse_global_by_subject":"Wg tematu", + "menu.section.browse_global_by_title":"Wg tytułu", + "menu.section.browse_global_communities_and_collections":"Zbiory i kolekcje", + "menu.section.control_panel":"Panel sterowania", + "menu.section.curation_task":"Zadanie administracyjne", + "menu.section.edit":"Edytuj", + "menu.section.edit_collection":"Kolekcja", + "menu.section.edit_community":"Zbiór", + "menu.section.edit_item":"Pozycja", + "menu.section.export":"Eksport", + "menu.section.export_collection":"Kolekcja", + "menu.section.export_community":"Zbiór", + "menu.section.export_item":"Pozycja", + "menu.section.export_metadata":"Metadane", + "menu.section.icon.access_control":"Sekcja menu Uprawnienia", + "menu.section.icon.admin_search":"Sekcja menu Wyszukiwanie administracyjne", + "menu.section.icon.control_panel":"Sekcja menu Panel sterowania", + "menu.section.icon.curation_tasks":"Sekcja menu Zadanie administracyjne", + "menu.section.icon.edit":"Sekcja menu Edycja", + "menu.section.icon.export":"Sekcja menu Eksport", + "menu.section.icon.find":"Sekcja menu Wyszukiwanie", + "menu.section.icon.import":"Sekcja menu Import", + "menu.section.icon.new":"Sekcja menu Dodaj", + "menu.section.icon.pin":"Przypnij boczny pasek", + "menu.section.icon.processes":"Sekcja menu Procesy", + "menu.section.icon.registries":"Sekcja menu Rejestry", + "menu.section.icon.statistics_task":"Sekcja menu Zadanie statystyczne", + "menu.section.icon.workflow":"Sekcja menu Zarządzanie workflow", + "menu.section.icon.unpin":"Odepnij boczny pasek", + "menu.section.import":"Import", + "menu.section.import_batch":"Import masowy (ZIP)", + "menu.section.import_metadata":"Metadane", + "menu.section.new":"Dodaj", + "menu.section.new_collection":"Kolekcja", + "menu.section.new_community":"Zbiór", + "menu.section.new_item":"Pozycja", + "menu.section.new_item_version":"Wersja pozycji", + "menu.section.new_process":"Proces", + "menu.section.pin":"Przypnij pasek boczny", + "menu.section.unpin":"Odepnij pasek boczny", + "menu.section.processes":"Procesy", + "menu.section.registries":"Rejestry", + "menu.section.registries_format":"Formaty", + "menu.section.registries_metadata":"Metadane", + "menu.section.statistics":"Statystyki", + "menu.section.statistics_task":"Zadanie statystyczne", + "menu.section.toggle.access_control":"Przełącz sekcję Uprawnienia", + "menu.section.toggle.control_panel":"Przełącz sekcję Panel sterowania", + "menu.section.toggle.curation_task":"Przełącz sekcję Zadanie kuratora", + "menu.section.toggle.edit":"Przełącz sekcję Edytuj", + "menu.section.toggle.export":"Przełącz sekcję Eksport", + "menu.section.toggle.find":"Przełącz sekcję Wyszukiwanie", + "menu.section.toggle.import":"Przełącz sekcję Import", + "menu.section.toggle.new":"Przełącz nową sekcję", + "menu.section.toggle.registries":"Przełącz sekcję Rejestry", + "menu.section.toggle.statistics_task":"Przełącz sekcję Zadanie statystyczne", + "menu.section.workflow":"Zarządzaj Workflow", + "mydspace.breadcrumbs":"Mój DSpace", + "mydspace.description":"", + "mydspace.messages.controller-help":"Wybierz tę opcję, aby przesłać wiadomość do zgłaszającego.", + "mydspace.messages.description-placeholder":"Wpisz swoją wiadomość tutaj...", + "mydspace.messages.hide-msg":"Ukryj wiadomość", + "mydspace.messages.mark-as-read":"Oznacz jako przeczytane", + "mydspace.messages.mark-as-unread":"Oznacz jako nieprzeczytane", + "mydspace.messages.no-content":"Brak treści.", + "mydspace.messages.no-messages":"Brak wiadomości.", + "mydspace.messages.send-btn":"Wysłano", + "mydspace.messages.show-msg":"Pokaż wiadomość", + "mydspace.messages.subject-placeholder":"Temat...", + "mydspace.messages.submitter-help":"Wybierz tę opcję, aby przesłać wiadomość do osoby kontrolującej.", + "mydspace.messages.title":"Wiadomości", + "mydspace.messages.to":"Do", + "mydspace.new-submission":"Nowe zgłoszenie", + "mydspace.new-submission-external":"Import medatanych z zewnętrznego źródła", + "mydspace.new-submission-external-short":"Import metadanych", + "mydspace.results.head":"Twoje zadania", + "mydspace.results.no-abstract":"Brak abstraktu", + "mydspace.results.no-authors":"Brak autorów", + "mydspace.results.no-collections":"Brak kolekcji", + "mydspace.results.no-date":"Brak daty", + "mydspace.results.no-files":"Brak plików", + "mydspace.results.no-results":"Brak pozycji do wyświetlenia", + "mydspace.results.no-title":"Brak tytułu", + "mydspace.results.no-uri":"Brak Uri", + "mydspace.search-form.placeholder":"Wyszukaj w mydspace...", + "mydspace.show.workflow":"Wszystkie zadania", + "mydspace.show.workspace":"Twoje zadania", + "mydspace.status.mydspaceArchived":"Zarchiwizowano", + "mydspace.status.mydspaceValidation":"Walidacja", + "mydspace.status.mydspaceWaitingController":"Oczekiwanie na redaktora", + "mydspace.status.mydspaceWorkflow":"Workflow", + "mydspace.status.mydspaceWorkspace":"Wersja robocza", + "mydspace.title":"Mój DSpace", + "mydspace.upload.upload-failed":"Bład podczas tworzenia nowej wersji roboczej. Sprawdź poprawność plików i spróbuj ponownie.", + "mydspace.upload.upload-failed-manyentries":"Plik jest niemożliwy do przetworzenia. Wykryto wiele wejść, a dopuszczalne jest tylko jedno dla jednego pliku.", + "mydspace.upload.upload-failed-moreonefile":"Zapytanie niemożliwe do przetworzenia. Tylko jeden plik jest dopuszczalny.", + "mydspace.upload.upload-multiple-successful":"Utworzono {{qty}} przestrzeni roboczych.", + "mydspace.view-btn":"Widok", + "nav.browse.header":"Cały DSpace", + "nav.community-browse.header":"Wg zbiorów", + "nav.language":"Zmień język", + "nav.login":"Zaloguj", + "nav.logout":"Menu profilu użytkownika i wylogowywanie", + "nav.main.description":"Główny pasek nawigacji", + "nav.mydspace":"Mój DSpace", + "nav.profile":"Profil", + "nav.search":"Wyszukiwanie", + "nav.statistics.header":"Statystyki", + "nav.stop-impersonating":"Przestań impersonifikować użytkownika", + "nav.toggle":"Przełącz nawigację", + "nav.user.description":"Pasek profilu użytkownika", + "none.listelement.badge":"Pozycja", + "person.listelement.badge":"Osoba", + "person.listelement.no-title":"Nie znaleziono imienia", + "person.page.birthdate":"Data urodzenia", + "person.page.edit":"Edytuj pozycję", + "person.page.email":"Adres e-mail", + "person.page.firstname":"Imię", + "person.page.jobtitle":"Stanowisko", + "person.page.lastname":"Nazwisko", + "person.page.link.full":"Pokaż wszystkie metadane", + "person.page.orcid":"ORCID", + "person.page.orcid.create":"Utwórz ORCID ID", + "person.page.orcid.granted-authorizations":"Udzielone dostępy", + "person.page.orcid.grant-authorizations":"Udziel dostępu", + "person.page.orcid.link":"Połącz z ORCID ID", + "person.page.orcid.orcid-not-linked-message":"ORCID iD tego profilu ({{ orcid }}) nie jest połączony z bazą ORCID lub połączenie wygasło.", + "person.page.orcid.unlink":"Odepnij z ORCID", + "person.page.orcid.unlink.processing":"Procesowanie...", + "person.page.orcid.missing-authorizations":"Brak dostępów", + "person.page.orcid.missing-authorizations-message":"Brakuj następujących dostępów:", + "person.page.orcid.no-missing-authorizations-message":"Świetnie! To miejsce jest puste, co oznacza, że masz dostęp do wszystkich uprawnień, które są dostępne w Twojej instytucji.", + "person.page.orcid.no-orcid-message":"Brak przypisanego ORCID iD. Poprez wybranie przycisku poniżej możesz powiązać ten profil wraz z kontem ORCID.", + "person.page.orcid.profile-preferences":"Preferencje profilu", + "person.page.orcid.funding-preferences":"Preferencje finansowania", + "person.page.orcid.publications-preferences":"Preferencje publikacji", + "person.page.orcid.remove-orcid-message":"Jeśli chcesz usunąć Twój ORCID, skontaktuj się z administratorem repozytorium", + "person.page.orcid.save.preference.changes":"Aktualizuj ustawienia", + "person.page.orcid.sync-profile.affiliation":"Afiliacja", + "person.page.orcid.sync-profile.biographical":"Biografia", + "person.page.orcid.sync-profile.education":"Edukacja", + "person.page.orcid.sync-profile.identifiers":"Identyfikatory", + "person.page.orcid.sync-fundings.all":"Wszystkie źrodła finansowania", + "person.page.orcid.sync-fundings.mine":"Moje źrodła finansowania", + "person.page.orcid.sync-fundings.my_selected":"Wybrane źródła finansowania", + "person.page.orcid.sync-fundings.disabled":"Nieaktywne", + "person.page.orcid.sync-publications.all":"Wszystkie publikacje", + "person.page.orcid.sync-publications.mine":"Moje publikacje", + "person.page.orcid.sync-publications.my_selected":"Wybrane publikacje", + "person.page.orcid.sync-publications.disabled":"Nieaktywne", + "person.page.orcid.sync-queue.discard":"Odrzuć zmianę i nie synchronizuj z ORCID", + "person.page.orcid.sync-queue.discard.error":"Rekord kolejki ORCID nie został odrzucony", + "person.page.orcid.sync-queue.discard.success":"Rekord kolejki ORCID został odrzucony", + "person.page.orcid.sync-queue.empty-message":"Rejestr kolejki w ORCID jest pusty", + "person.page.orcid.sync-queue.description.affiliation":"Afiliacje", + "person.page.orcid.sync-queue.description.country":"Kraj", + "person.page.orcid.sync-queue.description.education":"Edukacja", + "person.page.orcid.sync-queue.description.external_ids":"Zewnętrzne identyfikatory", + "person.page.orcid.sync-queue.description.other_names":"Inne imiona", + "person.page.orcid.sync-queue.description.qualification":"Kwalifikacje", + "person.page.orcid.sync-queue.description.researcher_urls":"URL naukowca", + "person.page.orcid.sync-queue.description.keywords":"Słowa kluczowe", + "person.page.orcid.sync-queue.tooltip.insert":"Dodaj nowy wpis w rejestrze ORCID", + "person.page.orcid.sync-queue.tooltip.update":"Aktualizuj ten wpis w rejestrze ORCID", + "person.page.orcid.sync-queue.tooltip.delete":"Usuń ten wpis z rejestru ORCID", + "person.page.orcid.sync-queue.tooltip.publication":"Publikacja", + "person.page.orcid.sync-queue.tooltip.affiliation":"Afiliacja", + "person.page.orcid.sync-queue.tooltip.education":"Edukacja", + "person.page.orcid.sync-queue.tooltip.qualification":"Kwalifikacje", + "person.page.orcid.sync-queue.tooltip.other_names":"Inna nazwa", + "person.page.orcid.sync-queue.tooltip.country":"Kraj", + "person.page.orcid.sync-queue.tooltip.keywords":"Słowa kluczowe", + "person.page.orcid.sync-queue.tooltip.external_ids":"Zewnętrzny identyfikator", + "person.page.orcid.sync-queue.tooltip.researcher_urls":"URL naukowca", + "person.page.orcid.sync-queue.send":"Synchronizuj z rejestrem ORCID", + "person.page.orcid.sync-queue.send.unauthorized-error.title":"Wysłanie zgłoszenia do ORCID nieudane z powodu braku uprawnień.", + "person.page.orcid.sync-queue.send.unauthorized-error.content":"Wybierz here, aby wystąpić o niezbędne uprawnienia. Jeśli problem wciąż występuje, skontaktuj się z administratorem", + "person.page.orcid.sync-queue.send.bad-request-error":"Wysłanie zgłoszenia do ORCID nie powiodło się ponieważ źródła wysłane do rejestru ORCID nie jest poprawne", + "person.page.orcid.sync-queue.send.error":"Wysłanie zgłoszenia do ORCID nie powiodło się", + "person.page.orcid.sync-queue.send.conflict-error":"Zgłoszenie do ORCID nie powiodło się, ponieważ ta pozycja jest już dodana do rejestru ORCID", + "person.page.orcid.sync-queue.send.not-found-warning":"Pozycja nie istnieje już w rejestrze ORCID.", + "person.page.orcid.sync-queue.send.success":"Zgłoszenie do ORCID zostało zakończone pomyślnie", + "person.page.orcid.sync-queue.send.validation-error":"Dane, które chcesz zsynchronizować z ORCID nie są poprawne", + "person.page.orcid.sync-queue.send.validation-error.amount-currency.required":"Waluta jest wymagana", + "person.page.orcid.sync-queue.send.validation-error.external-id.required":"Aby wysłać pozycję, należy podać przynajmniej jeden identyfikator", + "person.page.orcid.sync-queue.send.validation-error.title.required":"Tytuł jest wymagany", + "person.page.orcid.sync-queue.send.validation-error.type.required":"Typ jest wymagany", + "person.page.orcid.sync-queue.send.validation-error.start-date.required":"Data początkowa jest wymagana", + "person.page.orcid.sync-queue.send.validation-error.funder.required":"Instytucja finansująca jest wymagana", + "person.page.orcid.sync-queue.send.validation-error.organization.required":"Instytucja jest wymagana", + "person.page.orcid.sync-queue.send.validation-error.organization.name-required":"Nazwa instytucji jest wymagana", + "person.page.orcid.sync-queue.send.validation-error.organization.address-required":"Aby wysłać instytucję, należy podać adres", + "person.page.orcid.sync-queue.send.validation-error.organization.city-required":"Aby wysłać adres, należy podać miasto", + "person.page.orcid.sync-queue.send.validation-error.organization.country-required":"Aby wysłać adres, należy podać kraj", + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.required":"Wymagany jest identyfikator umożliwiający rozróżnienie instytucji. Obsługiwane identyfikatory to GRID, Ringgold, kod LEI oraz identyfikatory z rejestru instytucji finansujących Crossref.", + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.value-required":"Należy uzupełnić wartość w identyfikatorze instytucji", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required":"Należy uzupełnić źródło w identyfikatorze instytucji", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid":"Źródło jednego z identyfikatorów organizcji jest niepoprawne. Wspierane źródła to RINGGOLD, GRID, LEI and FUNDREF", + "person.page.orcid.synchronization-mode":"Tryb synchronizacji", + "person.page.orcid.synchronization-mode.batch":"Wsad", + "person.page.orcid.synchronization-mode.label":"Tryb synchronizacji", + "person.page.orcid.synchronization-mode-message":"Włącz tryb 'Manual' synchronizacja, aby wyłaczyć tryb synchronizacji wsadowej, wtedy dane do rejestru ORCID będą musiały zostać wysłane ręcznie", + "person.page.orcid.synchronization-settings-update.success":"Opcje synchronizacji zostały zaktualizowane", + "person.page.orcid.synchronization-settings-update.error":"Opcje synchronizacji nie zostały zaktualizowane", + "person.page.orcid.synchronization-mode.manual":"Ręczna", + "person.page.orcid.scope.authenticate":"Uzyskaj swój ORCID iD", + "person.page.orcid.scope.read-limited":"Przeczytaj informacje o ustawieniach widoczności z firmami trzeciami", + "person.page.orcid.scope.activities-update":"Dodaj/aktualizuj swoje aktywności naukowe", + "person.page.orcid.scope.person-update":"Dodaj/aktualizuj inne informacje o Tobie", + "person.page.orcid.unlink.success":"Odłączenie Twojego profilu od rejestru ORCID powiodło się", + "person.page.orcid.unlink.error":"Wystąpił błąd podczas odłączania Twojego profilu od rejestru ORCID. Spróbuj ponownie", + "person.page.staffid":"ID pracownika", + "person.page.titleprefix":"Osoba: ", + "person.search.results.head":"Wyniki wyszukiwania użytkowników", + "person.search.title":"Wyniki wyszukiwania użytkowników", + "process.new.select-parameters":"Parametry", + "process.new.cancel":"Anuluj", + "process.new.submit":"Zapisz", + "process.new.select-script":"Skrypt", + "process.new.select-script.placeholder":"Wybierz skrypt...", + "process.new.select-script.required":"Skrypt jest wymagany", + "process.new.parameter.file.upload-button":"Wybierz plik...", + "process.new.parameter.file.required":"Proszę wybrać plik", + "process.new.parameter.string.required":"Wartość parametru jest wymagana", + "process.new.parameter.type.value":"wartość", + "process.new.parameter.type.file":"plik", + "process.new.parameter.required.missing":"Te parametry są wymagane, ale nie zostały uzupełnione:", + "process.new.notification.success.title":"Udało się", + "process.new.notification.success.content":"Udało się stworzyć proces", + "process.new.notification.error.title":"Błąd", + "process.new.notification.error.content":"Wystąpił błąd podczas tworzenia procesu", + "process.new.header":"Utwórz nowy proces", + "process.new.title":"Utwórz nowy proces", + "process.new.breadcrumbs":"Utwórz nowy proces", + "process.detail.arguments":"Argumenty", + "process.detail.arguments.empty":"Do tego procesu nie zostały przypisane żadne argumenty", + "process.detail.back":"Cofnij", + "process.detail.output":"Dane wyjściowe procesu", + "process.detail.logs.button":"Odzyskaj dane wyjściowe procesu", + "process.detail.logs.loading":"Odzyskiwanie", + "process.detail.logs.none":"Ten proces nie ma danych wyjściowych", + "process.detail.output-files":"Pliki", + "process.detail.output-files.empty":"Ten proces nie ma żadnych plików danych wyjściowych", + "process.detail.script":"Skrypt", + "process.detail.title":"Proces: {{ id }} - {{ name }}", + "process.detail.start-time":"Czas rozpoczęcia procesu", + "process.detail.end-time":"Czas zakończenia procesu", + "process.detail.status":"Status", + "process.detail.create":"Stwórz podobny proces", + "process.overview.table.finish":"Czas zakończenia (UTC)", + "process.overview.table.id":"Identyfikator procesu", + "process.overview.table.name":"Nazwa", + "process.overview.table.start":"Czas rozpoczęcia (UTC)", + "process.overview.table.status":"Status", + "process.overview.table.user":"Użytkownik", + "process.overview.title":"Przegląd procesów", + "process.overview.breadcrumbs":"Przegląd procesów", + "process.overview.new":"Nowy", + "profile.breadcrumbs":"Zaktualizuj profil", + "profile.card.identify":"Dane", + "profile.card.security":"Bezpieczeństwo", + "profile.form.submit":"Zaktualizuj profil", + "profile.groups.head":"Posiadane uprawnienia do kolekcji", + "profile.head":"Zaktualizuj profil", + "profile.metadata.form.error.firstname.required":"Imię jest wymagane", + "profile.metadata.form.error.lastname.required":"Nazwisko jest wymagane", + "profile.metadata.form.label.email":"Adres e-mail", + "profile.metadata.form.label.firstname":"Imię", + "profile.metadata.form.label.language":"Język", + "profile.metadata.form.label.lastname":"Nazwisko", + "profile.metadata.form.label.phone":"Telefon kontaktowy", + "profile.metadata.form.notifications.success.content":"Zmiany w profilu zostały zapisane.", + "profile.metadata.form.notifications.success.title":"Profil zapisany", + "profile.notifications.warning.no-changes.content":"Nie dokonano żadnych zmian w profilu.", + "profile.notifications.warning.no-changes.title":"Brak zmian", + "profile.security.form.error.matching-passwords":"Hasła nie są identyczne.", + "profile.security.form.info":"Możesz wprowadzić nowe hasło w polu poniżej i zatwierdzić poprzez ponowne wpisanie. Hasło musi mieć przynajmniej 6 znaków.", + "profile.security.form.label.password":"Hasło", + "profile.security.form.label.passwordrepeat":"Potwierdź hasło", + "profile.security.form.notifications.success.content":"Twoje zmiany w haśle zostały zapisane.", + "profile.security.form.notifications.success.title":"Hasło zapisane", + "profile.security.form.notifications.error.title":"Błąd podczas próby zmiany hasła", + "profile.security.form.notifications.error.not-same":"Hasła nie są identyczne.", + "profile.title":"Zaktualizuj profil", + "profile.card.researcher":"Profil naukowca", + "project.listelement.badge":"Projekt badawczy", + "project.page.contributor":"Autorzy", + "project.page.description":"Opis", + "project.page.edit":"Edytuj pozycję", + "project.page.expectedcompletion":"Spodziewany termin zakończenia", + "project.page.funder":"Instytucje finansujące", + "project.page.id":"ID", + "project.page.keyword":"Słowa kluczowe", + "project.page.status":"Status", + "project.page.titleprefix":"Projekt badawczy: ", + "project.search.results.head":"Wyniki wyszukiwania projektów", + "publication.listelement.badge":"Publikacja", + "publication.page.description":"Opis", + "publication.page.edit":"Edytuj pozycję", + "publication.page.journal-issn":"ISSN czasopisma", + "publication.page.journal-title":"Tytuł czasopisma", + "publication.page.publisher":"Wydawca", + "publication.page.titleprefix":"Publikacja: ", + "publication.page.volume-title":"Tytuł tomu", + "publication.search.results.head":"Wyniki wyszukiwania publikacji", + "publication.search.title":"Wyszukiwanie publikacji", + "media-viewer.next":"Nowy", + "media-viewer.previous":"Poprzedni", + "media-viewer.playlist":"Playlista", + "register-email.title":"Rejestracja nowego użytkownika", + "register-page.create-profile.header":"Stwórz profil", + "register-page.create-profile.identification.header":"Dane", + "register-page.create-profile.identification.email":"Adres e-mail", + "register-page.create-profile.identification.first-name":"Imię *", + "register-page.create-profile.identification.first-name.error":"Wpisz imię", + "register-page.create-profile.identification.last-name":"Nazwisko *", + "register-page.create-profile.identification.last-name.error":"Wpisz nazwisko", + "register-page.create-profile.identification.contact":"Telefon kontaktowy", + "register-page.create-profile.identification.language":"Język", + "register-page.create-profile.security.header":"Bezpieczeństwo", + "register-page.create-profile.security.info":"Wprowadź nowe hasło w polu poniżej i zatwierdź poprzez ponowne wpisanie w drugim polu. Hasło musi mieć przynajmniej 6 znaków.", + "register-page.create-profile.security.label.password":"Hasło *", + "register-page.create-profile.security.label.passwordrepeat":"Potwierdź hasło *", + "register-page.create-profile.security.error.empty-password":"Wprowadź hasło w polu poniżej.", + "register-page.create-profile.security.error.matching-passwords":"Hasła nie są identyczne.", + "register-page.create-profile.submit":"Rejestracja zakończona", + "register-page.create-profile.submit.error.content":"Coś się nie udało podczas rejestracji nowego użytkownika.", + "register-page.create-profile.submit.error.head":"Rejestracja nie powiodła się", + "register-page.create-profile.submit.success.content":"Rejestracja powiodła się. Zalogowano jako stworzony użytkownik.", + "register-page.create-profile.submit.success.head":"Rejestracja zakończona", + "register-page.registration.header":"Rejestracja nowego użytkownika", + "register-page.registration.info":"Zarejestruj się, aby otrzymywać wiadomości o nowych pozycjach w obserowanych kolekcjach, a także przesyłać nowe pozycje do repozytorium.", + "register-page.registration.email":"Adres e-mail *", + "register-page.registration.email.error.required":"Wypełnij adres e-mail", + "register-page.registration.email.error.pattern":"Wypełnij poprawny adres e-mail", + "register-page.registration.email.hint":"Ten adres e-mail będzie zweryfikowany i będziesz go używać jako swój login.", + "register-page.registration.submit":"Zarejestruj się", + "register-page.registration.success.head":"Wiadomość weryfikacyjna zostałą wysłana", + "register-page.registration.success.content":"Wiadomość została wysłana na adres e-mail {{ email }}. Zawiera ona unikatowy link i dalsze instrukcje postępowania.", + "register-page.registration.error.head":"Błąd podczas próby rejestracji adresu e-mail", + "register-page.registration.error.content":"Błąd podczas próby rejestracji adresu e-mail: {{ email }}", + "relationships.add.error.relationship-type.content":"Nie znaleziono dopasowania dla typu relacji {{ type }} pomiędzy dwoma pozycjami", + "relationships.add.error.server.content":"Błąd serwera", + "relationships.add.error.title":"Nie można dodać relacji", + "relationships.isAuthorOf":"Autorzy", + "relationships.isAuthorOf.Person":"Autorzy (osoby)", + "relationships.isAuthorOf.OrgUnit":"Autorzy (jednostki organizacyjne)", + "relationships.isIssueOf":"Numery czasopisma", + "relationships.isJournalIssueOf":"Numer czasopisma", + "relationships.isJournalOf":"Czasopisma", + "relationships.isOrgUnitOf":"Jednostki organizacyjne", + "relationships.isPersonOf":"Autorzy", + "relationships.isProjectOf":"Projekty badawcze", + "relationships.isPublicationOf":"Publikacje", + "relationships.isPublicationOfJournalIssue":"Artykuły", + "relationships.isSingleJournalOf":"Czasopismo", + "relationships.isSingleVolumeOf":"Tom czasopisma", + "relationships.isVolumeOf":"Tomy czasopisma", + "relationships.isContributorOf":"Autorzy", + "relationships.isContributorOf.OrgUnit":"Autor (Jednostka organizacyjna)", + "relationships.isContributorOf.Person":"Autor", + "relationships.isFundingAgencyOf.OrgUnit":"Instytucja finansująca", + "repository.image.logo":"Logo repozytorium", + "repository.title.prefix":"DSpace Angular :: ", + "researcher.profile.action.processing":"Procesowanie...", + "researcher.profile.associated":"Przypisanie profilu badacza", + "researcher.profile.create.new":"Utwórz nowy", + "researcher.profile.create.success":"Profil badacza został utworzony", + "researcher.profile.create.fail":"Wystąpił błąd poczas tworzenia profilu badacza.", + "researcher.profile.delete":"Usuń", + "researcher.profile.expose":"Ujawnij", + "researcher.profile.hide":"Ukryj", + "researcher.profile.not.associated":"Profil badacza nie został jeszcze przypisany", + "researcher.profile.view":"Widok", + "researcher.profile.private.visibility":"PRYWATNY", + "researcher.profile.public.visibility":"PUBLICZNY", + "researcher.profile.status":"Status:", + "researcherprofile.claim.not-authorized":"Nie masz uprawnień, aby wystąpić o tę pozycję. Aby otrzymać więcej szczegółów, skontaktuj się z administratorami.", + "researcherprofile.error.claim.body":"Wystąpił błąd podczas wystąpienia z prośbą o przypisanie profilu. Spróbuj ponownie później.", + "researcherprofile.error.claim.title":"Błąd", + "researcherprofile.success.claim.body":"Wystąpienie z prośbą o przypisanie profilu udane", + "researcherprofile.success.claim.title":"Sukces", + "repository.title.prefixDSpace":"DSpace Angular ::", + "resource-policies.add.button":"Dodaj", + "resource-policies.add.for.":"Dodaj nową politykę", + "resource-policies.add.for.bitstream":"Dodaj nową politykę dla plików", + "resource-policies.add.for.bundle":"Dodaj nową politykę paczek", + "resource-policies.add.for.item":"Dodaj nową politykę pozycji", + "resource-policies.add.for.community":"Dodaj nową politykę zbioru", + "resource-policies.add.for.collection":"Dodaj nową politykę kolekcji", + "resource-policies.create.page.heading":"Utwórz nową politykę zasobu dla ", + "resource-policies.create.page.failure.content":"Wystąpił błąd podczas dodawania polityki zasobów.", + "resource-policies.create.page.success.content":"Działanie powiodło się", + "resource-policies.create.page.title":"Utwórz nową politykę zasobu", + "resource-policies.delete.btn":"Usuń zaznaczone", + "resource-policies.delete.btn.title":"Usuń zaznaczone polityki zasobów", + "resource-policies.delete.failure.content":"Wystąpił błąd podczas usuwania wybranych polityk zasobów.", + "resource-policies.delete.success.content":"Działanie powiodło się", + "resource-policies.edit.page.heading":"Edytuj politykę zasobu ", + "resource-policies.edit.page.failure.content":"Wystąpił błąd poczas edytowania polityki zasobu.", + "resource-policies.edit.page.success.content":"Działanie udało się", + "resource-policies.edit.page.title":"Edytuj politykę zasobu", + "resource-policies.form.action-type.label":"Wybierz ten typ akcji", + "resource-policies.form.action-type.required":"Musisz wybrać akcję polityki zasobu.", + "resource-policies.form.eperson-group-list.label":"Użytkownik lub grupa, która otrzyma uprawnienia.", + "resource-policies.form.eperson-group-list.select.btn":"Wybierz", + "resource-policies.form.eperson-group-list.tab.eperson":"Wyszukaj użytkownika", + "resource-policies.form.eperson-group-list.tab.group":"Wyszukaj grupę", + "resource-policies.form.eperson-group-list.table.headers.action":"Akcja", + "resource-policies.form.eperson-group-list.table.headers.id":"ID", + "resource-policies.form.eperson-group-list.table.headers.name":"Nazwa", + "resource-policies.form.date.end.label":"Data zakończenia", + "resource-policies.form.date.start.label":"Data rozpoczęcia", + "resource-policies.form.description.label":"Opis", + "resource-policies.form.name.label":"Nazwa", + "resource-policies.form.policy-type.label":"Wybierz typ polityki", + "resource-policies.form.policy-type.required":"Musisz wybrać typ polityki zasobu.", + "resource-policies.table.headers.action":"Akcja", + "resource-policies.table.headers.date.end":"Data zakończenia", + "resource-policies.table.headers.date.start":"Data rozpoczęcia", + "resource-policies.table.headers.edit":"Edytuj", + "resource-policies.table.headers.edit.group":"Edytuj grupę", + "resource-policies.table.headers.edit.policy":"Edytuj politykę", + "resource-policies.table.headers.eperson":"Użytkownik", + "resource-policies.table.headers.group":"Grupa", + "resource-policies.table.headers.id":"ID", + "resource-policies.table.headers.name":"Nazwa", + "resource-policies.table.headers.policyType":"typ", + "resource-policies.table.headers.title.for.bitstream":"Polityki dla plików", + "resource-policies.table.headers.title.for.bundle":"Polityki dla paczek", + "resource-policies.table.headers.title.for.item":"Polityki dla pozycji", + "resource-policies.table.headers.title.for.community":"Polityki dla zbioru", + "resource-policies.table.headers.title.for.collection":"Polityki dla kolekcji", + "search.description":"", + "search.switch-configuration.title":"Pokaż", + "search.title":"Szukaj", + "search.breadcrumbs":"Szukaj", + "search.search-form.placeholder":"Szukaj w repozytorium...", + "search.filters.applied.f.author":"Autor", + "search.filters.applied.f.dateIssued.max":"Data zakończenia", + "search.filters.applied.f.dateIssued.min":"Data rozpoczęcia", + "search.filters.applied.f.dateSubmitted":"Data zgłoszenia", + "search.filters.applied.f.discoverable":"Ukryty", + "search.filters.applied.f.entityType":"Typ pozycji", + "search.filters.applied.f.has_content_in_original_bundle":"Ma przypisane pliki", + "search.filters.applied.f.itemtype":"Typ", + "search.filters.applied.f.namedresourcetype":"Status", + "search.filters.applied.f.subject":"Temat", + "search.filters.applied.f.submitter":"Zgłaszający", + "search.filters.applied.f.jobTitle":"Stanowisko", + "search.filters.applied.f.birthDate.max":"Data zakończenia tworzenia", + "search.filters.applied.f.birthDate.min":"Data rozpoczęcia tworzenia", + "search.filters.applied.f.withdrawn":"Wycofane", + "search.filters.filter.author.head":"Autor", + "search.filters.filter.author.placeholder":"Autor", + "search.filters.filter.author.label":"Wyszukaj autora", + "search.filters.filter.birthDate.head":"Data urodzenia", + "search.filters.filter.birthDate.placeholder":"Data urodzenia", + "search.filters.filter.birthDate.label":"Wyszukaj datę urodzenia", + "search.filters.filter.collapse":"Ukryj filtr", + "search.filters.filter.creativeDatePublished.head":"Data opublikowania", + "search.filters.filter.creativeDatePublished.placeholder":"Data opublikowania", + "search.filters.filter.creativeDatePublished.label":"Wyszukaj datę opublikowania", + "search.filters.filter.creativeWorkEditor.head":"Redaktor", + "search.filters.filter.creativeWorkEditor.placeholder":"Redaktor", + "search.filters.filter.creativeWorkEditor.label":"Wyszukaj redaktora", + "search.filters.filter.creativeWorkKeywords.head":"Słowo kluczowe", + "search.filters.filter.creativeWorkKeywords.placeholder":"Słowo kluczowe", + "search.filters.filter.creativeWorkKeywords.label":"Wyszukaj temat", + "search.filters.filter.creativeWorkPublisher.head":"Wydawca", + "search.filters.filter.creativeWorkPublisher.placeholder":"Wydawca", + "search.filters.filter.creativeWorkPublisher.label":"Wyszukaj wydawcę", + "search.filters.filter.dateIssued.head":"Data", + "search.filters.filter.dateIssued.max.placeholder":"Data maksymalna", + "search.filters.filter.dateIssued.max.label":"Koniec", + "search.filters.filter.dateIssued.min.placeholder":"Data minimalna", + "search.filters.filter.dateIssued.min.label":"Start", + "search.filters.filter.dateSubmitted.head":"Data zgłoszenia", + "search.filters.filter.dateSubmitted.placeholder":"Data zgłoszenia", + "search.filters.filter.dateSubmitted.label":"Wyszukaj datę zgłoszenia", + "search.filters.filter.discoverable.head":"Ukryty", + "search.filters.filter.withdrawn.head":"Wycofane", + "search.filters.filter.entityType.head":"Typ pozycji", + "search.filters.filter.entityType.placeholder":"Typ pozycji", + "search.filters.filter.entityType.label":"Wyszukaj typ pozycji", + "search.filters.filter.expand":"Rozwiń filtr", + "search.filters.filter.has_content_in_original_bundle.head":"Ma przypisane pliki", + "search.filters.filter.itemtype.head":"Typ", + "search.filters.filter.itemtype.placeholder":"Typ", + "search.filters.filter.itemtype.label":"Wyszukaj typ", + "search.filters.filter.jobTitle.head":"Stanowisko", + "search.filters.filter.jobTitle.placeholder":"Stanowisko", + "search.filters.filter.jobTitle.label":"Wyszukaj stanowisko", + "search.filters.filter.knowsLanguage.head":"Znajomość języka", + "search.filters.filter.knowsLanguage.placeholder":"Znajomość języka", + "search.filters.filter.knowsLanguage.label":"Wyszukaj wg znajomości języka", + "search.filters.filter.namedresourcetype.head":"Status", + "search.filters.filter.namedresourcetype.placeholder":"Status", + "search.filters.filter.namedresourcetype.label":"Wyszukaj status", + "search.filters.filter.objectpeople.head":"Osoby", + "search.filters.filter.objectpeople.placeholder":"Osoby", + "search.filters.filter.objectpeople.label":"Wyszukaj użytkowników", + "search.filters.filter.organizationAddressCountry.head":"Kraj", + "search.filters.filter.organizationAddressCountry.placeholder":"Kraj", + "search.filters.filter.organizationAddressCountry.label":"Wyszukaj kraj", + "search.filters.filter.organizationAddressLocality.head":"Miasto", + "search.filters.filter.organizationAddressLocality.placeholder":"Miasto", + "search.filters.filter.organizationAddressLocality.label":"Wyszukaj miasto", + "search.filters.filter.organizationFoundingDate.head":"Data założenia", + "search.filters.filter.organizationFoundingDate.placeholder":"Data założenia", + "search.filters.filter.organizationFoundingDate.label":"Wyszukaj datę założenia", + "search.filters.filter.scope.head":"Zakres", + "search.filters.filter.scope.placeholder":"Filtr zakresu", + "search.filters.filter.scope.label":"Wyszukaj filtr zakresu", + "search.filters.filter.show-less":"Pokaż mniej", + "search.filters.filter.show-more":"Pokaż więcej", + "search.filters.filter.subject.head":"Temat", + "search.filters.filter.subject.placeholder":"Temat", + "search.filters.filter.subject.label":"Wyszukaj temat", + "search.filters.filter.submitter.head":"Zgłaszający", + "search.filters.filter.submitter.placeholder":"Zgłaszający", + "search.filters.filter.submitter.label":"Wyszukaj zgłaszającego", + "search.filters.entityType.JournalIssue":"Numer czasopisma", + "search.filters.entityType.JournalVolume":"Tom czasopisma", + "search.filters.entityType.OrgUnit":"Jednostka organizacyjna", + "search.filters.has_content_in_original_bundle.true":"Tak", + "search.filters.has_content_in_original_bundle.false":"Nie", + "search.filters.discoverable.true":"Nie", + "search.filters.discoverable.false":"Tak", + "search.filters.withdrawn.true":"Tak", + "search.filters.withdrawn.false":"Nie", + "search.filters.head":"Filtry", + "search.filters.reset":"Resetuj filtry", + "search.filters.search.submit":"Zastosuj", + "search.form.search":"Wyszukaj", + "search.form.search_dspace":"W repozytorium", + "search.form.scope.all":"W całym DSpace", + "search.results.head":"Wyniki wyszukiwania", + "default.search.results.head":"Wyniki wyszukiwania", + "search.results.no-results":"Twoj wyszukiwanie nie zwróciło żadnych rezultatów. Masz problem ze znalezieniem tego czego szukasz? Spróbuj użyć", + "search.results.no-results-link":"fraz podobnych do Twojego wyszukiwania", + "search.results.empty":"Twoje wyszukiwanie nie zwróciło żadnych rezultatów.", + "search.sidebar.close":"Wróć do wyników wyszukiwania", + "search.sidebar.filters.title":"Filtry", + "search.sidebar.open":"Narzędzia wyszukiwania", + "search.sidebar.results":"wyniki", + "search.sidebar.settings.rpp":"Wyników na stronie", + "search.sidebar.settings.sort-by":"Sortuj według", + "search.sidebar.settings.title":"Ustawienia", + "search.view-switch.show-detail":"Wyświetl widok szczegółowy", + "search.view-switch.show-grid":"Wyświetl jako siatkę", + "search.view-switch.show-list":"Wyświetl jako listę", + "sorting.ASC":"Rosnąco", + "sorting.DESC":"Malejąco", + "sorting.dc.title.ASC":"Tytułami rosnąco", + "sorting.dc.title.DESC":"Tytułami malejąco", + "sorting.score.ASC":"Najmniej trafne", + "sorting.score.DESC":"Najbardziej trafne", + "sorting.dc.date.issued.ASC":"Data wydania rosnąco", + "sorting.dc.date.issued.DESC":"Data wydania malejąco", + "sorting.dc.date.accessioned.ASC":"Data dostępu rosnąco", + "sorting.dc.date.accessioned.DESC":"Data dostępu malejąco", + "sorting.lastModified.ASC":"Ostatnia modyfikacja rosnąco", + "sorting.lastModified.DESC":"Ostatnia modyfikacja malejąco", + "statistics.title":"Statystyki", + "statistics.header":"Statystyki dla {{ scope }}", + "statistics.breadcrumbs":"Statystyki", + "statistics.page.no-data":"Brak dostępnych danych", + "statistics.table.no-data":"Brak dostępnych danych", + "statistics.table.header.views":"Wyświetlenia", + "submission.edit.breadcrumbs":"Edytuj zgłoszenie", + "submission.edit.title":"Edytuj zgłoszenie", + "submission.general.cancel":"Anuluj", + "submission.general.cannot_submit":"Nie masz uprawnień, aby utworzyć nowe zgłoszenie.", + "submission.general.deposit":"Deponuj", + "submission.general.discard.confirm.cancel":"Anuluj", + "submission.general.discard.confirm.info":"Czy na pewno? To działanie nie może zostać cofnięte.", + "submission.general.discard.confirm.submit":"Tak, na pewno", + "submission.general.discard.confirm.title":"Odrzuć zgłoszenie", + "submission.general.discard.submit":"Odrzuć", + "submission.general.info.saved":"Zapisane", + "submission.general.info.pending-changes":"Niezapisane zmiany", + "submission.general.save":"Zapisz", + "submission.general.save-later":"Zapisz wersję roboczą", + "submission.import-external.page.title":"Importuj metdane z zewnętrznego źródła", + "submission.import-external.title":"Importuj metadane z zewnętrznego źródła", + "submission.import-external.title.Journal":"Importuj czasopismo z zewnętrznego źródła", + "submission.import-external.title.JournalIssue":"Importuj numer czasopisma z zewnętrznego źródła", + "submission.import-external.title.JournalVolume":"Importuj tom czasopisma z zewnętrznego źródła", + "submission.import-external.title.OrgUnit":"Importuj wydawcę z zewnętrznego źródła", + "submission.import-external.title.Person":"Importuj osobę z zewnętrznego źródła", + "submission.import-external.title.Project":"Importuj projekt z zewnętrznego źródła", + "submission.import-external.title.Publication":"Importuj publikację z zewnętrznego źródła", + "submission.import-external.title.none":"Importuj metadane z zewnętrznego źródła", + "submission.import-external.page.hint":"Enter a query above to find items from the web to import in to DSpace.", + "submission.import-external.back-to-my-dspace":"Powrót do MyDSpace", + "submission.import-external.search.placeholder":"Wyszukaj zewnętrzne źródła danych", + "submission.import-external.search.button":"Szukaj", + "submission.import-external.search.button.hint":"Zacznij wpisywać frazę, aby wyszukać", + "submission.import-external.search.source.hint":"Wybierz zewnętrzne źródło", + "submission.import-external.source.ads":"NASA/ADS", + "submission.import-external.source.arxiv":"arXiv", + "submission.import-external.source.cinii":"CiNii", + "submission.import-external.source.crossref":"CrossRef", + "submission.import-external.source.loading":"ładowanie...", + "submission.import-external.source.sherpaJournal":"Czasopisma w SHERPA", + "submission.import-external.source.sherpaJournalIssn":"Czasopisma w SHERPA wg ISSN", + "submission.import-external.source.sherpaPublisher":"Wydawcy w SHERPA", + "submission.import-external.source.openAIREFunding":"Finansowanie OpenAIRE API", + "submission.import-external.source.orcid":"ORCID", + "submission.import-external.source.orcidWorks":"ORCID", + "submission.import-external.source.pubmed":"Pubmed", + "submission.import-external.source.pubmedeu":"Pubmed Europe", + "submission.import-external.source.lcname":"Nazwy Biblioteki Kongresu", + "submission.import-external.source.scielo":"SciELO", + "submission.import-external.source.scopus":"Scopus", + "submission.import-external.source.vufind":"VuFind", + "submission.import-external.source.wos":"Web Of Science", + "submission.import-external.source.epo":"Europejski Urząd Patentowy (EPO)", + "submission.import-external.preview.title.Journal":"Podgląd czasopisma", + "submission.import-external.preview.title.OrgUnit":"Podgląd organizacji", + "submission.import-external.preview.title.Person":"Podgląd osoby", + "submission.import-external.preview.title.Project":"Podgląd projektu", + "submission.import-external.preview.title.Publication":"Podgląd publikacji", + "submission.import-external.preview.subtitle":"Metadane poniżej zostały zaimportowane z zewnętrznego źródła. Niektóre pola zostaną uzupełnione automatycznie, kiedy rozpoczniesz zgłaszanie pozycji.", + "submission.import-external.preview.button.import":"Rozpocznij zgłoszenie", + "submission.import-external.preview.error.import.title":"Błąd zgłoszenia", + "submission.import-external.preview.error.import.body":"Wystąpił błąd podczas procesu importowania pozycji z zewnętrznego źródła.", + "submission.sections.describe.relationship-lookup.close":"Zamknij", + "submission.sections.describe.relationship-lookup.external-source.added":"Udało się dodać wpis do selekcji", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication":"Importuj zdalnego autora", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal":"Importuj zdalne czasopismo", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue":"Importuj zdalny numer czasopisma", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume":"Importuj zdalny tom czasopisma", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication":"Projekt", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity":"Nowy typ danych dodany!", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title":"Projekt", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding":"Finansowanie OpenAIRE API", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title":"Importuj zdalnego autora", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Person":"Importuj zdalną osobę", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Product":"Importuj zdalny produkt", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Equipment":"Importuj zdalną aparaturę badawczą", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Event":"Importuj zdalne wydarzenie", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Funding":"Importuj zdalną instytucję finansującą", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.OrgUnit":"Importuj zdalnego wydawcę", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Patent":"Importuj zdalnie patent", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Project":"Importuj zdalnie projekt", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication":"Importuj zdalnie publikację", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity":"Udało się dodać autora do selekcji", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.new-entity":"Udało się zaimportować i dodać zewnętrznego autora do selekcji", + "submission.sections.describe.relationship-lookup.external-source.import-modal.authority":"Nadrzędność", + "submission.sections.describe.relationship-lookup.external-source.import-modal.authority.new":"Importuj jako nową, lokalną, nadrzędną pozycję", + "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel":"Anuluj", + "submission.sections.describe.relationship-lookup.external-source.import-modal.collection":"Wybierz kolekcję do zaimportowania nowych pozycji", + "submission.sections.describe.relationship-lookup.external-source.import-modal.entities":"Typ danych", + "submission.sections.describe.relationship-lookup.external-source.import-modal.entities.new":"Importuj jako nowy lokalny typ danych", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname":"Importuj z LC Name", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid":"Importuj z ORCID", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal":"Importuj z Sherpa Journal", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher":"Importuj z Sherpa Publisher", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed":"Importuj z PubMed", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv":"Importuj z arXiv", + "submission.sections.describe.relationship-lookup.external-source.import-modal.import":"Import", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title":"Importuj zdalne czasopismo", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity":"Successfully added local journal to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity":"Successfully imported and added external journal to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title":"Importuj zdalny numer czasopisma", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity":"Udało się dodać lokalne czasopismo do zaznaczenia", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity":"Udało się zaimportować i dodać czasopismo zewnętrzne do zaznaczenia", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.title":"Importuj zdalny numer czasopisma", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity":"Udało się dodać lokalny numer czasopismo do zaznaczenia", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity":"Udało się zaimportować i dodać zewnętrzny numer czasopisma do zaznaczenia", + "submission.sections.describe.relationship-lookup.external-source.import-modal.select":"Wybierz lokalne powiązanie:", + "submission.sections.describe.relationship-lookup.search-tab.deselect-all":"Odznacz wszystko", + "submission.sections.describe.relationship-lookup.search-tab.deselect-page":"Odznacz stronę", + "submission.sections.describe.relationship-lookup.search-tab.loading":"Ładowanie...", + "submission.sections.describe.relationship-lookup.search-tab.placeholder":"Wyszukaj zapytanie", + "submission.sections.describe.relationship-lookup.search-tab.search":"Zastosuj", + "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder":"Wyszukaj...", + "submission.sections.describe.relationship-lookup.search-tab.select-all":"Zaznacz wszystko", + "submission.sections.describe.relationship-lookup.search-tab.select-page":"Zaznacz stronę", + "submission.sections.describe.relationship-lookup.selected":"Zaznacz {{ size }} pozycji", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication":"Autorzy lokalni ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication":"Czasopisma lokalne ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project":"Projekty lokalne ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication":"Publikacje lokalne ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person":"Autorzy lokalni ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit":"Lokalne jednostki organizacyjne ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage":"Lokalne paczki danych ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile":"Lokalne pliki danych ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal":"Lokalne czasopisma ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication":"Lokalne numery czasopism ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue":"Lokalne numery czasopism ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication":"Lokalne tomy czasopism ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume":"Lokalne tomy czasopism ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal":"Sherpa Journals ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaPublisher":"Sherpa Publishers ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid":"ORCID ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname":"LC Names ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed":"PubMed ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.arxiv":"arXiv ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication":"Wyszukaj instytucje finansujące", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication":"Wyszukaj finansowanie", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf":"Wyszukaj jednostki organizacyjne", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding":"Finansowanie OpenAIRE API", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication":"Projekty", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject":"Instytucja finansująca projekt", + "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding":"Finansowanie OpenAIRE API", + "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication":"Projekt", + "submission.sections.describe.relationship-lookup.title.isProjectOfPublication":"Projekty", + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject":"Instytucja finansująca projekt", + "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder":"Wyszukaj...", + "submission.sections.describe.relationship-lookup.selection-tab.tab-title":"Aktualne zaznaczenie ({{ count }})", + "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication":"Numery czasopisma", + "submission.sections.describe.relationship-lookup.title.JournalIssue":"Numery czasopisma", + "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication":"Tomy czasopisma", + "submission.sections.describe.relationship-lookup.title.JournalVolume":"Tomy czasopisma", + "submission.sections.describe.relationship-lookup.title.isJournalOfPublication":"Czasopisma", + "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication":"Autorzy", + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication":"Instytucja finansująca", + "submission.sections.describe.relationship-lookup.title.Project":"Projekty", + "submission.sections.describe.relationship-lookup.title.Publication":"Publikacje", + "submission.sections.describe.relationship-lookup.title.Person":"Autorzy", + "submission.sections.describe.relationship-lookup.title.OrgUnit":"Jednostki organizacyjne", + "submission.sections.describe.relationship-lookup.title.DataPackage":"Paczki danych", + "submission.sections.describe.relationship-lookup.title.DataFile":"Pliki danych", + "submission.sections.describe.relationship-lookup.title.Funding Agency":"Instytucja finansująca", + "submission.sections.describe.relationship-lookup.title.isFundingOfPublication":"Finansowanie", + "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf":"Nadrzędna jednostka organizacyjna", + "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown":"Przełącz na listę rozwijaną", + "submission.sections.describe.relationship-lookup.selection-tab.settings":"Ustawienia", + "submission.sections.describe.relationship-lookup.selection-tab.no-selection":"Twoje zaznaczenie jest puste.", + "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication":"Wybrani autorzy", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication":"Wybrane czasopisma", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication":"Wybrane tomy czasopisma", + "submission.sections.describe.relationship-lookup.selection-tab.title.Project":"Wybrane projekty", + "submission.sections.describe.relationship-lookup.selection-tab.title.Publication":"Wybrane publikacje", + "submission.sections.describe.relationship-lookup.selection-tab.title.Person":"Wybrani autorzy", + "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit":"Wybrane jednostki organizacyjne", + "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage":"Wybrane pakiety danych", + "submission.sections.describe.relationship-lookup.selection-tab.title.DataFile":"Wybrane pliki danych", + "submission.sections.describe.relationship-lookup.selection-tab.title.Journal":"Wybrane czasopisma", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication":"Wybrany numer wydania", + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume":"Wybrany tom czasopisma", + "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication":"Wybrane instytucje finansujące", + "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication":"Wybrane finansowanie", + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue":"Wybrany numer wydania", + "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf":"Wybrana jednostka organizacyjna", + "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal":"Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.crossref":"Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher":"Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.orcid":"Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2":"Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.lcname":"Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed":"Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv":"Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.epo":"Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.scopus":"Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.scielo":"Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.wos":"Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title":"Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.name-variant.notification.content":"Czy chcesz zapisać \"{{ value }}\" jako wariant imienia dla tego użytkownika, aby Ty lub inni użytkownicy mogli używać tego wariantu w przyszłych zgłoszeniach?. Jeśli nie, nadal możesz użyć tego wariantu w tym zgłoszeniu.", + "submission.sections.describe.relationship-lookup.name-variant.notification.confirm":"Zapisz nowy wariant imienia", + "submission.sections.describe.relationship-lookup.name-variant.notification.decline":"Użyj tylko w tym zgłoszeniu", + "submission.sections.ccLicense.type":"Typ licencji", + "submission.sections.ccLicense.select":"Wybierz typ licencji…", + "submission.sections.ccLicense.change":"Zmień typ licencji…", + "submission.sections.ccLicense.none":"Brak dostępnych licencji", + "submission.sections.ccLicense.option.select":"Wybierz opcję…", + "submission.sections.ccLicense.link":"Wybrano licencję:", + "submission.sections.ccLicense.confirmation":"Udzielam powyższej licencji", + "submission.sections.general.add-more":"Dodaj więcej", + "submission.sections.general.collection":"Kolekcja", + "submission.sections.general.deposit_error_notice":"Wystąpił błąd podczas zgłaszania pozycji. Spróbuj ponownie później.", + "submission.sections.general.deposit_success_notice":"Udało się wprowadzić pozycję.", + "submission.sections.general.discard_error_notice":"Wystąpił błąd podczas odrzucania pozycji. Spróbuj ponownie później.", + "submission.sections.general.discard_success_notice":"Udało się odrzucić pozycję.", + "submission.sections.general.metadata-extracted":"Nowe metadane zostany rozpakowane i dodane do sekcji {{sectionId}}.", + "submission.sections.general.metadata-extracted-new-section":"Nowa sekcja {{sectionId}} została dodana do zgłoszenia.", + "submission.sections.general.no-collection":"Nie znaleziono kolekcji", + "submission.sections.general.no-sections":"Opcje niedostępne", + "submission.sections.general.save_error_notice":"Wystąpił błąd podczas zapisywania numeru. Spróbuj ponownie później. Po odświeżeniu strony niezapisane zmiany mogą zostać utracone.", + "submission.sections.general.save_success_notice":"Udało się zapisać zgłoszenie.", + "submission.sections.general.search-collection":"Szukaj kolekcji", + "submission.sections.general.sections_not_valid":"Niektóre sekcje są niekompletne.", + "submission.sections.submit.progressbar.CClicense":"Licencja Creative Commons", + "submission.sections.submit.progressbar.describe.recycle":"Odzyskaj", + "submission.sections.submit.progressbar.describe.stepcustom":"Opisz", + "submission.sections.submit.progressbar.describe.stepone":"Opisz", + "submission.sections.submit.progressbar.describe.steptwo":"Opisz", + "submission.sections.submit.progressbar.detect-duplicate":"Potencjalne duplikaty", + "submission.sections.submit.progressbar.license":"Zdeponuj licencję", + "submission.sections.submit.progressbar.upload":"Prześlij pliki", + "submission.sections.status.errors.title":"Błędy", + "submission.sections.status.valid.title":"Poprawność", + "submission.sections.status.warnings.title":"Ostrzeżenia", + "submission.sections.status.errors.aria":"ma błędy", + "submission.sections.status.valid.aria":"jest poprawne", + "submission.sections.status.warnings.aria":"ma ostrzeżenia", + "submission.sections.toggle.open":"Otwórz sekcję", + "submission.sections.toggle.close":"Zamknij sekcję", + "submission.sections.toggle.aria.open":"Rozwiń sekcję {{sectionHeader}}", + "submission.sections.toggle.aria.close":"Zwiń sekcję {{sectionHeader}}", + "submission.sections.upload.delete.confirm.cancel":"Anuluj", + "submission.sections.upload.delete.confirm.info":"Czy na pewno? To działanie nie może zostać cofnięte.", + "submission.sections.upload.delete.confirm.submit":"Tak, na pewno", + "submission.sections.upload.delete.confirm.title":"Usuń plik", + "submission.sections.upload.delete.submit":"Usuń", + "submission.sections.upload.download.title":"Pobierz plik", + "submission.sections.upload.drop-message":"Upuść pliki, aby załączyć je do tej pozycji", + "submission.sections.upload.edit.title":"Edytuj plik", + "submission.sections.upload.form.access-condition-label":"Typ dostępu", + "submission.sections.upload.form.date-required":"Data jest wymagana.", + "submission.sections.upload.form.date-required-from":"Data przyznania dostępu od jest wymagana.", + "submission.sections.upload.form.date-required-until":"Data przyznania dostępu do jest wymagana.", + "submission.sections.upload.form.from-label":"Pozwól na dostęp od", + "submission.sections.upload.form.from-placeholder":"Od", + "submission.sections.upload.form.group-label":"Grupa", + "submission.sections.upload.form.group-required":"Grupa jest wymagana", + "submission.sections.upload.form.until-label":"Pozwól na dostęp do", + "submission.sections.upload.form.until-placeholder":"Do", + "submission.sections.upload.header.policy.default.nolist":"Pliki wgrane do kolekcji {{collectionName}} będą dostępne dla poniższych grup:", + "submission.sections.upload.header.policy.default.withlist":"Zwróć uwagę na to, że pliki w kolekcji {{collectionName}} będą dostępne dla poniższych grup, z wyjątkiem tych, które zostały wyłączone z dostępu:", + "submission.sections.upload.info":"Tutaj znajdują się wszystkie pliki dodane w tym momencie do pozycji. Możesz zaktualizować metadane pliku i warunki dostępu lub przesłać dodatkowe pliki, przeciągając i opuszczając je gdziekolwiek na tej stronie", + "submission.sections.upload.no-entry":"Nie", + "submission.sections.upload.no-file-uploaded":"Pliki nie zostały jeszcze wgrane.", + "submission.sections.upload.save-metadata":"Zapisz metadane", + "submission.sections.upload.undo":"Anuluj", + "submission.sections.upload.upload-failed":"Przesyłanie nieudane", + "submission.sections.upload.upload-successful":"Przesyłanie udane", + "submission.submit.breadcrumbs":"Nowe zgłoszenie", + "submission.submit.title":"Nowe zgłoszenie", + "submission.workflow.generic.delete":"Usuń", + "submission.workflow.generic.delete-help":"Jeśli chcesz odrzucić tę pozycję, wybierz \"Delete\". Będzie wymagane potwierdzenie tej decyzji.", + "submission.workflow.generic.edit":"Edytuj", + "submission.workflow.generic.edit-help":"Wybierz tę opcję, aby zmienić metadane pozycji.", + "submission.workflow.generic.view":"Podgląd", + "submission.workflow.generic.view-help":"Wybierz tę opcję, aby wyświetlić metadane pozycji.", + "submission.workflow.tasks.claimed.approve":"Zatwierdź", + "submission.workflow.tasks.claimed.approve_help":"Jeśli ta pozycja ma zostać zatwierdzona i wprowadzona do kolekcji, wybierz \"Approve\".", + "submission.workflow.tasks.claimed.edit":"Edytuj", + "submission.workflow.tasks.claimed.edit_help":"Wybierz tę opcję, aby zmienić metadane pozycji.", + "submission.workflow.tasks.claimed.reject.reason.info":"Proszę wpisać powód odrzucenia zgłoszenia w poniższe pole, wskazując, czy zgłaszający może poprawić problem i ponownie przesłać zgłoszenie.", + "submission.workflow.tasks.claimed.reject.reason.placeholder":"Opisz powód odrzucenia zgłoszenia", + "submission.workflow.tasks.claimed.reject.reason.submit":"Odrzuć pozycję", + "submission.workflow.tasks.claimed.reject.reason.title":"Powód", + "submission.workflow.tasks.claimed.reject.submit":"Odrzuć", + "submission.workflow.tasks.claimed.reject_help":"Jeśli po przejrzeniu pozycji stwierdzono, że nie nadaje się ona do włączenia do kolekcji, wybierz opcję \"Reject\". Zostaniesz wtedy poproszony o określenie powodu odrzucenia, i wskazanie czy zgłaszający powinien wprowadzić zmiany i przesłać ponownie pozycję.", + "submission.workflow.tasks.claimed.return":"Cofnij do puli zadań", + "submission.workflow.tasks.claimed.return_help":"Cofnij zadanie do puli, aby inny użytkownik mógł się go podjąć.", + "submission.workflow.tasks.generic.error":"Podczas działania wystąpił błąd...", + "submission.workflow.tasks.generic.processing":"Procesowanie...", + "submission.workflow.tasks.generic.submitter":"Zgłaszający", + "submission.workflow.tasks.generic.success":"Udało się", + "submission.workflow.tasks.pool.claim":"Podejmij pracę", + "submission.workflow.tasks.pool.claim_help":"Przypisz to zadanie do siebie.", + "submission.workflow.tasks.pool.hide-detail":"Ukryj szczegóły", + "submission.workflow.tasks.pool.show-detail":"Pokaż szczegóły", + "thumbnail.default.alt":"Miniatura", + "thumbnail.default.placeholder":"Brak miniatury", + "thumbnail.project.alt":"Logo projektu", + "thumbnail.project.placeholder":"Obraz zastępczy projketu", + "thumbnail.orgunit.alt":"Logo jednostki organizacyjnej", + "thumbnail.orgunit.placeholder":"Obraz zastępczy jednostki organizacyjnej", + "thumbnail.person.alt":"Zdjęcie profilowe", + "thumbnail.person.placeholder":"Brak zdjęcia profilowego", + "title":"DSpace", + "vocabulary-treeview.header":"Widok drzewka", + "vocabulary-treeview.load-more":"Pokaż więcej", + "vocabulary-treeview.search.form.reset":"Resetuj", + "vocabulary-treeview.search.form.search":"Szukaj", + "vocabulary-treeview.search.no-result":"Brak pozycji do wyświetlenia", + "vocabulary-treeview.tree.description.nsi":"The Norwegian Science Index", + "vocabulary-treeview.tree.description.srsc":"Kategorie tematów badań", + "uploader.browse":"wyszukaj na swoim urządzeniu", + "uploader.drag-message":"Przeciągnij i upuść pliki tutaj", + "uploader.delete.btn-title":"Usuń", + "uploader.or":", lub ", + "uploader.processing":"Procesowanie", + "uploader.queue-length":"Długość kolejki", + "virtual-metadata.delete-item.info":"Wybierz typy, dla których chcesz zapisać wirtualne metadane jako rzeczywiste metadane", + "virtual-metadata.delete-item.modal-head":"Wirtualne metadane tego powiązania", + "virtual-metadata.delete-relationship.modal-head":"Wybierz pozycje, dla których chcesz zapisać wirtualne metadane jako rzeczywiste metadane", + "workflowAdmin.search.results.head":"Zarządzaj procesami", + "workflow-item.edit.breadcrumbs":"Edytuj pozycję procesu", + "workflow-item.edit.title":"Edytuj pozycję procesu", + "workflow-item.delete.notification.success.title":"Usunięte", + "workflow-item.delete.notification.success.content":"Ten element procesu został usunięty", + "workflow-item.delete.notification.error.title":"Coś poszło nie tak", + "workflow-item.delete.notification.error.content":"Ten element procesu nie mógł zostać usunięty", + "workflow-item.delete.title":"Usuń element procesu", + "workflow-item.delete.header":"Usuń element procesu", + "workflow-item.delete.button.cancel":"Anuluj", + "workflow-item.delete.button.confirm":"Usuń", + "workflow-item.send-back.notification.success.title":"SOdeślij do zgłaszającego", + "workflow-item.send-back.notification.success.content":"Ten element procesu został odesłany do zgłaszającego", + "workflow-item.send-back.notification.error.title":"Coś poszło nie tak", + "workflow-item.send-back.notification.error.content":"Ten element procesu nie mógł zostać odesłany do zgłaszającego", + "workflow-item.send-back.title":"Odeślij element procesu do zgłaszającego", + "workflow-item.send-back.header":"Odeślij element procesu do zgłaszającego", + "workflow-item.send-back.button.cancel":"Anuluj", + "workflow-item.send-back.button.confirm":"Odeślij", + "workflow-item.view.breadcrumbs":"Widok procesu", + "idle-modal.header":"Sesja wkrótce wygaśnie", + "idle-modal.info":"Ze względów bezpieczeństwa sesja wygaśnie po {{ timeToExpire }} minutach nieaktywności. Twoja sesja wkrótce wygaśnie. Czy chcesz ją przedłużyć albo wylogować się?", + "idle-modal.log-out":"Wyloguj", + "idle-modal.extend-session":"Wydłuż sesję", + "workspace.search.results.head":"Twoje zadania", + "orgunit.listelement.badge":"Jednostka organizacyjna", + "orgunit.page.city":"Miasto", + "orgunit.page.country":"Kraj", + "orgunit.page.dateestablished":"Data założenia", + "orgunit.page.description":"Opis", + "orgunit.page.edit":"Edytuj pozycję", + "orgunit.page.id":"ID", + "orgunit.page.titleprefix":"Jednostka organizacyjna: ", + "pagination.options.description":"Opcje strony", + "pagination.results-per-page":"Wyników na stronę", + "pagination.showing.detail":"{{ range }} z {{ total }}", + "pagination.showing.label":"Teraz wyświetlane ", + "pagination.sort-direction":"Opcje sortowania", + "cookies.consent.purpose.sharing":"Udostępnianie", + "item.preview.dc.identifier.issn":"ISSN", + "500.page-internal-server-error":"Usługa niedostępna", + "500.help":"Serwer jest tymczasowo niezdolny do obsługi Twojego żądania z powodu przestoju konserwacyjnego lub problemów z przepustowością. Prosimy spróbować ponownie później.", + "500.link.home-page":"Zabierz mnie na stronę główną", + "error-page.description.401":"brak autoryzacji", + "error-page.description.403":"brak dostępu", + "error-page.description.500":"usługa niedostępna", + "error-page.description.404":"nie znaleziono strony", + "error-page.orcid.generic-error":"Podczas logowania za pomocą ORCID wystąpił błąd. Upewnij się, że udostępniłeś DSpace adres e-mail swojego konta ORCID. Jeśli błąd nadal występuje, skontaktuj się z administratorem", + "access-status.embargo.listelement.badge":"Embargo", + "access-status.metadata.only.listelement.badge":"Tylko metadane", + "access-status.open.access.listelement.badge":"Open Access", + "access-status.restricted.listelement.badge":"Brak dostępu", + "access-status.unknown.listelement.badge":"Nieznane", + "admin.access-control.groups.table.edit.buttons.remove":"Usuń \"{{name}}\"", + "admin.metadata-import.page.validateOnly":"Tylko waliduj", + "admin.metadata-import.page.validateOnly.hint":"Po wybraniu tej opcji przesłany plik CSV zostanie poddany walidacji. Otrzymasz raport o wykrytych zmianach, ale żadne zmiany nie zostaną zapisane.", + "bitstream.edit.form.iiifLabel.label":"Etykieta canvyIIIF", + "bitstream.edit.form.iiifLabel.hint":"Etykieta dla tego obrazu. Jeśli nie została dostarczona, zostanie użyta domyślna etykieta.", + "bitstream.edit.form.iiifToc.label":"Spis treści IIIF", + "bitstream.edit.form.iiifToc.hint":"Dodanie tekstu tutaj zapoczątkuje nowy zakres spisu treści.", + "bitstream.edit.form.iiifWidth.label":"Szerokość canvy IIIF", + "bitstream.edit.form.iiifWidth.hint":"Szerokość canvy jest zwykle równa szerokości obrazu.", + "bitstream.edit.form.iiifHeight.label":"Wysokość canvy IIIF", + "bitstream.edit.form.iiifHeight.hint":"Wysokość canvy jest zwykle równa szerokości obrazu.", + "browse.back.all-results":"Wszystkie wyniki wyszukiwania", + "pagination.next.button":"Następny", + "pagination.previous.button":"Poprzedni", + "pagination.next.button.disabled.tooltip":"Brak więcej stron z wynikami wyszukiwania", + "browse.startsWith":", zaczyna się od {{ startsWith }}", + "browse.title.page":"Przeszukiwanie {{ collection }} wg {{ field }} {{ value }}", + "collection.edit.item.authorizations.load-bundle-button":"Załaduj więcej paczek", + "collection.edit.item.authorizations.load-more-button":"Załaduj więcej", + "collection.edit.item.authorizations.show-bitstreams-button":"Pokaż polityki plików dla paczek", + "comcol-role.edit.create.error.title":"Nie udało się utworzyć grupy dla roli '{{ role }}'", + "curation.form.submit.error.invalid-handle":"Nie ustalono identyfikatora dla tego obiektu", + "confirmation-modal.delete-profile.header":"Usuń profil", + "confirmation-modal.delete-profile.info":"Czy na pewno chcesz usunąć profil", + "confirmation-modal.delete-profile.cancel":"Anuluj", + "confirmation-modal.delete-profile.confirm":"Usuń", + "error.invalid-search-query":"Zapytanie nie jest poprawne. Wejdź na Solr query syntax, aby dowiedzieć się o najlepszych praktykach i dodatkowych informacjach o tym błędzie.", + "feed.description":"Aktualności", + "footer.link.feedback":"Prześlij uwagi", + "form.group-collapse":"Zwiń", + "form.group-collapse-help":"Kliknij tutaj, aby zwinąć", + "form.group-expand":"Rozwiń", + "form.group-expand-help":"Kliknij tutaj, aby rozwinąć", + "health.breadcrumbs":"Stan systemu", + "health-page.heading":"Stan systemu", + "health-page.info-tab":"Informacje", + "health-page.status-tab":"Status", + "health-page.error.msg":"Serwis stanu systemu jest tymczasowo niedostępny", + "health-page.property.status":"Kod statusu", + "health-page.section.db.title":"Baza danych", + "health-page.section.geoIp.title":"GeoIp", + "health-page.section.solrAuthorityCore.title":"Autentykacja", + "health-page.section.solrOaiCore.title":"OAI", + "health-page.section.solrSearchCore.title":"Wyszukiwarka", + "health-page.section.solrStatisticsCore.title":"Statystyki", + "health-page.section-info.app.title":"Backend aplikacji", + "health-page.section-info.java.title":"Java", + "health-page.status":"Status", + "health-page.status.ok.info":"operacyjny", + "health-page.status.error.info":"Wykryte problemy", + "health-page.status.warning.info":"Wykryte potencjalne problemy", + "health-page.title":"Stan systemu", + "health-page.section.no-issues":"Nie wykryto żadnych problemów", + "info.feedback.breadcrumbs":"Uwagi", + "info.feedback.head":"Uwagi", + "info.feedback.title":"Uwagi", + "info.feedback.info":"Dziękujemy za podzielenie się opinią na temat systemu DSpace. Doceniamy Twój wkład w lepsze działanie systemu!", + "info.feedback.email_help":"Ten adres zostanie użyty, aby przesłać odpowiedź na uwagi.", + "info.feedback.send":"Prześlij uwagi", + "info.feedback.comments":"Komentarz", + "info.feedback.email-label":"Twoj adres e-mail", + "info.feedback.create.success":"Uwagi przesłane!", + "info.feedback.error.email.required":"Poprawny adres e-mail jest wymagany", + "info.feedback.error.message.required":"Treść komentarza jest wymagana", + "info.feedback.page-label":"Strona", + "info.feedback.page_help":"Ta strona odnosi się do uwag.", + "item.orcid.return":"Powrót", + "item.truncatable-part.show-more":"Pokaż więcej", + "item.truncatable-part.show-less":"Pokaż mniej", + "item.page.orcid.title":"ORCID", + "item.page.orcid.tooltip":"Otwórz ustawienia ORCID", + "item.page.claim.button":"Podejmij pracę", + "item.page.claim.tooltip":"Podejmij pracę jako profil", + "item.version.create.modal.submitted.header":"Tworzenie nowej wersji...", + "item.version.create.modal.submitted.text":"Nowa wersja została utworzona. Mogło to trwać chwilę, jeśli pozycja ma wiele powiązań.", + "journal-relationships.search.results.head":"Wyniki wyszukiwania czasopism", + "menu.section.icon.health":"Sekcja menu Stan systemu", + "menu.section.health":"Stan systemu", + "metadata-export-search.tooltip":"Eksportuj wyniki wyszukiwania w formacie CSV", + "metadata-export-search.submit.success":"Eksport rozpoczął się", + "metadata-export-search.submit.error":"Eksport nie rozpoczął się", + "person.page.name":"Nazwa", + "person-relationships.search.results.head":"Wyniki wyszukiwania osób", + "profile.special.groups.head":"Autoryzacja do specjalnych grup, do których należysz", + "project-relationships.search.results.head":"Wyniki wyszukiwania projektów", + "publication-relationships.search.results.head":"Wyniki wyszukiwania publikacji", + "resource-policies.edit.page.target-failure.content":"Wystąpił błąd podczas edycji (użytkownika lub grupy) związany z polityką zasobu.", + "resource-policies.edit.page.other-failure.content":"Wystąpił błąd podczas edycji polityki zasobu. Użytkownik lub grupa zostały zaktualizowane pomyślnie.", + "resource-policies.form.eperson-group-list.modal.header":"Nie można zmienić typu", + "resource-policies.form.eperson-group-list.modal.text1.toGroup":"Nie można zastąpić użytkownika grupą.", + "resource-policies.form.eperson-group-list.modal.text1.toEPerson":"Nie można zastąpić grupy użytkownikiem.", + "resource-policies.form.eperson-group-list.modal.text2":"Usuń obecną polityke zasobu i stwórz nową o określonym typie.", + "resource-policies.form.eperson-group-list.modal.close":"Ok", + "search.results.view-result":"Widok", + "default-relationships.search.results.head":"Wyniki wyszukiwania", + "statistics.table.title.TotalVisits":"Wyświetlnia ogółem", + "statistics.table.title.TotalVisitsPerMonth":"Wyświetlenia w miesiącu", + "statistics.table.title.TotalDownloads":"Pobrania", + "statistics.table.title.TopCountries":"Wyświetlenia wg krajów", + "statistics.table.title.TopCities":"Wyświetlenia wg miast", + "submission.import-external.preview.title":"Podgląd pozycji", + "submission.import-external.preview.title.none":"Podgląd pozycji", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.none":"Import pozycji zdalnie", + "submission.sections.general.cannot_deposit":"Nie można zakończyć deponowania, ponieważ w formularzu wystąpiły błędy.
    Aby zakończyć deponowanie, wypełnij wszystkie obowiązkowe pola.", + "submission.sections.submit.progressbar.accessCondition":"Warunki dostępu do pozycji", + "submission.sections.submit.progressbar.sherpapolicy":"Polityki Sherpa", + "submission.sections.submit.progressbar.sherpaPolicies":"Informacje o polityce open access wydawcy.", + "submission.sections.status.info.title":"Dodatkowe informacje", + "submission.sections.status.info.aria":"Dodatkowe informacje", + "submission.sections.upload.form.access-condition-hint":"Wybierz w jaki sposób pliki dla tej pozycji po jest zdeponowaniu będą mogły być udostępnione", + "submission.sections.upload.form.from-hint":"Wybierz datę, od której ma zostać zastosowany warunek dostępu", + "submission.sections.upload.form.until-hint":"Wybierz datę, do której ma zostać zastosowany warunek dostępu", + "submission.sections.accesses.form.discoverable-description":"Jeśli checkbox jest zaznaczony, pozycja będzie wyświetlana w wynikach wyszukiwania. Jeśli checkbox jest odznaczony, dostęp do pozycji będzie dostępny tylko przez bezpośredni link, pozycja nie będzie wyświetlana w wynikach wyszukiwania.", + "submission.sections.accesses.form.discoverable-label":"Niemożliwe do wyszukania", + "submission.sections.accesses.form.access-condition-label":"Typ warunku dostępu", + "submission.sections.accesses.form.access-condition-hint":"Wybierz warunek dostępu, aby przypisać go do pozycji, kiedy zostanie zdeponowany.", + "submission.sections.accesses.form.date-required":"Data jest wymagana.", + "submission.sections.accesses.form.date-required-from":"Początkowa data przyznania dostępu jest wymagana.", + "submission.sections.accesses.form.date-required-until":"Końcowa data przyznania dostępu jest wymagana.", + "submission.sections.accesses.form.from-label":"Udziel dostępu od", + "submission.sections.accesses.form.from-hint":"Wybierz datę, od kiedy zostanie przyznany dostęp do tej pozycji", + "submission.sections.accesses.form.from-placeholder":"Od", + "submission.sections.accesses.form.group-label":"Grupa", + "submission.sections.accesses.form.group-required":"Grupa jest wymagana.", + "submission.sections.accesses.form.until-label":"Udziel dostępu do", + "submission.sections.accesses.form.until-hint":"Wybierz datę, do kiedy zostanie przyznany dostęp do tej pozycji", + "submission.sections.accesses.form.until-placeholder":"Do", + "submission.sections.sherpa.publication.information":"Informacje o publikacji", + "submission.sections.sherpa.publication.information.title":"Tytuł", + "submission.sections.sherpa.publication.information.issns":"Numery ISSN", + "submission.sections.sherpa.publication.information.url":"URL", + "submission.sections.sherpa.publication.information.publishers":"Wydawca", + "submission.sections.sherpa.publication.information.romeoPub":"Wydawca Romeo", + "submission.sections.sherpa.publication.information.zetoPub":"Wydawca Zeto", + "submission.sections.sherpa.publisher.policy":"Polityka wydawnicza", + "submission.sections.sherpa.publisher.policy.description":"Poniższe informacje zostały znalezione za pośrednictwem Sherpa Romeo. W oparciu o politykę Twojego wydawcy, zawiera ona porady dotyczące tego, czy embargo może być konieczne i/lub jakie pliki możesz przesłać. Jeśli masz pytania, skontaktuj się z administratorem strony poprzez formularz.", + "submission.sections.sherpa.publisher.policy.openaccess":"Rodzaje Open Access dozwolone przez politykę wydawniczą tego czasopisma są wymienione poniżej. Kliknij na wybrany rodzaj, aby przejść do szczegółowego widoku", + "submission.sections.sherpa.publisher.policy.more.information":"Aby uzuyskać więcej informacji, kliknij tutaj:", + "submission.sections.sherpa.publisher.policy.version":"Wersja", + "submission.sections.sherpa.publisher.policy.embargo":"Embargo", + "submission.sections.sherpa.publisher.policy.noembargo":"Brak embargo", + "submission.sections.sherpa.publisher.policy.nolocation":"Brak", + "submission.sections.sherpa.publisher.policy.license":"Licencja", + "submission.sections.sherpa.publisher.policy.prerequisites":"Wymagania wstępne", + "submission.sections.sherpa.publisher.policy.location":"Lokalizacja", + "submission.sections.sherpa.publisher.policy.conditions":"Wymagania", + "submission.sections.sherpa.publisher.policy.refresh":"Odśwież", + "submission.sections.sherpa.record.information":"Informacje o rekordzie", + "submission.sections.sherpa.record.information.id":"ID", + "submission.sections.sherpa.record.information.date.created":"Data utworzenia", + "submission.sections.sherpa.record.information.date.modified":"Ostatnia modyfikacja", + "submission.sections.sherpa.record.information.uri":"URI", + "submission.sections.sherpa.error.message":"Wystąpił błąd podczas pobierania informacji z Sherpa", + "submission.workspace.generic.view":"Podgląd", + "submission.workspace.generic.view-help":"Wybierz tę opcje, aby zobaczyć metadane.", + "workflow.search.results.head":"Zadania na workflow", + "workspace-item.view.breadcrumbs":"Widok wersji roboczej", + "workspace-item.view.title":"Widok wersji roboczej", + "researcher.profile.change-visibility.fail":"Wystąpił niespodziewany błąd podczas zmiany widoczności profilu", + "person.page.orcid.link.processing":"Łączenie profilu z ORCID...", + "person.page.orcid.link.error.message":"Coś poszło nie tak podczas łączenia z ORCID. Jeśli problem będzie się powtarzał, skontaktuj się z administratorem.", + "person.page.orcid.sync-queue.table.header.type":"Typ", + "person.page.orcid.sync-queue.table.header.description":"Opis", + "person.page.orcid.sync-queue.table.header.action":"Akcja", + "person.page.orcid.sync-queue.tooltip.project":"Projekt", + "person.page.orcid.sync-queue.send.validation-error.country.invalid":"Niewłaściwy dwuznakowy kod kraju ISO 3166", + "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid":"Wymagana data publikacji to co najmniej rok po 1900", + "person.page.orcid.synchronization-mode-funding-message":"Wybierz, czy chcesz wysłać swoje projekty na swoją listę informacji o projektach w profilu ORCID.", + "person.page.orcid.synchronization-mode-publication-message":"Wybierz, czy chcesz wysłać swoje publikacje na swoją listę informacji o publikacjach w profilu ORCID.", + "person.page.orcid.synchronization-mode-profile-message":"Wybierz, czy chcesz wysłać swoje dane bibliograficzne lub osobiste identyfikatory do swojego profilu ORCID.", + "person.orcid.sync.setting":"Ustawienia synchronizacji z ORCID", + "person.orcid.registry.queue":"Kolejka rejestru z ORCID", + "person.orcid.registry.auth":"Autoryzacje z ORCID", + "home.recent-submissions.head":"Najnowsze publikacje", + "submission.sections.sherpa-policy.title-empty":"Nie wybrano ISSN i informacje o polityce wydawniczej czasopisma są niedostępne", + "admin.batch-import.breadcrumbs":"Import zbiorczy", + "admin.batch-import.page.dropMsg":"Drop a batch ZIP to import", + "admin.batch-import.page.dropMsgReplace":"Drop to replace the batch ZIP to import", + "admin.batch-import.page.error.addFile":"Najpierw wybierz plik (ZIP)", + "admin.batch-import.page.header":"Import masowy", + "admin.batch-import.page.help":"Wybierz kolekcję do zaimportowania kolekcji. Potem, upuść lub przeszukaj plik SAF, który zawiera pozycje do importu", + "admin.batch-import.page.remove":"usuń", + "admin.batch-import.page.validateOnly.hint":"Jeśli wybrano, importowany plik ZIP będzie walidowany. Otrzymasz raport ze zmianami, ale żadne zmiany nie zostaną wykonane zapisane.", + "collection.form.correctionSubmissionDefinition":"Wzór zgłoszenia do prośby o korektę", + "comcol-role.edit.delete.error.title":"Nie udało się usunąć roli '{{ role }}' dla grup", + "confirmation-modal.export-batch.header":"Eksport maasowy (ZIP) {{ dsoName }}", + "confirmation-modal.export-batch.info":"Czy na pewno chcesz wyeksportować plik ZIP z {{ dsoName }}", + "dso-selector.export-batch.dspaceobject.head":"Eksport masowy (ZIP) z", + "menu.section.export_batch":"Eksport masowy (ZIP)", + "nav.user-profile-menu-and-logout":"Profil użytkownika i wylogowywanie", + "process.detail.actions":"Akcje", + "process.detail.delete.body":"Czy na pewno chcesz usunąć bieżący proces?", + "process.detail.delete.button":"Usuń proces", + "process.detail.delete.cancel":"Anuluj", + "process.detail.delete.confirm":"Usuń proces", + "process.detail.delete.error":"Nie udało się usunąć procesu", + "process.detail.delete.header":"Usuń proces", + "process.detail.delete.success":"Proces został usunięty.", + "admin.batch-import.title":"Masowy import", + "admin.metadata-import.page.button.select-collection":"Wybierz kolekcję", + "admin.registries.bitstream-formats.table.id":"ID", + "admin.registries.schema.fields.table.id":"ID", + "cookies.consent.app.description.google-recaptcha":"Podczas rejestracji i odzyskiwania hasła używamy narzędzia google reCAPTCHA", + "cookies.consent.app.disable-all.description":"Przełącz, aby zaakceptować lub odrzucić wszystkie", + "cookies.consent.app.disable-all.title":"Akceptowacja lub odrzucenie wszystkich", + "cookies.consent.app.title.google-recaptcha":"Google reCaptcha", + "cookies.consent.content-modal.service":"usługa", + "cookies.consent.content-modal.services":"usługi", + "cookies.consent.content-notice.description.no-privacy":"Zbieramy i przetwarzamy Twoje dane w celu: autentykacji, ustawień preferencji i zgód oraz do celów statystycznych.", + "cookies.consent.content-notice.title":"Zgoda na ciasteczka", + "cookies.consent.ok":"Zgadzam się", + "cookies.consent.purpose.registration-password-recovery":"Rejestracja i odzyskiwanie hasła", + "cookies.consent.save":"Zapisz", + "curation-task.task.citationpage.label":"Generuj stronę z cytowaniem", + "dso-selector.import-batch.dspaceobject.head":"Import masowy z", + "orgunit.listelement.no-title":"Brak tytyłu", + "process.bulk.delete.error.body":"Proces z ID {{processId}} nie może być usunięty. Pozostałe procesy zostaną usunięte.", + "process.bulk.delete.error.head":"Błąd podczas usuwania procesu", + "process.bulk.delete.success":"{{count}} proces/y został/y usunięte", + "process.overview.delete":"Usuń {{count}} proces/y", + "process.overview.delete.body":"Czy na pewno usunąć {{count}} proces/y?", + "process.overview.delete.clear":"Wyczyść selekcję procesów do usunięcia", + "process.overview.delete.header":"Usuń procesy", + "process.overview.delete.processing":"{{count}} procesów zostanie usuniętych. Poczekaj, gdy usuwanie się zakończy. Może to zająć chwilę.", + "process.overview.table.actions":"Akcje", + "profile.security.form.label.current-password":"Aktualne hasło", + "profile.security.form.notifications.error.change-failed":"Wystąpił błąd podczas próby zmiany hasła. Sprawdź czy aktualne hasło jest prawidłowe.", + "profile.security.form.notifications.error.general":"Uzupełnij wymagane pola dla bezpieczeństwa na formularzu", + "register-page.registration.error.recaptcha":"Wystąpił błąd podczas próby autentykacji przez reCAPTCHA", + "register-page.registration.google-recaptcha.must-accept-cookies":"Aby się zarejestrować, musisz zaakceptować ciasteczka dla rejestracji i odzyskiwania hasła (Google reCaptcha).", + "register-page.registration.google-recaptcha.notification.message.error":"Wystąpił błąd podczas weryfikacji reCaptcha", + "register-page.registration.google-recaptcha.notification.message.expired":"Weryfikacja wygasła. Zweryfikuj ponownie.", + "register-page.registration.google-recaptcha.notification.title":"Google reCaptcha", + "register-page.registration.google-recaptcha.open-cookie-settings":"Otwórz ustawienia plików cookies", + "search.results.response.500":"Wystąpił błąd podczas wysyłania zapytania. Spróbuj ponownie później", + "submission.sections.license.granted-label":"Potwierdzam akceptację powyższej licencji", + "submission.sections.license.notgranted":"Najpierw musisz zaakceptować licencję", + "submission.sections.license.required":"Najpierw musisz zaakceptować licencję", + "confirmation-modal.export-batch.confirm":"Eksportuj", + "confirmation-modal.export-batch.cancel":"Anuluj", + "admin.access-control.bulk-access.breadcrumbs":"Zbiorcza edycja dostępu do osiągnięć", + "administrativeBulkAccess.search.results.head":"Wyniki wyszukiwania", + "admin.access-control.bulk-access":"Zbiorcza edycja dostępu do osiągnięć", + "admin.access-control.bulk-access.title":"Zbiorcza edycja dostępu do osiągnięć", + "admin.access-control.bulk-access-browse.header":"Krok 1: Wybierz pozycje", + "admin.access-control.bulk-access-browse.search.header":"Wyszukaj", + "admin.access-control.bulk-access-browse.selected.header":"Obecny wybór({{number}})", + "admin.access-control.bulk-access-settings.header":"Krok 2: Działanie do wykonania", + "admin.access-control.groups.form.tooltip.editGroupPage":"Na tej stronie można edytować opcje grupy i przypisane do niej osoby. W górnej sekcji można edytować nazwę i opis grupy, chyba że jest to grupa administratorów dla zbioru i kolekcji. W tym przypadku nazwa i opis grupy są generowane automatycznie i nie można ich edytować. W kolejnych sekcjach można edytować przypisanie użytkowników do grupy. Szczegóły na [stronie](https://wiki.lyrasis.org/display/DSDOC7x/Create+or+manage+a+user+group).", + "admin.access-control.groups.form.tooltip.editGroup.addEpeople":"Aby dodać lub usunąć użytkownika do/z tej grupy, kliknij przycisk 'Przeglądaj wszystko' lub użyj paska wyszukiwania poniżej, aby wyszukać użytkowników (użyj listy rozwijanej po lewej stronie paska wyszukiwania, aby wybrać, czy chcesz wyszukiwać według imienia i nazwiska, czy według adresu e-mail). Następnie kliknij ikonę plusa przy każdym użytkowniku, którego chcesz dodać do poniższej listy, lub ikonę kosza przy każdym użytkowniku, którego chcesz usunąć. Poniższa lista może mieć kilka stron: użyj strzałek pod listą, aby przejść do kolejnych stron. Gdy wszystkie zmiany zostaną wprowadzone, zapisz je, klikając przycisk 'Zapisz' w górnej sekcji.", + "admin.access-control.groups.form.tooltip.editGroup.addSubgroups":"Aby dodać lub usunąć podgrupę do/z tej grupy, kliknij przycisk 'Przeglądaj wszystko' lub użyj wyszukiwarki poniżej, aby wyszukać użytkowników. Następnie kliknij ikonę plusa przy każdym użytkowniku, którego chcesz dodać do poniższej listy, lub ikonę kosza przy każdym użytkowniku, którego chcesz usunąć. Poniższa lista może składać się z kilku stron: użyj przycisków pod listą, aby przejść do kolejnych stron. Gdy wszystkie zmiany zostaną wprowadzone, zapisz je, klikając przycisk 'Zapisz' w górnej sekcji.", + "admin.workflow.item.workspace":"Przestrzeń robocza", + "admin.workflow.item.policies":"Polityki", + "admin.workflow.item.supervision":"Recenzja", + "admin.batch-import.page.toggle.help":"It is possible to perform import either with file upload or via URL, use above toggle to set the input source", + "admin.metadata-import.page.error.addFileUrl":"Najpierw wpisz URL pliku!", + "admin.metadata-import.page.toggle.upload":"Prześlij", + "admin.metadata-import.page.toggle.url":"URL", + "admin.metadata-import.page.urlMsg":"Wpisz URL pliku ZIP, aby wykonać import masowy", + "advanced-workflow-action.rating.form.rating.label":"Ocena", + "advanced-workflow-action.rating.form.rating.error":"Ta pozycja musi zostać oceniona", + "advanced-workflow-action.rating.form.review.label":"Recenzja", + "advanced-workflow-action.rating.form.review.error":"Musisz wpisać tekst recenzji", + "advanced-workflow-action.rating.description":"Wybierz ocenę poniżej", + "advanced-workflow-action.rating.description-requiredDescription":"Wybierz ocenę poniżej i wpisz uzasadnienie", + "advanced-workflow-action.select-reviewer.description-single":"Wybierz recenzenta przed zdeponowaniem pozycji", + "advanced-workflow-action.select-reviewer.description-multiple":"Wybierz jednego lub więcej recenzentów przed zdeponowaniem pozycji", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.head":"Użytkownicy", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.head":"Dodaj użytkownika", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.button.see-all":"Przeglądaj wszystko", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.headMembers":"Aktualni użytkownicy", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.metadata":"Metadane", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.email":"Adres e-mail (dokładny)", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.button":"Wyszukaj", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.id":"ID", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.name":"Nazwa", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity":"Tożsamość", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email":"Adres e-mail", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.netid":"NetID", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit":"Usuń / Dodaj", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove":"Usuń użytkownika z nazwę \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember":"Dodano użytkownika o nazwie: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.addMember":"Nie dodano użytkownika: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.deleteMember":"Usunięto użytkownika: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.deleteMember":"Nie usunięto użytkownika: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add":"Dodano użytkownika \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup":"Brak aktywnej grupy, najpierw wpisz nazwę.", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-members-yet":"W tej grupie nie ma użytkowników, wyszukaj ich i dodaj.", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-items":"Nie znaleziono żadnych użytkowników", + "advanced-workflow-action.select-reviewer.no-reviewer-selected.error":"Recenzent nie jest wybrany.", + "bitstream.edit.notifications.error.primaryBitstream.title":"Wystąpił błąd podczas zapisu pliku.", + "browse.comcol.by.srsc":"Wg słów kluczowych", + "browse.metadata.srsc.breadcrumbs":"Przeglądaj wg słów kluczowych", + "browse.startsWith.input":"Filtr", + "browse.taxonomy.button":"Przeglądaj", + "search.browse.item-back":"Powrót do wyników wyszukiwania", + "claimed-approved-search-result-list-element.title":"Zaakceptowano", + "claimed-declined-search-result-list-element.title":"Odrzucono i przesłano do deponującego", + "claimed-declined-task-search-result-list-element.title":"Odrzucono i przesłano do recenzenta", + "collection.edit.tabs.access-control.head":"Dostępy", + "collection.edit.tabs.access-control.title":"Edycja kolekcji - dostępy", + "collection.listelement.badge":"Kolekcja", + "community.edit.tabs.access-control.head":"Dostępy", + "community.edit.tabs.access-control.title":"Edycja zbioru - dostępy", + "comcol-role.edit.scorereviewers.name":"Ocena recenzenta", + "comcol-role.edit.scorereviewers.description":"Recenzenci mogą oceniać zdeponowane pozycje, co określi, czy pozycja zostanie przyjęta lub odrzucona.", + "curation-task.task.register-doi.label":"Rejestracja DOI", + "dso.name.unnamed":"Bez nazwy", + "dso-selector.create.community.or-divider":"lub", + "dso-selector.set-scope.community.or-divider":"lub", + "dso-selector.results-could-not-be-retrieved":"Wystąpił błąd, proszę odświeżyć stronę", + "supervision-group-selector.header":"Wybór grupy recenzenckiej", + "supervision-group-selector.select.type-of-order.label":"Wybierz typ funkcji", + "supervision-group-selector.select.type-of-order.option.none":"BRAK", + "supervision-group-selector.select.type-of-order.option.editor":"REDAKTOR", + "supervision-group-selector.select.type-of-order.option.observer":"OBSERWATOR", + "supervision-group-selector.select.group.label":"Wybierz grupę", + "supervision-group-selector.button.cancel":"Anuluj", + "supervision-group-selector.button.save":"Zapisz", + "supervision-group-selector.select.type-of-order.error":"Wybierz typ funkcji", + "supervision-group-selector.select.group.error":"Wybierz grupę", + "supervision-group-selector.notification.create.success.title":"Grupa recenzencka został dodana dla grupy {{ name }}", + "supervision-group-selector.notification.create.failure.title":"Błąd", + "supervision-group-selector.notification.create.already-existing":"Funkcja recenzenta już jest przypisana do tej grupy", + "confirmation-modal.delete-subscription.header":"Usuń subksrypcje", + "confirmation-modal.delete-subscription.info":"Czy na pewno chcesz usunąć subskrypcję: \"{{ dsoName }}\"", + "confirmation-modal.delete-subscription.cancel":"Anuluj", + "confirmation-modal.delete-subscription.confirm":"Usuń", + "error.validation.metadata.name.invalid-pattern":"To pole nie może zawierać kropek, przecinków i spacji. Zamiast tego This field cannot contain dots, commas or spaces. Zamiast tego może użyć pól z notacji SNEQ", + "error.validation.metadata.name.max-length":"To pole nie może zawierać więcej niż 32 znaki", + "error.validation.metadata.namespace.max-length":"To pole nie może zawierać więcej niż 256 znaków", + "error.validation.metadata.element.invalid-pattern":"To pole nie może zawierać kropek, przecinków i spacji. Zamiast tego This field cannot contain dots, commas or spaces. Zamiast tego może użyć pól z notacji SNEQ", + "error.validation.metadata.element.max-length":"To pole nie może zawierać więcej niż 64 znaki", + "error.validation.metadata.qualifier.invalid-pattern":"To pole nie może zawierać kropek, przecinków i spacji", + "error.validation.metadata.qualifier.max-length":"To pole nie może zawierać więcej niż 64 znaki", + "forgot-email.form.email.error.not-email-form":"Wpisz prawidłowy adres e-mail", + "form.other-information.email":"Adres e-mail", + "form.other-information.first-name":"Imię", + "form.other-information.insolr":"Solr Index", + "form.other-information.institution":"Instytucja", + "form.other-information.last-name":"Nazwisko", + "form.other-information.orcid":"ORCID", + "form.create":"Utwórz", + "info.end-user-agreement.hosting-country":"Stany Zjednoczone", + "item.edit.identifiers.doi.status.UNKNOWN":"Nieznane", + "item.edit.identifiers.doi.status.TO_BE_REGISTERED":"W kolejce do rejestracji", + "item.edit.identifiers.doi.status.TO_BE_RESERVED":"W kolejce do rezerwacji", + "item.edit.identifiers.doi.status.IS_REGISTERED":"Zarejestrowane", + "item.edit.identifiers.doi.status.IS_RESERVED":"Zarezerwowane", + "item.edit.identifiers.doi.status.UPDATE_RESERVED":"Zarezerwowane (aktualizacja w kolejce)", + "item.edit.identifiers.doi.status.UPDATE_REGISTERED":"Zarejestrowane (aktualizacja w kolejce)", + "item.edit.identifiers.doi.status.UPDATE_BEFORE_REGISTRATION":"W kolejce do aktualizacji i rejestracji", + "item.edit.identifiers.doi.status.TO_BE_DELETED":"Zakolejkowane do usunięcia", + "item.edit.identifiers.doi.status.DELETED":"Usunięte", + "item.edit.identifiers.doi.status.PENDING":"Oczekujące (niezarejestrowane)", + "item.edit.identifiers.doi.status.MINTED":"Rezerwowanie nazwy (niezarejestrowane)", + "item.edit.tabs.status.buttons.register-doi.label":"Zarejestruj nowe lub oczekujące DOI", + "item.edit.tabs.status.buttons.register-doi.button":"Rejestruj DOI...", + "item.edit.register-doi.header":"Zarejestruj nowe lub oczekujące DOI", + "item.edit.register-doi.description":"Zweryfikuj poniższe identyfikatory i metadane pozycji i rozpocznij rejestrację DOI lub anuluj", + "item.edit.register-doi.confirm":"Zatwierdź", + "item.edit.register-doi.cancel":"Anuluj", + "item.edit.register-doi.success":"DOI jest w kolejce do rejestracji.", + "item.edit.register-doi.error":"Wystąpił błąd poczas rejestracji DOI", + "item.edit.register-doi.to-update":"To DOI zostało zarezerwowane i będzie znajdować się w kolejce do rejestracji", + "item.edit.metadata.edit.buttons.confirm":"Zatwierdź", + "item.edit.metadata.edit.buttons.drag":"Przeciągnij, aby zmienić kolejność", + "item.edit.metadata.edit.buttons.virtual":"To pole przechowuje wirutalne wartości metadanych, np. wartość pobraną z encji, z którą jest połączona ta pozycja. Dodaj lub usuń relację w zakładce 'Relacje' ", + "item.edit.metadata.metadatafield.error":"Wystąpił błąd podczas walidcji pól metadanych", + "item.edit.metadata.reset-order-button":"Cofnij zamianę kolejności", + "item.edit.curate.title":"Zarządzaj pozycją: {{item}}", + "item.edit.tabs.access-control.head":"Dostęp", + "item.edit.tabs.access-control.title":"Edycja pozycji - dostęp", + "workflow-item.search.result.delete-supervision.modal.header":"Usuń zadanie dla recenzenta", + "workflow-item.search.result.delete-supervision.modal.info":"Czy na pewno usunąć zadanie dla recenzenta", + "workflow-item.search.result.delete-supervision.modal.cancel":"Anuluj", + "workflow-item.search.result.delete-supervision.modal.confirm":"Usuń", + "workflow-item.search.result.notification.deleted.success":"Usunięto zadanie dla recenzenta \"{{name}}\"", + "workflow-item.search.result.notification.deleted.failure":"Nie usunięto zadania dla recenzenta \"{{name}}\"", + "workflow-item.search.result.list.element.supervised-by":"Recenzja:", + "workflow-item.search.result.list.element.supervised.remove-tooltip":"Usuń grupę recenzencką", + "item.preview.dc.subject":"Słowo kluczowe:", + "item.preview.dc.publisher":"Wydawca:", + "itemtemplate.edit.metadata.add-button":"Dodaj", + "itemtemplate.edit.metadata.discard-button":"Cofnij", + "itemtemplate.edit.metadata.edit.buttons.confirm":"Zatwierdź", + "itemtemplate.edit.metadata.edit.buttons.drag":"Przeciągnij, aby zmienić kolejność", + "itemtemplate.edit.metadata.edit.buttons.edit":"Edytuj", + "itemtemplate.edit.metadata.edit.buttons.remove":"Usuń", + "itemtemplate.edit.metadata.edit.buttons.undo":"Cofnij zmiany", + "itemtemplate.edit.metadata.edit.buttons.unedit":"Nie edytuj", + "itemtemplate.edit.metadata.empty":"To pozycja nie zawiera żadnych metadanych. Wybierz Dodaj, aby je wprowadzić.", + "itemtemplate.edit.metadata.headers.edit":"Edytuj", + "itemtemplate.edit.metadata.headers.field":"Pole", + "itemtemplate.edit.metadata.headers.language":"Język", + "itemtemplate.edit.metadata.headers.value":"Wartość", + "itemtemplate.edit.metadata.metadatafield.error":"Wystąpił błąd podczas walidowania pola metadanych", + "itemtemplate.edit.metadata.metadatafield.invalid":"Wybierz odpowiednie pole metadanych", + "itemtemplate.edit.metadata.notifications.discarded.content":"Twoje zmiany nie zostały zachowane. Aby spróbować wprowadzić je ponownie wybierz Cofnij", + "itemtemplate.edit.metadata.notifications.discarded.title":"Zmiany nie zostały zachowane", + "itemtemplate.edit.metadata.notifications.error.title":"Wystąpił błąd", + "itemtemplate.edit.metadata.notifications.invalid.content":"Twoje zmiany nie zostały zapisane. Upewnij się, że wszystkie pola zostały wypełnione prawidłowo.", + "itemtemplate.edit.metadata.notifications.invalid.title":"Nieprawidłowe metadan", + "itemtemplate.edit.metadata.notifications.outdated.content":"Wzór dla pozycji, na którą w tym momencie pracujesz, został zmodyfikowany przez innego użytkownika. Twoje zmiany zostały odrzucone, aby uniknąć konfliktów pomiędzy wersjami.", + "itemtemplate.edit.metadata.notifications.outdated.title":"Zmiany zostały odrzucone", + "itemtemplate.edit.metadata.notifications.saved.content":"Zmiany w metadanych wzoru pozycji zostały zapisane.", + "itemtemplate.edit.metadata.notifications.saved.title":"Metadane zostały zapisane", + "itemtemplate.edit.metadata.reinstate-button":"Cofnij", + "itemtemplate.edit.metadata.reset-order-button":"Cofnij zmianę kolejności", + "itemtemplate.edit.metadata.save-button":"Zapisz", + "menu.section.access_control_bulk":"Zbiorowe zarządzanie dostępem", + "menu.section.browse_global_by_srsc":"Wg słów kluczowych", + "mydspace.show.supervisedWorkspace":"Pozycje recenzowane", + "mydspace.status.mydspaceArchived":"Opublikowano", + "mydspace.status.mydspaceValidation":"Walidacja", + "mydspace.status.mydspaceWaitingController":"Oczekiwanie na redakctora", + "mydspace.status.mydspaceWorkflow":"Redakcja", + "mydspace.status.mydspaceWorkspace":"Przestrzeń robocza", + "nav.context-help-toggle":"Przełącz pomoc kontekstową", + "nav.search.button":"Wpisz wyszukiwaną frazę", + "nav.subscriptions":"Subksrypcje", + "process.new.notification.error.max-upload.content":"Plik jest większy niż maksymalny dozwolony rozmiar pliku", + "register-page.registration.email.error.not-email-form":"Wprowadź poprawny adres e-mail", + "register-page.registration.email.error.not-valid-domain":"Użyj adresu e-mail z domeny: {{ domains }}", + "register-page.registration.error.maildomain":"Tego adresu e-mail nie możesz zarejestrować, ponieważ nie ma go na liście domen. Dozwolone domeny to: {{ domains }}", + "register-page.registration.info.maildomain":"Konta mogą być założone dla adresów e-mail z domeną", + "repository.title":"Repozytorium DSpace", + "search.filters.applied.f.supervisedBy":"Recenzent", + "search.filters.filter.show-tree":"Przeglądaj {{ name }} strukturę recenzentów", + "search.filters.filter.supervisedBy.head":"Recenzent", + "search.filters.filter.supervisedBy.placeholder":"Recenzent", + "search.filters.filter.supervisedBy.label":"Wyszukaj recenzenta", + "statistics.table.no-name":"(nazwa obiektu nie może zostać załadowana)", + "submission.import-external.source.datacite":"DataCite", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor":"Publikacje autora", + "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor":"Publikacje", + "submission.sections.identifiers.info":"Te identyfikatory zostaną utworzone dla pozycji:", + "submission.sections.identifiers.no_handle":"Do tej pozycji nie zostały przypisane żadne Handle", + "submission.sections.identifiers.no_doi":"Do tej pozycji nie zostały przypisane żadne DOI", + "submission.sections.identifiers.handle_label":"Handle: ", + "submission.sections.identifiers.doi_label":"DOI: ", + "submission.sections.identifiers.otherIdentifiers_label":"Inne identyfikatory: ", + "submission.sections.submit.progressbar.identifiers":"Identyfikatory", + "submission.workflow.generic.submit_select_reviewer":"Wybierz recenzenta", + "submission.workflow.generic.submit_select_reviewer-help":"", + "submission.workflow.generic.submit_score":"Wynik", + "submission.workflow.generic.submit_score-help":"", + "submission.workflow.tasks.claimed.decline":"Odrzuć", + "submission.workflow.tasks.claimed.decline_help":"", + "submitter.empty":"n.d.", + "subscriptions.title":"Subskrypcje", + "subscriptions.item":"Subskrypcje pozycji", + "subscriptions.collection":"Subskrypcje kolekcji", + "subscriptions.community":"Subskrypcje zbiorów", + "subscriptions.subscription_type":"Typ subksrypcji", + "subscriptions.frequency":"Częstotliwość subskrypcji", + "subscriptions.frequency.D":"Codziennie", + "subscriptions.frequency.M":"Co miesiąc", + "subscriptions.frequency.W":"Co tydzień", + "subscriptions.tooltip":"Subskrybuj", + "subscriptions.modal.title":"Subksrypcje", + "subscriptions.modal.type-frequency":"Rodzaj i częstotliwość subksrypcji", + "subscriptions.modal.close":"Zamknij", + "subscriptions.modal.delete-info":"Aby usunąć tę subksrypcję przejdź do strony 'Subskrypcje', która znajduje się w profilu użytkownika", + "subscriptions.modal.new-subscription-form.type.content":"Zawartość", + "subscriptions.modal.new-subscription-form.frequency.D":"Codziennie", + "subscriptions.modal.new-subscription-form.frequency.W":"Co tydzień", + "subscriptions.modal.new-subscription-form.frequency.M":"Co miesiąc", + "subscriptions.modal.new-subscription-form.submit":"Zapisz", + "subscriptions.modal.new-subscription-form.processing":"Ładowanie...", + "subscriptions.modal.create.success":"Zasubskrybowano {{ type }}", + "subscriptions.modal.delete.success":"Subskrypcja została anulowana", + "subscriptions.modal.update.success":"Twoja subskrypcja {{ type }} została zaktualizowana", + "subscriptions.modal.create.error":"Wystąpił bład podczas tworzenia subskrypcji", + "subscriptions.modal.delete.error":"Wystąpił bład podczas usuwania subskrypcji", + "subscriptions.modal.update.error":"Wystąpił bład podczas aktualizacji subskrypcji", + "subscriptions.table.dso":"Słowo kluczowe", + "subscriptions.table.subscription_type":"Typ subskrypcji", + "subscriptions.table.subscription_frequency":"Częstotliwość subskrypcji", + "subscriptions.table.action":"Akcja", + "subscriptions.table.edit":"Edytuj", + "subscriptions.table.delete":"Usuń", + "subscriptions.table.not-available":"Niedostępne", + "subscriptions.table.not-available-message":"Ta pozycja została usunięta lun nie masz do niej dostępu, aby ją wyswietlić", + "subscriptions.table.empty.message":"Ta pozycja nie ma w tym momencie żadnych subksrypcji. Aby zasubkrybować i otrzymywać aktualizacje o tym zbiorze lub kolekcji, wybierz przycisk subskrypcji na stronie pozycji.", + "vocabulary-treeview.info":"Wybierz słowo kluczowe, aby dodać je do filtra", + "supervisedWorkspace.search.results.head":"Pozycje recenzowane", + "supervision.search.results.head":"Status zadań: Szkic i redakcja", + "workspace-item.delete.breadcrumbs":"Usunięto wersję roboczą", + "workspace-item.delete.header":"Usuń wersję roboczą", + "workspace-item.delete.button.confirm":"Usuń", + "workspace-item.delete.button.cancel":"Anuluj", + "workspace-item.delete.notification.success.title":"Usunięto", + "workspace-item.delete.title":"Wersja robocza została usunieta", + "workspace-item.delete.notification.error.title":"Coś poszło nie tak", + "workspace-item.delete.notification.error.content":"Wersja robocza nie może zostać usunieta", + "workflow-item.advanced.title":"Zaawansowane workflow", + "workflow-item.selectrevieweraction.notification.success.title":"Wybrany recenzent", + "workflow-item.selectrevieweraction.notification.success.content":"Recenzent został przypisany", + "workflow-item.selectrevieweraction.notification.error.title":"Coś poszło nie tak", + "workflow-item.selectrevieweraction.notification.error.content":"Nie udało się wybrać recenzenta dla pozycji", + "workflow-item.selectrevieweraction.title":"Wybierz recenzenta", + "workflow-item.selectrevieweraction.header":"Wybierz recenzenta", + "workflow-item.selectrevieweraction.button.cancel":"Anuluj", + "workflow-item.selectrevieweraction.button.confirm":"Zatwierdź", + "workflow-item.scorereviewaction.notification.success.title":"Ocena recenzji", + "workflow-item.scorereviewaction.notification.success.content":"Ocena tej pozycji została zapisana", + "workflow-item.scorereviewaction.notification.error.title":"Coś poszło nie tak", + "workflow-item.scorereviewaction.notification.error.content":"Nie można ocenić tej pozycji", + "workflow-item.scorereviewaction.title":"Oceń pozycję", + "workflow-item.scorereviewaction.header":"Oceń pozycję", + "workflow-item.scorereviewaction.button.cancel":"Anuluj", + "workflow-item.scorereviewaction.button.confirm":"Potwierdź", + "listable-notification-object.default-message":"Ta pozycja nie może być odzyskana", + "system-wide-alert-banner.retrieval.error":"Coś poszło nie tak podczas odzyskiwania alertu systemowego", + "system-wide-alert-banner.countdown.prefix":"W", + "system-wide-alert-banner.countdown.days":"{{days}} dni,", + "system-wide-alert-banner.countdown.hours":"{{hours}} godziny", + "system-wide-alert-banner.countdown.minutes":"{{minutes}} minut:", + "menu.section.system-wide-alert":"Alert systemowy", + "system-wide-alert.form.header":"Alert systemowy", + "system-wide-alert-form.retrieval.error":"Coś poszło nie tak podczas odzyskiwania alertu systemowego", + "system-wide-alert.form.cancel":"Anuluj", + "system-wide-alert.form.save":"Zapisz", + "system-wide-alert.form.label.active":"AKTYWNE", + "system-wide-alert.form.label.inactive":"NIEAKTYWNE", + "system-wide-alert.form.error.message":"Alert systemowy musi zawierać wiadomość", + "system-wide-alert.form.label.message":"Alert systemowy", + "system-wide-alert.form.label.countdownTo.enable":"Wprowadź licznik czasowy", + "system-wide-alert.form.label.countdownTo.hint":"Wskazówka: Wpisz wartość licznika czasu. Kiedy licznik jest włączony, alert systemowy zostanie wyświetlony o wybranym czasie. Kiedy odliczanie zostanie zakończone, alert systemowy zostanie wyłączony. Serwer NIE zostanie zatrzymany automatycznie.", + "system-wide-alert.form.label.preview":"Podgląd alertu systemowego", + "system-wide-alert.form.update.success":"Alert systemowy został zaktualizowany", + "system-wide-alert.form.update.error":"Coś poszło nie tak podczas aktualizacji alertu systemowego", + "system-wide-alert.form.create.success":"Alert systemowy został utworzony", + "system-wide-alert.form.create.error":"Coś poszło nie tak podczas tworzenia alertu systemowego", + "admin.system-wide-alert.breadcrumbs":"Alerty systemowe", + "admin.system-wide-alert.title":"Alerty systemowe", + "item-access-control-title":"Ta strona pozwala na zmianę dostępów metadanych pozycji i plików do nich dołączonych.", + "collection-access-control-title":"Ta strona pozwala na zmianę warunków dostępu dla wszystkich pozycji w tej kolekcji. Zmiany mogą być wykonywane zarówno na metadanych pozycji jak i plikach do nich dołączonych.", + "community-access-control-title":"Ta strona pozwala na zmianę warunków dostępu dla wszystkich pozycji w każdej kolekcji w tym zbiorze. Zmiany mogą być wykonywane zarówno na metadanych pozycji jak i plikach do nich dołączonych.", + "access-control-item-header-toggle":"Metadane pozycji", + "access-control-bitstream-header-toggle":"Pliki", + "access-control-mode":"Tryb", + "access-control-access-conditions":"Warunki dostępu", + "access-control-no-access-conditions-warning-message":"W tym momencie żadne warunki dostępu nie zostały określone. Jeśli zadanie zostanie rozpoczęte, obecne warunki dostępu zostaną zastąpione domyślnymi warunkami dostępu z nadrzędnej kolekcji.", + "access-control-replace-all":"Zastąp warunki dostępu", + "access-control-add-to-existing":"Dodaj do już istniejących", + "access-control-limit-to-specific":"Ogranicz zmiany do wybranych plików", + "access-control-process-all-bitstreams":"Zaktualizuj wszystkie pliki dla tej pozycji", + "access-control-bitstreams-selected":"wybrane pliki", + "access-control-cancel":"Anuluj", + "access-control-execute":"Wykonaj", + "access-control-add-more":"Dodaj więcej", + "access-control-select-bitstreams-modal.title":"Wybierz pliki", + "access-control-select-bitstreams-modal.no-items":"Brak pozycji do wyświetlenia.", + "access-control-select-bitstreams-modal.close":"Zamknij", + "access-control-option-label":"Typ warunków dostępu", + "access-control-option-note":"Wybierz warunki dostępu, które chcesz przypisać do zaznaczonych pozycji.", + "access-control-option-start-date":"Dostęp od", + "access-control-option-start-date-note":"Wybierz datę, kiedy wybrane warunki dostępu mają obowiązywać", + "access-control-option-end-date":"Dostęp do", + "access-control-option-end-date-note":"Wybierz datę, kiedy wybrane warunki dostępu mają obowiązywać" } From cfd753f928a0ed8829ef7d7a00f727b81d782d35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Dykas?= <96572102+michdyk@users.noreply.github.com> Date: Tue, 22 Aug 2023 15:09:09 +0200 Subject: [PATCH 309/425] Update pl.json5 Translation update of 2 spaces instead of 3 --- src/assets/i18n/pl.json5 | 5238 +++++++++++++++++++------------------- 1 file changed, 2619 insertions(+), 2619 deletions(-) diff --git a/src/assets/i18n/pl.json5 b/src/assets/i18n/pl.json5 index 7e6ef92c22..39e1fce8e6 100644 --- a/src/assets/i18n/pl.json5 +++ b/src/assets/i18n/pl.json5 @@ -1,2621 +1,2621 @@ { - "401.help":"Nie masz uprawnień do dostępu do tej strony. Możesz użyć przycisku poniżej, aby powrócić do strony głównej.", - "401.link.home-page":"Zabierz mnie na stronę główną", - "401.unauthorized":"nieautoryzowany", - "403.help":"Nie masz uprawnień do dostępu do tej strony. Możesz użyć przycisku poniżej, aby wrócić do strony głównej.", - "403.link.home-page":"Zabierz mnie na stronę główną", - "403.forbidden":"zabroniony", - "404.help":"Nie możemy znaleźć strony, której szukasz. Strona mogła zostać przeniesiona lub usunięta. Możesz użyć przycisku poniżej, aby powrócić do strony głównej. ", - "404.link.home-page":"Zabierz mnie na stronę główną", - "404.page-not-found":"strona nie została znaleziona", - "admin.curation-tasks.breadcrumbs":"Systemowe zadania administracyjne", - "admin.curation-tasks.title":"Systemowe zadania administracyjne", - "admin.curation-tasks.header":"Systemowe zadania administracyjne", - "admin.registries.bitstream-formats.breadcrumbs":"Rejestr formatów", - "admin.registries.bitstream-formats.create.breadcrumbs":"Format strumienia bitów", - "admin.registries.bitstream-formats.create.failure.content":"Wystąpił błąd podczas tworzenia nowego formatu strumienia bitów.", - "admin.registries.bitstream-formats.create.failure.head":"Nie udało się", - "admin.registries.bitstream-formats.create.head":"Utwórz nowy format", - "admin.registries.bitstream-formats.create.new":"Dodaj nowy format", - "admin.registries.bitstream-formats.create.success.content":"Nowy format strumienia bitów został pomyślnie utworzony.", - "admin.registries.bitstream-formats.create.success.head":"Udało się", - "admin.registries.bitstream-formats.delete.failure.amount":"Nie udało się usunąć {{ amount }} formatu(ów)", - "admin.registries.bitstream-formats.delete.failure.head":"Nie udało się", - "admin.registries.bitstream-formats.delete.success.amount":"Udało się usunąć {{ amount }} formatu(ów)", - "admin.registries.bitstream-formats.delete.success.head":"Udało się", - "admin.registries.bitstream-formats.description":"Na liście formatów wyświetlono informacje o obsługiwanych formatach i czy są one wspierane przez system.", - "admin.registries.bitstream-formats.edit.breadcrumbs":"Format strumienia bitów", - "admin.registries.bitstream-formats.edit.description.hint":"", - "admin.registries.bitstream-formats.edit.description.label":"Opis", - "admin.registries.bitstream-formats.edit.extensions.hint":"Rozszerzenia to rozszerzenia plików, które są używane do automatycznej identyfikacji formatu przesyłanych plików. Możesz wprowadzić kilka rozszerzeń dla każdego formatu.", - "admin.registries.bitstream-formats.edit.extensions.label":"Rozszerzenia plików", - "admin.registries.bitstream-formats.edit.extensions.placeholder":"Wprowadź rozszerzenie pliku bez kropki", - "admin.registries.bitstream-formats.edit.failure.content":"Wystąpił błąd podczas edycji formatu pliku.", - "admin.registries.bitstream-formats.edit.failure.head":"Nie udało się", - "admin.registries.bitstream-formats.edit.head":"Format plików: {{ format }}", - "admin.registries.bitstream-formats.edit.internal.hint":"Formaty oznaczone jako wewnętrzne są ukryte przed użytkownikiem i wykorzystywane do celów administracyjnych.", - "admin.registries.bitstream-formats.edit.internal.label":"Wewnętrzny", - "admin.registries.bitstream-formats.edit.mimetype.hint":"Typ MIME powiązany z tym formatem, nie musi być unikalny.", - "admin.registries.bitstream-formats.edit.mimetype.label":"Typ MIME", - "admin.registries.bitstream-formats.edit.shortDescription.hint":"Unikalna nazwa dla tego formatu, (np. Microsoft Word XP lub Microsoft Word 2000)", - "admin.registries.bitstream-formats.edit.shortDescription.label":"Nazwa", - "admin.registries.bitstream-formats.edit.success.content":"Format strumienia bitów został pomyślnie edytowany.", - "admin.registries.bitstream-formats.edit.success.head":"Udało się", - "admin.registries.bitstream-formats.edit.supportLevel.hint":"Poziom wsparcia, jaki Twoja instytucja deklaruje dla tego formatu.", - "admin.registries.bitstream-formats.edit.supportLevel.label":"Obsługiwany format", - "admin.registries.bitstream-formats.head":"Rejestr formatów", - "admin.registries.bitstream-formats.no-items":"Brak formatów plików do wyświetlenia.", - "admin.registries.bitstream-formats.table.delete":"Usuń zaznaczone", - "admin.registries.bitstream-formats.table.deselect-all":"Odznacz wszystkie", - "admin.registries.bitstream-formats.table.internal":"wewnętrzne", - "admin.registries.bitstream-formats.table.mimetype":"Typ MIME", - "admin.registries.bitstream-formats.table.name":"Nazwa", - "admin.registries.bitstream-formats.table.return":"Powrót", - "admin.registries.bitstream-formats.table.supportLevel.KNOWN":"Znane", - "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED":"Wspierane", - "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN":"Nieznane", - "admin.registries.bitstream-formats.table.supportLevel.head":"Obsługiwany format", - "admin.registries.bitstream-formats.title":"Rejestr formatów plików", - "admin.registries.metadata.breadcrumbs":"Rejestr metadanych", - "admin.registries.metadata.description":"W rejestrze metadanych przechowywana jest lista wszystkich pól metadanych dostępnych w repozytorium. Przechowywane pola są przechowywane w kilku rejestrach. DSpace wymaga kwalifikowanego rejestru metadanych Dublin Core.", - "admin.registries.metadata.form.create":"Utwórz schemat metadanych", - "admin.registries.metadata.form.edit":"Edytuj schemat metadanych", - "admin.registries.metadata.form.name":"Nazwa", - "admin.registries.metadata.form.namespace":"Nazwa schematu", - "admin.registries.metadata.head":"Rejestr metadanych", - "admin.registries.metadata.schemas.no-items":"Brak rejestrów metadanych do pokazania.", - "admin.registries.metadata.schemas.table.delete":"Usuń zaznaczone", - "admin.registries.metadata.schemas.table.id":"ID", - "admin.registries.metadata.schemas.table.name":"Nazwa", - "admin.registries.metadata.schemas.table.namespace":"Nazwa schematu", - "admin.registries.metadata.title":"Rejestr metadanych", - "admin.registries.schema.breadcrumbs":"Schemat metadanych", - "admin.registries.schema.description":"Ten schemat metadanych jest stworzony na podstawie \"{{namespace}}\".", - "admin.registries.schema.fields.head":"Pola schematu metadanych", - "admin.registries.schema.fields.no-items":"Brak pól metadanych do pokazania.", - "admin.registries.schema.fields.table.delete":"Usuń zaznaczone", - "admin.registries.schema.fields.table.field":"Pole", - "admin.registries.schema.fields.table.scopenote":"Uwagi", - "admin.registries.schema.form.create":"Stwórz pole metadanych", - "admin.registries.schema.form.edit":"Edytuj pole metadanych", - "admin.registries.schema.form.element":"Element", - "admin.registries.schema.form.qualifier":"Kwalifikator", - "admin.registries.schema.form.scopenote":"Uwagi", - "admin.registries.schema.head":"Schemat metadanych", - "admin.registries.schema.notification.created":"Udało się utworzyć schemat metdanych \"{{prefix}}\"", - "admin.registries.schema.notification.deleted.failure":"Nie udało się usunąć {{amount}} schematów metadanych", - "admin.registries.schema.notification.deleted.success":"Udało się usunąć {{amount}} schematów metadanych", - "admin.registries.schema.notification.edited":"Udało się edytować schemat metadanych \"{{prefix}}\"", - "admin.registries.schema.notification.failure":"Błąd", - "admin.registries.schema.notification.field.created":"Udało się utworzyć pole metadanych \"{{field}}\"", - "admin.registries.schema.notification.field.deleted.failure":"Nie udało się usunąć {{amount}} pól metadanych", - "admin.registries.schema.notification.field.deleted.success":"Udało się usunąć {{amount}} pól metadanych", - "admin.registries.schema.notification.field.edited":"SUdało się edytować pole metadanych \"{{field}}\"", - "admin.registries.schema.notification.success":"Udało się", - "admin.registries.schema.return":"Powrót", - "admin.registries.schema.title":"Rejestr schematów metadanych", - "admin.access-control.epeople.actions.delete":"Usuń użytkownika", - "admin.access-control.epeople.actions.impersonate":"Personifikuj użytkownika", - "admin.access-control.epeople.actions.reset":"Zresetuj hasło", - "admin.access-control.epeople.actions.stop-impersonating":"Przestań personifikować użytkownika", - "admin.access-control.epeople.breadcrumbs":"Użytkownicy", - "admin.access-control.epeople.title":"Użytkownicy", - "admin.access-control.epeople.head":"Użytkownicy", - "admin.access-control.epeople.search.head":"Wyszukaj", - "admin.access-control.epeople.button.see-all":"Przeglądaj wszystko", - "admin.access-control.epeople.search.scope.metadata":"Metadane", - "admin.access-control.epeople.search.scope.email":"E-mail", - "admin.access-control.epeople.search.button":"Wyszukaj", - "admin.access-control.epeople.search.placeholder":"Wyszukaj użytkownika...", - "admin.access-control.epeople.button.add":"Dodaj użytkownika", - "admin.access-control.epeople.table.id":"ID", - "admin.access-control.epeople.table.name":"Nazwa", - "admin.access-control.epeople.table.email":"E-mail", - "admin.access-control.epeople.table.edit":"Edytuj", - "admin.access-control.epeople.table.edit.buttons.edit":"Edytuj \"{{name}}\"", - "admin.access-control.epeople.table.edit.buttons.edit-disabled":"Brak uprawnień do edycji wybranej grupy", - "admin.access-control.epeople.table.edit.buttons.remove":"Usuń \"{{name}}\"", - "admin.access-control.epeople.no-items":"Brak użytkowników do wyświetlenia.", - "admin.access-control.epeople.form.create":"Utwórz użytkownika", - "admin.access-control.epeople.form.edit":"Edytuj użytkownika", - "admin.access-control.epeople.form.firstName":"Imię", - "admin.access-control.epeople.form.lastName":"Nazwisko", - "admin.access-control.epeople.form.email":"E-mail", - "admin.access-control.epeople.form.emailHint":"Adres e-mail musi być poprawny", - "admin.access-control.epeople.form.canLogIn":"Możliwość zalogowania", - "admin.access-control.epeople.form.requireCertificate":"Wymagany certyfikat", - "admin.access-control.epeople.form.return":"Powrót", - "admin.access-control.epeople.form.notification.created.success":"Udało się utworzyć użytkownika \"{{name}}\"", - "admin.access-control.epeople.form.notification.created.failure":"Nie udało się utworzyć użytkownika \"{{name}}\"", - "admin.access-control.epeople.form.notification.created.failure.emailInUse":"Nie udało się utworzyć użytkownika \"{{name}}\", email \"{{email}}\" już w użyciu.", - "admin.access-control.epeople.form.notification.edited.failure.emailInUse":"Nie udało się utworzyć użytkownika \"{{name}}\", email \"{{email}}\" już w użyciu.", - "admin.access-control.epeople.form.notification.edited.success":"Udało się edytować użytkownika \"{{name}}\"", - "admin.access-control.epeople.form.notification.edited.failure":"Nie udało się edytować użytkownika \"{{name}}\"", - "admin.access-control.epeople.form.notification.deleted.success":"Udało się usunąć użytkownika \"{{name}}\"", - "admin.access-control.epeople.form.notification.deleted.failure":"Nie udało się usunąć użytkownika \"{{name}}\"", - "admin.access-control.epeople.form.groupsEPersonIsMemberOf":"Członek grup:", - "admin.access-control.epeople.form.table.id":"ID", - "admin.access-control.epeople.form.table.name":"Nazwa", - "admin.access-control.epeople.form.table.collectionOrCommunity":"Zbiór/kolekcja", - "admin.access-control.epeople.form.memberOfNoGroups":"Ten użytkownik nie jest członkiem żadnej grupy", - "admin.access-control.epeople.form.goToGroups":"Dodaj do grup", - "admin.access-control.epeople.notification.deleted.failure":"Nie udało się usunąć użytkownika: \"{{name}}\"", - "admin.access-control.epeople.notification.deleted.success":"Udało się usunąć użytkownika: \"{{name}}\"", - "admin.access-control.groups.title":"Grupy", - "admin.access-control.groups.breadcrumbs":"Grupy", - "admin.access-control.groups.singleGroup.breadcrumbs":"Edytuj grupę", - "admin.access-control.groups.title.singleGroup":"Edytuj grupę", - "admin.access-control.groups.title.addGroup":"Nowa grupa", - "admin.access-control.groups.addGroup.breadcrumbs":"Nowa grupa", - "admin.access-control.groups.head":"Grupy/role", - "admin.access-control.groups.button.add":"Dodaj grupę", - "admin.access-control.groups.search.head":"Szukaj grup", - "admin.access-control.groups.button.see-all":"Przeszukaj wszystko", - "admin.access-control.groups.search.button":"Wyszukaj", - "admin.access-control.groups.search.placeholder":"Wyszukaj grupy...", - "admin.access-control.groups.table.id":"ID", - "admin.access-control.groups.table.name":"Nazwa", - "admin.access-control.groups.table.collectionOrCommunity":"Zbiór/kolekcja", - "admin.access-control.groups.table.members":"Członkowie", - "admin.access-control.groups.table.edit":"Edytuj", - "admin.access-control.groups.table.edit.buttons.edit":"Edytuj \"{{name}}\"", - "admin.access-control.groups.no-items":"Nie znaleziono grup z podaną frazą lub podanym UUID", - "admin.access-control.groups.notification.deleted.success":"Udało się usunąć grupę \"{{name}}\"", - "admin.access-control.groups.notification.deleted.failure.title":"Nie udało się usunąć grupy \"{{name}}\"", - "admin.access-control.groups.notification.deleted.failure.content":"Powód: \"{{cause}}\"", - "admin.access-control.groups.form.alert.permanent":"Ta grupa jest stała, więc nie może być edytowana ani usunięta. Nadal możesz dodawać i usuwać członków grupy za pomocą tej strony.", - "admin.access-control.groups.form.alert.workflowGroup":"Ta grupa nie może być edytowana lub usunięta, ponieważ odnosi się do roli lub bierze udział w procesie \"{{name}}\" {{comcol}}. Możesz ją usunąć ze strony \"assign roles\" edycji {{comcol}}. Wciąż może dodawać i usuwać członków tej grupy, korzystając z tej strony.", - "admin.access-control.groups.form.head.create":"Utwórz grupę", - "admin.access-control.groups.form.head.edit":"Edytuj grupę", - "admin.access-control.groups.form.groupName":"Nazwa grupy", - "admin.access-control.groups.form.groupCommunity":"Zbiór lub kolekcja", - "admin.access-control.groups.form.groupDescription":"Opis", - "admin.access-control.groups.form.notification.created.success":"Udało się utworzyć grupę \"{{name}}\"", - "admin.access-control.groups.form.notification.created.failure":"Nie udało się utworzyć grupy \"{{name}}\"", - "admin.access-control.groups.form.notification.created.failure.groupNameInUse":"Nie udało się utworzyć grupy o nazwie: \"{{name}}\", upewnij się, że nazwa nie jest już używana.", - "admin.access-control.groups.form.notification.edited.failure":"Nie udało się edytować grupy \"{{name}}\"", - "admin.access-control.groups.form.notification.edited.failure.groupNameInUse":"Nazwa \"{{name}}\" już w użyciu!", - "admin.access-control.groups.form.notification.edited.success":"Udało się edytować grupę \"{{name}}\"", - "admin.access-control.groups.form.actions.delete":"Usuń grupę", - "admin.access-control.groups.form.delete-group.modal.header":"Usuń grupę \"{{ dsoName }}\"", - "admin.access-control.groups.form.delete-group.modal.info":"Czy na pewno chcesz usunąć grupę \"{{ dsoName }}\"", - "admin.access-control.groups.form.delete-group.modal.cancel":"Anuluj", - "admin.access-control.groups.form.delete-group.modal.confirm":"Usuń", - "admin.access-control.groups.form.notification.deleted.success":"Udało się usunąć grupę \"{{ name }}\"", - "admin.access-control.groups.form.notification.deleted.failure.title":"Nie udało się usunąć grupy \"{{ name }}\"", - "admin.access-control.groups.form.notification.deleted.failure.content":"Powód: \"{{ cause }}\"", - "admin.access-control.groups.form.members-list.head":"Użytkownik", - "admin.access-control.groups.form.members-list.search.head":"Dodaj użytkownika", - "admin.access-control.groups.form.members-list.button.see-all":"Pokaż wszystkich", - "admin.access-control.groups.form.members-list.headMembers":"Aktualni członkowie", - "admin.access-control.groups.form.members-list.search.scope.metadata":"Metadane", - "admin.access-control.groups.form.members-list.search.scope.email":"E-mail", - "admin.access-control.groups.form.members-list.search.button":"Wyszukaj", - "admin.access-control.groups.form.members-list.table.id":"ID", - "admin.access-control.groups.form.members-list.table.name":"Nazwa", - "admin.access-control.groups.form.members-list.table.identity":"Tożsamość", - "admin.access-control.groups.form.members-list.table.email":"E-mail", - "admin.access-control.groups.form.members-list.table.netid":"NetID", - "admin.access-control.groups.form.members-list.table.edit":"Usuń / Dodaj", - "admin.access-control.groups.form.members-list.table.edit.buttons.remove":"Usuń użytkownika o nazwie \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.success.addMember":"Udało się dodać użytkownika o nazwie: \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.failure.addMember":"Nie udało się dodać użytkownika o nazwie: \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.success.deleteMember":"Udało się usunąć użytkownika o nazwie: \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.failure.deleteMember":"Nie udało się usunąć użytkownika o nazwie: \"{{name}}\"", - "admin.access-control.groups.form.members-list.table.edit.buttons.add":"Dodaj użytkownika o nazwie \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup":"Brak aktywnej grupy, najpierw wpisz nazwę grupy.", - "admin.access-control.groups.form.members-list.no-members-yet":"Brak użytkowników w grupie, wyszukaj ich i dodaj.", - "admin.access-control.groups.form.members-list.no-items":"Nie znaleziono użytkowników podczas wyszukiwania", - "admin.access-control.groups.form.subgroups-list.notification.failure":"Coś poszło nie tak: \"{{cause}}\"", - "admin.access-control.groups.form.subgroups-list.head":"Grupy", - "admin.access-control.groups.form.subgroups-list.search.head":"Dodaj podgrupę", - "admin.access-control.groups.form.subgroups-list.button.see-all":"Przeglądaj wszystkie", - "admin.access-control.groups.form.subgroups-list.headSubgroups":"Aktualne podgrupy", - "admin.access-control.groups.form.subgroups-list.search.button":"Wyszukaj", - "admin.access-control.groups.form.subgroups-list.table.id":"ID", - "admin.access-control.groups.form.subgroups-list.table.name":"Nazwa", - "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity":"Zbiór/kolekcja", - "admin.access-control.groups.form.subgroups-list.table.edit":"Usuń / Dodaj", - "admin.access-control.groups.form.subgroups-list.table.edit.buttons.remove":"Usuń podgrupę o nazwie \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.table.edit.buttons.add":"Dodaj podgrupę o nazwie \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup":"Aktualna grupa", - "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup":"Udało się dodać podgrupę: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.failure.addSubgroup":"Nie udało się dodać podgrupy: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup":"Udało się usunąć podgrupę: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup":"Nie udało się usunąć podgrupy: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup":"Brak aktywnej grupy, najpierw wpisz nazwę grupy.", - "admin.access-control.groups.form.subgroups-list.notification.failure.subgroupToAddIsActiveGroup":"Ta grupa jest już stworzona i nie może zostać dodana pononwie.", - "admin.access-control.groups.form.subgroups-list.no-items":"Nie znaleziono grup z tą nazwą lub UUID", - "admin.access-control.groups.form.subgroups-list.no-subgroups-yet":"Brak podgrup w grupie.", - "admin.access-control.groups.form.return":"Powrót", - "admin.search.breadcrumbs":"Wyszukiwanie administracyjne", - "admin.search.collection.edit":"Edytuj", - "admin.search.community.edit":"Edytuj", - "admin.search.item.delete":"Usuń", - "admin.search.item.edit":"Edytuj", - "admin.search.item.make-private":"Ukryj", - "admin.search.item.make-public":"Upublicznij", - "admin.search.item.move":"Przenieś", - "admin.search.item.reinstate":"Zmień instancję", - "admin.search.item.withdraw":"Wycofane", - "admin.search.title":"Wyszukiwanie administracyjne", - "administrativeView.search.results.head":"Wyszukiwanie administracyjne", - "admin.workflow.breadcrumbs":"Zarządzaj procesem", - "admin.workflow.title":"Zarządzaj procesem", - "admin.workflow.item.workflow":"Proces", - "admin.workflow.item.delete":"Usuń", - "admin.workflow.item.send-back":"Odeślij z powrotem", - "admin.metadata-import.breadcrumbs":"Importuj metadane", - "admin.metadata-import.title":"Importuj metadane", - "admin.metadata-import.page.header":"Importuj metadane", - "admin.metadata-import.page.help":"Tutaj możesz zaimportować pliki CSV, w których znajdują się metadane do operacji wsadowej. Zaimportuj je poprzez upuszczenie ich lub znajdź je na swoim komputerze", - "admin.metadata-import.page.dropMsg":"Upuść plik w formacie CSV", - "admin.metadata-import.page.dropMsgReplace":"Upuść, aby zastąpić metadane w formacie CSV do importu", - "admin.metadata-import.page.button.return":"Powrót", - "admin.metadata-import.page.button.proceed":"Zastosuj", - "admin.metadata-import.page.error.addFile":"Najpierw wybierz plik!", - "auth.errors.invalid-user":"Niewłaściwy adres e-mail lub hasło.", - "auth.messages.expired":"Twoja sesja wygasła. Zaloguj się ponownie.", - "auth.messages.token-refresh-failed":"Odświeżenie sesji nie powiodło się. Zaloguj się ponownie.", - "bitstream.download.page":"Pobieranie {{bitstream}}...", - "bitstream.download.page.back":"Powrót", - "bitstream.edit.authorizations.link":"Edytuj polityki plików", - "bitstream.edit.authorizations.title":"Edytuj polityki plików", - "bitstream.edit.return":"Powrót", - "bitstream.edit.bitstream":"Pliki: ", - "bitstream.edit.form.description.hint":"Opcjonalnie wprowadź krótki opis pliku, np.: \"Główna część artykułu\" lub \"Dane z eksperymentu\".", - "bitstream.edit.form.description.label":"Opis", - "bitstream.edit.form.embargo.hint":"Pierwszy dzień, od kiedy dostęp zostanie udzielony. Tej daty nie może być edytować w tym formularzu. Aby wybrać okres embarga czasowego, wybierz Status pozycji tab, kliknij Autoryzacje..., stwórz lub edytuj plik PRZEYCZTAJ zasady i wybierz określoną Datę początkową.", - "bitstream.edit.form.embargo.label":"Embargo do wybranej daty", - "bitstream.edit.form.fileName.hint":"Zmiana nazwy pliku dla strumienia bitów. Zauważ, że zmieni to wyświetlany adres URL strumienia bitów, ale stare linki nadal będą działać, o ile nie zmieni się identyfikator sekwencji.", - "bitstream.edit.form.fileName.label":"Nazwa pliku", - "bitstream.edit.form.newFormat.label":"Opisz nowy format", - "bitstream.edit.form.newFormat.hint":"Program, którego użyto do stworzenia pliku i numer wersji (np.: \"ACMESoft SuperApp version 1.5\").", - "bitstream.edit.form.primaryBitstream.label":"Pierwotny plik", - "bitstream.edit.form.selectedFormat.hint":"Jeśli formatu nie ma na powyższej liście, wybierz \"format not in list\" above i opisz jako \"Describe new format\".", - "bitstream.edit.form.selectedFormat.label":"Wybrany format", - "bitstream.edit.form.selectedFormat.unknown":"Tego formatu nie ma na liście", - "bitstream.edit.notifications.error.format.title":"Wystąpił błąd podczas zapisu formatu pliku", - "bitstream.edit.notifications.saved.content":"Zmiany w pliku zostały zapisane.", - "bitstream.edit.notifications.saved.title":"Plik został zapisany", - "bitstream.edit.title":"Edytuj plik", - "bitstream-request-a-copy.alert.canDownload1":"Masz już dostęp do tego pliki. Jeśli chcesz go pobrać, kliknij ", - "bitstream-request-a-copy.alert.canDownload2":"tutaj", - "bitstream-request-a-copy.header":"Wystąp o kopię wybranego pliku", - "bitstream-request-a-copy.intro":"Wpisz następujące informacje, aby wystąpić o kopię tej pozycji: ", - "bitstream-request-a-copy.intro.bitstream.one":"Wystąpienie o dostęp do następujących plików: ", - "bitstream-request-a-copy.intro.bitstream.all":"Wystąpienie o dostęp do wszystkich plików. ", - "bitstream-request-a-copy.name.label":"Imię *", - "bitstream-request-a-copy.name.error":"Imię jest wymagane", - "bitstream-request-a-copy.email.label":"Adres e-mail *", - "bitstream-request-a-copy.email.hint":"Plik zostanie przesłany na podany adres e-mail", - "bitstream-request-a-copy.email.error":"Proszę wprowadzić prawidłowy adres e-mail", - "bitstream-request-a-copy.allfiles.label":"Pliki", - "bitstream-request-a-copy.files-all-false.label":"Tylko plik, dla którego wystąpiono o dostęp", - "bitstream-request-a-copy.files-all-true.label":"Wszystkie pliki (w tej pozycji) z ograniczonym dostępem", - "bitstream-request-a-copy.message.label":"Wiadomość", - "bitstream-request-a-copy.return":"Powrót", - "bitstream-request-a-copy.submit":"Wystąp o kopię", - "bitstream-request-a-copy.submit.success":"Wystąpienie o dostęp do pliku zostało przesłane.", - "bitstream-request-a-copy.submit.error":"Coś poszło nie tak podczas wysyłania wystąpienia o dostęp do pliku", - "browse.comcol.by.author":"wg autorów", - "browse.comcol.by.dateissued":"wg daty wydania", - "browse.comcol.by.subject":"wg tematu", - "browse.comcol.by.title":"wg tytułu", - "browse.comcol.head":"Przeglądaj", - "browse.empty":"Brak rekordów do wyświetlenia.", - "browse.metadata.author":"Autor", - "browse.metadata.dateissued":"Data wydania", - "browse.metadata.subject":"Temat", - "browse.metadata.title":"Tytuł", - "browse.metadata.author.breadcrumbs":"Przeglądaj wg autorów", - "browse.metadata.dateissued.breadcrumbs":"Przeglądaj wg daty wydania", - "browse.metadata.subject.breadcrumbs":"Przeglądaj wg tematów", - "browse.metadata.title.breadcrumbs":"Przeglądaj wg tytułów", - "browse.startsWith.choose_start":"(Wybierz start)", - "browse.startsWith.choose_year":"(Wybierz rok)", - "browse.startsWith.choose_year.label":"Wybierz rok wydania", - "browse.startsWith.jump":"Przejdź do miejsca w indeksie:", - "browse.startsWith.months.april":"kwiecień", - "browse.startsWith.months.august":"sierpień", - "browse.startsWith.months.december":"grudzień", - "browse.startsWith.months.february":"luty", - "browse.startsWith.months.january":"styczeń", - "browse.startsWith.months.july":"lipiec", - "browse.startsWith.months.june":"czerwiec", - "browse.startsWith.months.march":"marzec", - "browse.startsWith.months.may":"maj", - "browse.startsWith.months.none":"(wybierz miesiąc)", - "browse.startsWith.months.none.label":"Wybierz miesiąc wydania", - "browse.startsWith.months.november":"listopad", - "browse.startsWith.months.october":"październik", - "browse.startsWith.months.september":"wrzesień", - "browse.startsWith.submit":"Zastosuj", - "browse.startsWith.type_date":"Lub wybierz datę (rok-miesiąc) i kliknij 'Przeglądaj'", - "browse.startsWith.type_date.label":"Lub wybierz datę (rok-miesiąc) i kliknij przycisk przeglądania", - "browse.startsWith.type_text":"Wpisz kilka pierwszych liter i kliknij przycisk przeglądania", - "browse.title":"Przeglądaj {{ collection }} wg {{ field }} {{ value }}", - "chips.remove":"Usuń chip", - "collection.create.head":"Utwórz kolekcję", - "collection.create.notifications.success":"Udało się utworzyć kolekcję", - "collection.create.sub-head":"Udało się utworzyć kolekcję dla zbioru {{ parent }}", - "collection.curate.header":"Administrator kolekcji: {{collection}}", - "collection.delete.cancel":"Anuluj", - "collection.delete.confirm":"Zatwierdź", - "collection.delete.processing":"Usuwanie", - "collection.delete.head":"Usuń kolekcję", - "collection.delete.notification.fail":"Kolekcja nie może być usunięt", - "collection.delete.notification.success":"Udało się usunąć kolekcję", - "collection.delete.text":"Czy na pewno chcesz usunąć kolekcję \"{{ dso }}\"", - "collection.edit.delete":"Usuń kolekcję", - "collection.edit.head":"Edytuj kolekcję", - "collection.edit.breadcrumbs":"Edytuj kolekcję", - "collection.edit.tabs.mapper.head":"Item Mapper", - "collection.edit.tabs.item-mapper.title":"Edytuj kolekcję - Item Mapper", - "collection.edit.item-mapper.cancel":"Anuluj", - "collection.edit.item-mapper.collection":"Kolekcja: \"{{name}}\"", - "collection.edit.item-mapper.confirm":"Mapuj wybrane elementy", - "collection.edit.item-mapper.description":"To jest narzędzie mapowania elementów, które pozwala administratorom kolekcji mapować elementy z innych kolekcji do tej kolekcji. Możesz wyszukiwać elementy z innych kolekcji i mapować je lub przeglądać listę aktualnie zmapowanych elementów.", - "collection.edit.item-mapper.head":"Item Mapper - Mapuj pozycje z innych kolekcji", - "collection.edit.item-mapper.no-search":"Wpisz co chcesz wyszukać", - "collection.edit.item-mapper.notifications.map.error.content":"Wystąpiły błędy podczas mapowania {{amount}} pozycji.", - "collection.edit.item-mapper.notifications.map.error.head":"Mapowanie błędów", - "collection.edit.item-mapper.notifications.map.success.content":"Udało się zmapować {{amount}} pozycji.", - "collection.edit.item-mapper.notifications.map.success.head":"Mapowanie zakończone", - "collection.edit.item-mapper.notifications.unmap.error.content":"Błędy wystąpiły podczas usuwania mapowania z {{amount}} elementów.", - "collection.edit.item-mapper.notifications.unmap.error.head":"Usuń błędy mapowania", - "collection.edit.item-mapper.notifications.unmap.success.content":"Udało się usunąć błędy mapowania z {{amount}} elementów.", - "collection.edit.item-mapper.notifications.unmap.success.head":"Usuwanie mapowania zakończone", - "collection.edit.item-mapper.remove":"Usuń wybrane mapowanie elementów", - "collection.edit.item-mapper.search-form.placeholder":"Wyszukaj pozycje...", - "collection.edit.item-mapper.tabs.browse":"Wyszukaj mapowane elementy", - "collection.edit.item-mapper.tabs.map":"Mapuj nowe elementy", - "collection.edit.logo.delete.title":"Usuń", - "collection.edit.logo.delete-undo.title":"Cofnij usunięcie", - "collection.edit.logo.label":"Logo kolekcji", - "collection.edit.logo.notifications.add.error":"Przesyłanie logo kolekcji nie powiodło się. Proszę zweryfikować zawartość przed ponowną ", - "collection.edit.logo.notifications.add.success":"Udało się przesłać logo kolekcji.", - "collection.edit.logo.notifications.delete.success.title":"Logo usunięte", - "collection.edit.logo.notifications.delete.success.content":"Udało się usunąć logo kolekcji", - "collection.edit.logo.notifications.delete.error.title":"Błąd podczas usuwania loga", - "collection.edit.logo.upload":"Upuść logo kolekcji, aby je wgrać", - "collection.edit.notifications.success":"Udało się edytować kolekcję", - "collection.edit.return":"Powrót", - "collection.edit.tabs.curate.head":"Kurator", - "collection.edit.tabs.curate.title":"Edytowanie kolekcji - kurator", - "collection.edit.tabs.authorizations.head":"Autoryzacje", - "collection.edit.tabs.authorizations.title":"Edytowanie kolekcji - autoryzacje", - "collection.edit.tabs.metadata.head":"Edytuj metadane", - "collection.edit.tabs.metadata.title":"Edytowanie kolekcji - metadane", - "collection.edit.tabs.roles.head":"Przypisz role", - "collection.edit.tabs.roles.title":"Edytowanie kolekcji - role", - "collection.edit.tabs.source.external":"Ta kolekcja pobiera swoją zawartość z zewnętrznego źródła", - "collection.edit.tabs.source.form.errors.oaiSource.required":"Musisz wskazać id docelowej kolekcji.", - "collection.edit.tabs.source.form.harvestType":"Odczytywanie zawartości", - "collection.edit.tabs.source.form.head":"Skonfiguruj zewnętrzne źródło", - "collection.edit.tabs.source.form.metadataConfigId":"Format metadanych", - "collection.edit.tabs.source.form.oaiSetId":"Określony zestaw ID OAI", - "collection.edit.tabs.source.form.oaiSource":"Dostawca OAI", - "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_BITSTREAMS":"Odczytaj metadane i pliki (wymaga wsparcia ORE)", - "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_REF":"Odczytaj metadane i bibliografię (wymaga wsparcia ORE)", - "collection.edit.tabs.source.form.options.harvestType.METADATA_ONLY":"Odczytaj tylko metadane", - "collection.edit.tabs.source.head":"Źródło treści", - "collection.edit.tabs.source.notifications.discarded.content":"Twoje zmiany zostały odrzucone. Aby odzyskać swoje zmiany wybierz 'Powrót'", - "collection.edit.tabs.source.notifications.discarded.title":"Zmiany odrzucone", - "collection.edit.tabs.source.notifications.invalid.content":"Zmiany nie zostały zapisane. Sprawdź czy wszystkie pola są wypełnione poprawne przed zapisem.", - "collection.edit.tabs.source.notifications.invalid.title":"Nieprawidłowe metadane", - "collection.edit.tabs.source.notifications.saved.content":"Zmiany wprowadzone w kolekcji zostały zapisane.", - "collection.edit.tabs.source.notifications.saved.title":"Źródło treści zapisane", - "collection.edit.tabs.source.title":"Collection Edit - Źródło treści", - "collection.edit.template.add-button":"Dodaj", - "collection.edit.template.breadcrumbs":"Szablon pozycji", - "collection.edit.template.cancel":"Anuluj", - "collection.edit.template.delete-button":"Usuń", - "collection.edit.template.edit-button":"Edytuj", - "collection.edit.template.error":"Wystąpił błąd podczas odzyskiwania szablonu pozycji", - "collection.edit.template.head":"Edytuj szablon dla kolekcji \"{{ collection }}\"", - "collection.edit.template.label":"Szablon pozycji", - "collection.edit.template.loading":"ładowanie szablonu pozycji...", - "collection.edit.template.notifications.delete.error":"Nie udało się usunąć szablonu pozycji", - "collection.edit.template.notifications.delete.success":"Udało się usunąć szablon pozycji", - "collection.edit.template.title":"Edytuj szablon pozycji", - "collection.form.abstract":"Opis skrócony", - "collection.form.description":"Tekst powitalny (HTML)", - "collection.form.errors.title.required":"Wpisz nazwę kolekcji", - "collection.form.license":"Licencja", - "collection.form.provenance":"Pochodzenie", - "collection.form.rights":"Tekst praw autorskich (HTML)", - "collection.form.tableofcontents":"Wiadomości (HTML)", - "collection.form.title":"Nazwa", - "collection.form.entityType":"Typ danych", - "collection.page.browse.recent.head":"Ostatnie zgłoszenia", - "collection.page.browse.recent.empty":"Brak pozycji do wyświetlenia", - "collection.page.edit":"Edytuj kolekcję", - "collection.page.handle":"Stały URI dla kolekcji", - "collection.page.license":"Licencja", - "collection.page.news":"Wiadomości", - "collection.select.confirm":"Zaakceptuj zaznaczone", - "collection.select.empty":"Brak kolekcji do wyświetlenia", - "collection.select.table.title":"Tytuł", - "collection.source.controls.head":"Kontrolki odczytywania", - "collection.source.controls.test.submit.error":"Coś poszło nie tak podczas rozpoczynania testów ustawień", - "collection.source.controls.test.failed":"Scenariusz testowy ustawień nie zadziałał", - "collection.source.controls.test.completed":"Scenariusz testowy ustawień został zakończony", - "collection.source.controls.test.submit":"Konfiguracja testowa", - "collection.source.controls.test.running":"Testowanie konfiguracji...", - "collection.source.controls.import.submit.success":"Import został rozpoczęty", - "collection.source.controls.import.submit.error":"Coś poszło nie tak podczas rozpoczynania importu", - "collection.source.controls.import.submit":"Importuj teraz", - "collection.source.controls.import.running":"Importowanie...", - "collection.source.controls.import.failed":"Wystąpił błąd podczas importu", - "collection.source.controls.import.completed":"Import zakończony", - "collection.source.controls.reset.submit.success":"Reset ustawień i powtórny import zostały rozpoczęte poprawnie", - "collection.source.controls.reset.submit.error":"Coś poszło nie tak podczas rozpoczynania zresetowanego, powtórnego importu", - "collection.source.controls.reset.failed":"Wystąpił błąd podczas resetowania ustawień i ponownego importu", - "collection.source.controls.reset.completed":"Reset ustawień i powtórny import zostały zakończone", - "collection.source.controls.reset.submit":"Resetowanie i powtórny import", - "collection.source.controls.reset.running":"Resetowanie i powtórny import...", - "collection.source.controls.harvest.status":"Status odczytywania:", - "collection.source.controls.harvest.start":"Czas rozpoczęcia odczytywania:", - "collection.source.controls.harvest.last":"Czas ostatniego odczytywania:", - "collection.source.controls.harvest.message":"Informacje nt. odczytywania:", - "collection.source.controls.harvest.no-information":"bd.", - "collection.source.update.notifications.error.content":"Te ustawienia zostały przetestowane i nie działają.", - "collection.source.update.notifications.error.title":"Błąd serwera", - "communityList.breadcrumbs":"Lista zbiorów", - "communityList.tabTitle":"Lista zbiorów", - "communityList.title":"Lista zbiorów", - "communityList.showMore":"Pokaż więcej", - "community.create.head":"Utwórz zbiór", - "community.create.notifications.success":"Udało się utworzyć zbiór", - "community.create.sub-head":"Utwórz podzbiór dla zbioru {{ parent }}", - "community.curate.header":"Zarządzaj zbiorem: {{community}}", - "community.delete.cancel":"Anuluj", - "community.delete.confirm":"Potwierdź", - "community.delete.processing":"Usuwanie...", - "community.delete.head":"Usuń zbiór", - "community.delete.notification.fail":"Zbiór nie może być usunięty", - "community.delete.notification.success":"Udało się usunąć zbiór", - "community.delete.text":"Czy na pewno chcesz usunąć zbiór \"{{ dso }}\"", - "community.edit.delete":"Usuń ten zbiór", - "community.edit.head":"Edytuj zbiór", - "community.edit.breadcrumbs":"Edytuj zbiór", - "community.edit.logo.delete.title":"Usuń logo", - "community.edit.logo.delete-undo.title":"Cofnij usunięcie", - "community.edit.logo.label":"Logo zbioru", - "community.edit.logo.notifications.add.error":"Przesłanie loga zbioru nie powiodło się. Sprawdź czy wszystkie parametry są odpowiednie przed próbą ponownego przesłania.", - "community.edit.logo.notifications.add.success":"Przesłanie loga powiodło się.", - "community.edit.logo.notifications.delete.success.title":"Logo usunięte", - "community.edit.logo.notifications.delete.success.content":"Usunięcie loga zbioru powiodło się", - "community.edit.logo.notifications.delete.error.title":"Błąd podczas usuwania loga", - "community.edit.logo.upload":"Upuść logo zbioru, aby je przesłać", - "community.edit.notifications.success":"Udało się edytować zbiór", - "community.edit.notifications.unauthorized":"Nie masz uprawnień, aby wykonać te zmiany", - "community.edit.notifications.error":"Wystąpił błąd podczas edycji zbioru", - "community.edit.return":"Cofnij", - "community.edit.tabs.curate.head":"Administruj", - "community.edit.tabs.curate.title":"Edycja zbioru - administrator", - "community.edit.tabs.metadata.head":"Edytuj metadane", - "community.edit.tabs.metadata.title":"Edycja zbioru - metadane", - "community.edit.tabs.roles.head":"Przypisz role", - "community.edit.tabs.roles.title":"Edycja zbioru - role", - "community.edit.tabs.authorizations.head":"Uprawnienia", - "community.edit.tabs.authorizations.title":"Edycja zbioru - uprawnienia", - "community.listelement.badge":"Zbiór", - "comcol-role.edit.no-group":"Brak", - "comcol-role.edit.create":"Utwórz", - "comcol-role.edit.restrict":"Ogranicz", - "comcol-role.edit.delete":"Usuń", - "comcol-role.edit.community-admin.name":"Administratorzy", - "comcol-role.edit.collection-admin.name":"Administratorzy", - "comcol-role.edit.community-admin.description":"Administratorzy zbioru mogą tworzyć podzbiory lub kolekcje i zarządzać nimi lub przydzielać zarządzanie tymi podzbiorami lub kolekcji innym użytkownikom. Ponadto decydują, kto może przesyłać elementy do dowolnych podkolekcji, edytować metadane pozycji (po przesłaniu) i dodawać (mapować) istniejące pozycje z innych kolekcji (z zastrzeżeniem autoryzacji).", - "comcol-role.edit.collection-admin.description":"Administratorzy kolekcji decydują o tym, kto może przesyłać pozycje do kolekcji, edytować metadane pozycji (po ich przesłaniu) oraz dodawać (mapować) istniejące elementy z innych kolekcji do tej kolekcji (z zastrzeżeniem uprawnień dla danej kolekcji).", - "comcol-role.edit.submitters.name":"Zgłaszający", - "comcol-role.edit.submitters.description":"Użytkownicy i grupy, którzy mają uprawnienia do przesyłania nowych pozycji do tej kolekcji.", - "comcol-role.edit.item_read.name":"Domyślny dostęp do odczytu pozycji", - "comcol-role.edit.item_read.description":"Użytkownicy i grupy, które mogą odczytywać nowe pozycje zgłoszone do tej kolekcji. Zmiany w tej roli nie działają wstecz. Istniejące pozycje w systemie będą nadal widoczne dla osób, które miały dostęp do odczytu w momencie ich dodania.", - "comcol-role.edit.item_read.anonymous-group":"Domyślny odczyt dla nowych pozycji jest obecnie ustawiony na Anonimowy.", - "comcol-role.edit.bitstream_read.name":"Domyślny dostęp do oczytu plików", - "comcol-role.edit.bitstream_read.description":"Administratorzy zbiorów mogą tworzyć podzbiory lub kolekcje, a także zarządzać nimi. Ponadto decydują o tym, kto może przesyłać elementy do podkolekcji, edytować metadane pozycji (po ich przesłaniu) oraz dodawać (mapować) istniejące pozycje z innych kolekcji (pod warunkiem posiadania odpowiednich uprawnień).", - "comcol-role.edit.bitstream_read.anonymous-group":"Domyślny status odczytu dla nowych plików to Anonimowy.", - "comcol-role.edit.editor.name":"Redaktorzy", - "comcol-role.edit.editor.description":"Redaktorzy mogą edytować metadane nowych pozycji, a następnie akceptować je lub odrzucać.", - "comcol-role.edit.finaleditor.name":"Redaktorzy końcowi", - "comcol-role.edit.finaleditor.description":"Redaktorzy końcowi mogą edytować metadane nowych pozycji, ale nie mogę odrzucać pozycji.", - "comcol-role.edit.reviewer.name":"Recenzenci", - "comcol-role.edit.reviewer.description":"Recenzenci mogą akceptować lub odrzucać nowe pozycje, ale nie mogę edytować ich metadanych.", - "community.form.abstract":"Opis skrócony", - "community.form.description":"Wstęp (HTML)", - "community.form.errors.title.required":"Wprowadź nazwę zbioru", - "community.form.rights":"Prawa autoskie (HTML)", - "community.form.tableofcontents":"Wiadomości (HTML)", - "community.form.title":"Nazwa", - "community.page.edit":"Edytuj ten zbiór", - "community.page.handle":"Stały URI zbioru", - "community.page.license":"Licencja", - "community.page.news":"Wiadomości", - "community.all-lists.head":"Podzbiory i kolekcje", - "community.sub-collection-list.head":"Kolekcje w tym zbiorze", - "community.sub-community-list.head":"Kolekcje w tym zbiorze", - "cookies.consent.accept-all":"Zaakceptuj wszystko", - "cookies.consent.accept-selected":"Zaakceptuj wybrane", - "cookies.consent.app.opt-out.description":"Aplikacja jest domyślnie włączona (możesz ją wyłączyć)", - "cookies.consent.app.opt-out.title":"(możesz ją wyłaczyć)", - "cookies.consent.app.purpose":"cel", - "cookies.consent.app.required.description":"Ta aplikacja jest zawsze wymagana", - "cookies.consent.app.required.title":"(zawsze wymagana)", - "cookies.consent.update":"Od ostatniej wizyty zostały wprowadzone zmiany. Zweryfikuj swoje zgody.", - "cookies.consent.close":"Zamknij", - "cookies.consent.decline":"Odrzuć", - "cookies.consent.content-notice.description":"Zbieramy i przetwarzamy Twoje dane do następujących celów: weryfikacja, preferencje, zgody i statystyka.
    Jeśli chcesz się dowiedzieć więcej, przycztaj naszą {privacyPolicy}.", - "cookies.consent.content-notice.learnMore":"Dostosuj", - "cookies.consent.content-modal.description":"Tutaj są wyświetlane informacje, które zbieramy o Tobie. Możesz je dostosować według swojego uznania.", - "cookies.consent.content-modal.privacy-policy.name":"polityka prywatności", - "cookies.consent.content-modal.privacy-policy.text":"Aby dowiedzieć się więcej przeczytaj naszą {privacyPolicy}.", - "cookies.consent.content-modal.title":"Informacje, które zbieramy", - "cookies.consent.app.title.authentication":"Logowanie", - "cookies.consent.app.description.authentication":"Musisz się zalogować", - "cookies.consent.app.title.preferences":"Preferencje", - "cookies.consent.app.description.preferences":"Wymagane, aby zapisać Twoje preferencje", - "cookies.consent.app.title.acknowledgement":"Zgody", - "cookies.consent.app.description.acknowledgement":"Wymagane, aby zapisać Twoje preferencje", - "cookies.consent.app.title.google-analytics":"Google Analytics", - "cookies.consent.app.description.google-analytics":"Pozwól na śledzenie do celów statystycznych", - "cookies.consent.purpose.functional":"Funkcjonalne", - "cookies.consent.purpose.statistical":"Statystyczne", - "curation-task.task.checklinks.label":"Sprawdź odnośniki w metadanych", - "curation-task.task.noop.label":"NOOP", - "curation-task.task.profileformats.label":"Profil formatów plików", - "curation-task.task.requiredmetadata.label":"Sprawdź poprawność wymaganych metadanych", - "curation-task.task.translate.label":"Microsoft Translator", - "curation-task.task.vscan.label":"Skan antywirusowy", - "curation.form.task-select.label":"Zadanie:", - "curation.form.submit":"Start", - "curation.form.submit.success.head":"Udało się rozpocząć zadanie administratora", - "curation.form.submit.success.content":"Zostaniesz przeniesiony na stronę procesu.", - "curation.form.submit.error.head":"Nie udało się się zakończyć zadania administratora", - "curation.form.submit.error.content":"Wystąpił błąd podczas rozpoczynania zadania administracyjnego.", - "curation.form.handle.label":"Automatyzacja:", - "curation.form.handle.hint":"Wskazówka: Wpisz [prefix swojego identyfikatora]/0, aby zautomatyzować zadanie (nie wszystkie zadania mogą wspierać tę funkcję)", - "deny-request-copy.email.message":"Drogi użytkowniku {{ recipientName }},\nW odpowiedzi na Państwa zapytanie, przykro mi poinformować, że to niemożliwe, aby przestać kopię pliku, o który Państwo prosili: \"{{ itemUrl }}\" ({{ itemName }}), którego jestem autorem.\n\nPozdrawiam serdecznie,\n{{ authorName }} <{{ authorEmail }}>", - "deny-request-copy.email.subject":"Wystąp o kopię dokumentu", - "deny-request-copy.error":"Wystąpił błąd", - "deny-request-copy.header":"Odrzuć prośbę o przesłanie kopii dokumentu", - "deny-request-copy.intro":"Ta wiadomość zostanie przesłana do osoby, która wystąpiła o dostęp", - "deny-request-copy.success":"Z powodzeniem odrzucono prośbę o udostępnienie pozycji", - "dso.name.untitled":"Brak tytułu", - "dso-selector.claim.item.head":"Wskazówki profilu", - "dso-selector.claim.item.body":"Istnieją profile, które mogą odnosić się do Ciebie. Jeśli, któryś z tych profilów jest Twój, wybierz go i przejdź do szczegółów, z opcji wybierz opcję przypisania profilu. W innym przypadku możesz utworzyć nowy profil z szablonu, wybierając przycisk poniżej.", - "dso-selector.claim.item.create-from-scratch":"Utwórz nowy", - "dso-selector.claim.item.not-mine-label":"Żaden nie jest mój", - "dso-selector.create.collection.head":"Nowa kolekcja", - "dso-selector.create.collection.sub-level":"Utwórz nową kolekcję w", - "dso-selector.create.community.head":"Nowy zbiór", - "dso-selector.create.community.sub-level":"Utwórz nowy zbiór", - "dso-selector.create.community.top-level":"Utwórz nowy nadrzędny zbiór", - "dso-selector.create.item.head":"Nowa pozycja", - "dso-selector.create.item.sub-level":"Utwórz nową pozycję w", - "dso-selector.create.submission.head":"Nowe zgłoszenie", - "dso-selector.edit.collection.head":"Edytuj kolekcję", - "dso-selector.edit.community.head":"Edytuj zbiór", - "dso-selector.edit.item.head":"Edytuj pozycję", - "dso-selector.error.title":"Wystąpił błąd podczas wyszukiwania typu {{ type }}", - "dso-selector.export-metadata.dspaceobject.head":"Eksportuj metadane z", - "dso-selector.no-results":"Nie znaleziono {{ type }}", - "dso-selector.placeholder":"Wyszukaj {{ type }}", - "dso-selector.select.collection.head":"Wybierz kolekcję", - "dso-selector.set-scope.community.head":"Wybierz wyszukiwanie zakresu", - "dso-selector.set-scope.community.button":"Wyszukaj w całym DSpace", - "dso-selector.set-scope.community.input-header":"Wyszukaj zbiór lub kolekcję", - "confirmation-modal.export-metadata.header":"Eksportuj metadane z {{ dsoName }}", - "confirmation-modal.export-metadata.info":"Czy na pewno chcesz eksportować metadane z {{ dsoName }}", - "confirmation-modal.export-metadata.cancel":"Anuluj", - "confirmation-modal.export-metadata.confirm":"Eksportuj", - "confirmation-modal.delete-eperson.header":"Usuń użytkownika \"{{ dsoName }}\"", - "confirmation-modal.delete-eperson.info":"Czy na pewno chcesz usunąć użytkownika \"{{ dsoName }}\"", - "confirmation-modal.delete-eperson.cancel":"Anuluj", - "confirmation-modal.delete-eperson.confirm":"Usuń", - "error.bitstream":"Wystąpił błąd podczas tworzenia plików", - "error.browse-by":"Wystąpił błąd podczas tworzenia pozycji", - "error.collection":"Wystąpił błąd podczas tworzenia kolekcji", - "error.collections":"Wystąpił błąd podczas tworzenia kolekcji", - "error.community":"Wystąpił błąd podczas tworzenia ziboru", - "error.identifier":"Nie znaleziono pozycji z podanym identyfikatorem", - "error.default":"Błąd", - "error.item":"Wystąpił błąd podczas tworzenia pozycji", - "error.items":"Wystąpił błąd podczas tworzenia pozycji", - "error.objects":"Wystąpił błąd podczas tworzenia obiektów", - "error.recent-submissions":"Wystąpił błąd podczas tworzenia ostatniego zgłoszenia", - "error.search-results":"Wystąpił błąd podczas tworzenia wyników wyszukiwania", - "error.sub-collections":"Wystąpił błąd podczas tworzenia podkolekcji", - "error.sub-communities":"Wystąpił błąd podczas tworzenia podzbiorów", - "error.submission.sections.init-form-error":"Wystąpił błąd w czasie inicjalizacji sekcji, sprawdź konfigurację. Szczegóły poniżej:

    ", - "error.top-level-communities":"Błąd podczas pobierania nadrzędnego zbioru", - "error.validation.license.notgranted":"Musisz wyrazić tę zgodę, aby przesłać swoje zgłoszenie. Jeśli nie możesz wyrazić zgody w tym momencie, możesz zapisać swoją pracę i wrócić do niej później lub usunąć zgłoszenie.", - "error.validation.pattern":"Te dane wejściowe są ograniczone przez aktualny wzór: {{ pattern }}.", - "error.validation.filerequired":"Przesłanie pliku jest obowiązkowe", - "error.validation.required":"Pole jest wymagane", - "error.validation.NotValidEmail":"E-mail nie jest poprawny", - "error.validation.emailTaken":"E-mail jest już zarejestrowany", - "error.validation.groupExists":"Ta grupa już istnieje", - "file-section.error.header":"Błąd podczas uzyskiwania plików dla tej pozycji", - "footer.copyright":"copyright © 2002-{{ year }}", - "footer.link.dspace":"oprogramowanie DSpace", - "footer.link.lyrasis":"LYRASIS", - "footer.link.cookies":"Ustawienia plików cookies", - "footer.link.privacy-policy":"Polityka prywatności", - "footer.link.end-user-agreement":"Umowa użytkownika", - "forgot-email.form.header":"Nie pamiętam hasła", - "forgot-email.form.info":"Zarejestruj się, aby otrzymywać wiadomości o nowych pozycjach w obserowanych kolekcjach, a także przesyłać nowe pozycje do repozytorium.", - "forgot-email.form.email":"Adres e-mail *", - "forgot-email.form.email.error.required":"Uzupełnij adres e-mail", - "forgot-email.form.email.error.pattern":"Uzupełnij prawidłowy adres e-mail", - "forgot-email.form.email.hint":"Ten adres e-mail będzie zweryfikowany i będziesz go używać jako swój login.", - "forgot-email.form.submit":"Wyślij", - "forgot-email.form.success.head":"Wysłano wiadomość weryfikacyjną", - "forgot-email.form.success.content":"Wiadomość została wysłana na adres e-mail {{ email }}. Zawiera ona unikatowy link i dalsze instrukcje postępowania.", - "forgot-email.form.error.head":"Błąd podczas rejestracji adresu e-mail", - "forgot-email.form.error.content":"Wystąpił błąd poczas próby rejestracji tego adresu e-mail: {{ email }}", - "forgot-password.title":"Nie pamiętam hasła", - "forgot-password.form.head":"Nie pamiętam hasła", - "forgot-password.form.info":"Wpisz nowe hasło w polu poniżej i potwierdź je wpisując je ponownie w drugim polu. Hasło powinno mieć co najmniej sześć znaków.", - "forgot-password.form.card.security":"Bezpieczeństwo", - "forgot-password.form.identification.header":"Identifikacja", - "forgot-password.form.identification.email":"Adres e-mail: ", - "forgot-password.form.label.password":"Hasło", - "forgot-password.form.label.passwordrepeat":"Potwierdź hasło", - "forgot-password.form.error.empty-password":"Wpisz hasło poniżej.", - "forgot-password.form.error.matching-passwords":"Hasła nie są identyczne.", - "forgot-password.form.notification.error.title":"Błąd podczas próby ustawienia nowego hasła", - "forgot-password.form.notification.success.content":"Resetowanie hasła udało się. Zalogowano jako stworzony przed momemntem użytkownik.", - "forgot-password.form.notification.success.title":"Resetowanie hasła udane", - "forgot-password.form.submit":"Wpisz hasło", - "form.add":"Dodaj", - "form.add-help":"Wybierz ten przycisk, aby dodać aktualny wpis lub dodać następny", - "form.cancel":"Anuluj", - "form.clear":"Wyczyść", - "form.clear-help":"Kliknij tutaj, aby usunąć wybraną wartość", - "form.discard":"Odrzuć", - "form.drag":"Przeciągnij", - "form.edit":"Edytuj", - "form.edit-help":"Kliknij tutaj, aby edytować wybraną wartość", - "form.first-name":"Imię", - "form.last-name":"Nazwisko", - "form.loading":"Ładowanie...", - "form.lookup":"Przeglądaj", - "form.lookup-help":"Kliknij tutaj, aby zobaczyć istniejące powiązania", - "form.no-results":"Nie znaleziono rezultatów", - "form.no-value":"Nie wprowadzono wartości", - "form.remove":"Usuń", - "form.save":"Zapisz", - "form.save-help":"Zapisz zmiany", - "form.search":"Wyszukaj", - "form.search-help":"Kliknij tutaj, aby wyszukać w istniejących komentarzach", - "form.submit":"Zapisz", - "form.repeatable.sort.tip":"Upuść nową pozycję w nowym miejscu", - "grant-deny-request-copy.deny":"Nie przesyłaj kopii", - "grant-deny-request-copy.email.back":"Cofnij", - "grant-deny-request-copy.email.message":"Wiadomości", - "grant-deny-request-copy.email.message.empty":"Proszę wprowadzić wiadomość", - "grant-deny-request-copy.email.permissions.info":"W tym miejscu możesz przemyśleć ograniczenie dostępu do dokumentu, aby odpowiadać na mniej próśb o dostęp. Jeśli chcesz wystąpić do administratorów reposytorium o zniesienie restrykcji, zaznacz okienko poniżej.", - "grant-deny-request-copy.email.permissions.label":"Ustaw jako otwarty dostęp", - "grant-deny-request-copy.email.send":"Wyślij", - "grant-deny-request-copy.email.subject":"Temat", - "grant-deny-request-copy.email.subject.empty":"Wpisz temat", - "grant-deny-request-copy.grant":"Wyślij kopię", - "grant-deny-request-copy.header":"Prośba o przesłanie kopii dokumentu", - "grant-deny-request-copy.home-page":"Zabierz mnie na stronę główną", - "grant-deny-request-copy.intro1":"Jeśli jesteś jednym z autorów dokumentu {{ name }}, wybierz jedną z poniższych opcji, aby odpowiedzieć zapytaniu użytkownika.", - "grant-deny-request-copy.intro2":"Po wybraniu opcji, zostaną wyświetlone sugerowane odpowiedzi, które można edytować.", - "grant-deny-request-copy.processed":"Ta prośba jest już procesowana. Możesz użyć przycisku poniżej, aby wrócić do strony głównej.", - "grant-request-copy.email.message":"Drogi użytkowniku {{ recipientName }},\nW odpowiedzi na Państwa zapytanie, miło mi poinformować, że w załączniku przesyłam kopię dokumentu, o który Państwo prosili: \"{{ itemUrl }}\" ({{ itemName }}), którego jestem autorem.\n\nPozdrawiam serdecznie,\n{{ authorName }} <{{ authorEmail }}>", - "grant-request-copy.email.subject":"Prośba o kopię dokumentu", - "grant-request-copy.error":"Wystąpił błąd", - "grant-request-copy.header":"Zezwól na wysłanie kopii dokumentu", - "grant-request-copy.intro":"To wiadomość zostanie wysłana do osoby, która wystąpiła o dostęp. Wskazane dokumenty zostaną dołączone jako załącznik.", - "grant-request-copy.success":"Prośba o dostęp do dokumentu została przyjęta", - "home.description":"", - "home.breadcrumbs":"Strona główna", - "home.search-form.placeholder":"Przeszukaj repozytorium...", - "home.title":"Strona główna", - "home.top-level-communities.head":"Zbiory w DSpace", - "home.top-level-communities.help":"Przeszukaj kolekcje", - "info.end-user-agreement.accept":"Przeczytałem/am i akceptuję umowę użytkownika", - "info.end-user-agreement.accept.error":"Błąd wystąpił podczas akceptowania umowy użytkownika", - "info.end-user-agreement.accept.success":"Udało się zaktualizować umowę użytkownika", - "info.end-user-agreement.breadcrumbs":"Umowa użytkownika", - "info.end-user-agreement.buttons.cancel":"Anuluj", - "info.end-user-agreement.buttons.save":"Zapisz", - "info.end-user-agreement.head":"Umowa użytkownika", - "info.end-user-agreement.title":"Umowa użytkownika", - "info.privacy.breadcrumbs":"Oświadczenie polityki prywatności", - "info.privacy.head":"Oświadczenie polityki prywatności", - "info.privacy.title":"Oświadczenie polityki prywatności", - "item.alerts.private":"Ta pozycja jest prywatna", - "item.alerts.withdrawn":"Ta pozycja została wycofana", - "item.edit.authorizations.heading":"Za pomocą tego edytora możesz przeglądać i zmieniać polityki dla danej pozycji, a także zmieniać polityki dla poszczególnych części pozycji: paczek i strumieni bitów. W skrócie, pozycja jest kontenerem pakietów, a pakiety są kontenerami strumieni bitów. Kontenery zazwyczaj mają polityki ADD/REMOVE/READ/WRITE, natomiast strumienie bitów mają tylko polityki READ/WRITE.", - "item.edit.authorizations.title":"Edytuj politykę tej pozycji", - "item.badge.private":"Prywatny status publikacji", - "item.badge.withdrawn":"Wycofane publikacje", - "item.bitstreams.upload.bundle":"Pakiet", - "item.bitstreams.upload.bundle.placeholder":"Wybierz pakiet", - "item.bitstreams.upload.bundle.new":"Utworz pakiet", - "item.bitstreams.upload.bundles.empty":"Ta pozycja nie zawiera żadnych pakietów, do których można przesłać strumień bitów.", - "item.bitstreams.upload.cancel":"Anuluj", - "item.bitstreams.upload.drop-message":"Upuść plik, aby przesłać", - "item.bitstreams.upload.item":"Pozycja: ", - "item.bitstreams.upload.notifications.bundle.created.content":"Udało się utworzyć nowy pakiet.", - "item.bitstreams.upload.notifications.bundle.created.title":"Utwórz pakiet", - "item.bitstreams.upload.notifications.upload.failed":"Zweryfikuj pliki przed spróbowaniem ponownie.", - "item.bitstreams.upload.title":"Prześlij strumień bitów", - "item.edit.bitstreams.bundle.edit.buttons.upload":"Prześlij", - "item.edit.bitstreams.bundle.displaying":"Obecnie wyświetlono {{ amount }} plików z {{ total }}.", - "item.edit.bitstreams.bundle.load.all":"Załaduj wszystkie ({{ total }})", - "item.edit.bitstreams.bundle.load.more":"Załaduj więcej", - "item.edit.bitstreams.bundle.name":"PACZKA: {{ name }}", - "item.edit.bitstreams.discard-button":"Odrzuć", - "item.edit.bitstreams.edit.buttons.download":"Pobierz", - "item.edit.bitstreams.edit.buttons.drag":"Przeciągnij", - "item.edit.bitstreams.edit.buttons.edit":"Edytuj", - "item.edit.bitstreams.edit.buttons.remove":"Usuń", - "item.edit.bitstreams.edit.buttons.undo":"Cofnij zmiany", - "item.edit.bitstreams.empty":"Ta pozycja nie zawiera żadnych strumieni bitów. Wybierz strumienie do załadowania, aby je utworzyć.", - "item.edit.bitstreams.headers.actions":"Akcje", - "item.edit.bitstreams.headers.bundle":"Paczka", - "item.edit.bitstreams.headers.description":"Opis", - "item.edit.bitstreams.headers.format":"Format", - "item.edit.bitstreams.headers.name":"Nazwa", - "item.edit.bitstreams.notifications.discarded.content":"Twoje zmiany zostały odrzucone. Aby je przywrócić, wybierz przycisk 'Cofnij'", - "item.edit.bitstreams.notifications.discarded.title":"Zmiany odrzucone", - "item.edit.bitstreams.notifications.move.failed.title":"Błąd podczas przenoszenia plików", - "item.edit.bitstreams.notifications.move.saved.content":"Zmiany pozycji dla pliku tej pozycji oraz jego paczki zostały zapisane.", - "item.edit.bitstreams.notifications.move.saved.title":"Zmiana pozycji została zapisana", - "item.edit.bitstreams.notifications.outdated.content":"Pozycja została w międzyczasie zmieniona przez innego użytkownika. Twoje zmiany zostały cofnięte, aby uniknąć ewentualnych konfliktów", - "item.edit.bitstreams.notifications.outdated.title":"Zmiany nieaktualne", - "item.edit.bitstreams.notifications.remove.failed.title":"Błąd podczas usuwania pliku", - "item.edit.bitstreams.notifications.remove.saved.content":"Twoje zmiany dotyczące usunięcia plików z tej pozycji zostały zapisane.", - "item.edit.bitstreams.notifications.remove.saved.title":"Zmiany dotyczące usunięcia zapisane", - "item.edit.bitstreams.reinstate-button":"Cofnij", - "item.edit.bitstreams.save-button":"Zapisz", - "item.edit.bitstreams.upload-button":"Prześlij", - "item.edit.delete.cancel":"Anuluj", - "item.edit.delete.confirm":"Usuń", - "item.edit.delete.description":"Czy jesteś pewien, że ta pozycja powinna zostać całkowicie usunięta? Ostrożnie: Teraz nie pozostanie po tej pozycji żaden ślad.", - "item.edit.delete.error":"Błąd wystąpił podczas usuwania pozycji", - "item.edit.delete.header":"Usuń pozycję: {{ id }}", - "item.edit.delete.success":"Ta pozycja została usunięta", - "item.edit.head":"Edytuj pozycję", - "item.edit.breadcrumbs":"Edytuj pozycję", - "item.edit.tabs.disabled.tooltip":"Nie masz dostępu do tej strony", - "item.edit.tabs.mapper.head":"Mapper kolekcji", - "item.edit.tabs.item-mapper.title":"Edytowanie pozycji - Mapper kolekcji", - "item.edit.item-mapper.buttons.add":"Mapowanie pozycji do wybranych kolekcji", - "item.edit.item-mapper.buttons.remove":"Usuń mapowanie pozycji do wybranych kolekcji", - "item.edit.item-mapper.cancel":"Anuluj", - "item.edit.item-mapper.description":"To jest narzędzie do mapowania elementów, które pozwala administratorom mapować tę pozycję do innych kolekcji. Możesz wyszukiwać kolekcje i je mapować lub przeglądać listę kolekcji, do których dana pozycja jest aktualnie zmapowana.", - "item.edit.item-mapper.head":"Mapper pozycji - Mapowanie pozycji do kolekcji", - "item.edit.item-mapper.item":"Pozycja: \"{{name}}\"", - "item.edit.item-mapper.no-search":"Wpisz zapytanie, które chcesz wyszukać", - "item.edit.item-mapper.notifications.add.error.content":"Wystąpiły błędy dla mapowania pozycji w {{amount}} kolekcjach.", - "item.edit.item-mapper.notifications.add.error.head":"Błędy mapowania", - "item.edit.item-mapper.notifications.add.success.content":"Udało się zmapować elementy dla {{amount}} kolekcji.", - "item.edit.item-mapper.notifications.add.success.head":"Mapowanie zakończone", - "item.edit.item-mapper.notifications.remove.error.content":"Wystąpiły błędy podczas usuwania mapowania do {{amount}} kolekcji.", - "item.edit.item-mapper.notifications.remove.error.head":"Usunięcie mapowania błędów", - "item.edit.item-mapper.notifications.remove.success.content":"Udało się usunąć mapowanie pozycji w {{amount}} kolekcjach.", - "item.edit.item-mapper.notifications.remove.success.head":"Usuwanie mapowania zakończone", - "item.edit.item-mapper.search-form.placeholder":"Przeszukaj kolekcje...", - "item.edit.item-mapper.tabs.browse":"Przeglądaj zmapowane kolekcje", - "item.edit.item-mapper.tabs.map":"Mapuj nowe kolekcje", - "item.edit.metadata.add-button":"Dodaj", - "item.edit.metadata.discard-button":"Odrzuć", - "item.edit.metadata.edit.buttons.edit":"Edytuj", - "item.edit.metadata.edit.buttons.remove":"Usuń", - "item.edit.metadata.edit.buttons.undo":"Cofnij zmiany", - "item.edit.metadata.edit.buttons.unedit":"Zatrzymaj edycję", - "item.edit.metadata.empty":"Ta pozycja nie zawiera żadnych metadanych. Wybierz Dodaj, aby dodać metadane.", - "item.edit.metadata.headers.edit":"Edytuj", - "item.edit.metadata.headers.field":"Pole", - "item.edit.metadata.headers.language":"Język", - "item.edit.metadata.headers.value":"Wartość", - "item.edit.metadata.metadatafield.invalid":"Wybierz aktualne pole metadanych", - "item.edit.metadata.notifications.discarded.content":"Twoje zmiany zostały odrzucone. Aby wgrać je ponownie wybierz przycisk 'Cofnij'", - "item.edit.metadata.notifications.discarded.title":"Zmiany odrzucone", - "item.edit.metadata.notifications.error.title":"Wystąpił błąd", - "item.edit.metadata.notifications.invalid.content":"Twoje zmiany nie zostały zapisane. Przed zapisaniem upewnij się, że wszystkie pola są wypełnione prawidłowo.", - "item.edit.metadata.notifications.invalid.title":"Nieprawidłowe metadane", - "item.edit.metadata.notifications.outdated.content":"Pozycja została w międzyczasie zmieniona przez innego użytkownika. Twoje zmiany zostały cofnięte, aby zapobiec ewentualnym konfliktom", - "item.edit.metadata.notifications.outdated.title":"Zmiany nieaktualne", - "item.edit.metadata.notifications.saved.content":"Twoje zmiany metadanych tej pozycji zostały zapisane.", - "item.edit.metadata.notifications.saved.title":"Metadane zostały zapisane", - "item.edit.metadata.reinstate-button":"Cofnij", - "item.edit.metadata.save-button":"Zapisz", - "item.edit.modify.overview.field":"Pole", - "item.edit.modify.overview.language":"Język", - "item.edit.modify.overview.value":"Wartość", - "item.edit.move.cancel":"Anuluj", - "item.edit.move.save-button":"Zapisz", - "item.edit.move.discard-button":"Odrzuć", - "item.edit.move.description":"Wybierz kolekcję, do której chcesz przenieść tę pozycję. Aby zawęzić listę wyświetlanych kolekcji, możesz wprowadzić zapytanie w polu wyszukiwania.", - "item.edit.move.error":"Wystąpił błąd podczas przenoszenia pozycji", - "item.edit.move.head":"Przenieś pozycję: {{id}}", - "item.edit.move.inheritpolicies.checkbox":"Dziedziczenie polityk", - "item.edit.move.inheritpolicies.description":"Dziedzczenie domyślnych polityk z kolekcji docelowej", - "item.edit.move.move":"Przenieś", - "item.edit.move.processing":"Przenoszenie...", - "item.edit.move.search.placeholder":"Wpisz zapytanie, aby wyszukać w kolekcjach", - "item.edit.move.success":"Pozycja została przeniesiona", - "item.edit.move.title":"Przenieś pozycję", - "item.edit.private.cancel":"Anuluj", - "item.edit.private.confirm":"Ukryj", - "item.edit.private.description":"Czy chcesz ukryć tę pozycję?", - "item.edit.private.error":"Wystąpił błąd podczas ukrywania pozycji", - "item.edit.private.header":"Ukryj pozycję: {{ id }}", - "item.edit.private.success":"Pozycja jest teraz ukryta", - "item.edit.public.cancel":"Anuluj", - "item.edit.public.confirm":"Upublicznij", - "item.edit.public.description":"Czy chcesz upublicznić tę pozycję?", - "item.edit.public.error":"Wystąpił błąd podczas upubliczniania pozycji", - "item.edit.public.header":"Upublicznij pozycję: {{ id }}", - "item.edit.public.success":"Pozycja jest teraz publiczna", - "item.edit.reinstate.cancel":"Anuluj", - "item.edit.reinstate.confirm":"Przywróć", - "item.edit.reinstate.description":"Czy chcesz przywrócić tę pozycję?", - "item.edit.reinstate.error":"Wystąpił błąd podczas przywracania pozycji", - "item.edit.reinstate.header":"Przywróć pozycję: {{ id }}", - "item.edit.reinstate.success":"Pozycja została przywrócona", - "item.edit.relationships.discard-button":"Odrzuć", - "item.edit.relationships.edit.buttons.add":"Dodaj", - "item.edit.relationships.edit.buttons.remove":"Usuń", - "item.edit.relationships.edit.buttons.undo":"Cofnij zmiany", - "item.edit.relationships.no-relationships":"Brak relacji", - "item.edit.relationships.notifications.discarded.content":"Twoje zmiany zostały cofnięte. Aby przywrócić zmiany wybierz przycisk 'Cofnij'", - "item.edit.relationships.notifications.discarded.title":"Zmiany zostały cofnięte", - "item.edit.relationships.notifications.failed.title":"Wystąpił błąd podczas edytowania relacji", - "item.edit.relationships.notifications.outdated.content":"Ta pozycja została właśnie zmieniona przez innego użytkownika. Twoje zmiany zostały cofnięte, aby uniknąć konfliktów", - "item.edit.relationships.notifications.outdated.title":"Zmiany są nieaktualne", - "item.edit.relationships.notifications.saved.content":"Twoje zmiany w relacjach tej pozycji zostały zapisane.", - "item.edit.relationships.notifications.saved.title":"Relacje zostały zapisane", - "item.edit.relationships.reinstate-button":"Cofnij", - "item.edit.relationships.save-button":"Zapisz", - "item.edit.relationships.no-entity-type":"Dodaj metadaną 'dspace.entity.type', aby umożliwić dodawanie relacji do pozycji", - "item.edit.return":"Cofnij", - "item.edit.tabs.bitstreams.head":"Pliki", - "item.edit.tabs.bitstreams.title":"Edycja pozycji - pliki", - "item.edit.tabs.curate.head":"Administruj", - "item.edit.tabs.curate.title":"Edytowanie pozycji - administruj", - "item.edit.tabs.metadata.head":"Metadane", - "item.edit.tabs.metadata.title":"Edycja pozycji - metadane", - "item.edit.tabs.relationships.head":"Relacje", - "item.edit.tabs.relationships.title":"Edycja pozycja - relacje", - "item.edit.tabs.status.buttons.authorizations.button":"Dostępy...", - "item.edit.tabs.status.buttons.authorizations.label":"Określu dostęp do pozycji", - "item.edit.tabs.status.buttons.delete.button":"Usuń permanentnie", - "item.edit.tabs.status.buttons.delete.label":"Usuń pozycję permanentnie", - "item.edit.tabs.status.buttons.mappedCollections.button":"Zmapowane kolekcje", - "item.edit.tabs.status.buttons.mappedCollections.label":"Zarządzaj mapowanymi kolekcjami", - "item.edit.tabs.status.buttons.move.button":"Przenieś...", - "item.edit.tabs.status.buttons.move.label":"Przenieś pozycję do innej kolekcji", - "item.edit.tabs.status.buttons.private.button":"Ukryj...", - "item.edit.tabs.status.buttons.private.label":"Ukry pozycję", - "item.edit.tabs.status.buttons.public.button":"Upublicznij...", - "item.edit.tabs.status.buttons.public.label":"Upublicznij pozycję", - "item.edit.tabs.status.buttons.reinstate.button":"Przywróć...", - "item.edit.tabs.status.buttons.reinstate.label":"Przywróć pozycję", - "item.edit.tabs.status.buttons.unauthorized":"You're not authorized to perform this action", - "item.edit.tabs.status.buttons.withdraw.button":"Wycofaj...", - "item.edit.tabs.status.buttons.withdraw.label":"Wycofaj z repozytorium", - "item.edit.tabs.status.description":"Witamy na stronie zarządzania pozycjami. Z tego miejsca możesz wycofać, przywrócić, przenieść lub usunąć daną pozycję. Możesz również aktualizować lub dodawać nowe metadane lub pliki..", - "item.edit.tabs.status.head":"Status", - "item.edit.tabs.status.labels.handle":"Identyfikator", - "item.edit.tabs.status.labels.id":"ID pozycji", - "item.edit.tabs.status.labels.itemPage":"Strona pozycji", - "item.edit.tabs.status.labels.lastModified":"Ostatnia modyfikacja", - "item.edit.tabs.status.title":"Edycja pozycji - Status", - "item.edit.tabs.versionhistory.head":"Historia wersji", - "item.edit.tabs.versionhistory.title":"Edycja pozycji - historia wersji", - "item.edit.tabs.versionhistory.under-construction":"Edytowanie lub dodawanie nowych wersji jest niedostępne w tego poziomu interfejsu.", - "item.edit.tabs.view.head":"Widok pozycji", - "item.edit.tabs.view.title":"Edycja pozycji - widok", - "item.edit.withdraw.cancel":"Anuluj", - "item.edit.withdraw.confirm":"Wycofaj", - "item.edit.withdraw.description":"Czy na pewno chcesz wycofać pozycję?", - "item.edit.withdraw.error":"Wystąpił błąd podczas wycofywania pozycji", - "item.edit.withdraw.header":"Wycofaj pozycję: {{ id }}", - "item.edit.withdraw.success":"Pozycja została wycofana", - "item.listelement.badge":"Pozycja", - "item.page.description":"Opis", - "item.page.journal-issn":"ISSN czasopisma", - "item.page.journal-title":"Tytuł czasopisma", - "item.page.publisher":"Wydawca", - "item.page.titleprefix":"Pozycja: ", - "item.page.volume-title":"Tytuł tomu", - "item.search.results.head":"Wyniki wyszukiwania pozycji", - "item.search.title":"Wyszukiwanie pozycji", - "item.page.abstract":"Abstrakt", - "item.page.author":"Autorzy", - "item.page.citation":"Cytowanie", - "item.page.collections":"Kolekcje", - "item.page.collections.loading":"Ładowanie...", - "item.page.collections.load-more":"Załaduj więcej", - "item.page.date":"Data", - "item.page.edit":"Edytuj pozycję", - "item.page.files":"Pliki", - "item.page.filesection.description":"Opis:", - "item.page.filesection.download":"Pobierz", - "item.page.filesection.format":"Format:", - "item.page.filesection.name":"Nazwa:", - "item.page.filesection.size":"Rozmiar:", - "item.page.journal.search.title":"Artykuły w czasopiśmie", - "item.page.link.full":"Zobacz szczegóły", - "item.page.link.simple":"Uproszczony widok", - "item.page.person.search.title":"Artykuły tego autora", - "item.page.related-items.view-more":"Pokaż o {{ amount }} więcej", - "item.page.related-items.view-less":"Ukryj {{ amount }}", - "item.page.relationships.isAuthorOfPublication":"Publikacje", - "item.page.relationships.isJournalOfPublication":"Publikacje", - "item.page.relationships.isOrgUnitOfPerson":"Autorzy", - "item.page.relationships.isOrgUnitOfProject":"Projekty naukowe", - "item.page.subject":"Słowa kluczowe", - "item.page.uri":"URI", - "item.page.bitstreams.view-more":"Pokaż więcej", - "item.page.bitstreams.collapse":"Pokaż mniej", - "item.page.filesection.original.bundle":"Oryginalne pliki", - "item.page.filesection.license.bundle":"Licencja", - "item.page.return":"Powrót", - "item.page.version.create":"Utwórz nową wersję", - "item.page.version.hasDraft":"Nowa wersja nie może zostać utworzona, ponieważ istnieje już oczekujące na akceptację zgłoszenie dokumentu tego pliku", - "item.preview.dc.identifier.doi":"DOI", - "item.preview.dc.relation.ispartof":"Czasopismo lub seria", - "item.preview.dc.identifier.isbn":"ISBN", - "item.preview.dc.identifier.uri":"Identyfikator:", - "item.preview.dc.contributor.author":"Autorzy:", - "item.preview.dc.date.issued":"Data publikacji:", - "item.preview.dc.description.abstract":"Abstrakt:", - "item.preview.dc.identifier.other":"Inny identyfikator:", - "item.preview.dc.language.iso":"Język:", - "item.preview.dc.title":"Tytuł:", - "item.preview.dc.title.alternative":"Tytuł alternatywny", - "item.preview.dc.type":"Typ:", - "item.preview.dc.identifier":"Identyfikator:", - "item.preview.dc.relation.issn":"ISSN", - "item.preview.oaire.citation.issue":"Numer wydania", - "item.preview.oaire.citation.volume":"Numer tomu", - "item.preview.person.familyName":"Nazwisko:", - "item.preview.person.givenName":"Nazwa:", - "item.preview.person.identifier.orcid":"ORCID:", - "item.preview.project.funder.name":"Fundator:", - "item.preview.project.funder.identifier":"Identyfikator fundatora:", - "item.preview.oaire.awardNumber":"ID finansowania:", - "item.preview.dc.coverage.spatial":"Jurysdykcja:", - "item.preview.oaire.fundingStream":"Źródło finansowania:", - "item.select.confirm":"Potwierdź zaznaczone", - "item.select.empty":"Brak pozycji do wyświetlenia", - "item.select.table.author":"Autor", - "item.select.table.collection":"Kolekcja", - "item.select.table.title":"Tytuł", - "item.version.history.empty":"Jeszcze nie ma innych wersji tej pozycji.", - "item.version.history.head":"Poprzednie wersje", - "item.version.history.return":"Powrót", - "item.version.history.selected":"Wybrane wersje", - "item.version.history.selected.alert":"W tym momencie wyświetlono wersję {{version}} pozycji.", - "item.version.history.table.version":"Wersja", - "item.version.history.table.item":"Pozycja", - "item.version.history.table.editor":"Redaktor", - "item.version.history.table.date":"Data", - "item.version.history.table.summary":"Podsumowanie", - "item.version.history.table.workspaceItem":"Wersja robocza", - "item.version.history.table.workflowItem":"Pozycja workflow", - "item.version.history.table.actions":"Akcja", - "item.version.history.table.action.editWorkspaceItem":"Edytuj wersję roboczą pozycji", - "item.version.history.table.action.editSummary":"Edytuj podsumowanie", - "item.version.history.table.action.saveSummary":"Zapisz edycje podsumowania", - "item.version.history.table.action.discardSummary":"Odrzuć edycje podsumowania", - "item.version.history.table.action.newVersion":"Utwórz nową wersję z tej wersji", - "item.version.history.table.action.deleteVersion":"Wersja usunięta", - "item.version.history.table.action.hasDraft":"Nowa wersja nie może zostać utworzona, ponieważ istnieje już oczekujące na akceptację zgłoszenie dokumentu tego pliku", - "item.version.notice":"To nie jest najnowsza wersja tej pozycji. Najnowsza wersja jest dostępna tutaj.", - "item.version.create.modal.header":"Nowa wersja", - "item.version.create.modal.text":"Utwórz nową wersję tej pozycji", - "item.version.create.modal.text.startingFrom":"zaczynając od wersji {{version}}", - "item.version.create.modal.button.confirm":"Utwórz", - "item.version.create.modal.button.confirm.tooltip":"Utwórz nową wersję", - "item.version.create.modal.button.cancel":"Anuluj", - "item.version.create.modal.button.cancel.tooltip":"Nie stwarzaj nowej wersji", - "item.version.create.modal.form.summary.label":"Podsumowanie", - "item.version.create.modal.form.summary.placeholder":"Wprowadź podsumowanie nowej wersji", - "item.version.create.notification.success":"Nowa wersja została utworzona z numerem {{version}}", - "item.version.create.notification.failure":"Nowa wersja nie została utworzona", - "item.version.create.notification.inProgress":"Nowa wersja nie może być utworzona, ponieważ propozycja innej wersji jest już złożona do zaakceptowania", - "item.version.delete.modal.header":"Usuń wersję", - "item.version.delete.modal.text":"Czy chcesz usunąć wersję {{version}}?", - "item.version.delete.modal.button.confirm":"Usuń", - "item.version.delete.modal.button.confirm.tooltip":"Usuń wersję", - "item.version.delete.modal.button.cancel":"Anuluj", - "item.version.delete.modal.button.cancel.tooltip":"Nie usuwaj tej wersji", - "item.version.delete.notification.success":"Wersja {{version}} została usunięta", - "item.version.delete.notification.failure":"Wersja {{version}} nie została usunięta", - "item.version.edit.notification.success":"Podsumowanie wersji {{version}} zostało zmienione", - "item.version.edit.notification.failure":"Podsumowanie wersji {{version}} nie zostało zmienione", - "journal.listelement.badge":"Czasopismo", - "journal.page.description":"Opis", - "journal.page.edit":"Edytuj tę pozycję", - "journal.page.editor":"Redaktor naczelny", - "journal.page.issn":"ISSN", - "journal.page.publisher":"Wydawca", - "journal.page.titleprefix":"Czasopismo: ", - "journal.search.results.head":"Wyniki wyszukiwania czasopism", - "journal.search.title":"Wyszukiwanie czasopism", - "journalissue.listelement.badge":"Numer czasopisma", - "journalissue.page.description":"Opis", - "journalissue.page.edit":"Edytuj pozycję", - "journalissue.page.issuedate":"Data wydania", - "journalissue.page.journal-issn":"ISSN czasopisma", - "journalissue.page.journal-title":"Tytuł czasopisma", - "journalissue.page.keyword":"Słowa kluczowe", - "journalissue.page.number":"Numer", - "journalissue.page.titleprefix":"Wydanie czasopisma: ", - "journalvolume.listelement.badge":"Numer tomu czasopisma", - "journalvolume.page.description":"Opis", - "journalvolume.page.edit":"Edytuj pozycję", - "journalvolume.page.issuedate":"Data wydania", - "journalvolume.page.titleprefix":"Numer tomu czasopisma: ", - "journalvolume.page.volume":"Numer wydania", - "iiifsearchable.listelement.badge":"Multimedia dokumentu", - "iiifsearchable.page.titleprefix":"Dokument: ", - "iiifsearchable.page.doi":"Stały link: ", - "iiifsearchable.page.issue":"Wydanie: ", - "iiifsearchable.page.description":"Opis: ", - "iiifviewer.fullscreen.notice":"Wyświetl na pełnym ekranie dla lepszego widoku.", - "iiif.listelement.badge":"Multimedia obrazu", - "iiif.page.titleprefix":"Obraz: ", - "iiif.page.doi":"Stały link: ", - "iiif.page.issue":"Numer wydania: ", - "iiif.page.description":"Opis: ", - "loading.bitstream":"Ładowanie pliku...", - "loading.bitstreams":"Ładowanie plików...", - "loading.browse-by":"Ładowanie pozycji...", - "loading.browse-by-page":"Ładowanie strony...", - "loading.collection":"Ładowanie kolekcji...", - "loading.collections":"Ładowanie kolekcji...", - "loading.content-source":"Ładowanie źródła treści...", - "loading.community":"Ładowanie zbioru...", - "loading.default":"Ładowanie...", - "loading.item":"Ładowanie pozycji...", - "loading.items":"Ładowanie pozycji...", - "loading.mydspace-results":"Ładowanie pozycji...", - "loading.objects":"Ładowanie...", - "loading.recent-submissions":"Ładowanie ostatnich zgłoszeń...", - "loading.search-results":"Ładowanie wyników wyszukiwania...", - "loading.sub-collections":"Ładowanie podkolekcji...", - "loading.sub-communities":"Ładowanie podzbioru...", - "loading.top-level-communities":"Ładowanie zbioru wyszego szczebla...", - "login.form.email":"Adres e-mail", - "login.form.forgot-password":"Nie pamiętasz hasła?", - "login.form.header":"Zaloguj się do DSpace", - "login.form.new-user":"Nie masz konta? Zarejestruj się.", - "login.form.or-divider":"lub", - "login.form.orcid":"Zaloguj za pomocą ORCID", - "login.form.oidc":"Zaloguj za pomocą OIDC", - "login.form.password":"Hasło", - "login.form.shibboleth":"Zaloguj za pomocą Shibboleth", - "login.form.submit":"Zaloguj się", - "login.title":"Zaloguj", - "login.breadcrumbs":"Zaloguj", - "logout.form.header":"Wyloguj się z DSpace", - "logout.form.submit":"Wyloguj się", - "logout.title":"Wylogowywanie", - "menu.header.admin":"Panel administracyjny", - "menu.header.image.logo":"Logo repozytorium", - "menu.header.admin.description":"Menu administratora", - "menu.section.access_control":"Uprawnienia", - "menu.section.access_control_authorizations":"Dostępy", - "menu.section.access_control_groups":"Grupy", - "menu.section.access_control_people":"Użytkownicy", - "menu.section.admin_search":"Wyszukiwanie administracyjne", - "menu.section.browse_community":"Ten zbiór", - "menu.section.browse_community_by_author":"Wg autorów", - "menu.section.browse_community_by_issue_date":"Wg daty wydania", - "menu.section.browse_community_by_title":"Wg tytułów", - "menu.section.browse_global":"Wszystko na DSpace", - "menu.section.browse_global_by_author":"Wg autorów", - "menu.section.browse_global_by_dateissued":"Wg daty wydania", - "menu.section.browse_global_by_subject":"Wg tematu", - "menu.section.browse_global_by_title":"Wg tytułu", - "menu.section.browse_global_communities_and_collections":"Zbiory i kolekcje", - "menu.section.control_panel":"Panel sterowania", - "menu.section.curation_task":"Zadanie administracyjne", - "menu.section.edit":"Edytuj", - "menu.section.edit_collection":"Kolekcja", - "menu.section.edit_community":"Zbiór", - "menu.section.edit_item":"Pozycja", - "menu.section.export":"Eksport", - "menu.section.export_collection":"Kolekcja", - "menu.section.export_community":"Zbiór", - "menu.section.export_item":"Pozycja", - "menu.section.export_metadata":"Metadane", - "menu.section.icon.access_control":"Sekcja menu Uprawnienia", - "menu.section.icon.admin_search":"Sekcja menu Wyszukiwanie administracyjne", - "menu.section.icon.control_panel":"Sekcja menu Panel sterowania", - "menu.section.icon.curation_tasks":"Sekcja menu Zadanie administracyjne", - "menu.section.icon.edit":"Sekcja menu Edycja", - "menu.section.icon.export":"Sekcja menu Eksport", - "menu.section.icon.find":"Sekcja menu Wyszukiwanie", - "menu.section.icon.import":"Sekcja menu Import", - "menu.section.icon.new":"Sekcja menu Dodaj", - "menu.section.icon.pin":"Przypnij boczny pasek", - "menu.section.icon.processes":"Sekcja menu Procesy", - "menu.section.icon.registries":"Sekcja menu Rejestry", - "menu.section.icon.statistics_task":"Sekcja menu Zadanie statystyczne", - "menu.section.icon.workflow":"Sekcja menu Zarządzanie workflow", - "menu.section.icon.unpin":"Odepnij boczny pasek", - "menu.section.import":"Import", - "menu.section.import_batch":"Import masowy (ZIP)", - "menu.section.import_metadata":"Metadane", - "menu.section.new":"Dodaj", - "menu.section.new_collection":"Kolekcja", - "menu.section.new_community":"Zbiór", - "menu.section.new_item":"Pozycja", - "menu.section.new_item_version":"Wersja pozycji", - "menu.section.new_process":"Proces", - "menu.section.pin":"Przypnij pasek boczny", - "menu.section.unpin":"Odepnij pasek boczny", - "menu.section.processes":"Procesy", - "menu.section.registries":"Rejestry", - "menu.section.registries_format":"Formaty", - "menu.section.registries_metadata":"Metadane", - "menu.section.statistics":"Statystyki", - "menu.section.statistics_task":"Zadanie statystyczne", - "menu.section.toggle.access_control":"Przełącz sekcję Uprawnienia", - "menu.section.toggle.control_panel":"Przełącz sekcję Panel sterowania", - "menu.section.toggle.curation_task":"Przełącz sekcję Zadanie kuratora", - "menu.section.toggle.edit":"Przełącz sekcję Edytuj", - "menu.section.toggle.export":"Przełącz sekcję Eksport", - "menu.section.toggle.find":"Przełącz sekcję Wyszukiwanie", - "menu.section.toggle.import":"Przełącz sekcję Import", - "menu.section.toggle.new":"Przełącz nową sekcję", - "menu.section.toggle.registries":"Przełącz sekcję Rejestry", - "menu.section.toggle.statistics_task":"Przełącz sekcję Zadanie statystyczne", - "menu.section.workflow":"Zarządzaj Workflow", - "mydspace.breadcrumbs":"Mój DSpace", - "mydspace.description":"", - "mydspace.messages.controller-help":"Wybierz tę opcję, aby przesłać wiadomość do zgłaszającego.", - "mydspace.messages.description-placeholder":"Wpisz swoją wiadomość tutaj...", - "mydspace.messages.hide-msg":"Ukryj wiadomość", - "mydspace.messages.mark-as-read":"Oznacz jako przeczytane", - "mydspace.messages.mark-as-unread":"Oznacz jako nieprzeczytane", - "mydspace.messages.no-content":"Brak treści.", - "mydspace.messages.no-messages":"Brak wiadomości.", - "mydspace.messages.send-btn":"Wysłano", - "mydspace.messages.show-msg":"Pokaż wiadomość", - "mydspace.messages.subject-placeholder":"Temat...", - "mydspace.messages.submitter-help":"Wybierz tę opcję, aby przesłać wiadomość do osoby kontrolującej.", - "mydspace.messages.title":"Wiadomości", - "mydspace.messages.to":"Do", - "mydspace.new-submission":"Nowe zgłoszenie", - "mydspace.new-submission-external":"Import medatanych z zewnętrznego źródła", - "mydspace.new-submission-external-short":"Import metadanych", - "mydspace.results.head":"Twoje zadania", - "mydspace.results.no-abstract":"Brak abstraktu", - "mydspace.results.no-authors":"Brak autorów", - "mydspace.results.no-collections":"Brak kolekcji", - "mydspace.results.no-date":"Brak daty", - "mydspace.results.no-files":"Brak plików", - "mydspace.results.no-results":"Brak pozycji do wyświetlenia", - "mydspace.results.no-title":"Brak tytułu", - "mydspace.results.no-uri":"Brak Uri", - "mydspace.search-form.placeholder":"Wyszukaj w mydspace...", - "mydspace.show.workflow":"Wszystkie zadania", - "mydspace.show.workspace":"Twoje zadania", - "mydspace.status.mydspaceArchived":"Zarchiwizowano", - "mydspace.status.mydspaceValidation":"Walidacja", - "mydspace.status.mydspaceWaitingController":"Oczekiwanie na redaktora", - "mydspace.status.mydspaceWorkflow":"Workflow", - "mydspace.status.mydspaceWorkspace":"Wersja robocza", - "mydspace.title":"Mój DSpace", - "mydspace.upload.upload-failed":"Bład podczas tworzenia nowej wersji roboczej. Sprawdź poprawność plików i spróbuj ponownie.", - "mydspace.upload.upload-failed-manyentries":"Plik jest niemożliwy do przetworzenia. Wykryto wiele wejść, a dopuszczalne jest tylko jedno dla jednego pliku.", - "mydspace.upload.upload-failed-moreonefile":"Zapytanie niemożliwe do przetworzenia. Tylko jeden plik jest dopuszczalny.", - "mydspace.upload.upload-multiple-successful":"Utworzono {{qty}} przestrzeni roboczych.", - "mydspace.view-btn":"Widok", - "nav.browse.header":"Cały DSpace", - "nav.community-browse.header":"Wg zbiorów", - "nav.language":"Zmień język", - "nav.login":"Zaloguj", - "nav.logout":"Menu profilu użytkownika i wylogowywanie", - "nav.main.description":"Główny pasek nawigacji", - "nav.mydspace":"Mój DSpace", - "nav.profile":"Profil", - "nav.search":"Wyszukiwanie", - "nav.statistics.header":"Statystyki", - "nav.stop-impersonating":"Przestań impersonifikować użytkownika", - "nav.toggle":"Przełącz nawigację", - "nav.user.description":"Pasek profilu użytkownika", - "none.listelement.badge":"Pozycja", - "person.listelement.badge":"Osoba", - "person.listelement.no-title":"Nie znaleziono imienia", - "person.page.birthdate":"Data urodzenia", - "person.page.edit":"Edytuj pozycję", - "person.page.email":"Adres e-mail", - "person.page.firstname":"Imię", - "person.page.jobtitle":"Stanowisko", - "person.page.lastname":"Nazwisko", - "person.page.link.full":"Pokaż wszystkie metadane", - "person.page.orcid":"ORCID", - "person.page.orcid.create":"Utwórz ORCID ID", - "person.page.orcid.granted-authorizations":"Udzielone dostępy", - "person.page.orcid.grant-authorizations":"Udziel dostępu", - "person.page.orcid.link":"Połącz z ORCID ID", - "person.page.orcid.orcid-not-linked-message":"ORCID iD tego profilu ({{ orcid }}) nie jest połączony z bazą ORCID lub połączenie wygasło.", - "person.page.orcid.unlink":"Odepnij z ORCID", - "person.page.orcid.unlink.processing":"Procesowanie...", - "person.page.orcid.missing-authorizations":"Brak dostępów", - "person.page.orcid.missing-authorizations-message":"Brakuj następujących dostępów:", - "person.page.orcid.no-missing-authorizations-message":"Świetnie! To miejsce jest puste, co oznacza, że masz dostęp do wszystkich uprawnień, które są dostępne w Twojej instytucji.", - "person.page.orcid.no-orcid-message":"Brak przypisanego ORCID iD. Poprez wybranie przycisku poniżej możesz powiązać ten profil wraz z kontem ORCID.", - "person.page.orcid.profile-preferences":"Preferencje profilu", - "person.page.orcid.funding-preferences":"Preferencje finansowania", - "person.page.orcid.publications-preferences":"Preferencje publikacji", - "person.page.orcid.remove-orcid-message":"Jeśli chcesz usunąć Twój ORCID, skontaktuj się z administratorem repozytorium", - "person.page.orcid.save.preference.changes":"Aktualizuj ustawienia", - "person.page.orcid.sync-profile.affiliation":"Afiliacja", - "person.page.orcid.sync-profile.biographical":"Biografia", - "person.page.orcid.sync-profile.education":"Edukacja", - "person.page.orcid.sync-profile.identifiers":"Identyfikatory", - "person.page.orcid.sync-fundings.all":"Wszystkie źrodła finansowania", - "person.page.orcid.sync-fundings.mine":"Moje źrodła finansowania", - "person.page.orcid.sync-fundings.my_selected":"Wybrane źródła finansowania", - "person.page.orcid.sync-fundings.disabled":"Nieaktywne", - "person.page.orcid.sync-publications.all":"Wszystkie publikacje", - "person.page.orcid.sync-publications.mine":"Moje publikacje", - "person.page.orcid.sync-publications.my_selected":"Wybrane publikacje", - "person.page.orcid.sync-publications.disabled":"Nieaktywne", - "person.page.orcid.sync-queue.discard":"Odrzuć zmianę i nie synchronizuj z ORCID", - "person.page.orcid.sync-queue.discard.error":"Rekord kolejki ORCID nie został odrzucony", - "person.page.orcid.sync-queue.discard.success":"Rekord kolejki ORCID został odrzucony", - "person.page.orcid.sync-queue.empty-message":"Rejestr kolejki w ORCID jest pusty", - "person.page.orcid.sync-queue.description.affiliation":"Afiliacje", - "person.page.orcid.sync-queue.description.country":"Kraj", - "person.page.orcid.sync-queue.description.education":"Edukacja", - "person.page.orcid.sync-queue.description.external_ids":"Zewnętrzne identyfikatory", - "person.page.orcid.sync-queue.description.other_names":"Inne imiona", - "person.page.orcid.sync-queue.description.qualification":"Kwalifikacje", - "person.page.orcid.sync-queue.description.researcher_urls":"URL naukowca", - "person.page.orcid.sync-queue.description.keywords":"Słowa kluczowe", - "person.page.orcid.sync-queue.tooltip.insert":"Dodaj nowy wpis w rejestrze ORCID", - "person.page.orcid.sync-queue.tooltip.update":"Aktualizuj ten wpis w rejestrze ORCID", - "person.page.orcid.sync-queue.tooltip.delete":"Usuń ten wpis z rejestru ORCID", - "person.page.orcid.sync-queue.tooltip.publication":"Publikacja", - "person.page.orcid.sync-queue.tooltip.affiliation":"Afiliacja", - "person.page.orcid.sync-queue.tooltip.education":"Edukacja", - "person.page.orcid.sync-queue.tooltip.qualification":"Kwalifikacje", - "person.page.orcid.sync-queue.tooltip.other_names":"Inna nazwa", - "person.page.orcid.sync-queue.tooltip.country":"Kraj", - "person.page.orcid.sync-queue.tooltip.keywords":"Słowa kluczowe", - "person.page.orcid.sync-queue.tooltip.external_ids":"Zewnętrzny identyfikator", - "person.page.orcid.sync-queue.tooltip.researcher_urls":"URL naukowca", - "person.page.orcid.sync-queue.send":"Synchronizuj z rejestrem ORCID", - "person.page.orcid.sync-queue.send.unauthorized-error.title":"Wysłanie zgłoszenia do ORCID nieudane z powodu braku uprawnień.", - "person.page.orcid.sync-queue.send.unauthorized-error.content":"Wybierz here, aby wystąpić o niezbędne uprawnienia. Jeśli problem wciąż występuje, skontaktuj się z administratorem", - "person.page.orcid.sync-queue.send.bad-request-error":"Wysłanie zgłoszenia do ORCID nie powiodło się ponieważ źródła wysłane do rejestru ORCID nie jest poprawne", - "person.page.orcid.sync-queue.send.error":"Wysłanie zgłoszenia do ORCID nie powiodło się", - "person.page.orcid.sync-queue.send.conflict-error":"Zgłoszenie do ORCID nie powiodło się, ponieważ ta pozycja jest już dodana do rejestru ORCID", - "person.page.orcid.sync-queue.send.not-found-warning":"Pozycja nie istnieje już w rejestrze ORCID.", - "person.page.orcid.sync-queue.send.success":"Zgłoszenie do ORCID zostało zakończone pomyślnie", - "person.page.orcid.sync-queue.send.validation-error":"Dane, które chcesz zsynchronizować z ORCID nie są poprawne", - "person.page.orcid.sync-queue.send.validation-error.amount-currency.required":"Waluta jest wymagana", - "person.page.orcid.sync-queue.send.validation-error.external-id.required":"Aby wysłać pozycję, należy podać przynajmniej jeden identyfikator", - "person.page.orcid.sync-queue.send.validation-error.title.required":"Tytuł jest wymagany", - "person.page.orcid.sync-queue.send.validation-error.type.required":"Typ jest wymagany", - "person.page.orcid.sync-queue.send.validation-error.start-date.required":"Data początkowa jest wymagana", - "person.page.orcid.sync-queue.send.validation-error.funder.required":"Instytucja finansująca jest wymagana", - "person.page.orcid.sync-queue.send.validation-error.organization.required":"Instytucja jest wymagana", - "person.page.orcid.sync-queue.send.validation-error.organization.name-required":"Nazwa instytucji jest wymagana", - "person.page.orcid.sync-queue.send.validation-error.organization.address-required":"Aby wysłać instytucję, należy podać adres", - "person.page.orcid.sync-queue.send.validation-error.organization.city-required":"Aby wysłać adres, należy podać miasto", - "person.page.orcid.sync-queue.send.validation-error.organization.country-required":"Aby wysłać adres, należy podać kraj", - "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.required":"Wymagany jest identyfikator umożliwiający rozróżnienie instytucji. Obsługiwane identyfikatory to GRID, Ringgold, kod LEI oraz identyfikatory z rejestru instytucji finansujących Crossref.", - "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.value-required":"Należy uzupełnić wartość w identyfikatorze instytucji", - "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required":"Należy uzupełnić źródło w identyfikatorze instytucji", - "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid":"Źródło jednego z identyfikatorów organizcji jest niepoprawne. Wspierane źródła to RINGGOLD, GRID, LEI and FUNDREF", - "person.page.orcid.synchronization-mode":"Tryb synchronizacji", - "person.page.orcid.synchronization-mode.batch":"Wsad", - "person.page.orcid.synchronization-mode.label":"Tryb synchronizacji", - "person.page.orcid.synchronization-mode-message":"Włącz tryb 'Manual' synchronizacja, aby wyłaczyć tryb synchronizacji wsadowej, wtedy dane do rejestru ORCID będą musiały zostać wysłane ręcznie", - "person.page.orcid.synchronization-settings-update.success":"Opcje synchronizacji zostały zaktualizowane", - "person.page.orcid.synchronization-settings-update.error":"Opcje synchronizacji nie zostały zaktualizowane", - "person.page.orcid.synchronization-mode.manual":"Ręczna", - "person.page.orcid.scope.authenticate":"Uzyskaj swój ORCID iD", - "person.page.orcid.scope.read-limited":"Przeczytaj informacje o ustawieniach widoczności z firmami trzeciami", - "person.page.orcid.scope.activities-update":"Dodaj/aktualizuj swoje aktywności naukowe", - "person.page.orcid.scope.person-update":"Dodaj/aktualizuj inne informacje o Tobie", - "person.page.orcid.unlink.success":"Odłączenie Twojego profilu od rejestru ORCID powiodło się", - "person.page.orcid.unlink.error":"Wystąpił błąd podczas odłączania Twojego profilu od rejestru ORCID. Spróbuj ponownie", - "person.page.staffid":"ID pracownika", - "person.page.titleprefix":"Osoba: ", - "person.search.results.head":"Wyniki wyszukiwania użytkowników", - "person.search.title":"Wyniki wyszukiwania użytkowników", - "process.new.select-parameters":"Parametry", - "process.new.cancel":"Anuluj", - "process.new.submit":"Zapisz", - "process.new.select-script":"Skrypt", - "process.new.select-script.placeholder":"Wybierz skrypt...", - "process.new.select-script.required":"Skrypt jest wymagany", - "process.new.parameter.file.upload-button":"Wybierz plik...", - "process.new.parameter.file.required":"Proszę wybrać plik", - "process.new.parameter.string.required":"Wartość parametru jest wymagana", - "process.new.parameter.type.value":"wartość", - "process.new.parameter.type.file":"plik", - "process.new.parameter.required.missing":"Te parametry są wymagane, ale nie zostały uzupełnione:", - "process.new.notification.success.title":"Udało się", - "process.new.notification.success.content":"Udało się stworzyć proces", - "process.new.notification.error.title":"Błąd", - "process.new.notification.error.content":"Wystąpił błąd podczas tworzenia procesu", - "process.new.header":"Utwórz nowy proces", - "process.new.title":"Utwórz nowy proces", - "process.new.breadcrumbs":"Utwórz nowy proces", - "process.detail.arguments":"Argumenty", - "process.detail.arguments.empty":"Do tego procesu nie zostały przypisane żadne argumenty", - "process.detail.back":"Cofnij", - "process.detail.output":"Dane wyjściowe procesu", - "process.detail.logs.button":"Odzyskaj dane wyjściowe procesu", - "process.detail.logs.loading":"Odzyskiwanie", - "process.detail.logs.none":"Ten proces nie ma danych wyjściowych", - "process.detail.output-files":"Pliki", - "process.detail.output-files.empty":"Ten proces nie ma żadnych plików danych wyjściowych", - "process.detail.script":"Skrypt", - "process.detail.title":"Proces: {{ id }} - {{ name }}", - "process.detail.start-time":"Czas rozpoczęcia procesu", - "process.detail.end-time":"Czas zakończenia procesu", - "process.detail.status":"Status", - "process.detail.create":"Stwórz podobny proces", - "process.overview.table.finish":"Czas zakończenia (UTC)", - "process.overview.table.id":"Identyfikator procesu", - "process.overview.table.name":"Nazwa", - "process.overview.table.start":"Czas rozpoczęcia (UTC)", - "process.overview.table.status":"Status", - "process.overview.table.user":"Użytkownik", - "process.overview.title":"Przegląd procesów", - "process.overview.breadcrumbs":"Przegląd procesów", - "process.overview.new":"Nowy", - "profile.breadcrumbs":"Zaktualizuj profil", - "profile.card.identify":"Dane", - "profile.card.security":"Bezpieczeństwo", - "profile.form.submit":"Zaktualizuj profil", - "profile.groups.head":"Posiadane uprawnienia do kolekcji", - "profile.head":"Zaktualizuj profil", - "profile.metadata.form.error.firstname.required":"Imię jest wymagane", - "profile.metadata.form.error.lastname.required":"Nazwisko jest wymagane", - "profile.metadata.form.label.email":"Adres e-mail", - "profile.metadata.form.label.firstname":"Imię", - "profile.metadata.form.label.language":"Język", - "profile.metadata.form.label.lastname":"Nazwisko", - "profile.metadata.form.label.phone":"Telefon kontaktowy", - "profile.metadata.form.notifications.success.content":"Zmiany w profilu zostały zapisane.", - "profile.metadata.form.notifications.success.title":"Profil zapisany", - "profile.notifications.warning.no-changes.content":"Nie dokonano żadnych zmian w profilu.", - "profile.notifications.warning.no-changes.title":"Brak zmian", - "profile.security.form.error.matching-passwords":"Hasła nie są identyczne.", - "profile.security.form.info":"Możesz wprowadzić nowe hasło w polu poniżej i zatwierdzić poprzez ponowne wpisanie. Hasło musi mieć przynajmniej 6 znaków.", - "profile.security.form.label.password":"Hasło", - "profile.security.form.label.passwordrepeat":"Potwierdź hasło", - "profile.security.form.notifications.success.content":"Twoje zmiany w haśle zostały zapisane.", - "profile.security.form.notifications.success.title":"Hasło zapisane", - "profile.security.form.notifications.error.title":"Błąd podczas próby zmiany hasła", - "profile.security.form.notifications.error.not-same":"Hasła nie są identyczne.", - "profile.title":"Zaktualizuj profil", - "profile.card.researcher":"Profil naukowca", - "project.listelement.badge":"Projekt badawczy", - "project.page.contributor":"Autorzy", - "project.page.description":"Opis", - "project.page.edit":"Edytuj pozycję", - "project.page.expectedcompletion":"Spodziewany termin zakończenia", - "project.page.funder":"Instytucje finansujące", - "project.page.id":"ID", - "project.page.keyword":"Słowa kluczowe", - "project.page.status":"Status", - "project.page.titleprefix":"Projekt badawczy: ", - "project.search.results.head":"Wyniki wyszukiwania projektów", - "publication.listelement.badge":"Publikacja", - "publication.page.description":"Opis", - "publication.page.edit":"Edytuj pozycję", - "publication.page.journal-issn":"ISSN czasopisma", - "publication.page.journal-title":"Tytuł czasopisma", - "publication.page.publisher":"Wydawca", - "publication.page.titleprefix":"Publikacja: ", - "publication.page.volume-title":"Tytuł tomu", - "publication.search.results.head":"Wyniki wyszukiwania publikacji", - "publication.search.title":"Wyszukiwanie publikacji", - "media-viewer.next":"Nowy", - "media-viewer.previous":"Poprzedni", - "media-viewer.playlist":"Playlista", - "register-email.title":"Rejestracja nowego użytkownika", - "register-page.create-profile.header":"Stwórz profil", - "register-page.create-profile.identification.header":"Dane", - "register-page.create-profile.identification.email":"Adres e-mail", - "register-page.create-profile.identification.first-name":"Imię *", - "register-page.create-profile.identification.first-name.error":"Wpisz imię", - "register-page.create-profile.identification.last-name":"Nazwisko *", - "register-page.create-profile.identification.last-name.error":"Wpisz nazwisko", - "register-page.create-profile.identification.contact":"Telefon kontaktowy", - "register-page.create-profile.identification.language":"Język", - "register-page.create-profile.security.header":"Bezpieczeństwo", - "register-page.create-profile.security.info":"Wprowadź nowe hasło w polu poniżej i zatwierdź poprzez ponowne wpisanie w drugim polu. Hasło musi mieć przynajmniej 6 znaków.", - "register-page.create-profile.security.label.password":"Hasło *", - "register-page.create-profile.security.label.passwordrepeat":"Potwierdź hasło *", - "register-page.create-profile.security.error.empty-password":"Wprowadź hasło w polu poniżej.", - "register-page.create-profile.security.error.matching-passwords":"Hasła nie są identyczne.", - "register-page.create-profile.submit":"Rejestracja zakończona", - "register-page.create-profile.submit.error.content":"Coś się nie udało podczas rejestracji nowego użytkownika.", - "register-page.create-profile.submit.error.head":"Rejestracja nie powiodła się", - "register-page.create-profile.submit.success.content":"Rejestracja powiodła się. Zalogowano jako stworzony użytkownik.", - "register-page.create-profile.submit.success.head":"Rejestracja zakończona", - "register-page.registration.header":"Rejestracja nowego użytkownika", - "register-page.registration.info":"Zarejestruj się, aby otrzymywać wiadomości o nowych pozycjach w obserowanych kolekcjach, a także przesyłać nowe pozycje do repozytorium.", - "register-page.registration.email":"Adres e-mail *", - "register-page.registration.email.error.required":"Wypełnij adres e-mail", - "register-page.registration.email.error.pattern":"Wypełnij poprawny adres e-mail", - "register-page.registration.email.hint":"Ten adres e-mail będzie zweryfikowany i będziesz go używać jako swój login.", - "register-page.registration.submit":"Zarejestruj się", - "register-page.registration.success.head":"Wiadomość weryfikacyjna zostałą wysłana", - "register-page.registration.success.content":"Wiadomość została wysłana na adres e-mail {{ email }}. Zawiera ona unikatowy link i dalsze instrukcje postępowania.", - "register-page.registration.error.head":"Błąd podczas próby rejestracji adresu e-mail", - "register-page.registration.error.content":"Błąd podczas próby rejestracji adresu e-mail: {{ email }}", - "relationships.add.error.relationship-type.content":"Nie znaleziono dopasowania dla typu relacji {{ type }} pomiędzy dwoma pozycjami", - "relationships.add.error.server.content":"Błąd serwera", - "relationships.add.error.title":"Nie można dodać relacji", - "relationships.isAuthorOf":"Autorzy", - "relationships.isAuthorOf.Person":"Autorzy (osoby)", - "relationships.isAuthorOf.OrgUnit":"Autorzy (jednostki organizacyjne)", - "relationships.isIssueOf":"Numery czasopisma", - "relationships.isJournalIssueOf":"Numer czasopisma", - "relationships.isJournalOf":"Czasopisma", - "relationships.isOrgUnitOf":"Jednostki organizacyjne", - "relationships.isPersonOf":"Autorzy", - "relationships.isProjectOf":"Projekty badawcze", - "relationships.isPublicationOf":"Publikacje", - "relationships.isPublicationOfJournalIssue":"Artykuły", - "relationships.isSingleJournalOf":"Czasopismo", - "relationships.isSingleVolumeOf":"Tom czasopisma", - "relationships.isVolumeOf":"Tomy czasopisma", - "relationships.isContributorOf":"Autorzy", - "relationships.isContributorOf.OrgUnit":"Autor (Jednostka organizacyjna)", - "relationships.isContributorOf.Person":"Autor", - "relationships.isFundingAgencyOf.OrgUnit":"Instytucja finansująca", - "repository.image.logo":"Logo repozytorium", - "repository.title.prefix":"DSpace Angular :: ", - "researcher.profile.action.processing":"Procesowanie...", - "researcher.profile.associated":"Przypisanie profilu badacza", - "researcher.profile.create.new":"Utwórz nowy", - "researcher.profile.create.success":"Profil badacza został utworzony", - "researcher.profile.create.fail":"Wystąpił błąd poczas tworzenia profilu badacza.", - "researcher.profile.delete":"Usuń", - "researcher.profile.expose":"Ujawnij", - "researcher.profile.hide":"Ukryj", - "researcher.profile.not.associated":"Profil badacza nie został jeszcze przypisany", - "researcher.profile.view":"Widok", - "researcher.profile.private.visibility":"PRYWATNY", - "researcher.profile.public.visibility":"PUBLICZNY", - "researcher.profile.status":"Status:", - "researcherprofile.claim.not-authorized":"Nie masz uprawnień, aby wystąpić o tę pozycję. Aby otrzymać więcej szczegółów, skontaktuj się z administratorami.", - "researcherprofile.error.claim.body":"Wystąpił błąd podczas wystąpienia z prośbą o przypisanie profilu. Spróbuj ponownie później.", - "researcherprofile.error.claim.title":"Błąd", - "researcherprofile.success.claim.body":"Wystąpienie z prośbą o przypisanie profilu udane", - "researcherprofile.success.claim.title":"Sukces", - "repository.title.prefixDSpace":"DSpace Angular ::", - "resource-policies.add.button":"Dodaj", - "resource-policies.add.for.":"Dodaj nową politykę", - "resource-policies.add.for.bitstream":"Dodaj nową politykę dla plików", - "resource-policies.add.for.bundle":"Dodaj nową politykę paczek", - "resource-policies.add.for.item":"Dodaj nową politykę pozycji", - "resource-policies.add.for.community":"Dodaj nową politykę zbioru", - "resource-policies.add.for.collection":"Dodaj nową politykę kolekcji", - "resource-policies.create.page.heading":"Utwórz nową politykę zasobu dla ", - "resource-policies.create.page.failure.content":"Wystąpił błąd podczas dodawania polityki zasobów.", - "resource-policies.create.page.success.content":"Działanie powiodło się", - "resource-policies.create.page.title":"Utwórz nową politykę zasobu", - "resource-policies.delete.btn":"Usuń zaznaczone", - "resource-policies.delete.btn.title":"Usuń zaznaczone polityki zasobów", - "resource-policies.delete.failure.content":"Wystąpił błąd podczas usuwania wybranych polityk zasobów.", - "resource-policies.delete.success.content":"Działanie powiodło się", - "resource-policies.edit.page.heading":"Edytuj politykę zasobu ", - "resource-policies.edit.page.failure.content":"Wystąpił błąd poczas edytowania polityki zasobu.", - "resource-policies.edit.page.success.content":"Działanie udało się", - "resource-policies.edit.page.title":"Edytuj politykę zasobu", - "resource-policies.form.action-type.label":"Wybierz ten typ akcji", - "resource-policies.form.action-type.required":"Musisz wybrać akcję polityki zasobu.", - "resource-policies.form.eperson-group-list.label":"Użytkownik lub grupa, która otrzyma uprawnienia.", - "resource-policies.form.eperson-group-list.select.btn":"Wybierz", - "resource-policies.form.eperson-group-list.tab.eperson":"Wyszukaj użytkownika", - "resource-policies.form.eperson-group-list.tab.group":"Wyszukaj grupę", - "resource-policies.form.eperson-group-list.table.headers.action":"Akcja", - "resource-policies.form.eperson-group-list.table.headers.id":"ID", - "resource-policies.form.eperson-group-list.table.headers.name":"Nazwa", - "resource-policies.form.date.end.label":"Data zakończenia", - "resource-policies.form.date.start.label":"Data rozpoczęcia", - "resource-policies.form.description.label":"Opis", - "resource-policies.form.name.label":"Nazwa", - "resource-policies.form.policy-type.label":"Wybierz typ polityki", - "resource-policies.form.policy-type.required":"Musisz wybrać typ polityki zasobu.", - "resource-policies.table.headers.action":"Akcja", - "resource-policies.table.headers.date.end":"Data zakończenia", - "resource-policies.table.headers.date.start":"Data rozpoczęcia", - "resource-policies.table.headers.edit":"Edytuj", - "resource-policies.table.headers.edit.group":"Edytuj grupę", - "resource-policies.table.headers.edit.policy":"Edytuj politykę", - "resource-policies.table.headers.eperson":"Użytkownik", - "resource-policies.table.headers.group":"Grupa", - "resource-policies.table.headers.id":"ID", - "resource-policies.table.headers.name":"Nazwa", - "resource-policies.table.headers.policyType":"typ", - "resource-policies.table.headers.title.for.bitstream":"Polityki dla plików", - "resource-policies.table.headers.title.for.bundle":"Polityki dla paczek", - "resource-policies.table.headers.title.for.item":"Polityki dla pozycji", - "resource-policies.table.headers.title.for.community":"Polityki dla zbioru", - "resource-policies.table.headers.title.for.collection":"Polityki dla kolekcji", - "search.description":"", - "search.switch-configuration.title":"Pokaż", - "search.title":"Szukaj", - "search.breadcrumbs":"Szukaj", - "search.search-form.placeholder":"Szukaj w repozytorium...", - "search.filters.applied.f.author":"Autor", - "search.filters.applied.f.dateIssued.max":"Data zakończenia", - "search.filters.applied.f.dateIssued.min":"Data rozpoczęcia", - "search.filters.applied.f.dateSubmitted":"Data zgłoszenia", - "search.filters.applied.f.discoverable":"Ukryty", - "search.filters.applied.f.entityType":"Typ pozycji", - "search.filters.applied.f.has_content_in_original_bundle":"Ma przypisane pliki", - "search.filters.applied.f.itemtype":"Typ", - "search.filters.applied.f.namedresourcetype":"Status", - "search.filters.applied.f.subject":"Temat", - "search.filters.applied.f.submitter":"Zgłaszający", - "search.filters.applied.f.jobTitle":"Stanowisko", - "search.filters.applied.f.birthDate.max":"Data zakończenia tworzenia", - "search.filters.applied.f.birthDate.min":"Data rozpoczęcia tworzenia", - "search.filters.applied.f.withdrawn":"Wycofane", - "search.filters.filter.author.head":"Autor", - "search.filters.filter.author.placeholder":"Autor", - "search.filters.filter.author.label":"Wyszukaj autora", - "search.filters.filter.birthDate.head":"Data urodzenia", - "search.filters.filter.birthDate.placeholder":"Data urodzenia", - "search.filters.filter.birthDate.label":"Wyszukaj datę urodzenia", - "search.filters.filter.collapse":"Ukryj filtr", - "search.filters.filter.creativeDatePublished.head":"Data opublikowania", - "search.filters.filter.creativeDatePublished.placeholder":"Data opublikowania", - "search.filters.filter.creativeDatePublished.label":"Wyszukaj datę opublikowania", - "search.filters.filter.creativeWorkEditor.head":"Redaktor", - "search.filters.filter.creativeWorkEditor.placeholder":"Redaktor", - "search.filters.filter.creativeWorkEditor.label":"Wyszukaj redaktora", - "search.filters.filter.creativeWorkKeywords.head":"Słowo kluczowe", - "search.filters.filter.creativeWorkKeywords.placeholder":"Słowo kluczowe", - "search.filters.filter.creativeWorkKeywords.label":"Wyszukaj temat", - "search.filters.filter.creativeWorkPublisher.head":"Wydawca", - "search.filters.filter.creativeWorkPublisher.placeholder":"Wydawca", - "search.filters.filter.creativeWorkPublisher.label":"Wyszukaj wydawcę", - "search.filters.filter.dateIssued.head":"Data", - "search.filters.filter.dateIssued.max.placeholder":"Data maksymalna", - "search.filters.filter.dateIssued.max.label":"Koniec", - "search.filters.filter.dateIssued.min.placeholder":"Data minimalna", - "search.filters.filter.dateIssued.min.label":"Start", - "search.filters.filter.dateSubmitted.head":"Data zgłoszenia", - "search.filters.filter.dateSubmitted.placeholder":"Data zgłoszenia", - "search.filters.filter.dateSubmitted.label":"Wyszukaj datę zgłoszenia", - "search.filters.filter.discoverable.head":"Ukryty", - "search.filters.filter.withdrawn.head":"Wycofane", - "search.filters.filter.entityType.head":"Typ pozycji", - "search.filters.filter.entityType.placeholder":"Typ pozycji", - "search.filters.filter.entityType.label":"Wyszukaj typ pozycji", - "search.filters.filter.expand":"Rozwiń filtr", - "search.filters.filter.has_content_in_original_bundle.head":"Ma przypisane pliki", - "search.filters.filter.itemtype.head":"Typ", - "search.filters.filter.itemtype.placeholder":"Typ", - "search.filters.filter.itemtype.label":"Wyszukaj typ", - "search.filters.filter.jobTitle.head":"Stanowisko", - "search.filters.filter.jobTitle.placeholder":"Stanowisko", - "search.filters.filter.jobTitle.label":"Wyszukaj stanowisko", - "search.filters.filter.knowsLanguage.head":"Znajomość języka", - "search.filters.filter.knowsLanguage.placeholder":"Znajomość języka", - "search.filters.filter.knowsLanguage.label":"Wyszukaj wg znajomości języka", - "search.filters.filter.namedresourcetype.head":"Status", - "search.filters.filter.namedresourcetype.placeholder":"Status", - "search.filters.filter.namedresourcetype.label":"Wyszukaj status", - "search.filters.filter.objectpeople.head":"Osoby", - "search.filters.filter.objectpeople.placeholder":"Osoby", - "search.filters.filter.objectpeople.label":"Wyszukaj użytkowników", - "search.filters.filter.organizationAddressCountry.head":"Kraj", - "search.filters.filter.organizationAddressCountry.placeholder":"Kraj", - "search.filters.filter.organizationAddressCountry.label":"Wyszukaj kraj", - "search.filters.filter.organizationAddressLocality.head":"Miasto", - "search.filters.filter.organizationAddressLocality.placeholder":"Miasto", - "search.filters.filter.organizationAddressLocality.label":"Wyszukaj miasto", - "search.filters.filter.organizationFoundingDate.head":"Data założenia", - "search.filters.filter.organizationFoundingDate.placeholder":"Data założenia", - "search.filters.filter.organizationFoundingDate.label":"Wyszukaj datę założenia", - "search.filters.filter.scope.head":"Zakres", - "search.filters.filter.scope.placeholder":"Filtr zakresu", - "search.filters.filter.scope.label":"Wyszukaj filtr zakresu", - "search.filters.filter.show-less":"Pokaż mniej", - "search.filters.filter.show-more":"Pokaż więcej", - "search.filters.filter.subject.head":"Temat", - "search.filters.filter.subject.placeholder":"Temat", - "search.filters.filter.subject.label":"Wyszukaj temat", - "search.filters.filter.submitter.head":"Zgłaszający", - "search.filters.filter.submitter.placeholder":"Zgłaszający", - "search.filters.filter.submitter.label":"Wyszukaj zgłaszającego", - "search.filters.entityType.JournalIssue":"Numer czasopisma", - "search.filters.entityType.JournalVolume":"Tom czasopisma", - "search.filters.entityType.OrgUnit":"Jednostka organizacyjna", - "search.filters.has_content_in_original_bundle.true":"Tak", - "search.filters.has_content_in_original_bundle.false":"Nie", - "search.filters.discoverable.true":"Nie", - "search.filters.discoverable.false":"Tak", - "search.filters.withdrawn.true":"Tak", - "search.filters.withdrawn.false":"Nie", - "search.filters.head":"Filtry", - "search.filters.reset":"Resetuj filtry", - "search.filters.search.submit":"Zastosuj", - "search.form.search":"Wyszukaj", - "search.form.search_dspace":"W repozytorium", - "search.form.scope.all":"W całym DSpace", - "search.results.head":"Wyniki wyszukiwania", - "default.search.results.head":"Wyniki wyszukiwania", - "search.results.no-results":"Twoj wyszukiwanie nie zwróciło żadnych rezultatów. Masz problem ze znalezieniem tego czego szukasz? Spróbuj użyć", - "search.results.no-results-link":"fraz podobnych do Twojego wyszukiwania", - "search.results.empty":"Twoje wyszukiwanie nie zwróciło żadnych rezultatów.", - "search.sidebar.close":"Wróć do wyników wyszukiwania", - "search.sidebar.filters.title":"Filtry", - "search.sidebar.open":"Narzędzia wyszukiwania", - "search.sidebar.results":"wyniki", - "search.sidebar.settings.rpp":"Wyników na stronie", - "search.sidebar.settings.sort-by":"Sortuj według", - "search.sidebar.settings.title":"Ustawienia", - "search.view-switch.show-detail":"Wyświetl widok szczegółowy", - "search.view-switch.show-grid":"Wyświetl jako siatkę", - "search.view-switch.show-list":"Wyświetl jako listę", - "sorting.ASC":"Rosnąco", - "sorting.DESC":"Malejąco", - "sorting.dc.title.ASC":"Tytułami rosnąco", - "sorting.dc.title.DESC":"Tytułami malejąco", - "sorting.score.ASC":"Najmniej trafne", - "sorting.score.DESC":"Najbardziej trafne", - "sorting.dc.date.issued.ASC":"Data wydania rosnąco", - "sorting.dc.date.issued.DESC":"Data wydania malejąco", - "sorting.dc.date.accessioned.ASC":"Data dostępu rosnąco", - "sorting.dc.date.accessioned.DESC":"Data dostępu malejąco", - "sorting.lastModified.ASC":"Ostatnia modyfikacja rosnąco", - "sorting.lastModified.DESC":"Ostatnia modyfikacja malejąco", - "statistics.title":"Statystyki", - "statistics.header":"Statystyki dla {{ scope }}", - "statistics.breadcrumbs":"Statystyki", - "statistics.page.no-data":"Brak dostępnych danych", - "statistics.table.no-data":"Brak dostępnych danych", - "statistics.table.header.views":"Wyświetlenia", - "submission.edit.breadcrumbs":"Edytuj zgłoszenie", - "submission.edit.title":"Edytuj zgłoszenie", - "submission.general.cancel":"Anuluj", - "submission.general.cannot_submit":"Nie masz uprawnień, aby utworzyć nowe zgłoszenie.", - "submission.general.deposit":"Deponuj", - "submission.general.discard.confirm.cancel":"Anuluj", - "submission.general.discard.confirm.info":"Czy na pewno? To działanie nie może zostać cofnięte.", - "submission.general.discard.confirm.submit":"Tak, na pewno", - "submission.general.discard.confirm.title":"Odrzuć zgłoszenie", - "submission.general.discard.submit":"Odrzuć", - "submission.general.info.saved":"Zapisane", - "submission.general.info.pending-changes":"Niezapisane zmiany", - "submission.general.save":"Zapisz", - "submission.general.save-later":"Zapisz wersję roboczą", - "submission.import-external.page.title":"Importuj metdane z zewnętrznego źródła", - "submission.import-external.title":"Importuj metadane z zewnętrznego źródła", - "submission.import-external.title.Journal":"Importuj czasopismo z zewnętrznego źródła", - "submission.import-external.title.JournalIssue":"Importuj numer czasopisma z zewnętrznego źródła", - "submission.import-external.title.JournalVolume":"Importuj tom czasopisma z zewnętrznego źródła", - "submission.import-external.title.OrgUnit":"Importuj wydawcę z zewnętrznego źródła", - "submission.import-external.title.Person":"Importuj osobę z zewnętrznego źródła", - "submission.import-external.title.Project":"Importuj projekt z zewnętrznego źródła", - "submission.import-external.title.Publication":"Importuj publikację z zewnętrznego źródła", - "submission.import-external.title.none":"Importuj metadane z zewnętrznego źródła", - "submission.import-external.page.hint":"Enter a query above to find items from the web to import in to DSpace.", - "submission.import-external.back-to-my-dspace":"Powrót do MyDSpace", - "submission.import-external.search.placeholder":"Wyszukaj zewnętrzne źródła danych", - "submission.import-external.search.button":"Szukaj", - "submission.import-external.search.button.hint":"Zacznij wpisywać frazę, aby wyszukać", - "submission.import-external.search.source.hint":"Wybierz zewnętrzne źródło", - "submission.import-external.source.ads":"NASA/ADS", - "submission.import-external.source.arxiv":"arXiv", - "submission.import-external.source.cinii":"CiNii", - "submission.import-external.source.crossref":"CrossRef", - "submission.import-external.source.loading":"ładowanie...", - "submission.import-external.source.sherpaJournal":"Czasopisma w SHERPA", - "submission.import-external.source.sherpaJournalIssn":"Czasopisma w SHERPA wg ISSN", - "submission.import-external.source.sherpaPublisher":"Wydawcy w SHERPA", - "submission.import-external.source.openAIREFunding":"Finansowanie OpenAIRE API", - "submission.import-external.source.orcid":"ORCID", - "submission.import-external.source.orcidWorks":"ORCID", - "submission.import-external.source.pubmed":"Pubmed", - "submission.import-external.source.pubmedeu":"Pubmed Europe", - "submission.import-external.source.lcname":"Nazwy Biblioteki Kongresu", - "submission.import-external.source.scielo":"SciELO", - "submission.import-external.source.scopus":"Scopus", - "submission.import-external.source.vufind":"VuFind", - "submission.import-external.source.wos":"Web Of Science", - "submission.import-external.source.epo":"Europejski Urząd Patentowy (EPO)", - "submission.import-external.preview.title.Journal":"Podgląd czasopisma", - "submission.import-external.preview.title.OrgUnit":"Podgląd organizacji", - "submission.import-external.preview.title.Person":"Podgląd osoby", - "submission.import-external.preview.title.Project":"Podgląd projektu", - "submission.import-external.preview.title.Publication":"Podgląd publikacji", - "submission.import-external.preview.subtitle":"Metadane poniżej zostały zaimportowane z zewnętrznego źródła. Niektóre pola zostaną uzupełnione automatycznie, kiedy rozpoczniesz zgłaszanie pozycji.", - "submission.import-external.preview.button.import":"Rozpocznij zgłoszenie", - "submission.import-external.preview.error.import.title":"Błąd zgłoszenia", - "submission.import-external.preview.error.import.body":"Wystąpił błąd podczas procesu importowania pozycji z zewnętrznego źródła.", - "submission.sections.describe.relationship-lookup.close":"Zamknij", - "submission.sections.describe.relationship-lookup.external-source.added":"Udało się dodać wpis do selekcji", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication":"Importuj zdalnego autora", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal":"Importuj zdalne czasopismo", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue":"Importuj zdalny numer czasopisma", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume":"Importuj zdalny tom czasopisma", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication":"Projekt", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity":"Nowy typ danych dodany!", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title":"Projekt", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding":"Finansowanie OpenAIRE API", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title":"Importuj zdalnego autora", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Person":"Importuj zdalną osobę", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Product":"Importuj zdalny produkt", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Equipment":"Importuj zdalną aparaturę badawczą", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Event":"Importuj zdalne wydarzenie", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Funding":"Importuj zdalną instytucję finansującą", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.OrgUnit":"Importuj zdalnego wydawcę", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Patent":"Importuj zdalnie patent", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Project":"Importuj zdalnie projekt", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication":"Importuj zdalnie publikację", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity":"Udało się dodać autora do selekcji", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.new-entity":"Udało się zaimportować i dodać zewnętrznego autora do selekcji", - "submission.sections.describe.relationship-lookup.external-source.import-modal.authority":"Nadrzędność", - "submission.sections.describe.relationship-lookup.external-source.import-modal.authority.new":"Importuj jako nową, lokalną, nadrzędną pozycję", - "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel":"Anuluj", - "submission.sections.describe.relationship-lookup.external-source.import-modal.collection":"Wybierz kolekcję do zaimportowania nowych pozycji", - "submission.sections.describe.relationship-lookup.external-source.import-modal.entities":"Typ danych", - "submission.sections.describe.relationship-lookup.external-source.import-modal.entities.new":"Importuj jako nowy lokalny typ danych", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname":"Importuj z LC Name", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid":"Importuj z ORCID", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal":"Importuj z Sherpa Journal", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher":"Importuj z Sherpa Publisher", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed":"Importuj z PubMed", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv":"Importuj z arXiv", - "submission.sections.describe.relationship-lookup.external-source.import-modal.import":"Import", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title":"Importuj zdalne czasopismo", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity":"Successfully added local journal to the selection", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity":"Successfully imported and added external journal to the selection", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title":"Importuj zdalny numer czasopisma", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity":"Udało się dodać lokalne czasopismo do zaznaczenia", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity":"Udało się zaimportować i dodać czasopismo zewnętrzne do zaznaczenia", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.title":"Importuj zdalny numer czasopisma", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity":"Udało się dodać lokalny numer czasopismo do zaznaczenia", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity":"Udało się zaimportować i dodać zewnętrzny numer czasopisma do zaznaczenia", - "submission.sections.describe.relationship-lookup.external-source.import-modal.select":"Wybierz lokalne powiązanie:", - "submission.sections.describe.relationship-lookup.search-tab.deselect-all":"Odznacz wszystko", - "submission.sections.describe.relationship-lookup.search-tab.deselect-page":"Odznacz stronę", - "submission.sections.describe.relationship-lookup.search-tab.loading":"Ładowanie...", - "submission.sections.describe.relationship-lookup.search-tab.placeholder":"Wyszukaj zapytanie", - "submission.sections.describe.relationship-lookup.search-tab.search":"Zastosuj", - "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder":"Wyszukaj...", - "submission.sections.describe.relationship-lookup.search-tab.select-all":"Zaznacz wszystko", - "submission.sections.describe.relationship-lookup.search-tab.select-page":"Zaznacz stronę", - "submission.sections.describe.relationship-lookup.selected":"Zaznacz {{ size }} pozycji", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication":"Autorzy lokalni ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication":"Czasopisma lokalne ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project":"Projekty lokalne ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication":"Publikacje lokalne ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person":"Autorzy lokalni ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit":"Lokalne jednostki organizacyjne ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage":"Lokalne paczki danych ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile":"Lokalne pliki danych ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal":"Lokalne czasopisma ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication":"Lokalne numery czasopism ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue":"Lokalne numery czasopism ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication":"Lokalne tomy czasopism ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume":"Lokalne tomy czasopism ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal":"Sherpa Journals ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaPublisher":"Sherpa Publishers ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid":"ORCID ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname":"LC Names ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed":"PubMed ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.arxiv":"arXiv ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication":"Wyszukaj instytucje finansujące", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication":"Wyszukaj finansowanie", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf":"Wyszukaj jednostki organizacyjne", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding":"Finansowanie OpenAIRE API", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication":"Projekty", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject":"Instytucja finansująca projekt", - "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding":"Finansowanie OpenAIRE API", - "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication":"Projekt", - "submission.sections.describe.relationship-lookup.title.isProjectOfPublication":"Projekty", - "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject":"Instytucja finansująca projekt", - "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder":"Wyszukaj...", - "submission.sections.describe.relationship-lookup.selection-tab.tab-title":"Aktualne zaznaczenie ({{ count }})", - "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication":"Numery czasopisma", - "submission.sections.describe.relationship-lookup.title.JournalIssue":"Numery czasopisma", - "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication":"Tomy czasopisma", - "submission.sections.describe.relationship-lookup.title.JournalVolume":"Tomy czasopisma", - "submission.sections.describe.relationship-lookup.title.isJournalOfPublication":"Czasopisma", - "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication":"Autorzy", - "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication":"Instytucja finansująca", - "submission.sections.describe.relationship-lookup.title.Project":"Projekty", - "submission.sections.describe.relationship-lookup.title.Publication":"Publikacje", - "submission.sections.describe.relationship-lookup.title.Person":"Autorzy", - "submission.sections.describe.relationship-lookup.title.OrgUnit":"Jednostki organizacyjne", - "submission.sections.describe.relationship-lookup.title.DataPackage":"Paczki danych", - "submission.sections.describe.relationship-lookup.title.DataFile":"Pliki danych", - "submission.sections.describe.relationship-lookup.title.Funding Agency":"Instytucja finansująca", - "submission.sections.describe.relationship-lookup.title.isFundingOfPublication":"Finansowanie", - "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf":"Nadrzędna jednostka organizacyjna", - "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown":"Przełącz na listę rozwijaną", - "submission.sections.describe.relationship-lookup.selection-tab.settings":"Ustawienia", - "submission.sections.describe.relationship-lookup.selection-tab.no-selection":"Twoje zaznaczenie jest puste.", - "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication":"Wybrani autorzy", - "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication":"Wybrane czasopisma", - "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication":"Wybrane tomy czasopisma", - "submission.sections.describe.relationship-lookup.selection-tab.title.Project":"Wybrane projekty", - "submission.sections.describe.relationship-lookup.selection-tab.title.Publication":"Wybrane publikacje", - "submission.sections.describe.relationship-lookup.selection-tab.title.Person":"Wybrani autorzy", - "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit":"Wybrane jednostki organizacyjne", - "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage":"Wybrane pakiety danych", - "submission.sections.describe.relationship-lookup.selection-tab.title.DataFile":"Wybrane pliki danych", - "submission.sections.describe.relationship-lookup.selection-tab.title.Journal":"Wybrane czasopisma", - "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication":"Wybrany numer wydania", - "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume":"Wybrany tom czasopisma", - "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication":"Wybrane instytucje finansujące", - "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication":"Wybrane finansowanie", - "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue":"Wybrany numer wydania", - "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf":"Wybrana jednostka organizacyjna", - "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal":"Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.crossref":"Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher":"Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.orcid":"Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2":"Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.lcname":"Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed":"Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv":"Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.epo":"Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.scopus":"Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.scielo":"Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.wos":"Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title":"Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.name-variant.notification.content":"Czy chcesz zapisać \"{{ value }}\" jako wariant imienia dla tego użytkownika, aby Ty lub inni użytkownicy mogli używać tego wariantu w przyszłych zgłoszeniach?. Jeśli nie, nadal możesz użyć tego wariantu w tym zgłoszeniu.", - "submission.sections.describe.relationship-lookup.name-variant.notification.confirm":"Zapisz nowy wariant imienia", - "submission.sections.describe.relationship-lookup.name-variant.notification.decline":"Użyj tylko w tym zgłoszeniu", - "submission.sections.ccLicense.type":"Typ licencji", - "submission.sections.ccLicense.select":"Wybierz typ licencji…", - "submission.sections.ccLicense.change":"Zmień typ licencji…", - "submission.sections.ccLicense.none":"Brak dostępnych licencji", - "submission.sections.ccLicense.option.select":"Wybierz opcję…", - "submission.sections.ccLicense.link":"Wybrano licencję:", - "submission.sections.ccLicense.confirmation":"Udzielam powyższej licencji", - "submission.sections.general.add-more":"Dodaj więcej", - "submission.sections.general.collection":"Kolekcja", - "submission.sections.general.deposit_error_notice":"Wystąpił błąd podczas zgłaszania pozycji. Spróbuj ponownie później.", - "submission.sections.general.deposit_success_notice":"Udało się wprowadzić pozycję.", - "submission.sections.general.discard_error_notice":"Wystąpił błąd podczas odrzucania pozycji. Spróbuj ponownie później.", - "submission.sections.general.discard_success_notice":"Udało się odrzucić pozycję.", - "submission.sections.general.metadata-extracted":"Nowe metadane zostany rozpakowane i dodane do sekcji {{sectionId}}.", - "submission.sections.general.metadata-extracted-new-section":"Nowa sekcja {{sectionId}} została dodana do zgłoszenia.", - "submission.sections.general.no-collection":"Nie znaleziono kolekcji", - "submission.sections.general.no-sections":"Opcje niedostępne", - "submission.sections.general.save_error_notice":"Wystąpił błąd podczas zapisywania numeru. Spróbuj ponownie później. Po odświeżeniu strony niezapisane zmiany mogą zostać utracone.", - "submission.sections.general.save_success_notice":"Udało się zapisać zgłoszenie.", - "submission.sections.general.search-collection":"Szukaj kolekcji", - "submission.sections.general.sections_not_valid":"Niektóre sekcje są niekompletne.", - "submission.sections.submit.progressbar.CClicense":"Licencja Creative Commons", - "submission.sections.submit.progressbar.describe.recycle":"Odzyskaj", - "submission.sections.submit.progressbar.describe.stepcustom":"Opisz", - "submission.sections.submit.progressbar.describe.stepone":"Opisz", - "submission.sections.submit.progressbar.describe.steptwo":"Opisz", - "submission.sections.submit.progressbar.detect-duplicate":"Potencjalne duplikaty", - "submission.sections.submit.progressbar.license":"Zdeponuj licencję", - "submission.sections.submit.progressbar.upload":"Prześlij pliki", - "submission.sections.status.errors.title":"Błędy", - "submission.sections.status.valid.title":"Poprawność", - "submission.sections.status.warnings.title":"Ostrzeżenia", - "submission.sections.status.errors.aria":"ma błędy", - "submission.sections.status.valid.aria":"jest poprawne", - "submission.sections.status.warnings.aria":"ma ostrzeżenia", - "submission.sections.toggle.open":"Otwórz sekcję", - "submission.sections.toggle.close":"Zamknij sekcję", - "submission.sections.toggle.aria.open":"Rozwiń sekcję {{sectionHeader}}", - "submission.sections.toggle.aria.close":"Zwiń sekcję {{sectionHeader}}", - "submission.sections.upload.delete.confirm.cancel":"Anuluj", - "submission.sections.upload.delete.confirm.info":"Czy na pewno? To działanie nie może zostać cofnięte.", - "submission.sections.upload.delete.confirm.submit":"Tak, na pewno", - "submission.sections.upload.delete.confirm.title":"Usuń plik", - "submission.sections.upload.delete.submit":"Usuń", - "submission.sections.upload.download.title":"Pobierz plik", - "submission.sections.upload.drop-message":"Upuść pliki, aby załączyć je do tej pozycji", - "submission.sections.upload.edit.title":"Edytuj plik", - "submission.sections.upload.form.access-condition-label":"Typ dostępu", - "submission.sections.upload.form.date-required":"Data jest wymagana.", - "submission.sections.upload.form.date-required-from":"Data przyznania dostępu od jest wymagana.", - "submission.sections.upload.form.date-required-until":"Data przyznania dostępu do jest wymagana.", - "submission.sections.upload.form.from-label":"Pozwól na dostęp od", - "submission.sections.upload.form.from-placeholder":"Od", - "submission.sections.upload.form.group-label":"Grupa", - "submission.sections.upload.form.group-required":"Grupa jest wymagana", - "submission.sections.upload.form.until-label":"Pozwól na dostęp do", - "submission.sections.upload.form.until-placeholder":"Do", - "submission.sections.upload.header.policy.default.nolist":"Pliki wgrane do kolekcji {{collectionName}} będą dostępne dla poniższych grup:", - "submission.sections.upload.header.policy.default.withlist":"Zwróć uwagę na to, że pliki w kolekcji {{collectionName}} będą dostępne dla poniższych grup, z wyjątkiem tych, które zostały wyłączone z dostępu:", - "submission.sections.upload.info":"Tutaj znajdują się wszystkie pliki dodane w tym momencie do pozycji. Możesz zaktualizować metadane pliku i warunki dostępu lub przesłać dodatkowe pliki, przeciągając i opuszczając je gdziekolwiek na tej stronie", - "submission.sections.upload.no-entry":"Nie", - "submission.sections.upload.no-file-uploaded":"Pliki nie zostały jeszcze wgrane.", - "submission.sections.upload.save-metadata":"Zapisz metadane", - "submission.sections.upload.undo":"Anuluj", - "submission.sections.upload.upload-failed":"Przesyłanie nieudane", - "submission.sections.upload.upload-successful":"Przesyłanie udane", - "submission.submit.breadcrumbs":"Nowe zgłoszenie", - "submission.submit.title":"Nowe zgłoszenie", - "submission.workflow.generic.delete":"Usuń", - "submission.workflow.generic.delete-help":"Jeśli chcesz odrzucić tę pozycję, wybierz \"Delete\". Będzie wymagane potwierdzenie tej decyzji.", - "submission.workflow.generic.edit":"Edytuj", - "submission.workflow.generic.edit-help":"Wybierz tę opcję, aby zmienić metadane pozycji.", - "submission.workflow.generic.view":"Podgląd", - "submission.workflow.generic.view-help":"Wybierz tę opcję, aby wyświetlić metadane pozycji.", - "submission.workflow.tasks.claimed.approve":"Zatwierdź", - "submission.workflow.tasks.claimed.approve_help":"Jeśli ta pozycja ma zostać zatwierdzona i wprowadzona do kolekcji, wybierz \"Approve\".", - "submission.workflow.tasks.claimed.edit":"Edytuj", - "submission.workflow.tasks.claimed.edit_help":"Wybierz tę opcję, aby zmienić metadane pozycji.", - "submission.workflow.tasks.claimed.reject.reason.info":"Proszę wpisać powód odrzucenia zgłoszenia w poniższe pole, wskazując, czy zgłaszający może poprawić problem i ponownie przesłać zgłoszenie.", - "submission.workflow.tasks.claimed.reject.reason.placeholder":"Opisz powód odrzucenia zgłoszenia", - "submission.workflow.tasks.claimed.reject.reason.submit":"Odrzuć pozycję", - "submission.workflow.tasks.claimed.reject.reason.title":"Powód", - "submission.workflow.tasks.claimed.reject.submit":"Odrzuć", - "submission.workflow.tasks.claimed.reject_help":"Jeśli po przejrzeniu pozycji stwierdzono, że nie nadaje się ona do włączenia do kolekcji, wybierz opcję \"Reject\". Zostaniesz wtedy poproszony o określenie powodu odrzucenia, i wskazanie czy zgłaszający powinien wprowadzić zmiany i przesłać ponownie pozycję.", - "submission.workflow.tasks.claimed.return":"Cofnij do puli zadań", - "submission.workflow.tasks.claimed.return_help":"Cofnij zadanie do puli, aby inny użytkownik mógł się go podjąć.", - "submission.workflow.tasks.generic.error":"Podczas działania wystąpił błąd...", - "submission.workflow.tasks.generic.processing":"Procesowanie...", - "submission.workflow.tasks.generic.submitter":"Zgłaszający", - "submission.workflow.tasks.generic.success":"Udało się", - "submission.workflow.tasks.pool.claim":"Podejmij pracę", - "submission.workflow.tasks.pool.claim_help":"Przypisz to zadanie do siebie.", - "submission.workflow.tasks.pool.hide-detail":"Ukryj szczegóły", - "submission.workflow.tasks.pool.show-detail":"Pokaż szczegóły", - "thumbnail.default.alt":"Miniatura", - "thumbnail.default.placeholder":"Brak miniatury", - "thumbnail.project.alt":"Logo projektu", - "thumbnail.project.placeholder":"Obraz zastępczy projketu", - "thumbnail.orgunit.alt":"Logo jednostki organizacyjnej", - "thumbnail.orgunit.placeholder":"Obraz zastępczy jednostki organizacyjnej", - "thumbnail.person.alt":"Zdjęcie profilowe", - "thumbnail.person.placeholder":"Brak zdjęcia profilowego", - "title":"DSpace", - "vocabulary-treeview.header":"Widok drzewka", - "vocabulary-treeview.load-more":"Pokaż więcej", - "vocabulary-treeview.search.form.reset":"Resetuj", - "vocabulary-treeview.search.form.search":"Szukaj", - "vocabulary-treeview.search.no-result":"Brak pozycji do wyświetlenia", - "vocabulary-treeview.tree.description.nsi":"The Norwegian Science Index", - "vocabulary-treeview.tree.description.srsc":"Kategorie tematów badań", - "uploader.browse":"wyszukaj na swoim urządzeniu", - "uploader.drag-message":"Przeciągnij i upuść pliki tutaj", - "uploader.delete.btn-title":"Usuń", - "uploader.or":", lub ", - "uploader.processing":"Procesowanie", - "uploader.queue-length":"Długość kolejki", - "virtual-metadata.delete-item.info":"Wybierz typy, dla których chcesz zapisać wirtualne metadane jako rzeczywiste metadane", - "virtual-metadata.delete-item.modal-head":"Wirtualne metadane tego powiązania", - "virtual-metadata.delete-relationship.modal-head":"Wybierz pozycje, dla których chcesz zapisać wirtualne metadane jako rzeczywiste metadane", - "workflowAdmin.search.results.head":"Zarządzaj procesami", - "workflow-item.edit.breadcrumbs":"Edytuj pozycję procesu", - "workflow-item.edit.title":"Edytuj pozycję procesu", - "workflow-item.delete.notification.success.title":"Usunięte", - "workflow-item.delete.notification.success.content":"Ten element procesu został usunięty", - "workflow-item.delete.notification.error.title":"Coś poszło nie tak", - "workflow-item.delete.notification.error.content":"Ten element procesu nie mógł zostać usunięty", - "workflow-item.delete.title":"Usuń element procesu", - "workflow-item.delete.header":"Usuń element procesu", - "workflow-item.delete.button.cancel":"Anuluj", - "workflow-item.delete.button.confirm":"Usuń", - "workflow-item.send-back.notification.success.title":"SOdeślij do zgłaszającego", - "workflow-item.send-back.notification.success.content":"Ten element procesu został odesłany do zgłaszającego", - "workflow-item.send-back.notification.error.title":"Coś poszło nie tak", - "workflow-item.send-back.notification.error.content":"Ten element procesu nie mógł zostać odesłany do zgłaszającego", - "workflow-item.send-back.title":"Odeślij element procesu do zgłaszającego", - "workflow-item.send-back.header":"Odeślij element procesu do zgłaszającego", - "workflow-item.send-back.button.cancel":"Anuluj", - "workflow-item.send-back.button.confirm":"Odeślij", - "workflow-item.view.breadcrumbs":"Widok procesu", - "idle-modal.header":"Sesja wkrótce wygaśnie", - "idle-modal.info":"Ze względów bezpieczeństwa sesja wygaśnie po {{ timeToExpire }} minutach nieaktywności. Twoja sesja wkrótce wygaśnie. Czy chcesz ją przedłużyć albo wylogować się?", - "idle-modal.log-out":"Wyloguj", - "idle-modal.extend-session":"Wydłuż sesję", - "workspace.search.results.head":"Twoje zadania", - "orgunit.listelement.badge":"Jednostka organizacyjna", - "orgunit.page.city":"Miasto", - "orgunit.page.country":"Kraj", - "orgunit.page.dateestablished":"Data założenia", - "orgunit.page.description":"Opis", - "orgunit.page.edit":"Edytuj pozycję", - "orgunit.page.id":"ID", - "orgunit.page.titleprefix":"Jednostka organizacyjna: ", - "pagination.options.description":"Opcje strony", - "pagination.results-per-page":"Wyników na stronę", - "pagination.showing.detail":"{{ range }} z {{ total }}", - "pagination.showing.label":"Teraz wyświetlane ", - "pagination.sort-direction":"Opcje sortowania", - "cookies.consent.purpose.sharing":"Udostępnianie", - "item.preview.dc.identifier.issn":"ISSN", - "500.page-internal-server-error":"Usługa niedostępna", - "500.help":"Serwer jest tymczasowo niezdolny do obsługi Twojego żądania z powodu przestoju konserwacyjnego lub problemów z przepustowością. Prosimy spróbować ponownie później.", - "500.link.home-page":"Zabierz mnie na stronę główną", - "error-page.description.401":"brak autoryzacji", - "error-page.description.403":"brak dostępu", - "error-page.description.500":"usługa niedostępna", - "error-page.description.404":"nie znaleziono strony", - "error-page.orcid.generic-error":"Podczas logowania za pomocą ORCID wystąpił błąd. Upewnij się, że udostępniłeś DSpace adres e-mail swojego konta ORCID. Jeśli błąd nadal występuje, skontaktuj się z administratorem", - "access-status.embargo.listelement.badge":"Embargo", - "access-status.metadata.only.listelement.badge":"Tylko metadane", - "access-status.open.access.listelement.badge":"Open Access", - "access-status.restricted.listelement.badge":"Brak dostępu", - "access-status.unknown.listelement.badge":"Nieznane", - "admin.access-control.groups.table.edit.buttons.remove":"Usuń \"{{name}}\"", - "admin.metadata-import.page.validateOnly":"Tylko waliduj", - "admin.metadata-import.page.validateOnly.hint":"Po wybraniu tej opcji przesłany plik CSV zostanie poddany walidacji. Otrzymasz raport o wykrytych zmianach, ale żadne zmiany nie zostaną zapisane.", - "bitstream.edit.form.iiifLabel.label":"Etykieta canvyIIIF", - "bitstream.edit.form.iiifLabel.hint":"Etykieta dla tego obrazu. Jeśli nie została dostarczona, zostanie użyta domyślna etykieta.", - "bitstream.edit.form.iiifToc.label":"Spis treści IIIF", - "bitstream.edit.form.iiifToc.hint":"Dodanie tekstu tutaj zapoczątkuje nowy zakres spisu treści.", - "bitstream.edit.form.iiifWidth.label":"Szerokość canvy IIIF", - "bitstream.edit.form.iiifWidth.hint":"Szerokość canvy jest zwykle równa szerokości obrazu.", - "bitstream.edit.form.iiifHeight.label":"Wysokość canvy IIIF", - "bitstream.edit.form.iiifHeight.hint":"Wysokość canvy jest zwykle równa szerokości obrazu.", - "browse.back.all-results":"Wszystkie wyniki wyszukiwania", - "pagination.next.button":"Następny", - "pagination.previous.button":"Poprzedni", - "pagination.next.button.disabled.tooltip":"Brak więcej stron z wynikami wyszukiwania", - "browse.startsWith":", zaczyna się od {{ startsWith }}", - "browse.title.page":"Przeszukiwanie {{ collection }} wg {{ field }} {{ value }}", - "collection.edit.item.authorizations.load-bundle-button":"Załaduj więcej paczek", - "collection.edit.item.authorizations.load-more-button":"Załaduj więcej", - "collection.edit.item.authorizations.show-bitstreams-button":"Pokaż polityki plików dla paczek", - "comcol-role.edit.create.error.title":"Nie udało się utworzyć grupy dla roli '{{ role }}'", - "curation.form.submit.error.invalid-handle":"Nie ustalono identyfikatora dla tego obiektu", - "confirmation-modal.delete-profile.header":"Usuń profil", - "confirmation-modal.delete-profile.info":"Czy na pewno chcesz usunąć profil", - "confirmation-modal.delete-profile.cancel":"Anuluj", - "confirmation-modal.delete-profile.confirm":"Usuń", - "error.invalid-search-query":"Zapytanie nie jest poprawne. Wejdź na Solr query syntax, aby dowiedzieć się o najlepszych praktykach i dodatkowych informacjach o tym błędzie.", - "feed.description":"Aktualności", - "footer.link.feedback":"Prześlij uwagi", - "form.group-collapse":"Zwiń", - "form.group-collapse-help":"Kliknij tutaj, aby zwinąć", - "form.group-expand":"Rozwiń", - "form.group-expand-help":"Kliknij tutaj, aby rozwinąć", - "health.breadcrumbs":"Stan systemu", - "health-page.heading":"Stan systemu", - "health-page.info-tab":"Informacje", - "health-page.status-tab":"Status", - "health-page.error.msg":"Serwis stanu systemu jest tymczasowo niedostępny", - "health-page.property.status":"Kod statusu", - "health-page.section.db.title":"Baza danych", - "health-page.section.geoIp.title":"GeoIp", - "health-page.section.solrAuthorityCore.title":"Autentykacja", - "health-page.section.solrOaiCore.title":"OAI", - "health-page.section.solrSearchCore.title":"Wyszukiwarka", - "health-page.section.solrStatisticsCore.title":"Statystyki", - "health-page.section-info.app.title":"Backend aplikacji", - "health-page.section-info.java.title":"Java", - "health-page.status":"Status", - "health-page.status.ok.info":"operacyjny", - "health-page.status.error.info":"Wykryte problemy", - "health-page.status.warning.info":"Wykryte potencjalne problemy", - "health-page.title":"Stan systemu", - "health-page.section.no-issues":"Nie wykryto żadnych problemów", - "info.feedback.breadcrumbs":"Uwagi", - "info.feedback.head":"Uwagi", - "info.feedback.title":"Uwagi", - "info.feedback.info":"Dziękujemy za podzielenie się opinią na temat systemu DSpace. Doceniamy Twój wkład w lepsze działanie systemu!", - "info.feedback.email_help":"Ten adres zostanie użyty, aby przesłać odpowiedź na uwagi.", - "info.feedback.send":"Prześlij uwagi", - "info.feedback.comments":"Komentarz", - "info.feedback.email-label":"Twoj adres e-mail", - "info.feedback.create.success":"Uwagi przesłane!", - "info.feedback.error.email.required":"Poprawny adres e-mail jest wymagany", - "info.feedback.error.message.required":"Treść komentarza jest wymagana", - "info.feedback.page-label":"Strona", - "info.feedback.page_help":"Ta strona odnosi się do uwag.", - "item.orcid.return":"Powrót", - "item.truncatable-part.show-more":"Pokaż więcej", - "item.truncatable-part.show-less":"Pokaż mniej", - "item.page.orcid.title":"ORCID", - "item.page.orcid.tooltip":"Otwórz ustawienia ORCID", - "item.page.claim.button":"Podejmij pracę", - "item.page.claim.tooltip":"Podejmij pracę jako profil", - "item.version.create.modal.submitted.header":"Tworzenie nowej wersji...", - "item.version.create.modal.submitted.text":"Nowa wersja została utworzona. Mogło to trwać chwilę, jeśli pozycja ma wiele powiązań.", - "journal-relationships.search.results.head":"Wyniki wyszukiwania czasopism", - "menu.section.icon.health":"Sekcja menu Stan systemu", - "menu.section.health":"Stan systemu", - "metadata-export-search.tooltip":"Eksportuj wyniki wyszukiwania w formacie CSV", - "metadata-export-search.submit.success":"Eksport rozpoczął się", - "metadata-export-search.submit.error":"Eksport nie rozpoczął się", - "person.page.name":"Nazwa", - "person-relationships.search.results.head":"Wyniki wyszukiwania osób", - "profile.special.groups.head":"Autoryzacja do specjalnych grup, do których należysz", - "project-relationships.search.results.head":"Wyniki wyszukiwania projektów", - "publication-relationships.search.results.head":"Wyniki wyszukiwania publikacji", - "resource-policies.edit.page.target-failure.content":"Wystąpił błąd podczas edycji (użytkownika lub grupy) związany z polityką zasobu.", - "resource-policies.edit.page.other-failure.content":"Wystąpił błąd podczas edycji polityki zasobu. Użytkownik lub grupa zostały zaktualizowane pomyślnie.", - "resource-policies.form.eperson-group-list.modal.header":"Nie można zmienić typu", - "resource-policies.form.eperson-group-list.modal.text1.toGroup":"Nie można zastąpić użytkownika grupą.", - "resource-policies.form.eperson-group-list.modal.text1.toEPerson":"Nie można zastąpić grupy użytkownikiem.", - "resource-policies.form.eperson-group-list.modal.text2":"Usuń obecną polityke zasobu i stwórz nową o określonym typie.", - "resource-policies.form.eperson-group-list.modal.close":"Ok", - "search.results.view-result":"Widok", - "default-relationships.search.results.head":"Wyniki wyszukiwania", - "statistics.table.title.TotalVisits":"Wyświetlnia ogółem", - "statistics.table.title.TotalVisitsPerMonth":"Wyświetlenia w miesiącu", - "statistics.table.title.TotalDownloads":"Pobrania", - "statistics.table.title.TopCountries":"Wyświetlenia wg krajów", - "statistics.table.title.TopCities":"Wyświetlenia wg miast", - "submission.import-external.preview.title":"Podgląd pozycji", - "submission.import-external.preview.title.none":"Podgląd pozycji", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.none":"Import pozycji zdalnie", - "submission.sections.general.cannot_deposit":"Nie można zakończyć deponowania, ponieważ w formularzu wystąpiły błędy.
    Aby zakończyć deponowanie, wypełnij wszystkie obowiązkowe pola.", - "submission.sections.submit.progressbar.accessCondition":"Warunki dostępu do pozycji", - "submission.sections.submit.progressbar.sherpapolicy":"Polityki Sherpa", - "submission.sections.submit.progressbar.sherpaPolicies":"Informacje o polityce open access wydawcy.", - "submission.sections.status.info.title":"Dodatkowe informacje", - "submission.sections.status.info.aria":"Dodatkowe informacje", - "submission.sections.upload.form.access-condition-hint":"Wybierz w jaki sposób pliki dla tej pozycji po jest zdeponowaniu będą mogły być udostępnione", - "submission.sections.upload.form.from-hint":"Wybierz datę, od której ma zostać zastosowany warunek dostępu", - "submission.sections.upload.form.until-hint":"Wybierz datę, do której ma zostać zastosowany warunek dostępu", - "submission.sections.accesses.form.discoverable-description":"Jeśli checkbox jest zaznaczony, pozycja będzie wyświetlana w wynikach wyszukiwania. Jeśli checkbox jest odznaczony, dostęp do pozycji będzie dostępny tylko przez bezpośredni link, pozycja nie będzie wyświetlana w wynikach wyszukiwania.", - "submission.sections.accesses.form.discoverable-label":"Niemożliwe do wyszukania", - "submission.sections.accesses.form.access-condition-label":"Typ warunku dostępu", - "submission.sections.accesses.form.access-condition-hint":"Wybierz warunek dostępu, aby przypisać go do pozycji, kiedy zostanie zdeponowany.", - "submission.sections.accesses.form.date-required":"Data jest wymagana.", - "submission.sections.accesses.form.date-required-from":"Początkowa data przyznania dostępu jest wymagana.", - "submission.sections.accesses.form.date-required-until":"Końcowa data przyznania dostępu jest wymagana.", - "submission.sections.accesses.form.from-label":"Udziel dostępu od", - "submission.sections.accesses.form.from-hint":"Wybierz datę, od kiedy zostanie przyznany dostęp do tej pozycji", - "submission.sections.accesses.form.from-placeholder":"Od", - "submission.sections.accesses.form.group-label":"Grupa", - "submission.sections.accesses.form.group-required":"Grupa jest wymagana.", - "submission.sections.accesses.form.until-label":"Udziel dostępu do", - "submission.sections.accesses.form.until-hint":"Wybierz datę, do kiedy zostanie przyznany dostęp do tej pozycji", - "submission.sections.accesses.form.until-placeholder":"Do", - "submission.sections.sherpa.publication.information":"Informacje o publikacji", - "submission.sections.sherpa.publication.information.title":"Tytuł", - "submission.sections.sherpa.publication.information.issns":"Numery ISSN", - "submission.sections.sherpa.publication.information.url":"URL", - "submission.sections.sherpa.publication.information.publishers":"Wydawca", - "submission.sections.sherpa.publication.information.romeoPub":"Wydawca Romeo", - "submission.sections.sherpa.publication.information.zetoPub":"Wydawca Zeto", - "submission.sections.sherpa.publisher.policy":"Polityka wydawnicza", - "submission.sections.sherpa.publisher.policy.description":"Poniższe informacje zostały znalezione za pośrednictwem Sherpa Romeo. W oparciu o politykę Twojego wydawcy, zawiera ona porady dotyczące tego, czy embargo może być konieczne i/lub jakie pliki możesz przesłać. Jeśli masz pytania, skontaktuj się z administratorem strony poprzez formularz.", - "submission.sections.sherpa.publisher.policy.openaccess":"Rodzaje Open Access dozwolone przez politykę wydawniczą tego czasopisma są wymienione poniżej. Kliknij na wybrany rodzaj, aby przejść do szczegółowego widoku", - "submission.sections.sherpa.publisher.policy.more.information":"Aby uzuyskać więcej informacji, kliknij tutaj:", - "submission.sections.sherpa.publisher.policy.version":"Wersja", - "submission.sections.sherpa.publisher.policy.embargo":"Embargo", - "submission.sections.sherpa.publisher.policy.noembargo":"Brak embargo", - "submission.sections.sherpa.publisher.policy.nolocation":"Brak", - "submission.sections.sherpa.publisher.policy.license":"Licencja", - "submission.sections.sherpa.publisher.policy.prerequisites":"Wymagania wstępne", - "submission.sections.sherpa.publisher.policy.location":"Lokalizacja", - "submission.sections.sherpa.publisher.policy.conditions":"Wymagania", - "submission.sections.sherpa.publisher.policy.refresh":"Odśwież", - "submission.sections.sherpa.record.information":"Informacje o rekordzie", - "submission.sections.sherpa.record.information.id":"ID", - "submission.sections.sherpa.record.information.date.created":"Data utworzenia", - "submission.sections.sherpa.record.information.date.modified":"Ostatnia modyfikacja", - "submission.sections.sherpa.record.information.uri":"URI", - "submission.sections.sherpa.error.message":"Wystąpił błąd podczas pobierania informacji z Sherpa", - "submission.workspace.generic.view":"Podgląd", - "submission.workspace.generic.view-help":"Wybierz tę opcje, aby zobaczyć metadane.", - "workflow.search.results.head":"Zadania na workflow", - "workspace-item.view.breadcrumbs":"Widok wersji roboczej", - "workspace-item.view.title":"Widok wersji roboczej", - "researcher.profile.change-visibility.fail":"Wystąpił niespodziewany błąd podczas zmiany widoczności profilu", - "person.page.orcid.link.processing":"Łączenie profilu z ORCID...", - "person.page.orcid.link.error.message":"Coś poszło nie tak podczas łączenia z ORCID. Jeśli problem będzie się powtarzał, skontaktuj się z administratorem.", - "person.page.orcid.sync-queue.table.header.type":"Typ", - "person.page.orcid.sync-queue.table.header.description":"Opis", - "person.page.orcid.sync-queue.table.header.action":"Akcja", - "person.page.orcid.sync-queue.tooltip.project":"Projekt", - "person.page.orcid.sync-queue.send.validation-error.country.invalid":"Niewłaściwy dwuznakowy kod kraju ISO 3166", - "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid":"Wymagana data publikacji to co najmniej rok po 1900", - "person.page.orcid.synchronization-mode-funding-message":"Wybierz, czy chcesz wysłać swoje projekty na swoją listę informacji o projektach w profilu ORCID.", - "person.page.orcid.synchronization-mode-publication-message":"Wybierz, czy chcesz wysłać swoje publikacje na swoją listę informacji o publikacjach w profilu ORCID.", - "person.page.orcid.synchronization-mode-profile-message":"Wybierz, czy chcesz wysłać swoje dane bibliograficzne lub osobiste identyfikatory do swojego profilu ORCID.", - "person.orcid.sync.setting":"Ustawienia synchronizacji z ORCID", - "person.orcid.registry.queue":"Kolejka rejestru z ORCID", - "person.orcid.registry.auth":"Autoryzacje z ORCID", - "home.recent-submissions.head":"Najnowsze publikacje", - "submission.sections.sherpa-policy.title-empty":"Nie wybrano ISSN i informacje o polityce wydawniczej czasopisma są niedostępne", - "admin.batch-import.breadcrumbs":"Import zbiorczy", - "admin.batch-import.page.dropMsg":"Drop a batch ZIP to import", - "admin.batch-import.page.dropMsgReplace":"Drop to replace the batch ZIP to import", - "admin.batch-import.page.error.addFile":"Najpierw wybierz plik (ZIP)", - "admin.batch-import.page.header":"Import masowy", - "admin.batch-import.page.help":"Wybierz kolekcję do zaimportowania kolekcji. Potem, upuść lub przeszukaj plik SAF, który zawiera pozycje do importu", - "admin.batch-import.page.remove":"usuń", - "admin.batch-import.page.validateOnly.hint":"Jeśli wybrano, importowany plik ZIP będzie walidowany. Otrzymasz raport ze zmianami, ale żadne zmiany nie zostaną wykonane zapisane.", - "collection.form.correctionSubmissionDefinition":"Wzór zgłoszenia do prośby o korektę", - "comcol-role.edit.delete.error.title":"Nie udało się usunąć roli '{{ role }}' dla grup", - "confirmation-modal.export-batch.header":"Eksport maasowy (ZIP) {{ dsoName }}", - "confirmation-modal.export-batch.info":"Czy na pewno chcesz wyeksportować plik ZIP z {{ dsoName }}", - "dso-selector.export-batch.dspaceobject.head":"Eksport masowy (ZIP) z", - "menu.section.export_batch":"Eksport masowy (ZIP)", - "nav.user-profile-menu-and-logout":"Profil użytkownika i wylogowywanie", - "process.detail.actions":"Akcje", - "process.detail.delete.body":"Czy na pewno chcesz usunąć bieżący proces?", - "process.detail.delete.button":"Usuń proces", - "process.detail.delete.cancel":"Anuluj", - "process.detail.delete.confirm":"Usuń proces", - "process.detail.delete.error":"Nie udało się usunąć procesu", - "process.detail.delete.header":"Usuń proces", - "process.detail.delete.success":"Proces został usunięty.", - "admin.batch-import.title":"Masowy import", - "admin.metadata-import.page.button.select-collection":"Wybierz kolekcję", - "admin.registries.bitstream-formats.table.id":"ID", - "admin.registries.schema.fields.table.id":"ID", - "cookies.consent.app.description.google-recaptcha":"Podczas rejestracji i odzyskiwania hasła używamy narzędzia google reCAPTCHA", - "cookies.consent.app.disable-all.description":"Przełącz, aby zaakceptować lub odrzucić wszystkie", - "cookies.consent.app.disable-all.title":"Akceptowacja lub odrzucenie wszystkich", - "cookies.consent.app.title.google-recaptcha":"Google reCaptcha", - "cookies.consent.content-modal.service":"usługa", - "cookies.consent.content-modal.services":"usługi", - "cookies.consent.content-notice.description.no-privacy":"Zbieramy i przetwarzamy Twoje dane w celu: autentykacji, ustawień preferencji i zgód oraz do celów statystycznych.", - "cookies.consent.content-notice.title":"Zgoda na ciasteczka", - "cookies.consent.ok":"Zgadzam się", - "cookies.consent.purpose.registration-password-recovery":"Rejestracja i odzyskiwanie hasła", - "cookies.consent.save":"Zapisz", - "curation-task.task.citationpage.label":"Generuj stronę z cytowaniem", - "dso-selector.import-batch.dspaceobject.head":"Import masowy z", - "orgunit.listelement.no-title":"Brak tytyłu", - "process.bulk.delete.error.body":"Proces z ID {{processId}} nie może być usunięty. Pozostałe procesy zostaną usunięte.", - "process.bulk.delete.error.head":"Błąd podczas usuwania procesu", - "process.bulk.delete.success":"{{count}} proces/y został/y usunięte", - "process.overview.delete":"Usuń {{count}} proces/y", - "process.overview.delete.body":"Czy na pewno usunąć {{count}} proces/y?", - "process.overview.delete.clear":"Wyczyść selekcję procesów do usunięcia", - "process.overview.delete.header":"Usuń procesy", - "process.overview.delete.processing":"{{count}} procesów zostanie usuniętych. Poczekaj, gdy usuwanie się zakończy. Może to zająć chwilę.", - "process.overview.table.actions":"Akcje", - "profile.security.form.label.current-password":"Aktualne hasło", - "profile.security.form.notifications.error.change-failed":"Wystąpił błąd podczas próby zmiany hasła. Sprawdź czy aktualne hasło jest prawidłowe.", - "profile.security.form.notifications.error.general":"Uzupełnij wymagane pola dla bezpieczeństwa na formularzu", - "register-page.registration.error.recaptcha":"Wystąpił błąd podczas próby autentykacji przez reCAPTCHA", - "register-page.registration.google-recaptcha.must-accept-cookies":"Aby się zarejestrować, musisz zaakceptować ciasteczka dla rejestracji i odzyskiwania hasła (Google reCaptcha).", - "register-page.registration.google-recaptcha.notification.message.error":"Wystąpił błąd podczas weryfikacji reCaptcha", - "register-page.registration.google-recaptcha.notification.message.expired":"Weryfikacja wygasła. Zweryfikuj ponownie.", - "register-page.registration.google-recaptcha.notification.title":"Google reCaptcha", - "register-page.registration.google-recaptcha.open-cookie-settings":"Otwórz ustawienia plików cookies", - "search.results.response.500":"Wystąpił błąd podczas wysyłania zapytania. Spróbuj ponownie później", - "submission.sections.license.granted-label":"Potwierdzam akceptację powyższej licencji", - "submission.sections.license.notgranted":"Najpierw musisz zaakceptować licencję", - "submission.sections.license.required":"Najpierw musisz zaakceptować licencję", - "confirmation-modal.export-batch.confirm":"Eksportuj", - "confirmation-modal.export-batch.cancel":"Anuluj", - "admin.access-control.bulk-access.breadcrumbs":"Zbiorcza edycja dostępu do osiągnięć", - "administrativeBulkAccess.search.results.head":"Wyniki wyszukiwania", - "admin.access-control.bulk-access":"Zbiorcza edycja dostępu do osiągnięć", - "admin.access-control.bulk-access.title":"Zbiorcza edycja dostępu do osiągnięć", - "admin.access-control.bulk-access-browse.header":"Krok 1: Wybierz pozycje", - "admin.access-control.bulk-access-browse.search.header":"Wyszukaj", - "admin.access-control.bulk-access-browse.selected.header":"Obecny wybór({{number}})", - "admin.access-control.bulk-access-settings.header":"Krok 2: Działanie do wykonania", - "admin.access-control.groups.form.tooltip.editGroupPage":"Na tej stronie można edytować opcje grupy i przypisane do niej osoby. W górnej sekcji można edytować nazwę i opis grupy, chyba że jest to grupa administratorów dla zbioru i kolekcji. W tym przypadku nazwa i opis grupy są generowane automatycznie i nie można ich edytować. W kolejnych sekcjach można edytować przypisanie użytkowników do grupy. Szczegóły na [stronie](https://wiki.lyrasis.org/display/DSDOC7x/Create+or+manage+a+user+group).", - "admin.access-control.groups.form.tooltip.editGroup.addEpeople":"Aby dodać lub usunąć użytkownika do/z tej grupy, kliknij przycisk 'Przeglądaj wszystko' lub użyj paska wyszukiwania poniżej, aby wyszukać użytkowników (użyj listy rozwijanej po lewej stronie paska wyszukiwania, aby wybrać, czy chcesz wyszukiwać według imienia i nazwiska, czy według adresu e-mail). Następnie kliknij ikonę plusa przy każdym użytkowniku, którego chcesz dodać do poniższej listy, lub ikonę kosza przy każdym użytkowniku, którego chcesz usunąć. Poniższa lista może mieć kilka stron: użyj strzałek pod listą, aby przejść do kolejnych stron. Gdy wszystkie zmiany zostaną wprowadzone, zapisz je, klikając przycisk 'Zapisz' w górnej sekcji.", - "admin.access-control.groups.form.tooltip.editGroup.addSubgroups":"Aby dodać lub usunąć podgrupę do/z tej grupy, kliknij przycisk 'Przeglądaj wszystko' lub użyj wyszukiwarki poniżej, aby wyszukać użytkowników. Następnie kliknij ikonę plusa przy każdym użytkowniku, którego chcesz dodać do poniższej listy, lub ikonę kosza przy każdym użytkowniku, którego chcesz usunąć. Poniższa lista może składać się z kilku stron: użyj przycisków pod listą, aby przejść do kolejnych stron. Gdy wszystkie zmiany zostaną wprowadzone, zapisz je, klikając przycisk 'Zapisz' w górnej sekcji.", - "admin.workflow.item.workspace":"Przestrzeń robocza", - "admin.workflow.item.policies":"Polityki", - "admin.workflow.item.supervision":"Recenzja", - "admin.batch-import.page.toggle.help":"It is possible to perform import either with file upload or via URL, use above toggle to set the input source", - "admin.metadata-import.page.error.addFileUrl":"Najpierw wpisz URL pliku!", - "admin.metadata-import.page.toggle.upload":"Prześlij", - "admin.metadata-import.page.toggle.url":"URL", - "admin.metadata-import.page.urlMsg":"Wpisz URL pliku ZIP, aby wykonać import masowy", - "advanced-workflow-action.rating.form.rating.label":"Ocena", - "advanced-workflow-action.rating.form.rating.error":"Ta pozycja musi zostać oceniona", - "advanced-workflow-action.rating.form.review.label":"Recenzja", - "advanced-workflow-action.rating.form.review.error":"Musisz wpisać tekst recenzji", - "advanced-workflow-action.rating.description":"Wybierz ocenę poniżej", - "advanced-workflow-action.rating.description-requiredDescription":"Wybierz ocenę poniżej i wpisz uzasadnienie", - "advanced-workflow-action.select-reviewer.description-single":"Wybierz recenzenta przed zdeponowaniem pozycji", - "advanced-workflow-action.select-reviewer.description-multiple":"Wybierz jednego lub więcej recenzentów przed zdeponowaniem pozycji", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.head":"Użytkownicy", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.head":"Dodaj użytkownika", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.button.see-all":"Przeglądaj wszystko", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.headMembers":"Aktualni użytkownicy", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.metadata":"Metadane", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.email":"Adres e-mail (dokładny)", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.button":"Wyszukaj", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.id":"ID", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.name":"Nazwa", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity":"Tożsamość", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email":"Adres e-mail", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.netid":"NetID", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit":"Usuń / Dodaj", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove":"Usuń użytkownika z nazwę \"{{name}}\"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember":"Dodano użytkownika o nazwie: \"{{name}}\"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.addMember":"Nie dodano użytkownika: \"{{name}}\"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.deleteMember":"Usunięto użytkownika: \"{{name}}\"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.deleteMember":"Nie usunięto użytkownika: \"{{name}}\"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add":"Dodano użytkownika \"{{name}}\"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup":"Brak aktywnej grupy, najpierw wpisz nazwę.", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-members-yet":"W tej grupie nie ma użytkowników, wyszukaj ich i dodaj.", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-items":"Nie znaleziono żadnych użytkowników", - "advanced-workflow-action.select-reviewer.no-reviewer-selected.error":"Recenzent nie jest wybrany.", - "bitstream.edit.notifications.error.primaryBitstream.title":"Wystąpił błąd podczas zapisu pliku.", - "browse.comcol.by.srsc":"Wg słów kluczowych", - "browse.metadata.srsc.breadcrumbs":"Przeglądaj wg słów kluczowych", - "browse.startsWith.input":"Filtr", - "browse.taxonomy.button":"Przeglądaj", - "search.browse.item-back":"Powrót do wyników wyszukiwania", - "claimed-approved-search-result-list-element.title":"Zaakceptowano", - "claimed-declined-search-result-list-element.title":"Odrzucono i przesłano do deponującego", - "claimed-declined-task-search-result-list-element.title":"Odrzucono i przesłano do recenzenta", - "collection.edit.tabs.access-control.head":"Dostępy", - "collection.edit.tabs.access-control.title":"Edycja kolekcji - dostępy", - "collection.listelement.badge":"Kolekcja", - "community.edit.tabs.access-control.head":"Dostępy", - "community.edit.tabs.access-control.title":"Edycja zbioru - dostępy", - "comcol-role.edit.scorereviewers.name":"Ocena recenzenta", - "comcol-role.edit.scorereviewers.description":"Recenzenci mogą oceniać zdeponowane pozycje, co określi, czy pozycja zostanie przyjęta lub odrzucona.", - "curation-task.task.register-doi.label":"Rejestracja DOI", - "dso.name.unnamed":"Bez nazwy", - "dso-selector.create.community.or-divider":"lub", - "dso-selector.set-scope.community.or-divider":"lub", - "dso-selector.results-could-not-be-retrieved":"Wystąpił błąd, proszę odświeżyć stronę", - "supervision-group-selector.header":"Wybór grupy recenzenckiej", - "supervision-group-selector.select.type-of-order.label":"Wybierz typ funkcji", - "supervision-group-selector.select.type-of-order.option.none":"BRAK", - "supervision-group-selector.select.type-of-order.option.editor":"REDAKTOR", - "supervision-group-selector.select.type-of-order.option.observer":"OBSERWATOR", - "supervision-group-selector.select.group.label":"Wybierz grupę", - "supervision-group-selector.button.cancel":"Anuluj", - "supervision-group-selector.button.save":"Zapisz", - "supervision-group-selector.select.type-of-order.error":"Wybierz typ funkcji", - "supervision-group-selector.select.group.error":"Wybierz grupę", - "supervision-group-selector.notification.create.success.title":"Grupa recenzencka został dodana dla grupy {{ name }}", - "supervision-group-selector.notification.create.failure.title":"Błąd", - "supervision-group-selector.notification.create.already-existing":"Funkcja recenzenta już jest przypisana do tej grupy", - "confirmation-modal.delete-subscription.header":"Usuń subksrypcje", - "confirmation-modal.delete-subscription.info":"Czy na pewno chcesz usunąć subskrypcję: \"{{ dsoName }}\"", - "confirmation-modal.delete-subscription.cancel":"Anuluj", - "confirmation-modal.delete-subscription.confirm":"Usuń", - "error.validation.metadata.name.invalid-pattern":"To pole nie może zawierać kropek, przecinków i spacji. Zamiast tego This field cannot contain dots, commas or spaces. Zamiast tego może użyć pól z notacji SNEQ", - "error.validation.metadata.name.max-length":"To pole nie może zawierać więcej niż 32 znaki", - "error.validation.metadata.namespace.max-length":"To pole nie może zawierać więcej niż 256 znaków", - "error.validation.metadata.element.invalid-pattern":"To pole nie może zawierać kropek, przecinków i spacji. Zamiast tego This field cannot contain dots, commas or spaces. Zamiast tego może użyć pól z notacji SNEQ", - "error.validation.metadata.element.max-length":"To pole nie może zawierać więcej niż 64 znaki", - "error.validation.metadata.qualifier.invalid-pattern":"To pole nie może zawierać kropek, przecinków i spacji", - "error.validation.metadata.qualifier.max-length":"To pole nie może zawierać więcej niż 64 znaki", - "forgot-email.form.email.error.not-email-form":"Wpisz prawidłowy adres e-mail", - "form.other-information.email":"Adres e-mail", - "form.other-information.first-name":"Imię", - "form.other-information.insolr":"Solr Index", - "form.other-information.institution":"Instytucja", - "form.other-information.last-name":"Nazwisko", - "form.other-information.orcid":"ORCID", - "form.create":"Utwórz", - "info.end-user-agreement.hosting-country":"Stany Zjednoczone", - "item.edit.identifiers.doi.status.UNKNOWN":"Nieznane", - "item.edit.identifiers.doi.status.TO_BE_REGISTERED":"W kolejce do rejestracji", - "item.edit.identifiers.doi.status.TO_BE_RESERVED":"W kolejce do rezerwacji", - "item.edit.identifiers.doi.status.IS_REGISTERED":"Zarejestrowane", - "item.edit.identifiers.doi.status.IS_RESERVED":"Zarezerwowane", - "item.edit.identifiers.doi.status.UPDATE_RESERVED":"Zarezerwowane (aktualizacja w kolejce)", - "item.edit.identifiers.doi.status.UPDATE_REGISTERED":"Zarejestrowane (aktualizacja w kolejce)", - "item.edit.identifiers.doi.status.UPDATE_BEFORE_REGISTRATION":"W kolejce do aktualizacji i rejestracji", - "item.edit.identifiers.doi.status.TO_BE_DELETED":"Zakolejkowane do usunięcia", - "item.edit.identifiers.doi.status.DELETED":"Usunięte", - "item.edit.identifiers.doi.status.PENDING":"Oczekujące (niezarejestrowane)", - "item.edit.identifiers.doi.status.MINTED":"Rezerwowanie nazwy (niezarejestrowane)", - "item.edit.tabs.status.buttons.register-doi.label":"Zarejestruj nowe lub oczekujące DOI", - "item.edit.tabs.status.buttons.register-doi.button":"Rejestruj DOI...", - "item.edit.register-doi.header":"Zarejestruj nowe lub oczekujące DOI", - "item.edit.register-doi.description":"Zweryfikuj poniższe identyfikatory i metadane pozycji i rozpocznij rejestrację DOI lub anuluj", - "item.edit.register-doi.confirm":"Zatwierdź", - "item.edit.register-doi.cancel":"Anuluj", - "item.edit.register-doi.success":"DOI jest w kolejce do rejestracji.", - "item.edit.register-doi.error":"Wystąpił błąd poczas rejestracji DOI", - "item.edit.register-doi.to-update":"To DOI zostało zarezerwowane i będzie znajdować się w kolejce do rejestracji", - "item.edit.metadata.edit.buttons.confirm":"Zatwierdź", - "item.edit.metadata.edit.buttons.drag":"Przeciągnij, aby zmienić kolejność", - "item.edit.metadata.edit.buttons.virtual":"To pole przechowuje wirutalne wartości metadanych, np. wartość pobraną z encji, z którą jest połączona ta pozycja. Dodaj lub usuń relację w zakładce 'Relacje' ", - "item.edit.metadata.metadatafield.error":"Wystąpił błąd podczas walidcji pól metadanych", - "item.edit.metadata.reset-order-button":"Cofnij zamianę kolejności", - "item.edit.curate.title":"Zarządzaj pozycją: {{item}}", - "item.edit.tabs.access-control.head":"Dostęp", - "item.edit.tabs.access-control.title":"Edycja pozycji - dostęp", - "workflow-item.search.result.delete-supervision.modal.header":"Usuń zadanie dla recenzenta", - "workflow-item.search.result.delete-supervision.modal.info":"Czy na pewno usunąć zadanie dla recenzenta", - "workflow-item.search.result.delete-supervision.modal.cancel":"Anuluj", - "workflow-item.search.result.delete-supervision.modal.confirm":"Usuń", - "workflow-item.search.result.notification.deleted.success":"Usunięto zadanie dla recenzenta \"{{name}}\"", - "workflow-item.search.result.notification.deleted.failure":"Nie usunięto zadania dla recenzenta \"{{name}}\"", - "workflow-item.search.result.list.element.supervised-by":"Recenzja:", - "workflow-item.search.result.list.element.supervised.remove-tooltip":"Usuń grupę recenzencką", - "item.preview.dc.subject":"Słowo kluczowe:", - "item.preview.dc.publisher":"Wydawca:", - "itemtemplate.edit.metadata.add-button":"Dodaj", - "itemtemplate.edit.metadata.discard-button":"Cofnij", - "itemtemplate.edit.metadata.edit.buttons.confirm":"Zatwierdź", - "itemtemplate.edit.metadata.edit.buttons.drag":"Przeciągnij, aby zmienić kolejność", - "itemtemplate.edit.metadata.edit.buttons.edit":"Edytuj", - "itemtemplate.edit.metadata.edit.buttons.remove":"Usuń", - "itemtemplate.edit.metadata.edit.buttons.undo":"Cofnij zmiany", - "itemtemplate.edit.metadata.edit.buttons.unedit":"Nie edytuj", - "itemtemplate.edit.metadata.empty":"To pozycja nie zawiera żadnych metadanych. Wybierz Dodaj, aby je wprowadzić.", - "itemtemplate.edit.metadata.headers.edit":"Edytuj", - "itemtemplate.edit.metadata.headers.field":"Pole", - "itemtemplate.edit.metadata.headers.language":"Język", - "itemtemplate.edit.metadata.headers.value":"Wartość", - "itemtemplate.edit.metadata.metadatafield.error":"Wystąpił błąd podczas walidowania pola metadanych", - "itemtemplate.edit.metadata.metadatafield.invalid":"Wybierz odpowiednie pole metadanych", - "itemtemplate.edit.metadata.notifications.discarded.content":"Twoje zmiany nie zostały zachowane. Aby spróbować wprowadzić je ponownie wybierz Cofnij", - "itemtemplate.edit.metadata.notifications.discarded.title":"Zmiany nie zostały zachowane", - "itemtemplate.edit.metadata.notifications.error.title":"Wystąpił błąd", - "itemtemplate.edit.metadata.notifications.invalid.content":"Twoje zmiany nie zostały zapisane. Upewnij się, że wszystkie pola zostały wypełnione prawidłowo.", - "itemtemplate.edit.metadata.notifications.invalid.title":"Nieprawidłowe metadan", - "itemtemplate.edit.metadata.notifications.outdated.content":"Wzór dla pozycji, na którą w tym momencie pracujesz, został zmodyfikowany przez innego użytkownika. Twoje zmiany zostały odrzucone, aby uniknąć konfliktów pomiędzy wersjami.", - "itemtemplate.edit.metadata.notifications.outdated.title":"Zmiany zostały odrzucone", - "itemtemplate.edit.metadata.notifications.saved.content":"Zmiany w metadanych wzoru pozycji zostały zapisane.", - "itemtemplate.edit.metadata.notifications.saved.title":"Metadane zostały zapisane", - "itemtemplate.edit.metadata.reinstate-button":"Cofnij", - "itemtemplate.edit.metadata.reset-order-button":"Cofnij zmianę kolejności", - "itemtemplate.edit.metadata.save-button":"Zapisz", - "menu.section.access_control_bulk":"Zbiorowe zarządzanie dostępem", - "menu.section.browse_global_by_srsc":"Wg słów kluczowych", - "mydspace.show.supervisedWorkspace":"Pozycje recenzowane", - "mydspace.status.mydspaceArchived":"Opublikowano", - "mydspace.status.mydspaceValidation":"Walidacja", - "mydspace.status.mydspaceWaitingController":"Oczekiwanie na redakctora", - "mydspace.status.mydspaceWorkflow":"Redakcja", - "mydspace.status.mydspaceWorkspace":"Przestrzeń robocza", - "nav.context-help-toggle":"Przełącz pomoc kontekstową", - "nav.search.button":"Wpisz wyszukiwaną frazę", - "nav.subscriptions":"Subksrypcje", - "process.new.notification.error.max-upload.content":"Plik jest większy niż maksymalny dozwolony rozmiar pliku", - "register-page.registration.email.error.not-email-form":"Wprowadź poprawny adres e-mail", - "register-page.registration.email.error.not-valid-domain":"Użyj adresu e-mail z domeny: {{ domains }}", - "register-page.registration.error.maildomain":"Tego adresu e-mail nie możesz zarejestrować, ponieważ nie ma go na liście domen. Dozwolone domeny to: {{ domains }}", - "register-page.registration.info.maildomain":"Konta mogą być założone dla adresów e-mail z domeną", - "repository.title":"Repozytorium DSpace", - "search.filters.applied.f.supervisedBy":"Recenzent", - "search.filters.filter.show-tree":"Przeglądaj {{ name }} strukturę recenzentów", - "search.filters.filter.supervisedBy.head":"Recenzent", - "search.filters.filter.supervisedBy.placeholder":"Recenzent", - "search.filters.filter.supervisedBy.label":"Wyszukaj recenzenta", - "statistics.table.no-name":"(nazwa obiektu nie może zostać załadowana)", - "submission.import-external.source.datacite":"DataCite", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor":"Publikacje autora", - "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor":"Publikacje", - "submission.sections.identifiers.info":"Te identyfikatory zostaną utworzone dla pozycji:", - "submission.sections.identifiers.no_handle":"Do tej pozycji nie zostały przypisane żadne Handle", - "submission.sections.identifiers.no_doi":"Do tej pozycji nie zostały przypisane żadne DOI", - "submission.sections.identifiers.handle_label":"Handle: ", - "submission.sections.identifiers.doi_label":"DOI: ", - "submission.sections.identifiers.otherIdentifiers_label":"Inne identyfikatory: ", - "submission.sections.submit.progressbar.identifiers":"Identyfikatory", - "submission.workflow.generic.submit_select_reviewer":"Wybierz recenzenta", - "submission.workflow.generic.submit_select_reviewer-help":"", - "submission.workflow.generic.submit_score":"Wynik", - "submission.workflow.generic.submit_score-help":"", - "submission.workflow.tasks.claimed.decline":"Odrzuć", - "submission.workflow.tasks.claimed.decline_help":"", - "submitter.empty":"n.d.", - "subscriptions.title":"Subskrypcje", - "subscriptions.item":"Subskrypcje pozycji", - "subscriptions.collection":"Subskrypcje kolekcji", - "subscriptions.community":"Subskrypcje zbiorów", - "subscriptions.subscription_type":"Typ subksrypcji", - "subscriptions.frequency":"Częstotliwość subskrypcji", - "subscriptions.frequency.D":"Codziennie", - "subscriptions.frequency.M":"Co miesiąc", - "subscriptions.frequency.W":"Co tydzień", - "subscriptions.tooltip":"Subskrybuj", - "subscriptions.modal.title":"Subksrypcje", - "subscriptions.modal.type-frequency":"Rodzaj i częstotliwość subksrypcji", - "subscriptions.modal.close":"Zamknij", - "subscriptions.modal.delete-info":"Aby usunąć tę subksrypcję przejdź do strony 'Subskrypcje', która znajduje się w profilu użytkownika", - "subscriptions.modal.new-subscription-form.type.content":"Zawartość", - "subscriptions.modal.new-subscription-form.frequency.D":"Codziennie", - "subscriptions.modal.new-subscription-form.frequency.W":"Co tydzień", - "subscriptions.modal.new-subscription-form.frequency.M":"Co miesiąc", - "subscriptions.modal.new-subscription-form.submit":"Zapisz", - "subscriptions.modal.new-subscription-form.processing":"Ładowanie...", - "subscriptions.modal.create.success":"Zasubskrybowano {{ type }}", - "subscriptions.modal.delete.success":"Subskrypcja została anulowana", - "subscriptions.modal.update.success":"Twoja subskrypcja {{ type }} została zaktualizowana", - "subscriptions.modal.create.error":"Wystąpił bład podczas tworzenia subskrypcji", - "subscriptions.modal.delete.error":"Wystąpił bład podczas usuwania subskrypcji", - "subscriptions.modal.update.error":"Wystąpił bład podczas aktualizacji subskrypcji", - "subscriptions.table.dso":"Słowo kluczowe", - "subscriptions.table.subscription_type":"Typ subskrypcji", - "subscriptions.table.subscription_frequency":"Częstotliwość subskrypcji", - "subscriptions.table.action":"Akcja", - "subscriptions.table.edit":"Edytuj", - "subscriptions.table.delete":"Usuń", - "subscriptions.table.not-available":"Niedostępne", - "subscriptions.table.not-available-message":"Ta pozycja została usunięta lun nie masz do niej dostępu, aby ją wyswietlić", - "subscriptions.table.empty.message":"Ta pozycja nie ma w tym momencie żadnych subksrypcji. Aby zasubkrybować i otrzymywać aktualizacje o tym zbiorze lub kolekcji, wybierz przycisk subskrypcji na stronie pozycji.", - "vocabulary-treeview.info":"Wybierz słowo kluczowe, aby dodać je do filtra", - "supervisedWorkspace.search.results.head":"Pozycje recenzowane", - "supervision.search.results.head":"Status zadań: Szkic i redakcja", - "workspace-item.delete.breadcrumbs":"Usunięto wersję roboczą", - "workspace-item.delete.header":"Usuń wersję roboczą", - "workspace-item.delete.button.confirm":"Usuń", - "workspace-item.delete.button.cancel":"Anuluj", - "workspace-item.delete.notification.success.title":"Usunięto", - "workspace-item.delete.title":"Wersja robocza została usunieta", - "workspace-item.delete.notification.error.title":"Coś poszło nie tak", - "workspace-item.delete.notification.error.content":"Wersja robocza nie może zostać usunieta", - "workflow-item.advanced.title":"Zaawansowane workflow", - "workflow-item.selectrevieweraction.notification.success.title":"Wybrany recenzent", - "workflow-item.selectrevieweraction.notification.success.content":"Recenzent został przypisany", - "workflow-item.selectrevieweraction.notification.error.title":"Coś poszło nie tak", - "workflow-item.selectrevieweraction.notification.error.content":"Nie udało się wybrać recenzenta dla pozycji", - "workflow-item.selectrevieweraction.title":"Wybierz recenzenta", - "workflow-item.selectrevieweraction.header":"Wybierz recenzenta", - "workflow-item.selectrevieweraction.button.cancel":"Anuluj", - "workflow-item.selectrevieweraction.button.confirm":"Zatwierdź", - "workflow-item.scorereviewaction.notification.success.title":"Ocena recenzji", - "workflow-item.scorereviewaction.notification.success.content":"Ocena tej pozycji została zapisana", - "workflow-item.scorereviewaction.notification.error.title":"Coś poszło nie tak", - "workflow-item.scorereviewaction.notification.error.content":"Nie można ocenić tej pozycji", - "workflow-item.scorereviewaction.title":"Oceń pozycję", - "workflow-item.scorereviewaction.header":"Oceń pozycję", - "workflow-item.scorereviewaction.button.cancel":"Anuluj", - "workflow-item.scorereviewaction.button.confirm":"Potwierdź", - "listable-notification-object.default-message":"Ta pozycja nie może być odzyskana", - "system-wide-alert-banner.retrieval.error":"Coś poszło nie tak podczas odzyskiwania alertu systemowego", - "system-wide-alert-banner.countdown.prefix":"W", - "system-wide-alert-banner.countdown.days":"{{days}} dni,", - "system-wide-alert-banner.countdown.hours":"{{hours}} godziny", - "system-wide-alert-banner.countdown.minutes":"{{minutes}} minut:", - "menu.section.system-wide-alert":"Alert systemowy", - "system-wide-alert.form.header":"Alert systemowy", - "system-wide-alert-form.retrieval.error":"Coś poszło nie tak podczas odzyskiwania alertu systemowego", - "system-wide-alert.form.cancel":"Anuluj", - "system-wide-alert.form.save":"Zapisz", - "system-wide-alert.form.label.active":"AKTYWNE", - "system-wide-alert.form.label.inactive":"NIEAKTYWNE", - "system-wide-alert.form.error.message":"Alert systemowy musi zawierać wiadomość", - "system-wide-alert.form.label.message":"Alert systemowy", - "system-wide-alert.form.label.countdownTo.enable":"Wprowadź licznik czasowy", - "system-wide-alert.form.label.countdownTo.hint":"Wskazówka: Wpisz wartość licznika czasu. Kiedy licznik jest włączony, alert systemowy zostanie wyświetlony o wybranym czasie. Kiedy odliczanie zostanie zakończone, alert systemowy zostanie wyłączony. Serwer NIE zostanie zatrzymany automatycznie.", - "system-wide-alert.form.label.preview":"Podgląd alertu systemowego", - "system-wide-alert.form.update.success":"Alert systemowy został zaktualizowany", - "system-wide-alert.form.update.error":"Coś poszło nie tak podczas aktualizacji alertu systemowego", - "system-wide-alert.form.create.success":"Alert systemowy został utworzony", - "system-wide-alert.form.create.error":"Coś poszło nie tak podczas tworzenia alertu systemowego", - "admin.system-wide-alert.breadcrumbs":"Alerty systemowe", - "admin.system-wide-alert.title":"Alerty systemowe", - "item-access-control-title":"Ta strona pozwala na zmianę dostępów metadanych pozycji i plików do nich dołączonych.", - "collection-access-control-title":"Ta strona pozwala na zmianę warunków dostępu dla wszystkich pozycji w tej kolekcji. Zmiany mogą być wykonywane zarówno na metadanych pozycji jak i plikach do nich dołączonych.", - "community-access-control-title":"Ta strona pozwala na zmianę warunków dostępu dla wszystkich pozycji w każdej kolekcji w tym zbiorze. Zmiany mogą być wykonywane zarówno na metadanych pozycji jak i plikach do nich dołączonych.", - "access-control-item-header-toggle":"Metadane pozycji", - "access-control-bitstream-header-toggle":"Pliki", - "access-control-mode":"Tryb", - "access-control-access-conditions":"Warunki dostępu", - "access-control-no-access-conditions-warning-message":"W tym momencie żadne warunki dostępu nie zostały określone. Jeśli zadanie zostanie rozpoczęte, obecne warunki dostępu zostaną zastąpione domyślnymi warunkami dostępu z nadrzędnej kolekcji.", - "access-control-replace-all":"Zastąp warunki dostępu", - "access-control-add-to-existing":"Dodaj do już istniejących", - "access-control-limit-to-specific":"Ogranicz zmiany do wybranych plików", - "access-control-process-all-bitstreams":"Zaktualizuj wszystkie pliki dla tej pozycji", - "access-control-bitstreams-selected":"wybrane pliki", - "access-control-cancel":"Anuluj", - "access-control-execute":"Wykonaj", - "access-control-add-more":"Dodaj więcej", - "access-control-select-bitstreams-modal.title":"Wybierz pliki", - "access-control-select-bitstreams-modal.no-items":"Brak pozycji do wyświetlenia.", - "access-control-select-bitstreams-modal.close":"Zamknij", - "access-control-option-label":"Typ warunków dostępu", - "access-control-option-note":"Wybierz warunki dostępu, które chcesz przypisać do zaznaczonych pozycji.", - "access-control-option-start-date":"Dostęp od", - "access-control-option-start-date-note":"Wybierz datę, kiedy wybrane warunki dostępu mają obowiązywać", - "access-control-option-end-date":"Dostęp do", - "access-control-option-end-date-note":"Wybierz datę, kiedy wybrane warunki dostępu mają obowiązywać" + "401.help": "Nie masz uprawnień do dostępu do tej strony. Możesz użyć przycisku poniżej, aby powrócić do strony głównej.", + "401.link.home-page": "Zabierz mnie na stronę główną", + "401.unauthorized": "nieautoryzowany", + "403.help": "Nie masz uprawnień do dostępu do tej strony. Możesz użyć przycisku poniżej, aby wrócić do strony głównej.", + "403.link.home-page": "Zabierz mnie na stronę główną", + "403.forbidden": "zabroniony", + "404.help": "Nie możemy znaleźć strony, której szukasz. Strona mogła zostać przeniesiona lub usunięta. Możesz użyć przycisku poniżej, aby powrócić do strony głównej. ", + "404.link.home-page": "Zabierz mnie na stronę główną", + "404.page-not-found": "strona nie została znaleziona", + "admin.curation-tasks.breadcrumbs": "Systemowe zadania administracyjne", + "admin.curation-tasks.title": "Systemowe zadania administracyjne", + "admin.curation-tasks.header": "Systemowe zadania administracyjne", + "admin.registries.bitstream-formats.breadcrumbs": "Rejestr formatów", + "admin.registries.bitstream-formats.create.breadcrumbs": "Format strumienia bitów", + "admin.registries.bitstream-formats.create.failure.content": "Wystąpił błąd podczas tworzenia nowego formatu strumienia bitów.", + "admin.registries.bitstream-formats.create.failure.head": "Nie udało się", + "admin.registries.bitstream-formats.create.head": "Utwórz nowy format", + "admin.registries.bitstream-formats.create.new": "Dodaj nowy format", + "admin.registries.bitstream-formats.create.success.content": "Nowy format strumienia bitów został pomyślnie utworzony.", + "admin.registries.bitstream-formats.create.success.head": "Udało się", + "admin.registries.bitstream-formats.delete.failure.amount": "Nie udało się usunąć {{ amount }} formatu(ów)", + "admin.registries.bitstream-formats.delete.failure.head": "Nie udało się", + "admin.registries.bitstream-formats.delete.success.amount": "Udało się usunąć {{ amount }} formatu(ów)", + "admin.registries.bitstream-formats.delete.success.head": "Udało się", + "admin.registries.bitstream-formats.description": "Na liście formatów wyświetlono informacje o obsługiwanych formatach i czy są one wspierane przez system.", + "admin.registries.bitstream-formats.edit.breadcrumbs": "Format strumienia bitów", + "admin.registries.bitstream-formats.edit.description.hint": "", + "admin.registries.bitstream-formats.edit.description.label": "Opis", + "admin.registries.bitstream-formats.edit.extensions.hint": "Rozszerzenia to rozszerzenia plików, które są używane do automatycznej identyfikacji formatu przesyłanych plików. Możesz wprowadzić kilka rozszerzeń dla każdego formatu.", + "admin.registries.bitstream-formats.edit.extensions.label": "Rozszerzenia plików", + "admin.registries.bitstream-formats.edit.extensions.placeholder": "Wprowadź rozszerzenie pliku bez kropki", + "admin.registries.bitstream-formats.edit.failure.content": "Wystąpił błąd podczas edycji formatu pliku.", + "admin.registries.bitstream-formats.edit.failure.head": "Nie udało się", + "admin.registries.bitstream-formats.edit.head": "Format plików: {{ format }}", + "admin.registries.bitstream-formats.edit.internal.hint": "Formaty oznaczone jako wewnętrzne są ukryte przed użytkownikiem i wykorzystywane do celów administracyjnych.", + "admin.registries.bitstream-formats.edit.internal.label": "Wewnętrzny", + "admin.registries.bitstream-formats.edit.mimetype.hint": "Typ MIME powiązany z tym formatem, nie musi być unikalny.", + "admin.registries.bitstream-formats.edit.mimetype.label": "Typ MIME", + "admin.registries.bitstream-formats.edit.shortDescription.hint": "Unikalna nazwa dla tego formatu, (np. Microsoft Word XP lub Microsoft Word 2000)", + "admin.registries.bitstream-formats.edit.shortDescription.label": "Nazwa", + "admin.registries.bitstream-formats.edit.success.content": "Format strumienia bitów został pomyślnie edytowany.", + "admin.registries.bitstream-formats.edit.success.head": "Udało się", + "admin.registries.bitstream-formats.edit.supportLevel.hint": "Poziom wsparcia, jaki Twoja instytucja deklaruje dla tego formatu.", + "admin.registries.bitstream-formats.edit.supportLevel.label": "Obsługiwany format", + "admin.registries.bitstream-formats.head": "Rejestr formatów", + "admin.registries.bitstream-formats.no-items": "Brak formatów plików do wyświetlenia.", + "admin.registries.bitstream-formats.table.delete": "Usuń zaznaczone", + "admin.registries.bitstream-formats.table.deselect-all": "Odznacz wszystkie", + "admin.registries.bitstream-formats.table.internal": "wewnętrzne", + "admin.registries.bitstream-formats.table.mimetype": "Typ MIME", + "admin.registries.bitstream-formats.table.name": "Nazwa", + "admin.registries.bitstream-formats.table.return": "Powrót", + "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Znane", + "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Wspierane", + "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Nieznane", + "admin.registries.bitstream-formats.table.supportLevel.head": "Obsługiwany format", + "admin.registries.bitstream-formats.title": "Rejestr formatów plików", + "admin.registries.metadata.breadcrumbs": "Rejestr metadanych", + "admin.registries.metadata.description": "W rejestrze metadanych przechowywana jest lista wszystkich pól metadanych dostępnych w repozytorium. Przechowywane pola są przechowywane w kilku rejestrach. DSpace wymaga kwalifikowanego rejestru metadanych Dublin Core.", + "admin.registries.metadata.form.create": "Utwórz schemat metadanych", + "admin.registries.metadata.form.edit": "Edytuj schemat metadanych", + "admin.registries.metadata.form.name": "Nazwa", + "admin.registries.metadata.form.namespace": "Nazwa schematu", + "admin.registries.metadata.head": "Rejestr metadanych", + "admin.registries.metadata.schemas.no-items": "Brak rejestrów metadanych do pokazania.", + "admin.registries.metadata.schemas.table.delete": "Usuń zaznaczone", + "admin.registries.metadata.schemas.table.id": "ID", + "admin.registries.metadata.schemas.table.name": "Nazwa", + "admin.registries.metadata.schemas.table.namespace": "Nazwa schematu", + "admin.registries.metadata.title": "Rejestr metadanych", + "admin.registries.schema.breadcrumbs": "Schemat metadanych", + "admin.registries.schema.description": "Ten schemat metadanych jest stworzony na podstawie \"{{namespace}}\".", + "admin.registries.schema.fields.head": "Pola schematu metadanych", + "admin.registries.schema.fields.no-items": "Brak pól metadanych do pokazania.", + "admin.registries.schema.fields.table.delete": "Usuń zaznaczone", + "admin.registries.schema.fields.table.field": "Pole", + "admin.registries.schema.fields.table.scopenote": "Uwagi", + "admin.registries.schema.form.create": "Stwórz pole metadanych", + "admin.registries.schema.form.edit": "Edytuj pole metadanych", + "admin.registries.schema.form.element": "Element", + "admin.registries.schema.form.qualifier": "Kwalifikator", + "admin.registries.schema.form.scopenote": "Uwagi", + "admin.registries.schema.head": "Schemat metadanych", + "admin.registries.schema.notification.created": "Udało się utworzyć schemat metdanych \"{{prefix}}\"", + "admin.registries.schema.notification.deleted.failure": "Nie udało się usunąć {{amount}} schematów metadanych", + "admin.registries.schema.notification.deleted.success": "Udało się usunąć {{amount}} schematów metadanych", + "admin.registries.schema.notification.edited": "Udało się edytować schemat metadanych \"{{prefix}}\"", + "admin.registries.schema.notification.failure": "Błąd", + "admin.registries.schema.notification.field.created": "Udało się utworzyć pole metadanych \"{{field}}\"", + "admin.registries.schema.notification.field.deleted.failure": "Nie udało się usunąć {{amount}} pól metadanych", + "admin.registries.schema.notification.field.deleted.success": "Udało się usunąć {{amount}} pól metadanych", + "admin.registries.schema.notification.field.edited": "SUdało się edytować pole metadanych \"{{field}}\"", + "admin.registries.schema.notification.success": "Udało się", + "admin.registries.schema.return": "Powrót", + "admin.registries.schema.title": "Rejestr schematów metadanych", + "admin.access-control.epeople.actions.delete": "Usuń użytkownika", + "admin.access-control.epeople.actions.impersonate": "Personifikuj użytkownika", + "admin.access-control.epeople.actions.reset": "Zresetuj hasło", + "admin.access-control.epeople.actions.stop-impersonating": "Przestań personifikować użytkownika", + "admin.access-control.epeople.breadcrumbs": "Użytkownicy", + "admin.access-control.epeople.title": "Użytkownicy", + "admin.access-control.epeople.head": "Użytkownicy", + "admin.access-control.epeople.search.head": "Wyszukaj", + "admin.access-control.epeople.button.see-all": "Przeglądaj wszystko", + "admin.access-control.epeople.search.scope.metadata": "Metadane", + "admin.access-control.epeople.search.scope.email": "E-mail", + "admin.access-control.epeople.search.button": "Wyszukaj", + "admin.access-control.epeople.search.placeholder": "Wyszukaj użytkownika...", + "admin.access-control.epeople.button.add": "Dodaj użytkownika", + "admin.access-control.epeople.table.id": "ID", + "admin.access-control.epeople.table.name": "Nazwa", + "admin.access-control.epeople.table.email": "E-mail", + "admin.access-control.epeople.table.edit": "Edytuj", + "admin.access-control.epeople.table.edit.buttons.edit": "Edytuj \"{{name}}\"", + "admin.access-control.epeople.table.edit.buttons.edit-disabled": "Brak uprawnień do edycji wybranej grupy", + "admin.access-control.epeople.table.edit.buttons.remove": "Usuń \"{{name}}\"", + "admin.access-control.epeople.no-items": "Brak użytkowników do wyświetlenia.", + "admin.access-control.epeople.form.create": "Utwórz użytkownika", + "admin.access-control.epeople.form.edit": "Edytuj użytkownika", + "admin.access-control.epeople.form.firstName": "Imię", + "admin.access-control.epeople.form.lastName": "Nazwisko", + "admin.access-control.epeople.form.email": "E-mail", + "admin.access-control.epeople.form.emailHint": "Adres e-mail musi być poprawny", + "admin.access-control.epeople.form.canLogIn": "Możliwość zalogowania", + "admin.access-control.epeople.form.requireCertificate": "Wymagany certyfikat", + "admin.access-control.epeople.form.return": "Powrót", + "admin.access-control.epeople.form.notification.created.success": "Udało się utworzyć użytkownika \"{{name}}\"", + "admin.access-control.epeople.form.notification.created.failure": "Nie udało się utworzyć użytkownika \"{{name}}\"", + "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Nie udało się utworzyć użytkownika \"{{name}}\", email \"{{email}}\" już w użyciu.", + "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Nie udało się utworzyć użytkownika \"{{name}}\", email \"{{email}}\" już w użyciu.", + "admin.access-control.epeople.form.notification.edited.success": "Udało się edytować użytkownika \"{{name}}\"", + "admin.access-control.epeople.form.notification.edited.failure": "Nie udało się edytować użytkownika \"{{name}}\"", + "admin.access-control.epeople.form.notification.deleted.success": "Udało się usunąć użytkownika \"{{name}}\"", + "admin.access-control.epeople.form.notification.deleted.failure": "Nie udało się usunąć użytkownika \"{{name}}\"", + "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Członek grup:", + "admin.access-control.epeople.form.table.id": "ID", + "admin.access-control.epeople.form.table.name": "Nazwa", + "admin.access-control.epeople.form.table.collectionOrCommunity": "Zbiór/kolekcja", + "admin.access-control.epeople.form.memberOfNoGroups": "Ten użytkownik nie jest członkiem żadnej grupy", + "admin.access-control.epeople.form.goToGroups": "Dodaj do grup", + "admin.access-control.epeople.notification.deleted.failure": "Nie udało się usunąć użytkownika: \"{{name}}\"", + "admin.access-control.epeople.notification.deleted.success": "Udało się usunąć użytkownika: \"{{name}}\"", + "admin.access-control.groups.title": "Grupy", + "admin.access-control.groups.breadcrumbs": "Grupy", + "admin.access-control.groups.singleGroup.breadcrumbs": "Edytuj grupę", + "admin.access-control.groups.title.singleGroup": "Edytuj grupę", + "admin.access-control.groups.title.addGroup": "Nowa grupa", + "admin.access-control.groups.addGroup.breadcrumbs": "Nowa grupa", + "admin.access-control.groups.head": "Grupy/role", + "admin.access-control.groups.button.add": "Dodaj grupę", + "admin.access-control.groups.search.head": "Szukaj grup", + "admin.access-control.groups.button.see-all": "Przeszukaj wszystko", + "admin.access-control.groups.search.button": "Wyszukaj", + "admin.access-control.groups.search.placeholder": "Wyszukaj grupy...", + "admin.access-control.groups.table.id": "ID", + "admin.access-control.groups.table.name": "Nazwa", + "admin.access-control.groups.table.collectionOrCommunity": "Zbiór/kolekcja", + "admin.access-control.groups.table.members": "Członkowie", + "admin.access-control.groups.table.edit": "Edytuj", + "admin.access-control.groups.table.edit.buttons.edit": "Edytuj \"{{name}}\"", + "admin.access-control.groups.no-items": "Nie znaleziono grup z podaną frazą lub podanym UUID", + "admin.access-control.groups.notification.deleted.success": "Udało się usunąć grupę \"{{name}}\"", + "admin.access-control.groups.notification.deleted.failure.title": "Nie udało się usunąć grupy \"{{name}}\"", + "admin.access-control.groups.notification.deleted.failure.content": "Powód: \"{{cause}}\"", + "admin.access-control.groups.form.alert.permanent": "Ta grupa jest stała, więc nie może być edytowana ani usunięta. Nadal możesz dodawać i usuwać członków grupy za pomocą tej strony.", + "admin.access-control.groups.form.alert.workflowGroup": "Ta grupa nie może być edytowana lub usunięta, ponieważ odnosi się do roli lub bierze udział w procesie \"{{name}}\" {{comcol}}. Możesz ją usunąć ze strony \"assign roles\" edycji {{comcol}}. Wciąż może dodawać i usuwać członków tej grupy, korzystając z tej strony.", + "admin.access-control.groups.form.head.create": "Utwórz grupę", + "admin.access-control.groups.form.head.edit": "Edytuj grupę", + "admin.access-control.groups.form.groupName": "Nazwa grupy", + "admin.access-control.groups.form.groupCommunity": "Zbiór lub kolekcja", + "admin.access-control.groups.form.groupDescription": "Opis", + "admin.access-control.groups.form.notification.created.success": "Udało się utworzyć grupę \"{{name}}\"", + "admin.access-control.groups.form.notification.created.failure": "Nie udało się utworzyć grupy \"{{name}}\"", + "admin.access-control.groups.form.notification.created.failure.groupNameInUse": "Nie udało się utworzyć grupy o nazwie: \"{{name}}\", upewnij się, że nazwa nie jest już używana.", + "admin.access-control.groups.form.notification.edited.failure": "Nie udało się edytować grupy \"{{name}}\"", + "admin.access-control.groups.form.notification.edited.failure.groupNameInUse": "Nazwa \"{{name}}\" już w użyciu!", + "admin.access-control.groups.form.notification.edited.success": "Udało się edytować grupę \"{{name}}\"", + "admin.access-control.groups.form.actions.delete": "Usuń grupę", + "admin.access-control.groups.form.delete-group.modal.header": "Usuń grupę \"{{ dsoName }}\"", + "admin.access-control.groups.form.delete-group.modal.info": "Czy na pewno chcesz usunąć grupę \"{{ dsoName }}\"", + "admin.access-control.groups.form.delete-group.modal.cancel": "Anuluj", + "admin.access-control.groups.form.delete-group.modal.confirm": "Usuń", + "admin.access-control.groups.form.notification.deleted.success": "Udało się usunąć grupę \"{{ name }}\"", + "admin.access-control.groups.form.notification.deleted.failure.title": "Nie udało się usunąć grupy \"{{ name }}\"", + "admin.access-control.groups.form.notification.deleted.failure.content": "Powód: \"{{ cause }}\"", + "admin.access-control.groups.form.members-list.head": "Użytkownik", + "admin.access-control.groups.form.members-list.search.head": "Dodaj użytkownika", + "admin.access-control.groups.form.members-list.button.see-all": "Pokaż wszystkich", + "admin.access-control.groups.form.members-list.headMembers": "Aktualni członkowie", + "admin.access-control.groups.form.members-list.search.scope.metadata": "Metadane", + "admin.access-control.groups.form.members-list.search.scope.email": "E-mail", + "admin.access-control.groups.form.members-list.search.button": "Wyszukaj", + "admin.access-control.groups.form.members-list.table.id": "ID", + "admin.access-control.groups.form.members-list.table.name": "Nazwa", + "admin.access-control.groups.form.members-list.table.identity": "Tożsamość", + "admin.access-control.groups.form.members-list.table.email": "E-mail", + "admin.access-control.groups.form.members-list.table.netid": "NetID", + "admin.access-control.groups.form.members-list.table.edit": "Usuń / Dodaj", + "admin.access-control.groups.form.members-list.table.edit.buttons.remove": "Usuń użytkownika o nazwie \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.success.addMember": "Udało się dodać użytkownika o nazwie: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.failure.addMember": "Nie udało się dodać użytkownika o nazwie: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Udało się usunąć użytkownika o nazwie: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Nie udało się usunąć użytkownika o nazwie: \"{{name}}\"", + "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Dodaj użytkownika o nazwie \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup": "Brak aktywnej grupy, najpierw wpisz nazwę grupy.", + "admin.access-control.groups.form.members-list.no-members-yet": "Brak użytkowników w grupie, wyszukaj ich i dodaj.", + "admin.access-control.groups.form.members-list.no-items": "Nie znaleziono użytkowników podczas wyszukiwania", + "admin.access-control.groups.form.subgroups-list.notification.failure": "Coś poszło nie tak: \"{{cause}}\"", + "admin.access-control.groups.form.subgroups-list.head": "Grupy", + "admin.access-control.groups.form.subgroups-list.search.head": "Dodaj podgrupę", + "admin.access-control.groups.form.subgroups-list.button.see-all": "Przeglądaj wszystkie", + "admin.access-control.groups.form.subgroups-list.headSubgroups": "Aktualne podgrupy", + "admin.access-control.groups.form.subgroups-list.search.button": "Wyszukaj", + "admin.access-control.groups.form.subgroups-list.table.id": "ID", + "admin.access-control.groups.form.subgroups-list.table.name": "Nazwa", + "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Zbiór/kolekcja", + "admin.access-control.groups.form.subgroups-list.table.edit": "Usuń / Dodaj", + "admin.access-control.groups.form.subgroups-list.table.edit.buttons.remove": "Usuń podgrupę o nazwie \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.table.edit.buttons.add": "Dodaj podgrupę o nazwie \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Aktualna grupa", + "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup": "Udało się dodać podgrupę: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure.addSubgroup": "Nie udało się dodać podgrupy: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Udało się usunąć podgrupę: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Nie udało się usunąć podgrupy: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "Brak aktywnej grupy, najpierw wpisz nazwę grupy.", + "admin.access-control.groups.form.subgroups-list.notification.failure.subgroupToAddIsActiveGroup": "Ta grupa jest już stworzona i nie może zostać dodana pononwie.", + "admin.access-control.groups.form.subgroups-list.no-items": "Nie znaleziono grup z tą nazwą lub UUID", + "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "Brak podgrup w grupie.", + "admin.access-control.groups.form.return": "Powrót", + "admin.search.breadcrumbs": "Wyszukiwanie administracyjne", + "admin.search.collection.edit": "Edytuj", + "admin.search.community.edit": "Edytuj", + "admin.search.item.delete": "Usuń", + "admin.search.item.edit": "Edytuj", + "admin.search.item.make-private": "Ukryj", + "admin.search.item.make-public": "Upublicznij", + "admin.search.item.move": "Przenieś", + "admin.search.item.reinstate": "Zmień instancję", + "admin.search.item.withdraw": "Wycofane", + "admin.search.title": "Wyszukiwanie administracyjne", + "administrativeView.search.results.head": "Wyszukiwanie administracyjne", + "admin.workflow.breadcrumbs": "Zarządzaj procesem", + "admin.workflow.title": "Zarządzaj procesem", + "admin.workflow.item.workflow": "Proces", + "admin.workflow.item.delete": "Usuń", + "admin.workflow.item.send-back": "Odeślij z powrotem", + "admin.metadata-import.breadcrumbs": "Importuj metadane", + "admin.metadata-import.title": "Importuj metadane", + "admin.metadata-import.page.header": "Importuj metadane", + "admin.metadata-import.page.help": "Tutaj możesz zaimportować pliki CSV, w których znajdują się metadane do operacji wsadowej. Zaimportuj je poprzez upuszczenie ich lub znajdź je na swoim komputerze", + "admin.metadata-import.page.dropMsg": "Upuść plik w formacie CSV", + "admin.metadata-import.page.dropMsgReplace": "Upuść, aby zastąpić metadane w formacie CSV do importu", + "admin.metadata-import.page.button.return": "Powrót", + "admin.metadata-import.page.button.proceed": "Zastosuj", + "admin.metadata-import.page.error.addFile": "Najpierw wybierz plik!", + "auth.errors.invalid-user": "Niewłaściwy adres e-mail lub hasło.", + "auth.messages.expired": "Twoja sesja wygasła. Zaloguj się ponownie.", + "auth.messages.token-refresh-failed": "Odświeżenie sesji nie powiodło się. Zaloguj się ponownie.", + "bitstream.download.page": "Pobieranie {{bitstream}}...", + "bitstream.download.page.back": "Powrót", + "bitstream.edit.authorizations.link": "Edytuj polityki plików", + "bitstream.edit.authorizations.title": "Edytuj polityki plików", + "bitstream.edit.return": "Powrót", + "bitstream.edit.bitstream": "Pliki: ", + "bitstream.edit.form.description.hint": "Opcjonalnie wprowadź krótki opis pliku, np.: \"Główna część artykułu\" lub \"Dane z eksperymentu\".", + "bitstream.edit.form.description.label": "Opis", + "bitstream.edit.form.embargo.hint": "Pierwszy dzień, od kiedy dostęp zostanie udzielony. Tej daty nie może być edytować w tym formularzu. Aby wybrać okres embarga czasowego, wybierz Status pozycji tab, kliknij Autoryzacje..., stwórz lub edytuj plik PRZEYCZTAJ zasady i wybierz określoną Datę początkową.", + "bitstream.edit.form.embargo.label": "Embargo do wybranej daty", + "bitstream.edit.form.fileName.hint": "Zmiana nazwy pliku dla strumienia bitów. Zauważ, że zmieni to wyświetlany adres URL strumienia bitów, ale stare linki nadal będą działać, o ile nie zmieni się identyfikator sekwencji.", + "bitstream.edit.form.fileName.label": "Nazwa pliku", + "bitstream.edit.form.newFormat.label": "Opisz nowy format", + "bitstream.edit.form.newFormat.hint": "Program, którego użyto do stworzenia pliku i numer wersji (np.: \"ACMESoft SuperApp version 1.5\").", + "bitstream.edit.form.primaryBitstream.label": "Pierwotny plik", + "bitstream.edit.form.selectedFormat.hint": "Jeśli formatu nie ma na powyższej liście, wybierz \"format not in list\" above i opisz jako \"Describe new format\".", + "bitstream.edit.form.selectedFormat.label": "Wybrany format", + "bitstream.edit.form.selectedFormat.unknown": "Tego formatu nie ma na liście", + "bitstream.edit.notifications.error.format.title": "Wystąpił błąd podczas zapisu formatu pliku", + "bitstream.edit.notifications.saved.content": "Zmiany w pliku zostały zapisane.", + "bitstream.edit.notifications.saved.title": "Plik został zapisany", + "bitstream.edit.title": "Edytuj plik", + "bitstream-request-a-copy.alert.canDownload1": "Masz już dostęp do tego pliki. Jeśli chcesz go pobrać, kliknij ", + "bitstream-request-a-copy.alert.canDownload2": "tutaj", + "bitstream-request-a-copy.header": "Wystąp o kopię wybranego pliku", + "bitstream-request-a-copy.intro": "Wpisz następujące informacje, aby wystąpić o kopię tej pozycji: ", + "bitstream-request-a-copy.intro.bitstream.one": "Wystąpienie o dostęp do następujących plików: ", + "bitstream-request-a-copy.intro.bitstream.all": "Wystąpienie o dostęp do wszystkich plików. ", + "bitstream-request-a-copy.name.label": "Imię *", + "bitstream-request-a-copy.name.error": "Imię jest wymagane", + "bitstream-request-a-copy.email.label": "Adres e-mail *", + "bitstream-request-a-copy.email.hint": "Plik zostanie przesłany na podany adres e-mail", + "bitstream-request-a-copy.email.error": "Proszę wprowadzić prawidłowy adres e-mail", + "bitstream-request-a-copy.allfiles.label": "Pliki", + "bitstream-request-a-copy.files-all-false.label": "Tylko plik, dla którego wystąpiono o dostęp", + "bitstream-request-a-copy.files-all-true.label": "Wszystkie pliki (w tej pozycji) z ograniczonym dostępem", + "bitstream-request-a-copy.message.label": "Wiadomość", + "bitstream-request-a-copy.return": "Powrót", + "bitstream-request-a-copy.submit": "Wystąp o kopię", + "bitstream-request-a-copy.submit.success": "Wystąpienie o dostęp do pliku zostało przesłane.", + "bitstream-request-a-copy.submit.error": "Coś poszło nie tak podczas wysyłania wystąpienia o dostęp do pliku", + "browse.comcol.by.author": "wg autorów", + "browse.comcol.by.dateissued": "wg daty wydania", + "browse.comcol.by.subject": "wg tematu", + "browse.comcol.by.title": "wg tytułu", + "browse.comcol.head": "Przeglądaj", + "browse.empty": "Brak rekordów do wyświetlenia.", + "browse.metadata.author": "Autor", + "browse.metadata.dateissued": "Data wydania", + "browse.metadata.subject": "Temat", + "browse.metadata.title": "Tytuł", + "browse.metadata.author.breadcrumbs": "Przeglądaj wg autorów", + "browse.metadata.dateissued.breadcrumbs": "Przeglądaj wg daty wydania", + "browse.metadata.subject.breadcrumbs": "Przeglądaj wg tematów", + "browse.metadata.title.breadcrumbs": "Przeglądaj wg tytułów", + "browse.startsWith.choose_start": "(Wybierz start)", + "browse.startsWith.choose_year": "(Wybierz rok)", + "browse.startsWith.choose_year.label": "Wybierz rok wydania", + "browse.startsWith.jump": "Przejdź do miejsca w indeksie:", + "browse.startsWith.months.april": "kwiecień", + "browse.startsWith.months.august": "sierpień", + "browse.startsWith.months.december": "grudzień", + "browse.startsWith.months.february": "luty", + "browse.startsWith.months.january": "styczeń", + "browse.startsWith.months.july": "lipiec", + "browse.startsWith.months.june": "czerwiec", + "browse.startsWith.months.march": "marzec", + "browse.startsWith.months.may": "maj", + "browse.startsWith.months.none": "(wybierz miesiąc)", + "browse.startsWith.months.none.label": "Wybierz miesiąc wydania", + "browse.startsWith.months.november": "listopad", + "browse.startsWith.months.october": "październik", + "browse.startsWith.months.september": "wrzesień", + "browse.startsWith.submit": "Zastosuj", + "browse.startsWith.type_date": "Lub wybierz datę (rok-miesiąc) i kliknij 'Przeglądaj'", + "browse.startsWith.type_date.label": "Lub wybierz datę (rok-miesiąc) i kliknij przycisk przeglądania", + "browse.startsWith.type_text": "Wpisz kilka pierwszych liter i kliknij przycisk przeglądania", + "browse.title": "Przeglądaj {{ collection }} wg {{ field }} {{ value }}", + "chips.remove": "Usuń chip", + "collection.create.head": "Utwórz kolekcję", + "collection.create.notifications.success": "Udało się utworzyć kolekcję", + "collection.create.sub-head": "Udało się utworzyć kolekcję dla zbioru {{ parent }}", + "collection.curate.header": "Administrator kolekcji: {{collection}}", + "collection.delete.cancel": "Anuluj", + "collection.delete.confirm": "Zatwierdź", + "collection.delete.processing": "Usuwanie", + "collection.delete.head": "Usuń kolekcję", + "collection.delete.notification.fail": "Kolekcja nie może być usunięt", + "collection.delete.notification.success": "Udało się usunąć kolekcję", + "collection.delete.text": "Czy na pewno chcesz usunąć kolekcję \"{{ dso }}\"", + "collection.edit.delete": "Usuń kolekcję", + "collection.edit.head": "Edytuj kolekcję", + "collection.edit.breadcrumbs": "Edytuj kolekcję", + "collection.edit.tabs.mapper.head": "Item Mapper", + "collection.edit.tabs.item-mapper.title": "Edytuj kolekcję - Item Mapper", + "collection.edit.item-mapper.cancel": "Anuluj", + "collection.edit.item-mapper.collection": "Kolekcja: \"{{name}}\"", + "collection.edit.item-mapper.confirm": "Mapuj wybrane elementy", + "collection.edit.item-mapper.description": "To jest narzędzie mapowania elementów, które pozwala administratorom kolekcji mapować elementy z innych kolekcji do tej kolekcji. Możesz wyszukiwać elementy z innych kolekcji i mapować je lub przeglądać listę aktualnie zmapowanych elementów.", + "collection.edit.item-mapper.head": "Item Mapper - Mapuj pozycje z innych kolekcji", + "collection.edit.item-mapper.no-search": "Wpisz co chcesz wyszukać", + "collection.edit.item-mapper.notifications.map.error.content": "Wystąpiły błędy podczas mapowania {{amount}} pozycji.", + "collection.edit.item-mapper.notifications.map.error.head": "Mapowanie błędów", + "collection.edit.item-mapper.notifications.map.success.content": "Udało się zmapować {{amount}} pozycji.", + "collection.edit.item-mapper.notifications.map.success.head": "Mapowanie zakończone", + "collection.edit.item-mapper.notifications.unmap.error.content": "Błędy wystąpiły podczas usuwania mapowania z {{amount}} elementów.", + "collection.edit.item-mapper.notifications.unmap.error.head": "Usuń błędy mapowania", + "collection.edit.item-mapper.notifications.unmap.success.content": "Udało się usunąć błędy mapowania z {{amount}} elementów.", + "collection.edit.item-mapper.notifications.unmap.success.head": "Usuwanie mapowania zakończone", + "collection.edit.item-mapper.remove": "Usuń wybrane mapowanie elementów", + "collection.edit.item-mapper.search-form.placeholder": "Wyszukaj pozycje...", + "collection.edit.item-mapper.tabs.browse": "Wyszukaj mapowane elementy", + "collection.edit.item-mapper.tabs.map": "Mapuj nowe elementy", + "collection.edit.logo.delete.title": "Usuń", + "collection.edit.logo.delete-undo.title": "Cofnij usunięcie", + "collection.edit.logo.label": "Logo kolekcji", + "collection.edit.logo.notifications.add.error": "Przesyłanie logo kolekcji nie powiodło się. Proszę zweryfikować zawartość przed ponowną ", + "collection.edit.logo.notifications.add.success": "Udało się przesłać logo kolekcji.", + "collection.edit.logo.notifications.delete.success.title": "Logo usunięte", + "collection.edit.logo.notifications.delete.success.content": "Udało się usunąć logo kolekcji", + "collection.edit.logo.notifications.delete.error.title": "Błąd podczas usuwania loga", + "collection.edit.logo.upload": "Upuść logo kolekcji, aby je wgrać", + "collection.edit.notifications.success": "Udało się edytować kolekcję", + "collection.edit.return": "Powrót", + "collection.edit.tabs.curate.head": "Kurator", + "collection.edit.tabs.curate.title": "Edytowanie kolekcji - kurator", + "collection.edit.tabs.authorizations.head": "Autoryzacje", + "collection.edit.tabs.authorizations.title": "Edytowanie kolekcji - autoryzacje", + "collection.edit.tabs.metadata.head": "Edytuj metadane", + "collection.edit.tabs.metadata.title": "Edytowanie kolekcji - metadane", + "collection.edit.tabs.roles.head": "Przypisz role", + "collection.edit.tabs.roles.title": "Edytowanie kolekcji - role", + "collection.edit.tabs.source.external": "Ta kolekcja pobiera swoją zawartość z zewnętrznego źródła", + "collection.edit.tabs.source.form.errors.oaiSource.required": "Musisz wskazać id docelowej kolekcji.", + "collection.edit.tabs.source.form.harvestType": "Odczytywanie zawartości", + "collection.edit.tabs.source.form.head": "Skonfiguruj zewnętrzne źródło", + "collection.edit.tabs.source.form.metadataConfigId": "Format metadanych", + "collection.edit.tabs.source.form.oaiSetId": "Określony zestaw ID OAI", + "collection.edit.tabs.source.form.oaiSource": "Dostawca OAI", + "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_BITSTREAMS": "Odczytaj metadane i pliki (wymaga wsparcia ORE)", + "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_REF": "Odczytaj metadane i bibliografię (wymaga wsparcia ORE)", + "collection.edit.tabs.source.form.options.harvestType.METADATA_ONLY": "Odczytaj tylko metadane", + "collection.edit.tabs.source.head": "Źródło treści", + "collection.edit.tabs.source.notifications.discarded.content": "Twoje zmiany zostały odrzucone. Aby odzyskać swoje zmiany wybierz 'Powrót'", + "collection.edit.tabs.source.notifications.discarded.title": "Zmiany odrzucone", + "collection.edit.tabs.source.notifications.invalid.content": "Zmiany nie zostały zapisane. Sprawdź czy wszystkie pola są wypełnione poprawne przed zapisem.", + "collection.edit.tabs.source.notifications.invalid.title": "Nieprawidłowe metadane", + "collection.edit.tabs.source.notifications.saved.content": "Zmiany wprowadzone w kolekcji zostały zapisane.", + "collection.edit.tabs.source.notifications.saved.title": "Źródło treści zapisane", + "collection.edit.tabs.source.title": "Collection Edit - Źródło treści", + "collection.edit.template.add-button": "Dodaj", + "collection.edit.template.breadcrumbs": "Szablon pozycji", + "collection.edit.template.cancel": "Anuluj", + "collection.edit.template.delete-button": "Usuń", + "collection.edit.template.edit-button": "Edytuj", + "collection.edit.template.error": "Wystąpił błąd podczas odzyskiwania szablonu pozycji", + "collection.edit.template.head": "Edytuj szablon dla kolekcji \"{{ collection }}\"", + "collection.edit.template.label": "Szablon pozycji", + "collection.edit.template.loading": "ładowanie szablonu pozycji...", + "collection.edit.template.notifications.delete.error": "Nie udało się usunąć szablonu pozycji", + "collection.edit.template.notifications.delete.success": "Udało się usunąć szablon pozycji", + "collection.edit.template.title": "Edytuj szablon pozycji", + "collection.form.abstract": "Opis skrócony", + "collection.form.description": "Tekst powitalny (HTML)", + "collection.form.errors.title.required": "Wpisz nazwę kolekcji", + "collection.form.license": "Licencja", + "collection.form.provenance": "Pochodzenie", + "collection.form.rights": "Tekst praw autorskich (HTML)", + "collection.form.tableofcontents": "Wiadomości (HTML)", + "collection.form.title": "Nazwa", + "collection.form.entityType": "Typ danych", + "collection.page.browse.recent.head": "Ostatnie zgłoszenia", + "collection.page.browse.recent.empty": "Brak pozycji do wyświetlenia", + "collection.page.edit": "Edytuj kolekcję", + "collection.page.handle": "Stały URI dla kolekcji", + "collection.page.license": "Licencja", + "collection.page.news": "Wiadomości", + "collection.select.confirm": "Zaakceptuj zaznaczone", + "collection.select.empty": "Brak kolekcji do wyświetlenia", + "collection.select.table.title": "Tytuł", + "collection.source.controls.head": "Kontrolki odczytywania", + "collection.source.controls.test.submit.error": "Coś poszło nie tak podczas rozpoczynania testów ustawień", + "collection.source.controls.test.failed": "Scenariusz testowy ustawień nie zadziałał", + "collection.source.controls.test.completed": "Scenariusz testowy ustawień został zakończony", + "collection.source.controls.test.submit": "Konfiguracja testowa", + "collection.source.controls.test.running": "Testowanie konfiguracji...", + "collection.source.controls.import.submit.success": "Import został rozpoczęty", + "collection.source.controls.import.submit.error": "Coś poszło nie tak podczas rozpoczynania importu", + "collection.source.controls.import.submit": "Importuj teraz", + "collection.source.controls.import.running": "Importowanie...", + "collection.source.controls.import.failed": "Wystąpił błąd podczas importu", + "collection.source.controls.import.completed": "Import zakończony", + "collection.source.controls.reset.submit.success": "Reset ustawień i powtórny import zostały rozpoczęte poprawnie", + "collection.source.controls.reset.submit.error": "Coś poszło nie tak podczas rozpoczynania zresetowanego, powtórnego importu", + "collection.source.controls.reset.failed": "Wystąpił błąd podczas resetowania ustawień i ponownego importu", + "collection.source.controls.reset.completed": "Reset ustawień i powtórny import zostały zakończone", + "collection.source.controls.reset.submit": "Resetowanie i powtórny import", + "collection.source.controls.reset.running": "Resetowanie i powtórny import...", + "collection.source.controls.harvest.status": "Status odczytywania:", + "collection.source.controls.harvest.start": "Czas rozpoczęcia odczytywania:", + "collection.source.controls.harvest.last": "Czas ostatniego odczytywania:", + "collection.source.controls.harvest.message": "Informacje nt. odczytywania:", + "collection.source.controls.harvest.no-information": "bd.", + "collection.source.update.notifications.error.content": "Te ustawienia zostały przetestowane i nie działają.", + "collection.source.update.notifications.error.title": "Błąd serwera", + "communityList.breadcrumbs": "Lista zbiorów", + "communityList.tabTitle": "Lista zbiorów", + "communityList.title": "Lista zbiorów", + "communityList.showMore": "Pokaż więcej", + "community.create.head": "Utwórz zbiór", + "community.create.notifications.success": "Udało się utworzyć zbiór", + "community.create.sub-head": "Utwórz podzbiór dla zbioru {{ parent }}", + "community.curate.header": "Zarządzaj zbiorem: {{community}}", + "community.delete.cancel": "Anuluj", + "community.delete.confirm": "Potwierdź", + "community.delete.processing": "Usuwanie...", + "community.delete.head": "Usuń zbiór", + "community.delete.notification.fail": "Zbiór nie może być usunięty", + "community.delete.notification.success": "Udało się usunąć zbiór", + "community.delete.text": "Czy na pewno chcesz usunąć zbiór \"{{ dso }}\"", + "community.edit.delete": "Usuń ten zbiór", + "community.edit.head": "Edytuj zbiór", + "community.edit.breadcrumbs": "Edytuj zbiór", + "community.edit.logo.delete.title": "Usuń logo", + "community.edit.logo.delete-undo.title": "Cofnij usunięcie", + "community.edit.logo.label": "Logo zbioru", + "community.edit.logo.notifications.add.error": "Przesłanie loga zbioru nie powiodło się. Sprawdź czy wszystkie parametry są odpowiednie przed próbą ponownego przesłania.", + "community.edit.logo.notifications.add.success": "Przesłanie loga powiodło się.", + "community.edit.logo.notifications.delete.success.title": "Logo usunięte", + "community.edit.logo.notifications.delete.success.content": "Usunięcie loga zbioru powiodło się", + "community.edit.logo.notifications.delete.error.title": "Błąd podczas usuwania loga", + "community.edit.logo.upload": "Upuść logo zbioru, aby je przesłać", + "community.edit.notifications.success": "Udało się edytować zbiór", + "community.edit.notifications.unauthorized": "Nie masz uprawnień, aby wykonać te zmiany", + "community.edit.notifications.error": "Wystąpił błąd podczas edycji zbioru", + "community.edit.return": "Cofnij", + "community.edit.tabs.curate.head": "Administruj", + "community.edit.tabs.curate.title": "Edycja zbioru - administrator", + "community.edit.tabs.metadata.head": "Edytuj metadane", + "community.edit.tabs.metadata.title": "Edycja zbioru - metadane", + "community.edit.tabs.roles.head": "Przypisz role", + "community.edit.tabs.roles.title": "Edycja zbioru - role", + "community.edit.tabs.authorizations.head": "Uprawnienia", + "community.edit.tabs.authorizations.title": "Edycja zbioru - uprawnienia", + "community.listelement.badge": "Zbiór", + "comcol-role.edit.no-group": "Brak", + "comcol-role.edit.create": "Utwórz", + "comcol-role.edit.restrict": "Ogranicz", + "comcol-role.edit.delete": "Usuń", + "comcol-role.edit.community-admin.name": "Administratorzy", + "comcol-role.edit.collection-admin.name": "Administratorzy", + "comcol-role.edit.community-admin.description": "Administratorzy zbioru mogą tworzyć podzbiory lub kolekcje i zarządzać nimi lub przydzielać zarządzanie tymi podzbiorami lub kolekcji innym użytkownikom. Ponadto decydują, kto może przesyłać elementy do dowolnych podkolekcji, edytować metadane pozycji (po przesłaniu) i dodawać (mapować) istniejące pozycje z innych kolekcji (z zastrzeżeniem autoryzacji).", + "comcol-role.edit.collection-admin.description": "Administratorzy kolekcji decydują o tym, kto może przesyłać pozycje do kolekcji, edytować metadane pozycji (po ich przesłaniu) oraz dodawać (mapować) istniejące elementy z innych kolekcji do tej kolekcji (z zastrzeżeniem uprawnień dla danej kolekcji).", + "comcol-role.edit.submitters.name": "Zgłaszający", + "comcol-role.edit.submitters.description": "Użytkownicy i grupy, którzy mają uprawnienia do przesyłania nowych pozycji do tej kolekcji.", + "comcol-role.edit.item_read.name": "Domyślny dostęp do odczytu pozycji", + "comcol-role.edit.item_read.description": "Użytkownicy i grupy, które mogą odczytywać nowe pozycje zgłoszone do tej kolekcji. Zmiany w tej roli nie działają wstecz. Istniejące pozycje w systemie będą nadal widoczne dla osób, które miały dostęp do odczytu w momencie ich dodania.", + "comcol-role.edit.item_read.anonymous-group": "Domyślny odczyt dla nowych pozycji jest obecnie ustawiony na Anonimowy.", + "comcol-role.edit.bitstream_read.name": "Domyślny dostęp do oczytu plików", + "comcol-role.edit.bitstream_read.description": "Administratorzy zbiorów mogą tworzyć podzbiory lub kolekcje, a także zarządzać nimi. Ponadto decydują o tym, kto może przesyłać elementy do podkolekcji, edytować metadane pozycji (po ich przesłaniu) oraz dodawać (mapować) istniejące pozycje z innych kolekcji (pod warunkiem posiadania odpowiednich uprawnień).", + "comcol-role.edit.bitstream_read.anonymous-group": "Domyślny status odczytu dla nowych plików to Anonimowy.", + "comcol-role.edit.editor.name": "Redaktorzy", + "comcol-role.edit.editor.description": "Redaktorzy mogą edytować metadane nowych pozycji, a następnie akceptować je lub odrzucać.", + "comcol-role.edit.finaleditor.name": "Redaktorzy końcowi", + "comcol-role.edit.finaleditor.description": "Redaktorzy końcowi mogą edytować metadane nowych pozycji, ale nie mogę odrzucać pozycji.", + "comcol-role.edit.reviewer.name": "Recenzenci", + "comcol-role.edit.reviewer.description": "Recenzenci mogą akceptować lub odrzucać nowe pozycje, ale nie mogę edytować ich metadanych.", + "community.form.abstract": "Opis skrócony", + "community.form.description": "Wstęp (HTML)", + "community.form.errors.title.required": "Wprowadź nazwę zbioru", + "community.form.rights": "Prawa autoskie (HTML)", + "community.form.tableofcontents": "Wiadomości (HTML)", + "community.form.title": "Nazwa", + "community.page.edit": "Edytuj ten zbiór", + "community.page.handle": "Stały URI zbioru", + "community.page.license": "Licencja", + "community.page.news": "Wiadomości", + "community.all-lists.head": "Podzbiory i kolekcje", + "community.sub-collection-list.head": "Kolekcje w tym zbiorze", + "community.sub-community-list.head": "Kolekcje w tym zbiorze", + "cookies.consent.accept-all": "Zaakceptuj wszystko", + "cookies.consent.accept-selected": "Zaakceptuj wybrane", + "cookies.consent.app.opt-out.description": "Aplikacja jest domyślnie włączona (możesz ją wyłączyć)", + "cookies.consent.app.opt-out.title": "(możesz ją wyłaczyć)", + "cookies.consent.app.purpose": "cel", + "cookies.consent.app.required.description": "Ta aplikacja jest zawsze wymagana", + "cookies.consent.app.required.title": "(zawsze wymagana)", + "cookies.consent.update": "Od ostatniej wizyty zostały wprowadzone zmiany. Zweryfikuj swoje zgody.", + "cookies.consent.close": "Zamknij", + "cookies.consent.decline": "Odrzuć", + "cookies.consent.content-notice.description": "Zbieramy i przetwarzamy Twoje dane do następujących celów: weryfikacja, preferencje, zgody i statystyka.
    Jeśli chcesz się dowiedzieć więcej, przycztaj naszą {privacyPolicy}.", + "cookies.consent.content-notice.learnMore": "Dostosuj", + "cookies.consent.content-modal.description": "Tutaj są wyświetlane informacje, które zbieramy o Tobie. Możesz je dostosować według swojego uznania.", + "cookies.consent.content-modal.privacy-policy.name": "polityka prywatności", + "cookies.consent.content-modal.privacy-policy.text": "Aby dowiedzieć się więcej przeczytaj naszą {privacyPolicy}.", + "cookies.consent.content-modal.title": "Informacje, które zbieramy", + "cookies.consent.app.title.authentication": "Logowanie", + "cookies.consent.app.description.authentication": "Musisz się zalogować", + "cookies.consent.app.title.preferences": "Preferencje", + "cookies.consent.app.description.preferences": "Wymagane, aby zapisać Twoje preferencje", + "cookies.consent.app.title.acknowledgement": "Zgody", + "cookies.consent.app.description.acknowledgement": "Wymagane, aby zapisać Twoje preferencje", + "cookies.consent.app.title.google-analytics": "Google Analytics", + "cookies.consent.app.description.google-analytics": "Pozwól na śledzenie do celów statystycznych", + "cookies.consent.purpose.functional": "Funkcjonalne", + "cookies.consent.purpose.statistical": "Statystyczne", + "curation-task.task.checklinks.label": "Sprawdź odnośniki w metadanych", + "curation-task.task.noop.label": "NOOP", + "curation-task.task.profileformats.label": "Profil formatów plików", + "curation-task.task.requiredmetadata.label": "Sprawdź poprawność wymaganych metadanych", + "curation-task.task.translate.label": "Microsoft Translator", + "curation-task.task.vscan.label": "Skan antywirusowy", + "curation.form.task-select.label": "Zadanie:", + "curation.form.submit": "Start", + "curation.form.submit.success.head": "Udało się rozpocząć zadanie administratora", + "curation.form.submit.success.content": "Zostaniesz przeniesiony na stronę procesu.", + "curation.form.submit.error.head": "Nie udało się się zakończyć zadania administratora", + "curation.form.submit.error.content": "Wystąpił błąd podczas rozpoczynania zadania administracyjnego.", + "curation.form.handle.label": "Automatyzacja:", + "curation.form.handle.hint": "Wskazówka: Wpisz [prefix swojego identyfikatora]/0, aby zautomatyzować zadanie (nie wszystkie zadania mogą wspierać tę funkcję)", + "deny-request-copy.email.message": "Drogi użytkowniku {{ recipientName }},\nW odpowiedzi na Państwa zapytanie, przykro mi poinformować, że to niemożliwe, aby przestać kopię pliku, o który Państwo prosili: \"{{ itemUrl }}\" ({{ itemName }}), którego jestem autorem.\n\nPozdrawiam serdecznie,\n{{ authorName }} <{{ authorEmail }}>", + "deny-request-copy.email.subject": "Wystąp o kopię dokumentu", + "deny-request-copy.error": "Wystąpił błąd", + "deny-request-copy.header": "Odrzuć prośbę o przesłanie kopii dokumentu", + "deny-request-copy.intro": "Ta wiadomość zostanie przesłana do osoby, która wystąpiła o dostęp", + "deny-request-copy.success": "Z powodzeniem odrzucono prośbę o udostępnienie pozycji", + "dso.name.untitled": "Brak tytułu", + "dso-selector.claim.item.head": "Wskazówki profilu", + "dso-selector.claim.item.body": "Istnieją profile, które mogą odnosić się do Ciebie. Jeśli, któryś z tych profilów jest Twój, wybierz go i przejdź do szczegółów, z opcji wybierz opcję przypisania profilu. W innym przypadku możesz utworzyć nowy profil z szablonu, wybierając przycisk poniżej.", + "dso-selector.claim.item.create-from-scratch": "Utwórz nowy", + "dso-selector.claim.item.not-mine-label": "Żaden nie jest mój", + "dso-selector.create.collection.head": "Nowa kolekcja", + "dso-selector.create.collection.sub-level": "Utwórz nową kolekcję w", + "dso-selector.create.community.head": "Nowy zbiór", + "dso-selector.create.community.sub-level": "Utwórz nowy zbiór", + "dso-selector.create.community.top-level": "Utwórz nowy nadrzędny zbiór", + "dso-selector.create.item.head": "Nowa pozycja", + "dso-selector.create.item.sub-level": "Utwórz nową pozycję w", + "dso-selector.create.submission.head": "Nowe zgłoszenie", + "dso-selector.edit.collection.head": "Edytuj kolekcję", + "dso-selector.edit.community.head": "Edytuj zbiór", + "dso-selector.edit.item.head": "Edytuj pozycję", + "dso-selector.error.title": "Wystąpił błąd podczas wyszukiwania typu {{ type }}", + "dso-selector.export-metadata.dspaceobject.head": "Eksportuj metadane z", + "dso-selector.no-results": "Nie znaleziono {{ type }}", + "dso-selector.placeholder": "Wyszukaj {{ type }}", + "dso-selector.select.collection.head": "Wybierz kolekcję", + "dso-selector.set-scope.community.head": "Wybierz wyszukiwanie zakresu", + "dso-selector.set-scope.community.button": "Wyszukaj w całym DSpace", + "dso-selector.set-scope.community.input-header": "Wyszukaj zbiór lub kolekcję", + "confirmation-modal.export-metadata.header": "Eksportuj metadane z {{ dsoName }}", + "confirmation-modal.export-metadata.info": "Czy na pewno chcesz eksportować metadane z {{ dsoName }}", + "confirmation-modal.export-metadata.cancel": "Anuluj", + "confirmation-modal.export-metadata.confirm": "Eksportuj", + "confirmation-modal.delete-eperson.header": "Usuń użytkownika \"{{ dsoName }}\"", + "confirmation-modal.delete-eperson.info": "Czy na pewno chcesz usunąć użytkownika \"{{ dsoName }}\"", + "confirmation-modal.delete-eperson.cancel": "Anuluj", + "confirmation-modal.delete-eperson.confirm": "Usuń", + "error.bitstream": "Wystąpił błąd podczas tworzenia plików", + "error.browse-by": "Wystąpił błąd podczas tworzenia pozycji", + "error.collection": "Wystąpił błąd podczas tworzenia kolekcji", + "error.collections": "Wystąpił błąd podczas tworzenia kolekcji", + "error.community": "Wystąpił błąd podczas tworzenia ziboru", + "error.identifier": "Nie znaleziono pozycji z podanym identyfikatorem", + "error.default": "Błąd", + "error.item": "Wystąpił błąd podczas tworzenia pozycji", + "error.items": "Wystąpił błąd podczas tworzenia pozycji", + "error.objects": "Wystąpił błąd podczas tworzenia obiektów", + "error.recent-submissions": "Wystąpił błąd podczas tworzenia ostatniego zgłoszenia", + "error.search-results": "Wystąpił błąd podczas tworzenia wyników wyszukiwania", + "error.sub-collections": "Wystąpił błąd podczas tworzenia podkolekcji", + "error.sub-communities": "Wystąpił błąd podczas tworzenia podzbiorów", + "error.submission.sections.init-form-error": "Wystąpił błąd w czasie inicjalizacji sekcji, sprawdź konfigurację. Szczegóły poniżej:

    ", + "error.top-level-communities": "Błąd podczas pobierania nadrzędnego zbioru", + "error.validation.license.notgranted": "Musisz wyrazić tę zgodę, aby przesłać swoje zgłoszenie. Jeśli nie możesz wyrazić zgody w tym momencie, możesz zapisać swoją pracę i wrócić do niej później lub usunąć zgłoszenie.", + "error.validation.pattern": "Te dane wejściowe są ograniczone przez aktualny wzór: {{ pattern }}.", + "error.validation.filerequired": "Przesłanie pliku jest obowiązkowe", + "error.validation.required": "Pole jest wymagane", + "error.validation.NotValidEmail": "E-mail nie jest poprawny", + "error.validation.emailTaken": "E-mail jest już zarejestrowany", + "error.validation.groupExists": "Ta grupa już istnieje", + "file-section.error.header": "Błąd podczas uzyskiwania plików dla tej pozycji", + "footer.copyright": "copyright © 2002-{{ year }}", + "footer.link.dspace": "oprogramowanie DSpace", + "footer.link.lyrasis": "LYRASIS", + "footer.link.cookies": "Ustawienia plików cookies", + "footer.link.privacy-policy": "Polityka prywatności", + "footer.link.end-user-agreement": "Umowa użytkownika", + "forgot-email.form.header": "Nie pamiętam hasła", + "forgot-email.form.info": "Zarejestruj się, aby otrzymywać wiadomości o nowych pozycjach w obserowanych kolekcjach, a także przesyłać nowe pozycje do repozytorium.", + "forgot-email.form.email": "Adres e-mail *", + "forgot-email.form.email.error.required": "Uzupełnij adres e-mail", + "forgot-email.form.email.error.pattern": "Uzupełnij prawidłowy adres e-mail", + "forgot-email.form.email.hint": "Ten adres e-mail będzie zweryfikowany i będziesz go używać jako swój login.", + "forgot-email.form.submit": "Wyślij", + "forgot-email.form.success.head": "Wysłano wiadomość weryfikacyjną", + "forgot-email.form.success.content": "Wiadomość została wysłana na adres e-mail {{ email }}. Zawiera ona unikatowy link i dalsze instrukcje postępowania.", + "forgot-email.form.error.head": "Błąd podczas rejestracji adresu e-mail", + "forgot-email.form.error.content": "Wystąpił błąd poczas próby rejestracji tego adresu e-mail: {{ email }}", + "forgot-password.title": "Nie pamiętam hasła", + "forgot-password.form.head": "Nie pamiętam hasła", + "forgot-password.form.info": "Wpisz nowe hasło w polu poniżej i potwierdź je wpisując je ponownie w drugim polu. Hasło powinno mieć co najmniej sześć znaków.", + "forgot-password.form.card.security": "Bezpieczeństwo", + "forgot-password.form.identification.header": "Identifikacja", + "forgot-password.form.identification.email": "Adres e-mail: ", + "forgot-password.form.label.password": "Hasło", + "forgot-password.form.label.passwordrepeat": "Potwierdź hasło", + "forgot-password.form.error.empty-password": "Wpisz hasło poniżej.", + "forgot-password.form.error.matching-passwords": "Hasła nie są identyczne.", + "forgot-password.form.notification.error.title": "Błąd podczas próby ustawienia nowego hasła", + "forgot-password.form.notification.success.content": "Resetowanie hasła udało się. Zalogowano jako stworzony przed momemntem użytkownik.", + "forgot-password.form.notification.success.title": "Resetowanie hasła udane", + "forgot-password.form.submit": "Wpisz hasło", + "form.add": "Dodaj", + "form.add-help": "Wybierz ten przycisk, aby dodać aktualny wpis lub dodać następny", + "form.cancel": "Anuluj", + "form.clear": "Wyczyść", + "form.clear-help": "Kliknij tutaj, aby usunąć wybraną wartość", + "form.discard": "Odrzuć", + "form.drag": "Przeciągnij", + "form.edit": "Edytuj", + "form.edit-help": "Kliknij tutaj, aby edytować wybraną wartość", + "form.first-name": "Imię", + "form.last-name": "Nazwisko", + "form.loading": "Ładowanie...", + "form.lookup": "Przeglądaj", + "form.lookup-help": "Kliknij tutaj, aby zobaczyć istniejące powiązania", + "form.no-results": "Nie znaleziono rezultatów", + "form.no-value": "Nie wprowadzono wartości", + "form.remove": "Usuń", + "form.save": "Zapisz", + "form.save-help": "Zapisz zmiany", + "form.search": "Wyszukaj", + "form.search-help": "Kliknij tutaj, aby wyszukać w istniejących komentarzach", + "form.submit": "Zapisz", + "form.repeatable.sort.tip": "Upuść nową pozycję w nowym miejscu", + "grant-deny-request-copy.deny": "Nie przesyłaj kopii", + "grant-deny-request-copy.email.back": "Cofnij", + "grant-deny-request-copy.email.message": "Wiadomości", + "grant-deny-request-copy.email.message.empty": "Proszę wprowadzić wiadomość", + "grant-deny-request-copy.email.permissions.info": "W tym miejscu możesz przemyśleć ograniczenie dostępu do dokumentu, aby odpowiadać na mniej próśb o dostęp. Jeśli chcesz wystąpić do administratorów reposytorium o zniesienie restrykcji, zaznacz okienko poniżej.", + "grant-deny-request-copy.email.permissions.label": "Ustaw jako otwarty dostęp", + "grant-deny-request-copy.email.send": "Wyślij", + "grant-deny-request-copy.email.subject": "Temat", + "grant-deny-request-copy.email.subject.empty": "Wpisz temat", + "grant-deny-request-copy.grant": "Wyślij kopię", + "grant-deny-request-copy.header": "Prośba o przesłanie kopii dokumentu", + "grant-deny-request-copy.home-page": "Zabierz mnie na stronę główną", + "grant-deny-request-copy.intro1": "Jeśli jesteś jednym z autorów dokumentu {{ name }}, wybierz jedną z poniższych opcji, aby odpowiedzieć zapytaniu użytkownika.", + "grant-deny-request-copy.intro2": "Po wybraniu opcji, zostaną wyświetlone sugerowane odpowiedzi, które można edytować.", + "grant-deny-request-copy.processed": "Ta prośba jest już procesowana. Możesz użyć przycisku poniżej, aby wrócić do strony głównej.", + "grant-request-copy.email.message": "Drogi użytkowniku {{ recipientName }},\nW odpowiedzi na Państwa zapytanie, miło mi poinformować, że w załączniku przesyłam kopię dokumentu, o który Państwo prosili: \"{{ itemUrl }}\" ({{ itemName }}), którego jestem autorem.\n\nPozdrawiam serdecznie,\n{{ authorName }} <{{ authorEmail }}>", + "grant-request-copy.email.subject": "Prośba o kopię dokumentu", + "grant-request-copy.error": "Wystąpił błąd", + "grant-request-copy.header": "Zezwól na wysłanie kopii dokumentu", + "grant-request-copy.intro": "To wiadomość zostanie wysłana do osoby, która wystąpiła o dostęp. Wskazane dokumenty zostaną dołączone jako załącznik.", + "grant-request-copy.success": "Prośba o dostęp do dokumentu została przyjęta", + "home.description": "", + "home.breadcrumbs": "Strona główna", + "home.search-form.placeholder": "Przeszukaj repozytorium...", + "home.title": "Strona główna", + "home.top-level-communities.head": "Zbiory w DSpace", + "home.top-level-communities.help": "Przeszukaj kolekcje", + "info.end-user-agreement.accept": "Przeczytałem/am i akceptuję umowę użytkownika", + "info.end-user-agreement.accept.error": "Błąd wystąpił podczas akceptowania umowy użytkownika", + "info.end-user-agreement.accept.success": "Udało się zaktualizować umowę użytkownika", + "info.end-user-agreement.breadcrumbs": "Umowa użytkownika", + "info.end-user-agreement.buttons.cancel": "Anuluj", + "info.end-user-agreement.buttons.save": "Zapisz", + "info.end-user-agreement.head": "Umowa użytkownika", + "info.end-user-agreement.title": "Umowa użytkownika", + "info.privacy.breadcrumbs": "Oświadczenie polityki prywatności", + "info.privacy.head": "Oświadczenie polityki prywatności", + "info.privacy.title": "Oświadczenie polityki prywatności", + "item.alerts.private": "Ta pozycja jest prywatna", + "item.alerts.withdrawn": "Ta pozycja została wycofana", + "item.edit.authorizations.heading": "Za pomocą tego edytora możesz przeglądać i zmieniać polityki dla danej pozycji, a także zmieniać polityki dla poszczególnych części pozycji: paczek i strumieni bitów. W skrócie, pozycja jest kontenerem pakietów, a pakiety są kontenerami strumieni bitów. Kontenery zazwyczaj mają polityki ADD/REMOVE/READ/WRITE, natomiast strumienie bitów mają tylko polityki READ/WRITE.", + "item.edit.authorizations.title": "Edytuj politykę tej pozycji", + "item.badge.private": "Prywatny status publikacji", + "item.badge.withdrawn": "Wycofane publikacje", + "item.bitstreams.upload.bundle": "Pakiet", + "item.bitstreams.upload.bundle.placeholder": "Wybierz pakiet", + "item.bitstreams.upload.bundle.new": "Utworz pakiet", + "item.bitstreams.upload.bundles.empty": "Ta pozycja nie zawiera żadnych pakietów, do których można przesłać strumień bitów.", + "item.bitstreams.upload.cancel": "Anuluj", + "item.bitstreams.upload.drop-message": "Upuść plik, aby przesłać", + "item.bitstreams.upload.item": "Pozycja: ", + "item.bitstreams.upload.notifications.bundle.created.content": "Udało się utworzyć nowy pakiet.", + "item.bitstreams.upload.notifications.bundle.created.title": "Utwórz pakiet", + "item.bitstreams.upload.notifications.upload.failed": "Zweryfikuj pliki przed spróbowaniem ponownie.", + "item.bitstreams.upload.title": "Prześlij strumień bitów", + "item.edit.bitstreams.bundle.edit.buttons.upload": "Prześlij", + "item.edit.bitstreams.bundle.displaying": "Obecnie wyświetlono {{ amount }} plików z {{ total }}.", + "item.edit.bitstreams.bundle.load.all": "Załaduj wszystkie ({{ total }})", + "item.edit.bitstreams.bundle.load.more": "Załaduj więcej", + "item.edit.bitstreams.bundle.name": "PACZKA: {{ name }}", + "item.edit.bitstreams.discard-button": "Odrzuć", + "item.edit.bitstreams.edit.buttons.download": "Pobierz", + "item.edit.bitstreams.edit.buttons.drag": "Przeciągnij", + "item.edit.bitstreams.edit.buttons.edit": "Edytuj", + "item.edit.bitstreams.edit.buttons.remove": "Usuń", + "item.edit.bitstreams.edit.buttons.undo": "Cofnij zmiany", + "item.edit.bitstreams.empty": "Ta pozycja nie zawiera żadnych strumieni bitów. Wybierz strumienie do załadowania, aby je utworzyć.", + "item.edit.bitstreams.headers.actions": "Akcje", + "item.edit.bitstreams.headers.bundle": "Paczka", + "item.edit.bitstreams.headers.description": "Opis", + "item.edit.bitstreams.headers.format": "Format", + "item.edit.bitstreams.headers.name": "Nazwa", + "item.edit.bitstreams.notifications.discarded.content": "Twoje zmiany zostały odrzucone. Aby je przywrócić, wybierz przycisk 'Cofnij'", + "item.edit.bitstreams.notifications.discarded.title": "Zmiany odrzucone", + "item.edit.bitstreams.notifications.move.failed.title": "Błąd podczas przenoszenia plików", + "item.edit.bitstreams.notifications.move.saved.content": "Zmiany pozycji dla pliku tej pozycji oraz jego paczki zostały zapisane.", + "item.edit.bitstreams.notifications.move.saved.title": "Zmiana pozycji została zapisana", + "item.edit.bitstreams.notifications.outdated.content": "Pozycja została w międzyczasie zmieniona przez innego użytkownika. Twoje zmiany zostały cofnięte, aby uniknąć ewentualnych konfliktów", + "item.edit.bitstreams.notifications.outdated.title": "Zmiany nieaktualne", + "item.edit.bitstreams.notifications.remove.failed.title": "Błąd podczas usuwania pliku", + "item.edit.bitstreams.notifications.remove.saved.content": "Twoje zmiany dotyczące usunięcia plików z tej pozycji zostały zapisane.", + "item.edit.bitstreams.notifications.remove.saved.title": "Zmiany dotyczące usunięcia zapisane", + "item.edit.bitstreams.reinstate-button": "Cofnij", + "item.edit.bitstreams.save-button": "Zapisz", + "item.edit.bitstreams.upload-button": "Prześlij", + "item.edit.delete.cancel": "Anuluj", + "item.edit.delete.confirm": "Usuń", + "item.edit.delete.description": "Czy jesteś pewien, że ta pozycja powinna zostać całkowicie usunięta? Ostrożnie: Teraz nie pozostanie po tej pozycji żaden ślad.", + "item.edit.delete.error": "Błąd wystąpił podczas usuwania pozycji", + "item.edit.delete.header": "Usuń pozycję: {{ id }}", + "item.edit.delete.success": "Ta pozycja została usunięta", + "item.edit.head": "Edytuj pozycję", + "item.edit.breadcrumbs": "Edytuj pozycję", + "item.edit.tabs.disabled.tooltip": "Nie masz dostępu do tej strony", + "item.edit.tabs.mapper.head": "Mapper kolekcji", + "item.edit.tabs.item-mapper.title": "Edytowanie pozycji - Mapper kolekcji", + "item.edit.item-mapper.buttons.add": "Mapowanie pozycji do wybranych kolekcji", + "item.edit.item-mapper.buttons.remove": "Usuń mapowanie pozycji do wybranych kolekcji", + "item.edit.item-mapper.cancel": "Anuluj", + "item.edit.item-mapper.description": "To jest narzędzie do mapowania elementów, które pozwala administratorom mapować tę pozycję do innych kolekcji. Możesz wyszukiwać kolekcje i je mapować lub przeglądać listę kolekcji, do których dana pozycja jest aktualnie zmapowana.", + "item.edit.item-mapper.head": "Mapper pozycji - Mapowanie pozycji do kolekcji", + "item.edit.item-mapper.item": "Pozycja: \"{{name}}\"", + "item.edit.item-mapper.no-search": "Wpisz zapytanie, które chcesz wyszukać", + "item.edit.item-mapper.notifications.add.error.content": "Wystąpiły błędy dla mapowania pozycji w {{amount}} kolekcjach.", + "item.edit.item-mapper.notifications.add.error.head": "Błędy mapowania", + "item.edit.item-mapper.notifications.add.success.content": "Udało się zmapować elementy dla {{amount}} kolekcji.", + "item.edit.item-mapper.notifications.add.success.head": "Mapowanie zakończone", + "item.edit.item-mapper.notifications.remove.error.content": "Wystąpiły błędy podczas usuwania mapowania do {{amount}} kolekcji.", + "item.edit.item-mapper.notifications.remove.error.head": "Usunięcie mapowania błędów", + "item.edit.item-mapper.notifications.remove.success.content": "Udało się usunąć mapowanie pozycji w {{amount}} kolekcjach.", + "item.edit.item-mapper.notifications.remove.success.head": "Usuwanie mapowania zakończone", + "item.edit.item-mapper.search-form.placeholder": "Przeszukaj kolekcje...", + "item.edit.item-mapper.tabs.browse": "Przeglądaj zmapowane kolekcje", + "item.edit.item-mapper.tabs.map": "Mapuj nowe kolekcje", + "item.edit.metadata.add-button": "Dodaj", + "item.edit.metadata.discard-button": "Odrzuć", + "item.edit.metadata.edit.buttons.edit": "Edytuj", + "item.edit.metadata.edit.buttons.remove": "Usuń", + "item.edit.metadata.edit.buttons.undo": "Cofnij zmiany", + "item.edit.metadata.edit.buttons.unedit": "Zatrzymaj edycję", + "item.edit.metadata.empty": "Ta pozycja nie zawiera żadnych metadanych. Wybierz Dodaj, aby dodać metadane.", + "item.edit.metadata.headers.edit": "Edytuj", + "item.edit.metadata.headers.field": "Pole", + "item.edit.metadata.headers.language": "Język", + "item.edit.metadata.headers.value": "Wartość", + "item.edit.metadata.metadatafield.invalid": "Wybierz aktualne pole metadanych", + "item.edit.metadata.notifications.discarded.content": "Twoje zmiany zostały odrzucone. Aby wgrać je ponownie wybierz przycisk 'Cofnij'", + "item.edit.metadata.notifications.discarded.title": "Zmiany odrzucone", + "item.edit.metadata.notifications.error.title": "Wystąpił błąd", + "item.edit.metadata.notifications.invalid.content": "Twoje zmiany nie zostały zapisane. Przed zapisaniem upewnij się, że wszystkie pola są wypełnione prawidłowo.", + "item.edit.metadata.notifications.invalid.title": "Nieprawidłowe metadane", + "item.edit.metadata.notifications.outdated.content": "Pozycja została w międzyczasie zmieniona przez innego użytkownika. Twoje zmiany zostały cofnięte, aby zapobiec ewentualnym konfliktom", + "item.edit.metadata.notifications.outdated.title": "Zmiany nieaktualne", + "item.edit.metadata.notifications.saved.content": "Twoje zmiany metadanych tej pozycji zostały zapisane.", + "item.edit.metadata.notifications.saved.title": "Metadane zostały zapisane", + "item.edit.metadata.reinstate-button": "Cofnij", + "item.edit.metadata.save-button": "Zapisz", + "item.edit.modify.overview.field": "Pole", + "item.edit.modify.overview.language": "Język", + "item.edit.modify.overview.value": "Wartość", + "item.edit.move.cancel": "Anuluj", + "item.edit.move.save-button": "Zapisz", + "item.edit.move.discard-button": "Odrzuć", + "item.edit.move.description": "Wybierz kolekcję, do której chcesz przenieść tę pozycję. Aby zawęzić listę wyświetlanych kolekcji, możesz wprowadzić zapytanie w polu wyszukiwania.", + "item.edit.move.error": "Wystąpił błąd podczas przenoszenia pozycji", + "item.edit.move.head": "Przenieś pozycję: {{id}}", + "item.edit.move.inheritpolicies.checkbox": "Dziedziczenie polityk", + "item.edit.move.inheritpolicies.description": "Dziedzczenie domyślnych polityk z kolekcji docelowej", + "item.edit.move.move": "Przenieś", + "item.edit.move.processing": "Przenoszenie...", + "item.edit.move.search.placeholder": "Wpisz zapytanie, aby wyszukać w kolekcjach", + "item.edit.move.success": "Pozycja została przeniesiona", + "item.edit.move.title": "Przenieś pozycję", + "item.edit.private.cancel": "Anuluj", + "item.edit.private.confirm": "Ukryj", + "item.edit.private.description": "Czy chcesz ukryć tę pozycję?", + "item.edit.private.error": "Wystąpił błąd podczas ukrywania pozycji", + "item.edit.private.header": "Ukryj pozycję: {{ id }}", + "item.edit.private.success": "Pozycja jest teraz ukryta", + "item.edit.public.cancel": "Anuluj", + "item.edit.public.confirm": "Upublicznij", + "item.edit.public.description": "Czy chcesz upublicznić tę pozycję?", + "item.edit.public.error": "Wystąpił błąd podczas upubliczniania pozycji", + "item.edit.public.header": "Upublicznij pozycję: {{ id }}", + "item.edit.public.success": "Pozycja jest teraz publiczna", + "item.edit.reinstate.cancel": "Anuluj", + "item.edit.reinstate.confirm": "Przywróć", + "item.edit.reinstate.description": "Czy chcesz przywrócić tę pozycję?", + "item.edit.reinstate.error": "Wystąpił błąd podczas przywracania pozycji", + "item.edit.reinstate.header": "Przywróć pozycję: {{ id }}", + "item.edit.reinstate.success": "Pozycja została przywrócona", + "item.edit.relationships.discard-button": "Odrzuć", + "item.edit.relationships.edit.buttons.add": "Dodaj", + "item.edit.relationships.edit.buttons.remove": "Usuń", + "item.edit.relationships.edit.buttons.undo": "Cofnij zmiany", + "item.edit.relationships.no-relationships": "Brak relacji", + "item.edit.relationships.notifications.discarded.content": "Twoje zmiany zostały cofnięte. Aby przywrócić zmiany wybierz przycisk 'Cofnij'", + "item.edit.relationships.notifications.discarded.title": "Zmiany zostały cofnięte", + "item.edit.relationships.notifications.failed.title": "Wystąpił błąd podczas edytowania relacji", + "item.edit.relationships.notifications.outdated.content": "Ta pozycja została właśnie zmieniona przez innego użytkownika. Twoje zmiany zostały cofnięte, aby uniknąć konfliktów", + "item.edit.relationships.notifications.outdated.title": "Zmiany są nieaktualne", + "item.edit.relationships.notifications.saved.content": "Twoje zmiany w relacjach tej pozycji zostały zapisane.", + "item.edit.relationships.notifications.saved.title": "Relacje zostały zapisane", + "item.edit.relationships.reinstate-button": "Cofnij", + "item.edit.relationships.save-button": "Zapisz", + "item.edit.relationships.no-entity-type": "Dodaj metadaną 'dspace.entity.type', aby umożliwić dodawanie relacji do pozycji", + "item.edit.return": "Cofnij", + "item.edit.tabs.bitstreams.head": "Pliki", + "item.edit.tabs.bitstreams.title": "Edycja pozycji - pliki", + "item.edit.tabs.curate.head": "Administruj", + "item.edit.tabs.curate.title": "Edytowanie pozycji - administruj", + "item.edit.tabs.metadata.head": "Metadane", + "item.edit.tabs.metadata.title": "Edycja pozycji - metadane", + "item.edit.tabs.relationships.head": "Relacje", + "item.edit.tabs.relationships.title": "Edycja pozycja - relacje", + "item.edit.tabs.status.buttons.authorizations.button": "Dostępy...", + "item.edit.tabs.status.buttons.authorizations.label": "Określu dostęp do pozycji", + "item.edit.tabs.status.buttons.delete.button": "Usuń permanentnie", + "item.edit.tabs.status.buttons.delete.label": "Usuń pozycję permanentnie", + "item.edit.tabs.status.buttons.mappedCollections.button": "Zmapowane kolekcje", + "item.edit.tabs.status.buttons.mappedCollections.label": "Zarządzaj mapowanymi kolekcjami", + "item.edit.tabs.status.buttons.move.button": "Przenieś...", + "item.edit.tabs.status.buttons.move.label": "Przenieś pozycję do innej kolekcji", + "item.edit.tabs.status.buttons.private.button": "Ukryj...", + "item.edit.tabs.status.buttons.private.label": "Ukry pozycję", + "item.edit.tabs.status.buttons.public.button": "Upublicznij...", + "item.edit.tabs.status.buttons.public.label": "Upublicznij pozycję", + "item.edit.tabs.status.buttons.reinstate.button": "Przywróć...", + "item.edit.tabs.status.buttons.reinstate.label": "Przywróć pozycję", + "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", + "item.edit.tabs.status.buttons.withdraw.button": "Wycofaj...", + "item.edit.tabs.status.buttons.withdraw.label": "Wycofaj z repozytorium", + "item.edit.tabs.status.description": "Witamy na stronie zarządzania pozycjami. Z tego miejsca możesz wycofać, przywrócić, przenieść lub usunąć daną pozycję. Możesz również aktualizować lub dodawać nowe metadane lub pliki..", + "item.edit.tabs.status.head": "Status", + "item.edit.tabs.status.labels.handle": "Identyfikator", + "item.edit.tabs.status.labels.id": "ID pozycji", + "item.edit.tabs.status.labels.itemPage": "Strona pozycji", + "item.edit.tabs.status.labels.lastModified": "Ostatnia modyfikacja", + "item.edit.tabs.status.title": "Edycja pozycji - Status", + "item.edit.tabs.versionhistory.head": "Historia wersji", + "item.edit.tabs.versionhistory.title": "Edycja pozycji - historia wersji", + "item.edit.tabs.versionhistory.under-construction": "Edytowanie lub dodawanie nowych wersji jest niedostępne w tego poziomu interfejsu.", + "item.edit.tabs.view.head": "Widok pozycji", + "item.edit.tabs.view.title": "Edycja pozycji - widok", + "item.edit.withdraw.cancel": "Anuluj", + "item.edit.withdraw.confirm": "Wycofaj", + "item.edit.withdraw.description": "Czy na pewno chcesz wycofać pozycję?", + "item.edit.withdraw.error": "Wystąpił błąd podczas wycofywania pozycji", + "item.edit.withdraw.header": "Wycofaj pozycję: {{ id }}", + "item.edit.withdraw.success": "Pozycja została wycofana", + "item.listelement.badge": "Pozycja", + "item.page.description": "Opis", + "item.page.journal-issn": "ISSN czasopisma", + "item.page.journal-title": "Tytuł czasopisma", + "item.page.publisher": "Wydawca", + "item.page.titleprefix": "Pozycja: ", + "item.page.volume-title": "Tytuł tomu", + "item.search.results.head": "Wyniki wyszukiwania pozycji", + "item.search.title": "Wyszukiwanie pozycji", + "item.page.abstract": "Abstrakt", + "item.page.author": "Autorzy", + "item.page.citation": "Cytowanie", + "item.page.collections": "Kolekcje", + "item.page.collections.loading": "Ładowanie...", + "item.page.collections.load-more": "Załaduj więcej", + "item.page.date": "Data", + "item.page.edit": "Edytuj pozycję", + "item.page.files": "Pliki", + "item.page.filesection.description": "Opis:", + "item.page.filesection.download": "Pobierz", + "item.page.filesection.format": "Format:", + "item.page.filesection.name": "Nazwa:", + "item.page.filesection.size": "Rozmiar:", + "item.page.journal.search.title": "Artykuły w czasopiśmie", + "item.page.link.full": "Zobacz szczegóły", + "item.page.link.simple": "Uproszczony widok", + "item.page.person.search.title": "Artykuły tego autora", + "item.page.related-items.view-more": "Pokaż o {{ amount }} więcej", + "item.page.related-items.view-less": "Ukryj {{ amount }}", + "item.page.relationships.isAuthorOfPublication": "Publikacje", + "item.page.relationships.isJournalOfPublication": "Publikacje", + "item.page.relationships.isOrgUnitOfPerson": "Autorzy", + "item.page.relationships.isOrgUnitOfProject": "Projekty naukowe", + "item.page.subject": "Słowa kluczowe", + "item.page.uri": "URI", + "item.page.bitstreams.view-more": "Pokaż więcej", + "item.page.bitstreams.collapse": "Pokaż mniej", + "item.page.filesection.original.bundle": "Oryginalne pliki", + "item.page.filesection.license.bundle": "Licencja", + "item.page.return": "Powrót", + "item.page.version.create": "Utwórz nową wersję", + "item.page.version.hasDraft": "Nowa wersja nie może zostać utworzona, ponieważ istnieje już oczekujące na akceptację zgłoszenie dokumentu tego pliku", + "item.preview.dc.identifier.doi": "DOI", + "item.preview.dc.relation.ispartof": "Czasopismo lub seria", + "item.preview.dc.identifier.isbn": "ISBN", + "item.preview.dc.identifier.uri": "Identyfikator:", + "item.preview.dc.contributor.author": "Autorzy:", + "item.preview.dc.date.issued": "Data publikacji:", + "item.preview.dc.description.abstract": "Abstrakt:", + "item.preview.dc.identifier.other": "Inny identyfikator:", + "item.preview.dc.language.iso": "Język:", + "item.preview.dc.title": "Tytuł:", + "item.preview.dc.title.alternative": "Tytuł alternatywny", + "item.preview.dc.type": "Typ:", + "item.preview.dc.identifier": "Identyfikator:", + "item.preview.dc.relation.issn": "ISSN", + "item.preview.oaire.citation.issue": "Numer wydania", + "item.preview.oaire.citation.volume": "Numer tomu", + "item.preview.person.familyName": "Nazwisko:", + "item.preview.person.givenName": "Nazwa:", + "item.preview.person.identifier.orcid": "ORCID:", + "item.preview.project.funder.name": "Fundator:", + "item.preview.project.funder.identifier": "Identyfikator fundatora:", + "item.preview.oaire.awardNumber": "ID finansowania:", + "item.preview.dc.coverage.spatial": "Jurysdykcja:", + "item.preview.oaire.fundingStream": "Źródło finansowania:", + "item.select.confirm": "Potwierdź zaznaczone", + "item.select.empty": "Brak pozycji do wyświetlenia", + "item.select.table.author": "Autor", + "item.select.table.collection": "Kolekcja", + "item.select.table.title": "Tytuł", + "item.version.history.empty": "Jeszcze nie ma innych wersji tej pozycji.", + "item.version.history.head": "Poprzednie wersje", + "item.version.history.return": "Powrót", + "item.version.history.selected": "Wybrane wersje", + "item.version.history.selected.alert": "W tym momencie wyświetlono wersję {{version}} pozycji.", + "item.version.history.table.version": "Wersja", + "item.version.history.table.item": "Pozycja", + "item.version.history.table.editor": "Redaktor", + "item.version.history.table.date": "Data", + "item.version.history.table.summary": "Podsumowanie", + "item.version.history.table.workspaceItem": "Wersja robocza", + "item.version.history.table.workflowItem": "Pozycja workflow", + "item.version.history.table.actions": "Akcja", + "item.version.history.table.action.editWorkspaceItem": "Edytuj wersję roboczą pozycji", + "item.version.history.table.action.editSummary": "Edytuj podsumowanie", + "item.version.history.table.action.saveSummary": "Zapisz edycje podsumowania", + "item.version.history.table.action.discardSummary": "Odrzuć edycje podsumowania", + "item.version.history.table.action.newVersion": "Utwórz nową wersję z tej wersji", + "item.version.history.table.action.deleteVersion": "Wersja usunięta", + "item.version.history.table.action.hasDraft": "Nowa wersja nie może zostać utworzona, ponieważ istnieje już oczekujące na akceptację zgłoszenie dokumentu tego pliku", + "item.version.notice": "To nie jest najnowsza wersja tej pozycji. Najnowsza wersja jest dostępna tutaj.", + "item.version.create.modal.header": "Nowa wersja", + "item.version.create.modal.text": "Utwórz nową wersję tej pozycji", + "item.version.create.modal.text.startingFrom": "zaczynając od wersji {{version}}", + "item.version.create.modal.button.confirm": "Utwórz", + "item.version.create.modal.button.confirm.tooltip": "Utwórz nową wersję", + "item.version.create.modal.button.cancel": "Anuluj", + "item.version.create.modal.button.cancel.tooltip": "Nie stwarzaj nowej wersji", + "item.version.create.modal.form.summary.label": "Podsumowanie", + "item.version.create.modal.form.summary.placeholder": "Wprowadź podsumowanie nowej wersji", + "item.version.create.notification.success": "Nowa wersja została utworzona z numerem {{version}}", + "item.version.create.notification.failure": "Nowa wersja nie została utworzona", + "item.version.create.notification.inProgress": "Nowa wersja nie może być utworzona, ponieważ propozycja innej wersji jest już złożona do zaakceptowania", + "item.version.delete.modal.header": "Usuń wersję", + "item.version.delete.modal.text": "Czy chcesz usunąć wersję {{version}}?", + "item.version.delete.modal.button.confirm": "Usuń", + "item.version.delete.modal.button.confirm.tooltip": "Usuń wersję", + "item.version.delete.modal.button.cancel": "Anuluj", + "item.version.delete.modal.button.cancel.tooltip": "Nie usuwaj tej wersji", + "item.version.delete.notification.success": "Wersja {{version}} została usunięta", + "item.version.delete.notification.failure": "Wersja {{version}} nie została usunięta", + "item.version.edit.notification.success": "Podsumowanie wersji {{version}} zostało zmienione", + "item.version.edit.notification.failure": "Podsumowanie wersji {{version}} nie zostało zmienione", + "journal.listelement.badge": "Czasopismo", + "journal.page.description": "Opis", + "journal.page.edit": "Edytuj tę pozycję", + "journal.page.editor": "Redaktor naczelny", + "journal.page.issn": "ISSN", + "journal.page.publisher": "Wydawca", + "journal.page.titleprefix": "Czasopismo: ", + "journal.search.results.head": "Wyniki wyszukiwania czasopism", + "journal.search.title": "Wyszukiwanie czasopism", + "journalissue.listelement.badge": "Numer czasopisma", + "journalissue.page.description": "Opis", + "journalissue.page.edit": "Edytuj pozycję", + "journalissue.page.issuedate": "Data wydania", + "journalissue.page.journal-issn": "ISSN czasopisma", + "journalissue.page.journal-title": "Tytuł czasopisma", + "journalissue.page.keyword": "Słowa kluczowe", + "journalissue.page.number": "Numer", + "journalissue.page.titleprefix": "Wydanie czasopisma: ", + "journalvolume.listelement.badge": "Numer tomu czasopisma", + "journalvolume.page.description": "Opis", + "journalvolume.page.edit": "Edytuj pozycję", + "journalvolume.page.issuedate": "Data wydania", + "journalvolume.page.titleprefix": "Numer tomu czasopisma: ", + "journalvolume.page.volume": "Numer wydania", + "iiifsearchable.listelement.badge": "Multimedia dokumentu", + "iiifsearchable.page.titleprefix": "Dokument: ", + "iiifsearchable.page.doi": "Stały link: ", + "iiifsearchable.page.issue": "Wydanie: ", + "iiifsearchable.page.description": "Opis: ", + "iiifviewer.fullscreen.notice": "Wyświetl na pełnym ekranie dla lepszego widoku.", + "iiif.listelement.badge": "Multimedia obrazu", + "iiif.page.titleprefix": "Obraz: ", + "iiif.page.doi": "Stały link: ", + "iiif.page.issue": "Numer wydania: ", + "iiif.page.description": "Opis: ", + "loading.bitstream": "Ładowanie pliku...", + "loading.bitstreams": "Ładowanie plików...", + "loading.browse-by": "Ładowanie pozycji...", + "loading.browse-by-page": "Ładowanie strony...", + "loading.collection": "Ładowanie kolekcji...", + "loading.collections": "Ładowanie kolekcji...", + "loading.content-source": "Ładowanie źródła treści...", + "loading.community": "Ładowanie zbioru...", + "loading.default": "Ładowanie...", + "loading.item": "Ładowanie pozycji...", + "loading.items": "Ładowanie pozycji...", + "loading.mydspace-results": "Ładowanie pozycji...", + "loading.objects": "Ładowanie...", + "loading.recent-submissions": "Ładowanie ostatnich zgłoszeń...", + "loading.search-results": "Ładowanie wyników wyszukiwania...", + "loading.sub-collections": "Ładowanie podkolekcji...", + "loading.sub-communities": "Ładowanie podzbioru...", + "loading.top-level-communities": "Ładowanie zbioru wyszego szczebla...", + "login.form.email": "Adres e-mail", + "login.form.forgot-password": "Nie pamiętasz hasła?", + "login.form.header": "Zaloguj się do DSpace", + "login.form.new-user": "Nie masz konta? Zarejestruj się.", + "login.form.or-divider": "lub", + "login.form.orcid": "Zaloguj za pomocą ORCID", + "login.form.oidc": "Zaloguj za pomocą OIDC", + "login.form.password": "Hasło", + "login.form.shibboleth": "Zaloguj za pomocą Shibboleth", + "login.form.submit": "Zaloguj się", + "login.title": "Zaloguj", + "login.breadcrumbs": "Zaloguj", + "logout.form.header": "Wyloguj się z DSpace", + "logout.form.submit": "Wyloguj się", + "logout.title": "Wylogowywanie", + "menu.header.admin": "Panel administracyjny", + "menu.header.image.logo": "Logo repozytorium", + "menu.header.admin.description": "Menu administratora", + "menu.section.access_control": "Uprawnienia", + "menu.section.access_control_authorizations": "Dostępy", + "menu.section.access_control_groups": "Grupy", + "menu.section.access_control_people": "Użytkownicy", + "menu.section.admin_search": "Wyszukiwanie administracyjne", + "menu.section.browse_community": "Ten zbiór", + "menu.section.browse_community_by_author": "Wg autorów", + "menu.section.browse_community_by_issue_date": "Wg daty wydania", + "menu.section.browse_community_by_title": "Wg tytułów", + "menu.section.browse_global": "Wszystko na DSpace", + "menu.section.browse_global_by_author": "Wg autorów", + "menu.section.browse_global_by_dateissued": "Wg daty wydania", + "menu.section.browse_global_by_subject": "Wg tematu", + "menu.section.browse_global_by_title": "Wg tytułu", + "menu.section.browse_global_communities_and_collections": "Zbiory i kolekcje", + "menu.section.control_panel": "Panel sterowania", + "menu.section.curation_task": "Zadanie administracyjne", + "menu.section.edit": "Edytuj", + "menu.section.edit_collection": "Kolekcja", + "menu.section.edit_community": "Zbiór", + "menu.section.edit_item": "Pozycja", + "menu.section.export": "Eksport", + "menu.section.export_collection": "Kolekcja", + "menu.section.export_community": "Zbiór", + "menu.section.export_item": "Pozycja", + "menu.section.export_metadata": "Metadane", + "menu.section.icon.access_control": "Sekcja menu Uprawnienia", + "menu.section.icon.admin_search": "Sekcja menu Wyszukiwanie administracyjne", + "menu.section.icon.control_panel": "Sekcja menu Panel sterowania", + "menu.section.icon.curation_tasks": "Sekcja menu Zadanie administracyjne", + "menu.section.icon.edit": "Sekcja menu Edycja", + "menu.section.icon.export": "Sekcja menu Eksport", + "menu.section.icon.find": "Sekcja menu Wyszukiwanie", + "menu.section.icon.import": "Sekcja menu Import", + "menu.section.icon.new": "Sekcja menu Dodaj", + "menu.section.icon.pin": "Przypnij boczny pasek", + "menu.section.icon.processes": "Sekcja menu Procesy", + "menu.section.icon.registries": "Sekcja menu Rejestry", + "menu.section.icon.statistics_task": "Sekcja menu Zadanie statystyczne", + "menu.section.icon.workflow": "Sekcja menu Zarządzanie workflow", + "menu.section.icon.unpin": "Odepnij boczny pasek", + "menu.section.import": "Import", + "menu.section.import_batch": "Import masowy (ZIP)", + "menu.section.import_metadata": "Metadane", + "menu.section.new": "Dodaj", + "menu.section.new_collection": "Kolekcja", + "menu.section.new_community": "Zbiór", + "menu.section.new_item": "Pozycja", + "menu.section.new_item_version": "Wersja pozycji", + "menu.section.new_process": "Proces", + "menu.section.pin": "Przypnij pasek boczny", + "menu.section.unpin": "Odepnij pasek boczny", + "menu.section.processes": "Procesy", + "menu.section.registries": "Rejestry", + "menu.section.registries_format": "Formaty", + "menu.section.registries_metadata": "Metadane", + "menu.section.statistics": "Statystyki", + "menu.section.statistics_task": "Zadanie statystyczne", + "menu.section.toggle.access_control": "Przełącz sekcję Uprawnienia", + "menu.section.toggle.control_panel": "Przełącz sekcję Panel sterowania", + "menu.section.toggle.curation_task": "Przełącz sekcję Zadanie kuratora", + "menu.section.toggle.edit": "Przełącz sekcję Edytuj", + "menu.section.toggle.export": "Przełącz sekcję Eksport", + "menu.section.toggle.find": "Przełącz sekcję Wyszukiwanie", + "menu.section.toggle.import": "Przełącz sekcję Import", + "menu.section.toggle.new": "Przełącz nową sekcję", + "menu.section.toggle.registries": "Przełącz sekcję Rejestry", + "menu.section.toggle.statistics_task": "Przełącz sekcję Zadanie statystyczne", + "menu.section.workflow": "Zarządzaj Workflow", + "mydspace.breadcrumbs": "Mój DSpace", + "mydspace.description": "", + "mydspace.messages.controller-help": "Wybierz tę opcję, aby przesłać wiadomość do zgłaszającego.", + "mydspace.messages.description-placeholder": "Wpisz swoją wiadomość tutaj...", + "mydspace.messages.hide-msg": "Ukryj wiadomość", + "mydspace.messages.mark-as-read": "Oznacz jako przeczytane", + "mydspace.messages.mark-as-unread": "Oznacz jako nieprzeczytane", + "mydspace.messages.no-content": "Brak treści.", + "mydspace.messages.no-messages": "Brak wiadomości.", + "mydspace.messages.send-btn": "Wysłano", + "mydspace.messages.show-msg": "Pokaż wiadomość", + "mydspace.messages.subject-placeholder": "Temat...", + "mydspace.messages.submitter-help": "Wybierz tę opcję, aby przesłać wiadomość do osoby kontrolującej.", + "mydspace.messages.title": "Wiadomości", + "mydspace.messages.to": "Do", + "mydspace.new-submission": "Nowe zgłoszenie", + "mydspace.new-submission-external": "Import medatanych z zewnętrznego źródła", + "mydspace.new-submission-external-short": "Import metadanych", + "mydspace.results.head": "Twoje zadania", + "mydspace.results.no-abstract": "Brak abstraktu", + "mydspace.results.no-authors": "Brak autorów", + "mydspace.results.no-collections": "Brak kolekcji", + "mydspace.results.no-date": "Brak daty", + "mydspace.results.no-files": "Brak plików", + "mydspace.results.no-results": "Brak pozycji do wyświetlenia", + "mydspace.results.no-title": "Brak tytułu", + "mydspace.results.no-uri": "Brak Uri", + "mydspace.search-form.placeholder": "Wyszukaj w mydspace...", + "mydspace.show.workflow": "Wszystkie zadania", + "mydspace.show.workspace": "Twoje zadania", + "mydspace.status.mydspaceArchived": "Zarchiwizowano", + "mydspace.status.mydspaceValidation": "Walidacja", + "mydspace.status.mydspaceWaitingController": "Oczekiwanie na redaktora", + "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkspace": "Wersja robocza", + "mydspace.title": "Mój DSpace", + "mydspace.upload.upload-failed": "Bład podczas tworzenia nowej wersji roboczej. Sprawdź poprawność plików i spróbuj ponownie.", + "mydspace.upload.upload-failed-manyentries": "Plik jest niemożliwy do przetworzenia. Wykryto wiele wejść, a dopuszczalne jest tylko jedno dla jednego pliku.", + "mydspace.upload.upload-failed-moreonefile": "Zapytanie niemożliwe do przetworzenia. Tylko jeden plik jest dopuszczalny.", + "mydspace.upload.upload-multiple-successful": "Utworzono {{qty}} przestrzeni roboczych.", + "mydspace.view-btn": "Widok", + "nav.browse.header": "Cały DSpace", + "nav.community-browse.header": "Wg zbiorów", + "nav.language": "Zmień język", + "nav.login": "Zaloguj", + "nav.logout": "Menu profilu użytkownika i wylogowywanie", + "nav.main.description": "Główny pasek nawigacji", + "nav.mydspace": "Mój DSpace", + "nav.profile": "Profil", + "nav.search": "Wyszukiwanie", + "nav.statistics.header": "Statystyki", + "nav.stop-impersonating": "Przestań impersonifikować użytkownika", + "nav.toggle": "Przełącz nawigację", + "nav.user.description": "Pasek profilu użytkownika", + "none.listelement.badge": "Pozycja", + "person.listelement.badge": "Osoba", + "person.listelement.no-title": "Nie znaleziono imienia", + "person.page.birthdate": "Data urodzenia", + "person.page.edit": "Edytuj pozycję", + "person.page.email": "Adres e-mail", + "person.page.firstname": "Imię", + "person.page.jobtitle": "Stanowisko", + "person.page.lastname": "Nazwisko", + "person.page.link.full": "Pokaż wszystkie metadane", + "person.page.orcid": "ORCID", + "person.page.orcid.create": "Utwórz ORCID ID", + "person.page.orcid.granted-authorizations": "Udzielone dostępy", + "person.page.orcid.grant-authorizations": "Udziel dostępu", + "person.page.orcid.link": "Połącz z ORCID ID", + "person.page.orcid.orcid-not-linked-message": "ORCID iD tego profilu ({{ orcid }}) nie jest połączony z bazą ORCID lub połączenie wygasło.", + "person.page.orcid.unlink": "Odepnij z ORCID", + "person.page.orcid.unlink.processing": "Procesowanie...", + "person.page.orcid.missing-authorizations": "Brak dostępów", + "person.page.orcid.missing-authorizations-message": "Brakuj następujących dostępów:", + "person.page.orcid.no-missing-authorizations-message": "Świetnie! To miejsce jest puste, co oznacza, że masz dostęp do wszystkich uprawnień, które są dostępne w Twojej instytucji.", + "person.page.orcid.no-orcid-message": "Brak przypisanego ORCID iD. Poprez wybranie przycisku poniżej możesz powiązać ten profil wraz z kontem ORCID.", + "person.page.orcid.profile-preferences": "Preferencje profilu", + "person.page.orcid.funding-preferences": "Preferencje finansowania", + "person.page.orcid.publications-preferences": "Preferencje publikacji", + "person.page.orcid.remove-orcid-message": "Jeśli chcesz usunąć Twój ORCID, skontaktuj się z administratorem repozytorium", + "person.page.orcid.save.preference.changes": "Aktualizuj ustawienia", + "person.page.orcid.sync-profile.affiliation": "Afiliacja", + "person.page.orcid.sync-profile.biographical": "Biografia", + "person.page.orcid.sync-profile.education": "Edukacja", + "person.page.orcid.sync-profile.identifiers": "Identyfikatory", + "person.page.orcid.sync-fundings.all": "Wszystkie źrodła finansowania", + "person.page.orcid.sync-fundings.mine": "Moje źrodła finansowania", + "person.page.orcid.sync-fundings.my_selected": "Wybrane źródła finansowania", + "person.page.orcid.sync-fundings.disabled": "Nieaktywne", + "person.page.orcid.sync-publications.all": "Wszystkie publikacje", + "person.page.orcid.sync-publications.mine": "Moje publikacje", + "person.page.orcid.sync-publications.my_selected": "Wybrane publikacje", + "person.page.orcid.sync-publications.disabled": "Nieaktywne", + "person.page.orcid.sync-queue.discard": "Odrzuć zmianę i nie synchronizuj z ORCID", + "person.page.orcid.sync-queue.discard.error": "Rekord kolejki ORCID nie został odrzucony", + "person.page.orcid.sync-queue.discard.success": "Rekord kolejki ORCID został odrzucony", + "person.page.orcid.sync-queue.empty-message": "Rejestr kolejki w ORCID jest pusty", + "person.page.orcid.sync-queue.description.affiliation": "Afiliacje", + "person.page.orcid.sync-queue.description.country": "Kraj", + "person.page.orcid.sync-queue.description.education": "Edukacja", + "person.page.orcid.sync-queue.description.external_ids": "Zewnętrzne identyfikatory", + "person.page.orcid.sync-queue.description.other_names": "Inne imiona", + "person.page.orcid.sync-queue.description.qualification": "Kwalifikacje", + "person.page.orcid.sync-queue.description.researcher_urls": "URL naukowca", + "person.page.orcid.sync-queue.description.keywords": "Słowa kluczowe", + "person.page.orcid.sync-queue.tooltip.insert": "Dodaj nowy wpis w rejestrze ORCID", + "person.page.orcid.sync-queue.tooltip.update": "Aktualizuj ten wpis w rejestrze ORCID", + "person.page.orcid.sync-queue.tooltip.delete": "Usuń ten wpis z rejestru ORCID", + "person.page.orcid.sync-queue.tooltip.publication": "Publikacja", + "person.page.orcid.sync-queue.tooltip.affiliation": "Afiliacja", + "person.page.orcid.sync-queue.tooltip.education": "Edukacja", + "person.page.orcid.sync-queue.tooltip.qualification": "Kwalifikacje", + "person.page.orcid.sync-queue.tooltip.other_names": "Inna nazwa", + "person.page.orcid.sync-queue.tooltip.country": "Kraj", + "person.page.orcid.sync-queue.tooltip.keywords": "Słowa kluczowe", + "person.page.orcid.sync-queue.tooltip.external_ids": "Zewnętrzny identyfikator", + "person.page.orcid.sync-queue.tooltip.researcher_urls": "URL naukowca", + "person.page.orcid.sync-queue.send": "Synchronizuj z rejestrem ORCID", + "person.page.orcid.sync-queue.send.unauthorized-error.title": "Wysłanie zgłoszenia do ORCID nieudane z powodu braku uprawnień.", + "person.page.orcid.sync-queue.send.unauthorized-error.content": "Wybierz here, aby wystąpić o niezbędne uprawnienia. Jeśli problem wciąż występuje, skontaktuj się z administratorem", + "person.page.orcid.sync-queue.send.bad-request-error": "Wysłanie zgłoszenia do ORCID nie powiodło się ponieważ źródła wysłane do rejestru ORCID nie jest poprawne", + "person.page.orcid.sync-queue.send.error": "Wysłanie zgłoszenia do ORCID nie powiodło się", + "person.page.orcid.sync-queue.send.conflict-error": "Zgłoszenie do ORCID nie powiodło się, ponieważ ta pozycja jest już dodana do rejestru ORCID", + "person.page.orcid.sync-queue.send.not-found-warning": "Pozycja nie istnieje już w rejestrze ORCID.", + "person.page.orcid.sync-queue.send.success": "Zgłoszenie do ORCID zostało zakończone pomyślnie", + "person.page.orcid.sync-queue.send.validation-error": "Dane, które chcesz zsynchronizować z ORCID nie są poprawne", + "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "Waluta jest wymagana", + "person.page.orcid.sync-queue.send.validation-error.external-id.required": "Aby wysłać pozycję, należy podać przynajmniej jeden identyfikator", + "person.page.orcid.sync-queue.send.validation-error.title.required": "Tytuł jest wymagany", + "person.page.orcid.sync-queue.send.validation-error.type.required": "Typ jest wymagany", + "person.page.orcid.sync-queue.send.validation-error.start-date.required": "Data początkowa jest wymagana", + "person.page.orcid.sync-queue.send.validation-error.funder.required": "Instytucja finansująca jest wymagana", + "person.page.orcid.sync-queue.send.validation-error.organization.required": "Instytucja jest wymagana", + "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "Nazwa instytucji jest wymagana", + "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "Aby wysłać instytucję, należy podać adres", + "person.page.orcid.sync-queue.send.validation-error.organization.city-required": "Aby wysłać adres, należy podać miasto", + "person.page.orcid.sync-queue.send.validation-error.organization.country-required": "Aby wysłać adres, należy podać kraj", + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.required": "Wymagany jest identyfikator umożliwiający rozróżnienie instytucji. Obsługiwane identyfikatory to GRID, Ringgold, kod LEI oraz identyfikatory z rejestru instytucji finansujących Crossref.", + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.value-required": "Należy uzupełnić wartość w identyfikatorze instytucji", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "Należy uzupełnić źródło w identyfikatorze instytucji", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "Źródło jednego z identyfikatorów organizcji jest niepoprawne. Wspierane źródła to RINGGOLD, GRID, LEI and FUNDREF", + "person.page.orcid.synchronization-mode": "Tryb synchronizacji", + "person.page.orcid.synchronization-mode.batch": "Wsad", + "person.page.orcid.synchronization-mode.label": "Tryb synchronizacji", + "person.page.orcid.synchronization-mode-message": "Włącz tryb 'Manual' synchronizacja, aby wyłaczyć tryb synchronizacji wsadowej, wtedy dane do rejestru ORCID będą musiały zostać wysłane ręcznie", + "person.page.orcid.synchronization-settings-update.success": "Opcje synchronizacji zostały zaktualizowane", + "person.page.orcid.synchronization-settings-update.error": "Opcje synchronizacji nie zostały zaktualizowane", + "person.page.orcid.synchronization-mode.manual": "Ręczna", + "person.page.orcid.scope.authenticate": "Uzyskaj swój ORCID iD", + "person.page.orcid.scope.read-limited": "Przeczytaj informacje o ustawieniach widoczności z firmami trzeciami", + "person.page.orcid.scope.activities-update": "Dodaj/aktualizuj swoje aktywności naukowe", + "person.page.orcid.scope.person-update": "Dodaj/aktualizuj inne informacje o Tobie", + "person.page.orcid.unlink.success": "Odłączenie Twojego profilu od rejestru ORCID powiodło się", + "person.page.orcid.unlink.error": "Wystąpił błąd podczas odłączania Twojego profilu od rejestru ORCID. Spróbuj ponownie", + "person.page.staffid": "ID pracownika", + "person.page.titleprefix": "Osoba: ", + "person.search.results.head": "Wyniki wyszukiwania użytkowników", + "person.search.title": "Wyniki wyszukiwania użytkowników", + "process.new.select-parameters": "Parametry", + "process.new.cancel": "Anuluj", + "process.new.submit": "Zapisz", + "process.new.select-script": "Skrypt", + "process.new.select-script.placeholder": "Wybierz skrypt...", + "process.new.select-script.required": "Skrypt jest wymagany", + "process.new.parameter.file.upload-button": "Wybierz plik...", + "process.new.parameter.file.required": "Proszę wybrać plik", + "process.new.parameter.string.required": "Wartość parametru jest wymagana", + "process.new.parameter.type.value": "wartość", + "process.new.parameter.type.file": "plik", + "process.new.parameter.required.missing": "Te parametry są wymagane, ale nie zostały uzupełnione:", + "process.new.notification.success.title": "Udało się", + "process.new.notification.success.content": "Udało się stworzyć proces", + "process.new.notification.error.title": "Błąd", + "process.new.notification.error.content": "Wystąpił błąd podczas tworzenia procesu", + "process.new.header": "Utwórz nowy proces", + "process.new.title": "Utwórz nowy proces", + "process.new.breadcrumbs": "Utwórz nowy proces", + "process.detail.arguments": "Argumenty", + "process.detail.arguments.empty": "Do tego procesu nie zostały przypisane żadne argumenty", + "process.detail.back": "Cofnij", + "process.detail.output": "Dane wyjściowe procesu", + "process.detail.logs.button": "Odzyskaj dane wyjściowe procesu", + "process.detail.logs.loading": "Odzyskiwanie", + "process.detail.logs.none": "Ten proces nie ma danych wyjściowych", + "process.detail.output-files": "Pliki", + "process.detail.output-files.empty": "Ten proces nie ma żadnych plików danych wyjściowych", + "process.detail.script": "Skrypt", + "process.detail.title": "Proces: {{ id }} - {{ name }}", + "process.detail.start-time": "Czas rozpoczęcia procesu", + "process.detail.end-time": "Czas zakończenia procesu", + "process.detail.status": "Status", + "process.detail.create": "Stwórz podobny proces", + "process.overview.table.finish": "Czas zakończenia (UTC)", + "process.overview.table.id": "Identyfikator procesu", + "process.overview.table.name": "Nazwa", + "process.overview.table.start": "Czas rozpoczęcia (UTC)", + "process.overview.table.status": "Status", + "process.overview.table.user": "Użytkownik", + "process.overview.title": "Przegląd procesów", + "process.overview.breadcrumbs": "Przegląd procesów", + "process.overview.new": "Nowy", + "profile.breadcrumbs": "Zaktualizuj profil", + "profile.card.identify": "Dane", + "profile.card.security": "Bezpieczeństwo", + "profile.form.submit": "Zaktualizuj profil", + "profile.groups.head": "Posiadane uprawnienia do kolekcji", + "profile.head": "Zaktualizuj profil", + "profile.metadata.form.error.firstname.required": "Imię jest wymagane", + "profile.metadata.form.error.lastname.required": "Nazwisko jest wymagane", + "profile.metadata.form.label.email": "Adres e-mail", + "profile.metadata.form.label.firstname": "Imię", + "profile.metadata.form.label.language": "Język", + "profile.metadata.form.label.lastname": "Nazwisko", + "profile.metadata.form.label.phone": "Telefon kontaktowy", + "profile.metadata.form.notifications.success.content": "Zmiany w profilu zostały zapisane.", + "profile.metadata.form.notifications.success.title": "Profil zapisany", + "profile.notifications.warning.no-changes.content": "Nie dokonano żadnych zmian w profilu.", + "profile.notifications.warning.no-changes.title": "Brak zmian", + "profile.security.form.error.matching-passwords": "Hasła nie są identyczne.", + "profile.security.form.info": "Możesz wprowadzić nowe hasło w polu poniżej i zatwierdzić poprzez ponowne wpisanie. Hasło musi mieć przynajmniej 6 znaków.", + "profile.security.form.label.password": "Hasło", + "profile.security.form.label.passwordrepeat": "Potwierdź hasło", + "profile.security.form.notifications.success.content": "Twoje zmiany w haśle zostały zapisane.", + "profile.security.form.notifications.success.title": "Hasło zapisane", + "profile.security.form.notifications.error.title": "Błąd podczas próby zmiany hasła", + "profile.security.form.notifications.error.not-same": "Hasła nie są identyczne.", + "profile.title": "Zaktualizuj profil", + "profile.card.researcher": "Profil naukowca", + "project.listelement.badge": "Projekt badawczy", + "project.page.contributor": "Autorzy", + "project.page.description": "Opis", + "project.page.edit": "Edytuj pozycję", + "project.page.expectedcompletion": "Spodziewany termin zakończenia", + "project.page.funder": "Instytucje finansujące", + "project.page.id": "ID", + "project.page.keyword": "Słowa kluczowe", + "project.page.status": "Status", + "project.page.titleprefix": "Projekt badawczy: ", + "project.search.results.head": "Wyniki wyszukiwania projektów", + "publication.listelement.badge": "Publikacja", + "publication.page.description": "Opis", + "publication.page.edit": "Edytuj pozycję", + "publication.page.journal-issn": "ISSN czasopisma", + "publication.page.journal-title": "Tytuł czasopisma", + "publication.page.publisher": "Wydawca", + "publication.page.titleprefix": "Publikacja: ", + "publication.page.volume-title": "Tytuł tomu", + "publication.search.results.head": "Wyniki wyszukiwania publikacji", + "publication.search.title": "Wyszukiwanie publikacji", + "media-viewer.next": "Nowy", + "media-viewer.previous": "Poprzedni", + "media-viewer.playlist": "Playlista", + "register-email.title": "Rejestracja nowego użytkownika", + "register-page.create-profile.header": "Stwórz profil", + "register-page.create-profile.identification.header": "Dane", + "register-page.create-profile.identification.email": "Adres e-mail", + "register-page.create-profile.identification.first-name": "Imię *", + "register-page.create-profile.identification.first-name.error": "Wpisz imię", + "register-page.create-profile.identification.last-name": "Nazwisko *", + "register-page.create-profile.identification.last-name.error": "Wpisz nazwisko", + "register-page.create-profile.identification.contact": "Telefon kontaktowy", + "register-page.create-profile.identification.language": "Język", + "register-page.create-profile.security.header": "Bezpieczeństwo", + "register-page.create-profile.security.info": "Wprowadź nowe hasło w polu poniżej i zatwierdź poprzez ponowne wpisanie w drugim polu. Hasło musi mieć przynajmniej 6 znaków.", + "register-page.create-profile.security.label.password": "Hasło *", + "register-page.create-profile.security.label.passwordrepeat": "Potwierdź hasło *", + "register-page.create-profile.security.error.empty-password": "Wprowadź hasło w polu poniżej.", + "register-page.create-profile.security.error.matching-passwords": "Hasła nie są identyczne.", + "register-page.create-profile.submit": "Rejestracja zakończona", + "register-page.create-profile.submit.error.content": "Coś się nie udało podczas rejestracji nowego użytkownika.", + "register-page.create-profile.submit.error.head": "Rejestracja nie powiodła się", + "register-page.create-profile.submit.success.content": "Rejestracja powiodła się. Zalogowano jako stworzony użytkownik.", + "register-page.create-profile.submit.success.head": "Rejestracja zakończona", + "register-page.registration.header": "Rejestracja nowego użytkownika", + "register-page.registration.info": "Zarejestruj się, aby otrzymywać wiadomości o nowych pozycjach w obserowanych kolekcjach, a także przesyłać nowe pozycje do repozytorium.", + "register-page.registration.email": "Adres e-mail *", + "register-page.registration.email.error.required": "Wypełnij adres e-mail", + "register-page.registration.email.error.pattern": "Wypełnij poprawny adres e-mail", + "register-page.registration.email.hint": "Ten adres e-mail będzie zweryfikowany i będziesz go używać jako swój login.", + "register-page.registration.submit": "Zarejestruj się", + "register-page.registration.success.head": "Wiadomość weryfikacyjna zostałą wysłana", + "register-page.registration.success.content": "Wiadomość została wysłana na adres e-mail {{ email }}. Zawiera ona unikatowy link i dalsze instrukcje postępowania.", + "register-page.registration.error.head": "Błąd podczas próby rejestracji adresu e-mail", + "register-page.registration.error.content": "Błąd podczas próby rejestracji adresu e-mail: {{ email }}", + "relationships.add.error.relationship-type.content": "Nie znaleziono dopasowania dla typu relacji {{ type }} pomiędzy dwoma pozycjami", + "relationships.add.error.server.content": "Błąd serwera", + "relationships.add.error.title": "Nie można dodać relacji", + "relationships.isAuthorOf": "Autorzy", + "relationships.isAuthorOf.Person": "Autorzy (osoby)", + "relationships.isAuthorOf.OrgUnit": "Autorzy (jednostki organizacyjne)", + "relationships.isIssueOf": "Numery czasopisma", + "relationships.isJournalIssueOf": "Numer czasopisma", + "relationships.isJournalOf": "Czasopisma", + "relationships.isOrgUnitOf": "Jednostki organizacyjne", + "relationships.isPersonOf": "Autorzy", + "relationships.isProjectOf": "Projekty badawcze", + "relationships.isPublicationOf": "Publikacje", + "relationships.isPublicationOfJournalIssue": "Artykuły", + "relationships.isSingleJournalOf": "Czasopismo", + "relationships.isSingleVolumeOf": "Tom czasopisma", + "relationships.isVolumeOf": "Tomy czasopisma", + "relationships.isContributorOf": "Autorzy", + "relationships.isContributorOf.OrgUnit": "Autor (Jednostka organizacyjna)", + "relationships.isContributorOf.Person": "Autor", + "relationships.isFundingAgencyOf.OrgUnit": "Instytucja finansująca", + "repository.image.logo": "Logo repozytorium", + "repository.title.prefix": "DSpace Angular :: ", + "researcher.profile.action.processing": "Procesowanie...", + "researcher.profile.associated": "Przypisanie profilu badacza", + "researcher.profile.create.new": "Utwórz nowy", + "researcher.profile.create.success": "Profil badacza został utworzony", + "researcher.profile.create.fail": "Wystąpił błąd poczas tworzenia profilu badacza.", + "researcher.profile.delete": "Usuń", + "researcher.profile.expose": "Ujawnij", + "researcher.profile.hide": "Ukryj", + "researcher.profile.not.associated": "Profil badacza nie został jeszcze przypisany", + "researcher.profile.view": "Widok", + "researcher.profile.private.visibility": "PRYWATNY", + "researcher.profile.public.visibility": "PUBLICZNY", + "researcher.profile.status": "Status:", + "researcherprofile.claim.not-authorized": "Nie masz uprawnień, aby wystąpić o tę pozycję. Aby otrzymać więcej szczegółów, skontaktuj się z administratorami.", + "researcherprofile.error.claim.body": "Wystąpił błąd podczas wystąpienia z prośbą o przypisanie profilu. Spróbuj ponownie później.", + "researcherprofile.error.claim.title": "Błąd", + "researcherprofile.success.claim.body": "Wystąpienie z prośbą o przypisanie profilu udane", + "researcherprofile.success.claim.title": "Sukces", + "repository.title.prefixDSpace": "DSpace Angular ::", + "resource-policies.add.button": "Dodaj", + "resource-policies.add.for.": "Dodaj nową politykę", + "resource-policies.add.for.bitstream": "Dodaj nową politykę dla plików", + "resource-policies.add.for.bundle": "Dodaj nową politykę paczek", + "resource-policies.add.for.item": "Dodaj nową politykę pozycji", + "resource-policies.add.for.community": "Dodaj nową politykę zbioru", + "resource-policies.add.for.collection": "Dodaj nową politykę kolekcji", + "resource-policies.create.page.heading": "Utwórz nową politykę zasobu dla ", + "resource-policies.create.page.failure.content": "Wystąpił błąd podczas dodawania polityki zasobów.", + "resource-policies.create.page.success.content": "Działanie powiodło się", + "resource-policies.create.page.title": "Utwórz nową politykę zasobu", + "resource-policies.delete.btn": "Usuń zaznaczone", + "resource-policies.delete.btn.title": "Usuń zaznaczone polityki zasobów", + "resource-policies.delete.failure.content": "Wystąpił błąd podczas usuwania wybranych polityk zasobów.", + "resource-policies.delete.success.content": "Działanie powiodło się", + "resource-policies.edit.page.heading": "Edytuj politykę zasobu ", + "resource-policies.edit.page.failure.content": "Wystąpił błąd poczas edytowania polityki zasobu.", + "resource-policies.edit.page.success.content": "Działanie udało się", + "resource-policies.edit.page.title": "Edytuj politykę zasobu", + "resource-policies.form.action-type.label": "Wybierz ten typ akcji", + "resource-policies.form.action-type.required": "Musisz wybrać akcję polityki zasobu.", + "resource-policies.form.eperson-group-list.label": "Użytkownik lub grupa, która otrzyma uprawnienia.", + "resource-policies.form.eperson-group-list.select.btn": "Wybierz", + "resource-policies.form.eperson-group-list.tab.eperson": "Wyszukaj użytkownika", + "resource-policies.form.eperson-group-list.tab.group": "Wyszukaj grupę", + "resource-policies.form.eperson-group-list.table.headers.action": "Akcja", + "resource-policies.form.eperson-group-list.table.headers.id": "ID", + "resource-policies.form.eperson-group-list.table.headers.name": "Nazwa", + "resource-policies.form.date.end.label": "Data zakończenia", + "resource-policies.form.date.start.label": "Data rozpoczęcia", + "resource-policies.form.description.label": "Opis", + "resource-policies.form.name.label": "Nazwa", + "resource-policies.form.policy-type.label": "Wybierz typ polityki", + "resource-policies.form.policy-type.required": "Musisz wybrać typ polityki zasobu.", + "resource-policies.table.headers.action": "Akcja", + "resource-policies.table.headers.date.end": "Data zakończenia", + "resource-policies.table.headers.date.start": "Data rozpoczęcia", + "resource-policies.table.headers.edit": "Edytuj", + "resource-policies.table.headers.edit.group": "Edytuj grupę", + "resource-policies.table.headers.edit.policy": "Edytuj politykę", + "resource-policies.table.headers.eperson": "Użytkownik", + "resource-policies.table.headers.group": "Grupa", + "resource-policies.table.headers.id": "ID", + "resource-policies.table.headers.name": "Nazwa", + "resource-policies.table.headers.policyType": "typ", + "resource-policies.table.headers.title.for.bitstream": "Polityki dla plików", + "resource-policies.table.headers.title.for.bundle": "Polityki dla paczek", + "resource-policies.table.headers.title.for.item": "Polityki dla pozycji", + "resource-policies.table.headers.title.for.community": "Polityki dla zbioru", + "resource-policies.table.headers.title.for.collection": "Polityki dla kolekcji", + "search.description": "", + "search.switch-configuration.title": "Pokaż", + "search.title": "Szukaj", + "search.breadcrumbs": "Szukaj", + "search.search-form.placeholder": "Szukaj w repozytorium...", + "search.filters.applied.f.author": "Autor", + "search.filters.applied.f.dateIssued.max": "Data zakończenia", + "search.filters.applied.f.dateIssued.min": "Data rozpoczęcia", + "search.filters.applied.f.dateSubmitted": "Data zgłoszenia", + "search.filters.applied.f.discoverable": "Ukryty", + "search.filters.applied.f.entityType": "Typ pozycji", + "search.filters.applied.f.has_content_in_original_bundle": "Ma przypisane pliki", + "search.filters.applied.f.itemtype": "Typ", + "search.filters.applied.f.namedresourcetype": "Status", + "search.filters.applied.f.subject": "Temat", + "search.filters.applied.f.submitter": "Zgłaszający", + "search.filters.applied.f.jobTitle": "Stanowisko", + "search.filters.applied.f.birthDate.max": "Data zakończenia tworzenia", + "search.filters.applied.f.birthDate.min": "Data rozpoczęcia tworzenia", + "search.filters.applied.f.withdrawn": "Wycofane", + "search.filters.filter.author.head": "Autor", + "search.filters.filter.author.placeholder": "Autor", + "search.filters.filter.author.label": "Wyszukaj autora", + "search.filters.filter.birthDate.head": "Data urodzenia", + "search.filters.filter.birthDate.placeholder": "Data urodzenia", + "search.filters.filter.birthDate.label": "Wyszukaj datę urodzenia", + "search.filters.filter.collapse": "Ukryj filtr", + "search.filters.filter.creativeDatePublished.head": "Data opublikowania", + "search.filters.filter.creativeDatePublished.placeholder": "Data opublikowania", + "search.filters.filter.creativeDatePublished.label": "Wyszukaj datę opublikowania", + "search.filters.filter.creativeWorkEditor.head": "Redaktor", + "search.filters.filter.creativeWorkEditor.placeholder": "Redaktor", + "search.filters.filter.creativeWorkEditor.label": "Wyszukaj redaktora", + "search.filters.filter.creativeWorkKeywords.head": "Słowo kluczowe", + "search.filters.filter.creativeWorkKeywords.placeholder": "Słowo kluczowe", + "search.filters.filter.creativeWorkKeywords.label": "Wyszukaj temat", + "search.filters.filter.creativeWorkPublisher.head": "Wydawca", + "search.filters.filter.creativeWorkPublisher.placeholder": "Wydawca", + "search.filters.filter.creativeWorkPublisher.label": "Wyszukaj wydawcę", + "search.filters.filter.dateIssued.head": "Data", + "search.filters.filter.dateIssued.max.placeholder": "Data maksymalna", + "search.filters.filter.dateIssued.max.label": "Koniec", + "search.filters.filter.dateIssued.min.placeholder": "Data minimalna", + "search.filters.filter.dateIssued.min.label": "Start", + "search.filters.filter.dateSubmitted.head": "Data zgłoszenia", + "search.filters.filter.dateSubmitted.placeholder": "Data zgłoszenia", + "search.filters.filter.dateSubmitted.label": "Wyszukaj datę zgłoszenia", + "search.filters.filter.discoverable.head": "Ukryty", + "search.filters.filter.withdrawn.head": "Wycofane", + "search.filters.filter.entityType.head": "Typ pozycji", + "search.filters.filter.entityType.placeholder": "Typ pozycji", + "search.filters.filter.entityType.label": "Wyszukaj typ pozycji", + "search.filters.filter.expand": "Rozwiń filtr", + "search.filters.filter.has_content_in_original_bundle.head": "Ma przypisane pliki", + "search.filters.filter.itemtype.head": "Typ", + "search.filters.filter.itemtype.placeholder": "Typ", + "search.filters.filter.itemtype.label": "Wyszukaj typ", + "search.filters.filter.jobTitle.head": "Stanowisko", + "search.filters.filter.jobTitle.placeholder": "Stanowisko", + "search.filters.filter.jobTitle.label": "Wyszukaj stanowisko", + "search.filters.filter.knowsLanguage.head": "Znajomość języka", + "search.filters.filter.knowsLanguage.placeholder": "Znajomość języka", + "search.filters.filter.knowsLanguage.label": "Wyszukaj wg znajomości języka", + "search.filters.filter.namedresourcetype.head": "Status", + "search.filters.filter.namedresourcetype.placeholder": "Status", + "search.filters.filter.namedresourcetype.label": "Wyszukaj status", + "search.filters.filter.objectpeople.head": "Osoby", + "search.filters.filter.objectpeople.placeholder": "Osoby", + "search.filters.filter.objectpeople.label": "Wyszukaj użytkowników", + "search.filters.filter.organizationAddressCountry.head": "Kraj", + "search.filters.filter.organizationAddressCountry.placeholder": "Kraj", + "search.filters.filter.organizationAddressCountry.label": "Wyszukaj kraj", + "search.filters.filter.organizationAddressLocality.head": "Miasto", + "search.filters.filter.organizationAddressLocality.placeholder": "Miasto", + "search.filters.filter.organizationAddressLocality.label": "Wyszukaj miasto", + "search.filters.filter.organizationFoundingDate.head": "Data założenia", + "search.filters.filter.organizationFoundingDate.placeholder": "Data założenia", + "search.filters.filter.organizationFoundingDate.label": "Wyszukaj datę założenia", + "search.filters.filter.scope.head": "Zakres", + "search.filters.filter.scope.placeholder": "Filtr zakresu", + "search.filters.filter.scope.label": "Wyszukaj filtr zakresu", + "search.filters.filter.show-less": "Pokaż mniej", + "search.filters.filter.show-more": "Pokaż więcej", + "search.filters.filter.subject.head": "Temat", + "search.filters.filter.subject.placeholder": "Temat", + "search.filters.filter.subject.label": "Wyszukaj temat", + "search.filters.filter.submitter.head": "Zgłaszający", + "search.filters.filter.submitter.placeholder": "Zgłaszający", + "search.filters.filter.submitter.label": "Wyszukaj zgłaszającego", + "search.filters.entityType.JournalIssue": "Numer czasopisma", + "search.filters.entityType.JournalVolume": "Tom czasopisma", + "search.filters.entityType.OrgUnit": "Jednostka organizacyjna", + "search.filters.has_content_in_original_bundle.true": "Tak", + "search.filters.has_content_in_original_bundle.false": "Nie", + "search.filters.discoverable.true": "Nie", + "search.filters.discoverable.false": "Tak", + "search.filters.withdrawn.true": "Tak", + "search.filters.withdrawn.false": "Nie", + "search.filters.head": "Filtry", + "search.filters.reset": "Resetuj filtry", + "search.filters.search.submit": "Zastosuj", + "search.form.search": "Wyszukaj", + "search.form.search_dspace": "W repozytorium", + "search.form.scope.all": "W całym DSpace", + "search.results.head": "Wyniki wyszukiwania", + "default.search.results.head": "Wyniki wyszukiwania", + "search.results.no-results": "Twoj wyszukiwanie nie zwróciło żadnych rezultatów. Masz problem ze znalezieniem tego czego szukasz? Spróbuj użyć", + "search.results.no-results-link": "fraz podobnych do Twojego wyszukiwania", + "search.results.empty": "Twoje wyszukiwanie nie zwróciło żadnych rezultatów.", + "search.sidebar.close": "Wróć do wyników wyszukiwania", + "search.sidebar.filters.title": "Filtry", + "search.sidebar.open": "Narzędzia wyszukiwania", + "search.sidebar.results": "wyniki", + "search.sidebar.settings.rpp": "Wyników na stronie", + "search.sidebar.settings.sort-by": "Sortuj według", + "search.sidebar.settings.title": "Ustawienia", + "search.view-switch.show-detail": "Wyświetl widok szczegółowy", + "search.view-switch.show-grid": "Wyświetl jako siatkę", + "search.view-switch.show-list": "Wyświetl jako listę", + "sorting.ASC": "Rosnąco", + "sorting.DESC": "Malejąco", + "sorting.dc.title.ASC": "Tytułami rosnąco", + "sorting.dc.title.DESC": "Tytułami malejąco", + "sorting.score.ASC": "Najmniej trafne", + "sorting.score.DESC": "Najbardziej trafne", + "sorting.dc.date.issued.ASC": "Data wydania rosnąco", + "sorting.dc.date.issued.DESC": "Data wydania malejąco", + "sorting.dc.date.accessioned.ASC": "Data dostępu rosnąco", + "sorting.dc.date.accessioned.DESC": "Data dostępu malejąco", + "sorting.lastModified.ASC": "Ostatnia modyfikacja rosnąco", + "sorting.lastModified.DESC": "Ostatnia modyfikacja malejąco", + "statistics.title": "Statystyki", + "statistics.header": "Statystyki dla {{ scope }}", + "statistics.breadcrumbs": "Statystyki", + "statistics.page.no-data": "Brak dostępnych danych", + "statistics.table.no-data": "Brak dostępnych danych", + "statistics.table.header.views": "Wyświetlenia", + "submission.edit.breadcrumbs": "Edytuj zgłoszenie", + "submission.edit.title": "Edytuj zgłoszenie", + "submission.general.cancel": "Anuluj", + "submission.general.cannot_submit": "Nie masz uprawnień, aby utworzyć nowe zgłoszenie.", + "submission.general.deposit": "Deponuj", + "submission.general.discard.confirm.cancel": "Anuluj", + "submission.general.discard.confirm.info": "Czy na pewno? To działanie nie może zostać cofnięte.", + "submission.general.discard.confirm.submit": "Tak, na pewno", + "submission.general.discard.confirm.title": "Odrzuć zgłoszenie", + "submission.general.discard.submit": "Odrzuć", + "submission.general.info.saved": "Zapisane", + "submission.general.info.pending-changes": "Niezapisane zmiany", + "submission.general.save": "Zapisz", + "submission.general.save-later": "Zapisz wersję roboczą", + "submission.import-external.page.title": "Importuj metdane z zewnętrznego źródła", + "submission.import-external.title": "Importuj metadane z zewnętrznego źródła", + "submission.import-external.title.Journal": "Importuj czasopismo z zewnętrznego źródła", + "submission.import-external.title.JournalIssue": "Importuj numer czasopisma z zewnętrznego źródła", + "submission.import-external.title.JournalVolume": "Importuj tom czasopisma z zewnętrznego źródła", + "submission.import-external.title.OrgUnit": "Importuj wydawcę z zewnętrznego źródła", + "submission.import-external.title.Person": "Importuj osobę z zewnętrznego źródła", + "submission.import-external.title.Project": "Importuj projekt z zewnętrznego źródła", + "submission.import-external.title.Publication": "Importuj publikację z zewnętrznego źródła", + "submission.import-external.title.none": "Importuj metadane z zewnętrznego źródła", + "submission.import-external.page.hint": "Enter a query above to find items from the web to import in to DSpace.", + "submission.import-external.back-to-my-dspace": "Powrót do MyDSpace", + "submission.import-external.search.placeholder": "Wyszukaj zewnętrzne źródła danych", + "submission.import-external.search.button": "Szukaj", + "submission.import-external.search.button.hint": "Zacznij wpisywać frazę, aby wyszukać", + "submission.import-external.search.source.hint": "Wybierz zewnętrzne źródło", + "submission.import-external.source.ads": "NASA/ADS", + "submission.import-external.source.arxiv": "arXiv", + "submission.import-external.source.cinii": "CiNii", + "submission.import-external.source.crossref": "CrossRef", + "submission.import-external.source.loading": "ładowanie...", + "submission.import-external.source.sherpaJournal": "Czasopisma w SHERPA", + "submission.import-external.source.sherpaJournalIssn": "Czasopisma w SHERPA wg ISSN", + "submission.import-external.source.sherpaPublisher": "Wydawcy w SHERPA", + "submission.import-external.source.openAIREFunding": "Finansowanie OpenAIRE API", + "submission.import-external.source.orcid": "ORCID", + "submission.import-external.source.orcidWorks": "ORCID", + "submission.import-external.source.pubmed": "Pubmed", + "submission.import-external.source.pubmedeu": "Pubmed Europe", + "submission.import-external.source.lcname": "Nazwy Biblioteki Kongresu", + "submission.import-external.source.scielo": "SciELO", + "submission.import-external.source.scopus": "Scopus", + "submission.import-external.source.vufind": "VuFind", + "submission.import-external.source.wos": "Web Of Science", + "submission.import-external.source.epo": "Europejski Urząd Patentowy (EPO)", + "submission.import-external.preview.title.Journal": "Podgląd czasopisma", + "submission.import-external.preview.title.OrgUnit": "Podgląd organizacji", + "submission.import-external.preview.title.Person": "Podgląd osoby", + "submission.import-external.preview.title.Project": "Podgląd projektu", + "submission.import-external.preview.title.Publication": "Podgląd publikacji", + "submission.import-external.preview.subtitle": "Metadane poniżej zostały zaimportowane z zewnętrznego źródła. Niektóre pola zostaną uzupełnione automatycznie, kiedy rozpoczniesz zgłaszanie pozycji.", + "submission.import-external.preview.button.import": "Rozpocznij zgłoszenie", + "submission.import-external.preview.error.import.title": "Błąd zgłoszenia", + "submission.import-external.preview.error.import.body": "Wystąpił błąd podczas procesu importowania pozycji z zewnętrznego źródła.", + "submission.sections.describe.relationship-lookup.close": "Zamknij", + "submission.sections.describe.relationship-lookup.external-source.added": "Udało się dodać wpis do selekcji", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Importuj zdalnego autora", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Importuj zdalne czasopismo", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Importuj zdalny numer czasopisma", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Importuj zdalny tom czasopisma", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Projekt", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "Nowy typ danych dodany!", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Projekt", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Finansowanie OpenAIRE API", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Importuj zdalnego autora", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Person": "Importuj zdalną osobę", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Product": "Importuj zdalny produkt", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Equipment": "Importuj zdalną aparaturę badawczą", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Event": "Importuj zdalne wydarzenie", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Funding": "Importuj zdalną instytucję finansującą", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.OrgUnit": "Importuj zdalnego wydawcę", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Patent": "Importuj zdalnie patent", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Project": "Importuj zdalnie projekt", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Importuj zdalnie publikację", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Udało się dodać autora do selekcji", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.new-entity": "Udało się zaimportować i dodać zewnętrznego autora do selekcji", + "submission.sections.describe.relationship-lookup.external-source.import-modal.authority": "Nadrzędność", + "submission.sections.describe.relationship-lookup.external-source.import-modal.authority.new": "Importuj jako nową, lokalną, nadrzędną pozycję", + "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel": "Anuluj", + "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Wybierz kolekcję do zaimportowania nowych pozycji", + "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Typ danych", + "submission.sections.describe.relationship-lookup.external-source.import-modal.entities.new": "Importuj jako nowy lokalny typ danych", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "Importuj z LC Name", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "Importuj z ORCID", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "Importuj z Sherpa Journal", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "Importuj z Sherpa Publisher", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "Importuj z PubMed", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "Importuj z arXiv", + "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Import", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Importuj zdalne czasopismo", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Successfully added local journal to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Successfully imported and added external journal to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title": "Importuj zdalny numer czasopisma", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Udało się dodać lokalne czasopismo do zaznaczenia", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity": "Udało się zaimportować i dodać czasopismo zewnętrzne do zaznaczenia", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.title": "Importuj zdalny numer czasopisma", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Udało się dodać lokalny numer czasopismo do zaznaczenia", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Udało się zaimportować i dodać zewnętrzny numer czasopisma do zaznaczenia", + "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Wybierz lokalne powiązanie:", + "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Odznacz wszystko", + "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Odznacz stronę", + "submission.sections.describe.relationship-lookup.search-tab.loading": "Ładowanie...", + "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Wyszukaj zapytanie", + "submission.sections.describe.relationship-lookup.search-tab.search": "Zastosuj", + "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Wyszukaj...", + "submission.sections.describe.relationship-lookup.search-tab.select-all": "Zaznacz wszystko", + "submission.sections.describe.relationship-lookup.search-tab.select-page": "Zaznacz stronę", + "submission.sections.describe.relationship-lookup.selected": "Zaznacz {{ size }} pozycji", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Autorzy lokalni ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Czasopisma lokalne ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Projekty lokalne ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Publikacje lokalne ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Autorzy lokalni ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Lokalne jednostki organizacyjne ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Lokalne paczki danych ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Lokalne pliki danych ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Lokalne czasopisma ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Lokalne numery czasopism ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Lokalne numery czasopism ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Lokalne tomy czasopism ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Lokalne tomy czasopism ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Sherpa Journals ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaPublisher": "Sherpa Publishers ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid": "ORCID ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "LC Names ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.arxiv": "arXiv ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Wyszukaj instytucje finansujące", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Wyszukaj finansowanie", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Wyszukaj jednostki organizacyjne", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Finansowanie OpenAIRE API", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projekty", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Instytucja finansująca projekt", + "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Finansowanie OpenAIRE API", + "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Projekt", + "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projekty", + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Instytucja finansująca projekt", + "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Wyszukaj...", + "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Aktualne zaznaczenie ({{ count }})", + "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Numery czasopisma", + "submission.sections.describe.relationship-lookup.title.JournalIssue": "Numery czasopisma", + "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Tomy czasopisma", + "submission.sections.describe.relationship-lookup.title.JournalVolume": "Tomy czasopisma", + "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Czasopisma", + "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication": "Autorzy", + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Instytucja finansująca", + "submission.sections.describe.relationship-lookup.title.Project": "Projekty", + "submission.sections.describe.relationship-lookup.title.Publication": "Publikacje", + "submission.sections.describe.relationship-lookup.title.Person": "Autorzy", + "submission.sections.describe.relationship-lookup.title.OrgUnit": "Jednostki organizacyjne", + "submission.sections.describe.relationship-lookup.title.DataPackage": "Paczki danych", + "submission.sections.describe.relationship-lookup.title.DataFile": "Pliki danych", + "submission.sections.describe.relationship-lookup.title.Funding Agency": "Instytucja finansująca", + "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Finansowanie", + "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Nadrzędna jednostka organizacyjna", + "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Przełącz na listę rozwijaną", + "submission.sections.describe.relationship-lookup.selection-tab.settings": "Ustawienia", + "submission.sections.describe.relationship-lookup.selection-tab.no-selection": "Twoje zaznaczenie jest puste.", + "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Wybrani autorzy", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Wybrane czasopisma", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Wybrane tomy czasopisma", + "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Wybrane projekty", + "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Wybrane publikacje", + "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Wybrani autorzy", + "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Wybrane jednostki organizacyjne", + "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Wybrane pakiety danych", + "submission.sections.describe.relationship-lookup.selection-tab.title.DataFile": "Wybrane pliki danych", + "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Wybrane czasopisma", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Wybrany numer wydania", + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Wybrany tom czasopisma", + "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Wybrane instytucje finansujące", + "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Wybrane finansowanie", + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Wybrany numer wydania", + "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Wybrana jednostka organizacyjna", + "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.epo": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.scopus": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.scielo": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Czy chcesz zapisać \"{{ value }}\" jako wariant imienia dla tego użytkownika, aby Ty lub inni użytkownicy mogli używać tego wariantu w przyszłych zgłoszeniach?. Jeśli nie, nadal możesz użyć tego wariantu w tym zgłoszeniu.", + "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Zapisz nowy wariant imienia", + "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Użyj tylko w tym zgłoszeniu", + "submission.sections.ccLicense.type": "Typ licencji", + "submission.sections.ccLicense.select": "Wybierz typ licencji…", + "submission.sections.ccLicense.change": "Zmień typ licencji…", + "submission.sections.ccLicense.none": "Brak dostępnych licencji", + "submission.sections.ccLicense.option.select": "Wybierz opcję…", + "submission.sections.ccLicense.link": "Wybrano licencję:", + "submission.sections.ccLicense.confirmation": "Udzielam powyższej licencji", + "submission.sections.general.add-more": "Dodaj więcej", + "submission.sections.general.collection": "Kolekcja", + "submission.sections.general.deposit_error_notice": "Wystąpił błąd podczas zgłaszania pozycji. Spróbuj ponownie później.", + "submission.sections.general.deposit_success_notice": "Udało się wprowadzić pozycję.", + "submission.sections.general.discard_error_notice": "Wystąpił błąd podczas odrzucania pozycji. Spróbuj ponownie później.", + "submission.sections.general.discard_success_notice": "Udało się odrzucić pozycję.", + "submission.sections.general.metadata-extracted": "Nowe metadane zostany rozpakowane i dodane do sekcji {{sectionId}}.", + "submission.sections.general.metadata-extracted-new-section": "Nowa sekcja {{sectionId}} została dodana do zgłoszenia.", + "submission.sections.general.no-collection": "Nie znaleziono kolekcji", + "submission.sections.general.no-sections": "Opcje niedostępne", + "submission.sections.general.save_error_notice": "Wystąpił błąd podczas zapisywania numeru. Spróbuj ponownie później. Po odświeżeniu strony niezapisane zmiany mogą zostać utracone.", + "submission.sections.general.save_success_notice": "Udało się zapisać zgłoszenie.", + "submission.sections.general.search-collection": "Szukaj kolekcji", + "submission.sections.general.sections_not_valid": "Niektóre sekcje są niekompletne.", + "submission.sections.submit.progressbar.CClicense": "Licencja Creative Commons", + "submission.sections.submit.progressbar.describe.recycle": "Odzyskaj", + "submission.sections.submit.progressbar.describe.stepcustom": "Opisz", + "submission.sections.submit.progressbar.describe.stepone": "Opisz", + "submission.sections.submit.progressbar.describe.steptwo": "Opisz", + "submission.sections.submit.progressbar.detect-duplicate": "Potencjalne duplikaty", + "submission.sections.submit.progressbar.license": "Zdeponuj licencję", + "submission.sections.submit.progressbar.upload": "Prześlij pliki", + "submission.sections.status.errors.title": "Błędy", + "submission.sections.status.valid.title": "Poprawność", + "submission.sections.status.warnings.title": "Ostrzeżenia", + "submission.sections.status.errors.aria": "ma błędy", + "submission.sections.status.valid.aria": "jest poprawne", + "submission.sections.status.warnings.aria": "ma ostrzeżenia", + "submission.sections.toggle.open": "Otwórz sekcję", + "submission.sections.toggle.close": "Zamknij sekcję", + "submission.sections.toggle.aria.open": "Rozwiń sekcję {{sectionHeader}}", + "submission.sections.toggle.aria.close": "Zwiń sekcję {{sectionHeader}}", + "submission.sections.upload.delete.confirm.cancel": "Anuluj", + "submission.sections.upload.delete.confirm.info": "Czy na pewno? To działanie nie może zostać cofnięte.", + "submission.sections.upload.delete.confirm.submit": "Tak, na pewno", + "submission.sections.upload.delete.confirm.title": "Usuń plik", + "submission.sections.upload.delete.submit": "Usuń", + "submission.sections.upload.download.title": "Pobierz plik", + "submission.sections.upload.drop-message": "Upuść pliki, aby załączyć je do tej pozycji", + "submission.sections.upload.edit.title": "Edytuj plik", + "submission.sections.upload.form.access-condition-label": "Typ dostępu", + "submission.sections.upload.form.date-required": "Data jest wymagana.", + "submission.sections.upload.form.date-required-from": "Data przyznania dostępu od jest wymagana.", + "submission.sections.upload.form.date-required-until": "Data przyznania dostępu do jest wymagana.", + "submission.sections.upload.form.from-label": "Pozwól na dostęp od", + "submission.sections.upload.form.from-placeholder": "Od", + "submission.sections.upload.form.group-label": "Grupa", + "submission.sections.upload.form.group-required": "Grupa jest wymagana", + "submission.sections.upload.form.until-label": "Pozwól na dostęp do", + "submission.sections.upload.form.until-placeholder": "Do", + "submission.sections.upload.header.policy.default.nolist": "Pliki wgrane do kolekcji {{collectionName}} będą dostępne dla poniższych grup:", + "submission.sections.upload.header.policy.default.withlist": "Zwróć uwagę na to, że pliki w kolekcji {{collectionName}} będą dostępne dla poniższych grup, z wyjątkiem tych, które zostały wyłączone z dostępu:", + "submission.sections.upload.info": "Tutaj znajdują się wszystkie pliki dodane w tym momencie do pozycji. Możesz zaktualizować metadane pliku i warunki dostępu lub przesłać dodatkowe pliki, przeciągając i opuszczając je gdziekolwiek na tej stronie", + "submission.sections.upload.no-entry": "Nie", + "submission.sections.upload.no-file-uploaded": "Pliki nie zostały jeszcze wgrane.", + "submission.sections.upload.save-metadata": "Zapisz metadane", + "submission.sections.upload.undo": "Anuluj", + "submission.sections.upload.upload-failed": "Przesyłanie nieudane", + "submission.sections.upload.upload-successful": "Przesyłanie udane", + "submission.submit.breadcrumbs": "Nowe zgłoszenie", + "submission.submit.title": "Nowe zgłoszenie", + "submission.workflow.generic.delete": "Usuń", + "submission.workflow.generic.delete-help": "Jeśli chcesz odrzucić tę pozycję, wybierz \"Delete\". Będzie wymagane potwierdzenie tej decyzji.", + "submission.workflow.generic.edit": "Edytuj", + "submission.workflow.generic.edit-help": "Wybierz tę opcję, aby zmienić metadane pozycji.", + "submission.workflow.generic.view": "Podgląd", + "submission.workflow.generic.view-help": "Wybierz tę opcję, aby wyświetlić metadane pozycji.", + "submission.workflow.tasks.claimed.approve": "Zatwierdź", + "submission.workflow.tasks.claimed.approve_help": "Jeśli ta pozycja ma zostać zatwierdzona i wprowadzona do kolekcji, wybierz \"Approve\".", + "submission.workflow.tasks.claimed.edit": "Edytuj", + "submission.workflow.tasks.claimed.edit_help": "Wybierz tę opcję, aby zmienić metadane pozycji.", + "submission.workflow.tasks.claimed.reject.reason.info": "Proszę wpisać powód odrzucenia zgłoszenia w poniższe pole, wskazując, czy zgłaszający może poprawić problem i ponownie przesłać zgłoszenie.", + "submission.workflow.tasks.claimed.reject.reason.placeholder": "Opisz powód odrzucenia zgłoszenia", + "submission.workflow.tasks.claimed.reject.reason.submit": "Odrzuć pozycję", + "submission.workflow.tasks.claimed.reject.reason.title": "Powód", + "submission.workflow.tasks.claimed.reject.submit": "Odrzuć", + "submission.workflow.tasks.claimed.reject_help": "Jeśli po przejrzeniu pozycji stwierdzono, że nie nadaje się ona do włączenia do kolekcji, wybierz opcję \"Reject\". Zostaniesz wtedy poproszony o określenie powodu odrzucenia, i wskazanie czy zgłaszający powinien wprowadzić zmiany i przesłać ponownie pozycję.", + "submission.workflow.tasks.claimed.return": "Cofnij do puli zadań", + "submission.workflow.tasks.claimed.return_help": "Cofnij zadanie do puli, aby inny użytkownik mógł się go podjąć.", + "submission.workflow.tasks.generic.error": "Podczas działania wystąpił błąd...", + "submission.workflow.tasks.generic.processing": "Procesowanie...", + "submission.workflow.tasks.generic.submitter": "Zgłaszający", + "submission.workflow.tasks.generic.success": "Udało się", + "submission.workflow.tasks.pool.claim": "Podejmij pracę", + "submission.workflow.tasks.pool.claim_help": "Przypisz to zadanie do siebie.", + "submission.workflow.tasks.pool.hide-detail": "Ukryj szczegóły", + "submission.workflow.tasks.pool.show-detail": "Pokaż szczegóły", + "thumbnail.default.alt": "Miniatura", + "thumbnail.default.placeholder": "Brak miniatury", + "thumbnail.project.alt": "Logo projektu", + "thumbnail.project.placeholder": "Obraz zastępczy projketu", + "thumbnail.orgunit.alt": "Logo jednostki organizacyjnej", + "thumbnail.orgunit.placeholder": "Obraz zastępczy jednostki organizacyjnej", + "thumbnail.person.alt": "Zdjęcie profilowe", + "thumbnail.person.placeholder": "Brak zdjęcia profilowego", + "title": "DSpace", + "vocabulary-treeview.header": "Widok drzewka", + "vocabulary-treeview.load-more": "Pokaż więcej", + "vocabulary-treeview.search.form.reset": "Resetuj", + "vocabulary-treeview.search.form.search": "Szukaj", + "vocabulary-treeview.search.no-result": "Brak pozycji do wyświetlenia", + "vocabulary-treeview.tree.description.nsi": "The Norwegian Science Index", + "vocabulary-treeview.tree.description.srsc": "Kategorie tematów badań", + "uploader.browse": "wyszukaj na swoim urządzeniu", + "uploader.drag-message": "Przeciągnij i upuść pliki tutaj", + "uploader.delete.btn-title": "Usuń", + "uploader.or": ", lub ", + "uploader.processing": "Procesowanie", + "uploader.queue-length": "Długość kolejki", + "virtual-metadata.delete-item.info": "Wybierz typy, dla których chcesz zapisać wirtualne metadane jako rzeczywiste metadane", + "virtual-metadata.delete-item.modal-head": "Wirtualne metadane tego powiązania", + "virtual-metadata.delete-relationship.modal-head": "Wybierz pozycje, dla których chcesz zapisać wirtualne metadane jako rzeczywiste metadane", + "workflowAdmin.search.results.head": "Zarządzaj procesami", + "workflow-item.edit.breadcrumbs": "Edytuj pozycję procesu", + "workflow-item.edit.title": "Edytuj pozycję procesu", + "workflow-item.delete.notification.success.title": "Usunięte", + "workflow-item.delete.notification.success.content": "Ten element procesu został usunięty", + "workflow-item.delete.notification.error.title": "Coś poszło nie tak", + "workflow-item.delete.notification.error.content": "Ten element procesu nie mógł zostać usunięty", + "workflow-item.delete.title": "Usuń element procesu", + "workflow-item.delete.header": "Usuń element procesu", + "workflow-item.delete.button.cancel": "Anuluj", + "workflow-item.delete.button.confirm": "Usuń", + "workflow-item.send-back.notification.success.title": "SOdeślij do zgłaszającego", + "workflow-item.send-back.notification.success.content": "Ten element procesu został odesłany do zgłaszającego", + "workflow-item.send-back.notification.error.title": "Coś poszło nie tak", + "workflow-item.send-back.notification.error.content": "Ten element procesu nie mógł zostać odesłany do zgłaszającego", + "workflow-item.send-back.title": "Odeślij element procesu do zgłaszającego", + "workflow-item.send-back.header": "Odeślij element procesu do zgłaszającego", + "workflow-item.send-back.button.cancel": "Anuluj", + "workflow-item.send-back.button.confirm": "Odeślij", + "workflow-item.view.breadcrumbs": "Widok procesu", + "idle-modal.header": "Sesja wkrótce wygaśnie", + "idle-modal.info": "Ze względów bezpieczeństwa sesja wygaśnie po {{ timeToExpire }} minutach nieaktywności. Twoja sesja wkrótce wygaśnie. Czy chcesz ją przedłużyć albo wylogować się?", + "idle-modal.log-out": "Wyloguj", + "idle-modal.extend-session": "Wydłuż sesję", + "workspace.search.results.head": "Twoje zadania", + "orgunit.listelement.badge": "Jednostka organizacyjna", + "orgunit.page.city": "Miasto", + "orgunit.page.country": "Kraj", + "orgunit.page.dateestablished": "Data założenia", + "orgunit.page.description": "Opis", + "orgunit.page.edit": "Edytuj pozycję", + "orgunit.page.id": "ID", + "orgunit.page.titleprefix": "Jednostka organizacyjna: ", + "pagination.options.description": "Opcje strony", + "pagination.results-per-page": "Wyników na stronę", + "pagination.showing.detail": "{{ range }} z {{ total }}", + "pagination.showing.label": "Teraz wyświetlane ", + "pagination.sort-direction": "Opcje sortowania", + "cookies.consent.purpose.sharing": "Udostępnianie", + "item.preview.dc.identifier.issn": "ISSN", + "500.page-internal-server-error": "Usługa niedostępna", + "500.help": "Serwer jest tymczasowo niezdolny do obsługi Twojego żądania z powodu przestoju konserwacyjnego lub problemów z przepustowością. Prosimy spróbować ponownie później.", + "500.link.home-page": "Zabierz mnie na stronę główną", + "error-page.description.401": "brak autoryzacji", + "error-page.description.403": "brak dostępu", + "error-page.description.500": "usługa niedostępna", + "error-page.description.404": "nie znaleziono strony", + "error-page.orcid.generic-error": "Podczas logowania za pomocą ORCID wystąpił błąd. Upewnij się, że udostępniłeś DSpace adres e-mail swojego konta ORCID. Jeśli błąd nadal występuje, skontaktuj się z administratorem", + "access-status.embargo.listelement.badge": "Embargo", + "access-status.metadata.only.listelement.badge": "Tylko metadane", + "access-status.open.access.listelement.badge": "Open Access", + "access-status.restricted.listelement.badge": "Brak dostępu", + "access-status.unknown.listelement.badge": "Nieznane", + "admin.access-control.groups.table.edit.buttons.remove": "Usuń \"{{name}}\"", + "admin.metadata-import.page.validateOnly": "Tylko waliduj", + "admin.metadata-import.page.validateOnly.hint": "Po wybraniu tej opcji przesłany plik CSV zostanie poddany walidacji. Otrzymasz raport o wykrytych zmianach, ale żadne zmiany nie zostaną zapisane.", + "bitstream.edit.form.iiifLabel.label": "Etykieta canvyIIIF", + "bitstream.edit.form.iiifLabel.hint": "Etykieta dla tego obrazu. Jeśli nie została dostarczona, zostanie użyta domyślna etykieta.", + "bitstream.edit.form.iiifToc.label": "Spis treści IIIF", + "bitstream.edit.form.iiifToc.hint": "Dodanie tekstu tutaj zapoczątkuje nowy zakres spisu treści.", + "bitstream.edit.form.iiifWidth.label": "Szerokość canvy IIIF", + "bitstream.edit.form.iiifWidth.hint": "Szerokość canvy jest zwykle równa szerokości obrazu.", + "bitstream.edit.form.iiifHeight.label": "Wysokość canvy IIIF", + "bitstream.edit.form.iiifHeight.hint": "Wysokość canvy jest zwykle równa szerokości obrazu.", + "browse.back.all-results": "Wszystkie wyniki wyszukiwania", + "pagination.next.button": "Następny", + "pagination.previous.button": "Poprzedni", + "pagination.next.button.disabled.tooltip": "Brak więcej stron z wynikami wyszukiwania", + "browse.startsWith": ", zaczyna się od {{ startsWith }}", + "browse.title.page": "Przeszukiwanie {{ collection }} wg {{ field }} {{ value }}", + "collection.edit.item.authorizations.load-bundle-button": "Załaduj więcej paczek", + "collection.edit.item.authorizations.load-more-button": "Załaduj więcej", + "collection.edit.item.authorizations.show-bitstreams-button": "Pokaż polityki plików dla paczek", + "comcol-role.edit.create.error.title": "Nie udało się utworzyć grupy dla roli '{{ role }}'", + "curation.form.submit.error.invalid-handle": "Nie ustalono identyfikatora dla tego obiektu", + "confirmation-modal.delete-profile.header": "Usuń profil", + "confirmation-modal.delete-profile.info": "Czy na pewno chcesz usunąć profil", + "confirmation-modal.delete-profile.cancel": "Anuluj", + "confirmation-modal.delete-profile.confirm": "Usuń", + "error.invalid-search-query": "Zapytanie nie jest poprawne. Wejdź na Solr query syntax, aby dowiedzieć się o najlepszych praktykach i dodatkowych informacjach o tym błędzie.", + "feed.description": "Aktualności", + "footer.link.feedback": "Prześlij uwagi", + "form.group-collapse": "Zwiń", + "form.group-collapse-help": "Kliknij tutaj, aby zwinąć", + "form.group-expand": "Rozwiń", + "form.group-expand-help": "Kliknij tutaj, aby rozwinąć", + "health.breadcrumbs": "Stan systemu", + "health-page.heading": "Stan systemu", + "health-page.info-tab": "Informacje", + "health-page.status-tab": "Status", + "health-page.error.msg": "Serwis stanu systemu jest tymczasowo niedostępny", + "health-page.property.status": "Kod statusu", + "health-page.section.db.title": "Baza danych", + "health-page.section.geoIp.title": "GeoIp", + "health-page.section.solrAuthorityCore.title": "Autentykacja", + "health-page.section.solrOaiCore.title": "OAI", + "health-page.section.solrSearchCore.title": "Wyszukiwarka", + "health-page.section.solrStatisticsCore.title": "Statystyki", + "health-page.section-info.app.title": "Backend aplikacji", + "health-page.section-info.java.title": "Java", + "health-page.status": "Status", + "health-page.status.ok.info": "operacyjny", + "health-page.status.error.info": "Wykryte problemy", + "health-page.status.warning.info": "Wykryte potencjalne problemy", + "health-page.title": "Stan systemu", + "health-page.section.no-issues": "Nie wykryto żadnych problemów", + "info.feedback.breadcrumbs": "Uwagi", + "info.feedback.head": "Uwagi", + "info.feedback.title": "Uwagi", + "info.feedback.info": "Dziękujemy za podzielenie się opinią na temat systemu DSpace. Doceniamy Twój wkład w lepsze działanie systemu!", + "info.feedback.email_help": "Ten adres zostanie użyty, aby przesłać odpowiedź na uwagi.", + "info.feedback.send": "Prześlij uwagi", + "info.feedback.comments": "Komentarz", + "info.feedback.email-label": "Twoj adres e-mail", + "info.feedback.create.success": "Uwagi przesłane!", + "info.feedback.error.email.required": "Poprawny adres e-mail jest wymagany", + "info.feedback.error.message.required": "Treść komentarza jest wymagana", + "info.feedback.page-label": "Strona", + "info.feedback.page_help": "Ta strona odnosi się do uwag.", + "item.orcid.return": "Powrót", + "item.truncatable-part.show-more": "Pokaż więcej", + "item.truncatable-part.show-less": "Pokaż mniej", + "item.page.orcid.title": "ORCID", + "item.page.orcid.tooltip": "Otwórz ustawienia ORCID", + "item.page.claim.button": "Podejmij pracę", + "item.page.claim.tooltip": "Podejmij pracę jako profil", + "item.version.create.modal.submitted.header": "Tworzenie nowej wersji...", + "item.version.create.modal.submitted.text": "Nowa wersja została utworzona. Mogło to trwać chwilę, jeśli pozycja ma wiele powiązań.", + "journal-relationships.search.results.head": "Wyniki wyszukiwania czasopism", + "menu.section.icon.health": "Sekcja menu Stan systemu", + "menu.section.health": "Stan systemu", + "metadata-export-search.tooltip": "Eksportuj wyniki wyszukiwania w formacie CSV", + "metadata-export-search.submit.success": "Eksport rozpoczął się", + "metadata-export-search.submit.error": "Eksport nie rozpoczął się", + "person.page.name": "Nazwa", + "person-relationships.search.results.head": "Wyniki wyszukiwania osób", + "profile.special.groups.head": "Autoryzacja do specjalnych grup, do których należysz", + "project-relationships.search.results.head": "Wyniki wyszukiwania projektów", + "publication-relationships.search.results.head": "Wyniki wyszukiwania publikacji", + "resource-policies.edit.page.target-failure.content": "Wystąpił błąd podczas edycji (użytkownika lub grupy) związany z polityką zasobu.", + "resource-policies.edit.page.other-failure.content": "Wystąpił błąd podczas edycji polityki zasobu. Użytkownik lub grupa zostały zaktualizowane pomyślnie.", + "resource-policies.form.eperson-group-list.modal.header": "Nie można zmienić typu", + "resource-policies.form.eperson-group-list.modal.text1.toGroup": "Nie można zastąpić użytkownika grupą.", + "resource-policies.form.eperson-group-list.modal.text1.toEPerson": "Nie można zastąpić grupy użytkownikiem.", + "resource-policies.form.eperson-group-list.modal.text2": "Usuń obecną polityke zasobu i stwórz nową o określonym typie.", + "resource-policies.form.eperson-group-list.modal.close": "Ok", + "search.results.view-result": "Widok", + "default-relationships.search.results.head": "Wyniki wyszukiwania", + "statistics.table.title.TotalVisits": "Wyświetlnia ogółem", + "statistics.table.title.TotalVisitsPerMonth": "Wyświetlenia w miesiącu", + "statistics.table.title.TotalDownloads": "Pobrania", + "statistics.table.title.TopCountries": "Wyświetlenia wg krajów", + "statistics.table.title.TopCities": "Wyświetlenia wg miast", + "submission.import-external.preview.title": "Podgląd pozycji", + "submission.import-external.preview.title.none": "Podgląd pozycji", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.none": "Import pozycji zdalnie", + "submission.sections.general.cannot_deposit": "Nie można zakończyć deponowania, ponieważ w formularzu wystąpiły błędy.
    Aby zakończyć deponowanie, wypełnij wszystkie obowiązkowe pola.", + "submission.sections.submit.progressbar.accessCondition": "Warunki dostępu do pozycji", + "submission.sections.submit.progressbar.sherpapolicy": "Polityki Sherpa", + "submission.sections.submit.progressbar.sherpaPolicies": "Informacje o polityce open access wydawcy.", + "submission.sections.status.info.title": "Dodatkowe informacje", + "submission.sections.status.info.aria": "Dodatkowe informacje", + "submission.sections.upload.form.access-condition-hint": "Wybierz w jaki sposób pliki dla tej pozycji po jest zdeponowaniu będą mogły być udostępnione", + "submission.sections.upload.form.from-hint": "Wybierz datę, od której ma zostać zastosowany warunek dostępu", + "submission.sections.upload.form.until-hint": "Wybierz datę, do której ma zostać zastosowany warunek dostępu", + "submission.sections.accesses.form.discoverable-description": "Jeśli checkbox jest zaznaczony, pozycja będzie wyświetlana w wynikach wyszukiwania. Jeśli checkbox jest odznaczony, dostęp do pozycji będzie dostępny tylko przez bezpośredni link, pozycja nie będzie wyświetlana w wynikach wyszukiwania.", + "submission.sections.accesses.form.discoverable-label": "Niemożliwe do wyszukania", + "submission.sections.accesses.form.access-condition-label": "Typ warunku dostępu", + "submission.sections.accesses.form.access-condition-hint": "Wybierz warunek dostępu, aby przypisać go do pozycji, kiedy zostanie zdeponowany.", + "submission.sections.accesses.form.date-required": "Data jest wymagana.", + "submission.sections.accesses.form.date-required-from": "Początkowa data przyznania dostępu jest wymagana.", + "submission.sections.accesses.form.date-required-until": "Końcowa data przyznania dostępu jest wymagana.", + "submission.sections.accesses.form.from-label": "Udziel dostępu od", + "submission.sections.accesses.form.from-hint": "Wybierz datę, od kiedy zostanie przyznany dostęp do tej pozycji", + "submission.sections.accesses.form.from-placeholder": "Od", + "submission.sections.accesses.form.group-label": "Grupa", + "submission.sections.accesses.form.group-required": "Grupa jest wymagana.", + "submission.sections.accesses.form.until-label": "Udziel dostępu do", + "submission.sections.accesses.form.until-hint": "Wybierz datę, do kiedy zostanie przyznany dostęp do tej pozycji", + "submission.sections.accesses.form.until-placeholder": "Do", + "submission.sections.sherpa.publication.information": "Informacje o publikacji", + "submission.sections.sherpa.publication.information.title": "Tytuł", + "submission.sections.sherpa.publication.information.issns": "Numery ISSN", + "submission.sections.sherpa.publication.information.url": "URL", + "submission.sections.sherpa.publication.information.publishers": "Wydawca", + "submission.sections.sherpa.publication.information.romeoPub": "Wydawca Romeo", + "submission.sections.sherpa.publication.information.zetoPub": "Wydawca Zeto", + "submission.sections.sherpa.publisher.policy": "Polityka wydawnicza", + "submission.sections.sherpa.publisher.policy.description": "Poniższe informacje zostały znalezione za pośrednictwem Sherpa Romeo. W oparciu o politykę Twojego wydawcy, zawiera ona porady dotyczące tego, czy embargo może być konieczne i/lub jakie pliki możesz przesłać. Jeśli masz pytania, skontaktuj się z administratorem strony poprzez formularz.", + "submission.sections.sherpa.publisher.policy.openaccess": "Rodzaje Open Access dozwolone przez politykę wydawniczą tego czasopisma są wymienione poniżej. Kliknij na wybrany rodzaj, aby przejść do szczegółowego widoku", + "submission.sections.sherpa.publisher.policy.more.information": "Aby uzuyskać więcej informacji, kliknij tutaj:", + "submission.sections.sherpa.publisher.policy.version": "Wersja", + "submission.sections.sherpa.publisher.policy.embargo": "Embargo", + "submission.sections.sherpa.publisher.policy.noembargo": "Brak embargo", + "submission.sections.sherpa.publisher.policy.nolocation": "Brak", + "submission.sections.sherpa.publisher.policy.license": "Licencja", + "submission.sections.sherpa.publisher.policy.prerequisites": "Wymagania wstępne", + "submission.sections.sherpa.publisher.policy.location": "Lokalizacja", + "submission.sections.sherpa.publisher.policy.conditions": "Wymagania", + "submission.sections.sherpa.publisher.policy.refresh": "Odśwież", + "submission.sections.sherpa.record.information": "Informacje o rekordzie", + "submission.sections.sherpa.record.information.id": "ID", + "submission.sections.sherpa.record.information.date.created": "Data utworzenia", + "submission.sections.sherpa.record.information.date.modified": "Ostatnia modyfikacja", + "submission.sections.sherpa.record.information.uri": "URI", + "submission.sections.sherpa.error.message": "Wystąpił błąd podczas pobierania informacji z Sherpa", + "submission.workspace.generic.view": "Podgląd", + "submission.workspace.generic.view-help": "Wybierz tę opcje, aby zobaczyć metadane.", + "workflow.search.results.head": "Zadania na workflow", + "workspace-item.view.breadcrumbs": "Widok wersji roboczej", + "workspace-item.view.title": "Widok wersji roboczej", + "researcher.profile.change-visibility.fail": "Wystąpił niespodziewany błąd podczas zmiany widoczności profilu", + "person.page.orcid.link.processing": "Łączenie profilu z ORCID...", + "person.page.orcid.link.error.message": "Coś poszło nie tak podczas łączenia z ORCID. Jeśli problem będzie się powtarzał, skontaktuj się z administratorem.", + "person.page.orcid.sync-queue.table.header.type": "Typ", + "person.page.orcid.sync-queue.table.header.description": "Opis", + "person.page.orcid.sync-queue.table.header.action": "Akcja", + "person.page.orcid.sync-queue.tooltip.project": "Projekt", + "person.page.orcid.sync-queue.send.validation-error.country.invalid": "Niewłaściwy dwuznakowy kod kraju ISO 3166", + "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "Wymagana data publikacji to co najmniej rok po 1900", + "person.page.orcid.synchronization-mode-funding-message": "Wybierz, czy chcesz wysłać swoje projekty na swoją listę informacji o projektach w profilu ORCID.", + "person.page.orcid.synchronization-mode-publication-message": "Wybierz, czy chcesz wysłać swoje publikacje na swoją listę informacji o publikacjach w profilu ORCID.", + "person.page.orcid.synchronization-mode-profile-message": "Wybierz, czy chcesz wysłać swoje dane bibliograficzne lub osobiste identyfikatory do swojego profilu ORCID.", + "person.orcid.sync.setting": "Ustawienia synchronizacji z ORCID", + "person.orcid.registry.queue": "Kolejka rejestru z ORCID", + "person.orcid.registry.auth": "Autoryzacje z ORCID", + "home.recent-submissions.head": "Najnowsze publikacje", + "submission.sections.sherpa-policy.title-empty": "Nie wybrano ISSN i informacje o polityce wydawniczej czasopisma są niedostępne", + "admin.batch-import.breadcrumbs": "Import zbiorczy", + "admin.batch-import.page.dropMsg": "Drop a batch ZIP to import", + "admin.batch-import.page.dropMsgReplace": "Drop to replace the batch ZIP to import", + "admin.batch-import.page.error.addFile": "Najpierw wybierz plik (ZIP)", + "admin.batch-import.page.header": "Import masowy", + "admin.batch-import.page.help": "Wybierz kolekcję do zaimportowania kolekcji. Potem, upuść lub przeszukaj plik SAF, który zawiera pozycje do importu", + "admin.batch-import.page.remove": "usuń", + "admin.batch-import.page.validateOnly.hint": "Jeśli wybrano, importowany plik ZIP będzie walidowany. Otrzymasz raport ze zmianami, ale żadne zmiany nie zostaną wykonane zapisane.", + "collection.form.correctionSubmissionDefinition": "Wzór zgłoszenia do prośby o korektę", + "comcol-role.edit.delete.error.title": "Nie udało się usunąć roli '{{ role }}' dla grup", + "confirmation-modal.export-batch.header": "Eksport maasowy (ZIP) {{ dsoName }}", + "confirmation-modal.export-batch.info": "Czy na pewno chcesz wyeksportować plik ZIP z {{ dsoName }}", + "dso-selector.export-batch.dspaceobject.head": "Eksport masowy (ZIP) z", + "menu.section.export_batch": "Eksport masowy (ZIP)", + "nav.user-profile-menu-and-logout": "Profil użytkownika i wylogowywanie", + "process.detail.actions": "Akcje", + "process.detail.delete.body": "Czy na pewno chcesz usunąć bieżący proces?", + "process.detail.delete.button": "Usuń proces", + "process.detail.delete.cancel": "Anuluj", + "process.detail.delete.confirm": "Usuń proces", + "process.detail.delete.error": "Nie udało się usunąć procesu", + "process.detail.delete.header": "Usuń proces", + "process.detail.delete.success": "Proces został usunięty.", + "admin.batch-import.title": "Masowy import", + "admin.metadata-import.page.button.select-collection": "Wybierz kolekcję", + "admin.registries.bitstream-formats.table.id": "ID", + "admin.registries.schema.fields.table.id": "ID", + "cookies.consent.app.description.google-recaptcha": "Podczas rejestracji i odzyskiwania hasła używamy narzędzia google reCAPTCHA", + "cookies.consent.app.disable-all.description": "Przełącz, aby zaakceptować lub odrzucić wszystkie", + "cookies.consent.app.disable-all.title": "Akceptowacja lub odrzucenie wszystkich", + "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", + "cookies.consent.content-modal.service": "usługa", + "cookies.consent.content-modal.services": "usługi", + "cookies.consent.content-notice.description.no-privacy": "Zbieramy i przetwarzamy Twoje dane w celu: autentykacji, ustawień preferencji i zgód oraz do celów statystycznych.", + "cookies.consent.content-notice.title": "Zgoda na ciasteczka", + "cookies.consent.ok": "Zgadzam się", + "cookies.consent.purpose.registration-password-recovery": "Rejestracja i odzyskiwanie hasła", + "cookies.consent.save": "Zapisz", + "curation-task.task.citationpage.label": "Generuj stronę z cytowaniem", + "dso-selector.import-batch.dspaceobject.head": "Import masowy z", + "orgunit.listelement.no-title": "Brak tytyłu", + "process.bulk.delete.error.body": "Proces z ID {{processId}} nie może być usunięty. Pozostałe procesy zostaną usunięte.", + "process.bulk.delete.error.head": "Błąd podczas usuwania procesu", + "process.bulk.delete.success": "{{count}} proces/y został/y usunięte", + "process.overview.delete": "Usuń {{count}} proces/y", + "process.overview.delete.body": "Czy na pewno usunąć {{count}} proces/y?", + "process.overview.delete.clear": "Wyczyść selekcję procesów do usunięcia", + "process.overview.delete.header": "Usuń procesy", + "process.overview.delete.processing": "{{count}} procesów zostanie usuniętych. Poczekaj, gdy usuwanie się zakończy. Może to zająć chwilę.", + "process.overview.table.actions": "Akcje", + "profile.security.form.label.current-password": "Aktualne hasło", + "profile.security.form.notifications.error.change-failed": "Wystąpił błąd podczas próby zmiany hasła. Sprawdź czy aktualne hasło jest prawidłowe.", + "profile.security.form.notifications.error.general": "Uzupełnij wymagane pola dla bezpieczeństwa na formularzu", + "register-page.registration.error.recaptcha": "Wystąpił błąd podczas próby autentykacji przez reCAPTCHA", + "register-page.registration.google-recaptcha.must-accept-cookies": "Aby się zarejestrować, musisz zaakceptować ciasteczka dla rejestracji i odzyskiwania hasła (Google reCaptcha).", + "register-page.registration.google-recaptcha.notification.message.error": "Wystąpił błąd podczas weryfikacji reCaptcha", + "register-page.registration.google-recaptcha.notification.message.expired": "Weryfikacja wygasła. Zweryfikuj ponownie.", + "register-page.registration.google-recaptcha.notification.title": "Google reCaptcha", + "register-page.registration.google-recaptcha.open-cookie-settings": "Otwórz ustawienia plików cookies", + "search.results.response.500": "Wystąpił błąd podczas wysyłania zapytania. Spróbuj ponownie później", + "submission.sections.license.granted-label": "Potwierdzam akceptację powyższej licencji", + "submission.sections.license.notgranted": "Najpierw musisz zaakceptować licencję", + "submission.sections.license.required": "Najpierw musisz zaakceptować licencję", + "confirmation-modal.export-batch.confirm": "Eksportuj", + "confirmation-modal.export-batch.cancel": "Anuluj", + "admin.access-control.bulk-access.breadcrumbs": "Zbiorcza edycja dostępu do osiągnięć", + "administrativeBulkAccess.search.results.head": "Wyniki wyszukiwania", + "admin.access-control.bulk-access": "Zbiorcza edycja dostępu do osiągnięć", + "admin.access-control.bulk-access.title": "Zbiorcza edycja dostępu do osiągnięć", + "admin.access-control.bulk-access-browse.header": "Krok 1: Wybierz pozycje", + "admin.access-control.bulk-access-browse.search.header": "Wyszukaj", + "admin.access-control.bulk-access-browse.selected.header": "Obecny wybór({{number}})", + "admin.access-control.bulk-access-settings.header": "Krok 2: Działanie do wykonania", + "admin.access-control.groups.form.tooltip.editGroupPage": "Na tej stronie można edytować opcje grupy i przypisane do niej osoby. W górnej sekcji można edytować nazwę i opis grupy, chyba że jest to grupa administratorów dla zbioru i kolekcji. W tym przypadku nazwa i opis grupy są generowane automatycznie i nie można ich edytować. W kolejnych sekcjach można edytować przypisanie użytkowników do grupy. Szczegóły na [stronie](https://wiki.lyrasis.org/display/DSDOC7x/Create+or+manage+a+user+group).", + "admin.access-control.groups.form.tooltip.editGroup.addEpeople": "Aby dodać lub usunąć użytkownika do/z tej grupy, kliknij przycisk 'Przeglądaj wszystko' lub użyj paska wyszukiwania poniżej, aby wyszukać użytkowników (użyj listy rozwijanej po lewej stronie paska wyszukiwania, aby wybrać, czy chcesz wyszukiwać według imienia i nazwiska, czy według adresu e-mail). Następnie kliknij ikonę plusa przy każdym użytkowniku, którego chcesz dodać do poniższej listy, lub ikonę kosza przy każdym użytkowniku, którego chcesz usunąć. Poniższa lista może mieć kilka stron: użyj strzałek pod listą, aby przejść do kolejnych stron. Gdy wszystkie zmiany zostaną wprowadzone, zapisz je, klikając przycisk 'Zapisz' w górnej sekcji.", + "admin.access-control.groups.form.tooltip.editGroup.addSubgroups": "Aby dodać lub usunąć podgrupę do/z tej grupy, kliknij przycisk 'Przeglądaj wszystko' lub użyj wyszukiwarki poniżej, aby wyszukać użytkowników. Następnie kliknij ikonę plusa przy każdym użytkowniku, którego chcesz dodać do poniższej listy, lub ikonę kosza przy każdym użytkowniku, którego chcesz usunąć. Poniższa lista może składać się z kilku stron: użyj przycisków pod listą, aby przejść do kolejnych stron. Gdy wszystkie zmiany zostaną wprowadzone, zapisz je, klikając przycisk 'Zapisz' w górnej sekcji.", + "admin.workflow.item.workspace": "Przestrzeń robocza", + "admin.workflow.item.policies": "Polityki", + "admin.workflow.item.supervision": "Recenzja", + "admin.batch-import.page.toggle.help": "It is possible to perform import either with file upload or via URL, use above toggle to set the input source", + "admin.metadata-import.page.error.addFileUrl": "Najpierw wpisz URL pliku!", + "admin.metadata-import.page.toggle.upload": "Prześlij", + "admin.metadata-import.page.toggle.url": "URL", + "admin.metadata-import.page.urlMsg": "Wpisz URL pliku ZIP, aby wykonać import masowy", + "advanced-workflow-action.rating.form.rating.label": "Ocena", + "advanced-workflow-action.rating.form.rating.error": "Ta pozycja musi zostać oceniona", + "advanced-workflow-action.rating.form.review.label": "Recenzja", + "advanced-workflow-action.rating.form.review.error": "Musisz wpisać tekst recenzji", + "advanced-workflow-action.rating.description": "Wybierz ocenę poniżej", + "advanced-workflow-action.rating.description-requiredDescription": "Wybierz ocenę poniżej i wpisz uzasadnienie", + "advanced-workflow-action.select-reviewer.description-single": "Wybierz recenzenta przed zdeponowaniem pozycji", + "advanced-workflow-action.select-reviewer.description-multiple": "Wybierz jednego lub więcej recenzentów przed zdeponowaniem pozycji", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.head": "Użytkownicy", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.head": "Dodaj użytkownika", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.button.see-all": "Przeglądaj wszystko", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.headMembers": "Aktualni użytkownicy", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.metadata": "Metadane", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.email": "Adres e-mail (dokładny)", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.button": "Wyszukaj", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.id": "ID", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.name": "Nazwa", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity": "Tożsamość", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "Adres e-mail", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.netid": "NetID", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit": "Usuń / Dodaj", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove": "Usuń użytkownika z nazwę "{{name}}"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember": "Dodano użytkownika o nazwie: "{{name}}"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.addMember": "Nie dodano użytkownika: "{{name}}"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.deleteMember": "Usunięto użytkownika: "{{name}}"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.deleteMember": "Nie usunięto użytkownika: "{{name}}"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Dodano użytkownika "{{name}}"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "Brak aktywnej grupy, najpierw wpisz nazwę.", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-members-yet": "W tej grupie nie ma użytkowników, wyszukaj ich i dodaj.", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-items": "Nie znaleziono żadnych użytkowników", + "advanced-workflow-action.select-reviewer.no-reviewer-selected.error": "Recenzent nie jest wybrany.", + "bitstream.edit.notifications.error.primaryBitstream.title": "Wystąpił błąd podczas zapisu pliku.", + "browse.comcol.by.srsc": "Wg słów kluczowych", + "browse.metadata.srsc.breadcrumbs": "Przeglądaj wg słów kluczowych", + "browse.startsWith.input": "Filtr", + "browse.taxonomy.button": "Przeglądaj", + "search.browse.item-back": "Powrót do wyników wyszukiwania", + "claimed-approved-search-result-list-element.title": "Zaakceptowano", + "claimed-declined-search-result-list-element.title": "Odrzucono i przesłano do deponującego", + "claimed-declined-task-search-result-list-element.title": "Odrzucono i przesłano do recenzenta", + "collection.edit.tabs.access-control.head": "Dostępy", + "collection.edit.tabs.access-control.title": "Edycja kolekcji - dostępy", + "collection.listelement.badge": "Kolekcja", + "community.edit.tabs.access-control.head": "Dostępy", + "community.edit.tabs.access-control.title": "Edycja zbioru - dostępy", + "comcol-role.edit.scorereviewers.name": "Ocena recenzenta", + "comcol-role.edit.scorereviewers.description": "Recenzenci mogą oceniać zdeponowane pozycje, co określi, czy pozycja zostanie przyjęta lub odrzucona.", + "curation-task.task.register-doi.label": "Rejestracja DOI", + "dso.name.unnamed": "Bez nazwy", + "dso-selector.create.community.or-divider": "lub", + "dso-selector.set-scope.community.or-divider": "lub", + "dso-selector.results-could-not-be-retrieved": "Wystąpił błąd, proszę odświeżyć stronę", + "supervision-group-selector.header": "Wybór grupy recenzenckiej", + "supervision-group-selector.select.type-of-order.label": "Wybierz typ funkcji", + "supervision-group-selector.select.type-of-order.option.none": "BRAK", + "supervision-group-selector.select.type-of-order.option.editor": "REDAKTOR", + "supervision-group-selector.select.type-of-order.option.observer": "OBSERWATOR", + "supervision-group-selector.select.group.label": "Wybierz grupę", + "supervision-group-selector.button.cancel": "Anuluj", + "supervision-group-selector.button.save": "Zapisz", + "supervision-group-selector.select.type-of-order.error": "Wybierz typ funkcji", + "supervision-group-selector.select.group.error": "Wybierz grupę", + "supervision-group-selector.notification.create.success.title": "Grupa recenzencka został dodana dla grupy {{ name }}", + "supervision-group-selector.notification.create.failure.title": "Błąd", + "supervision-group-selector.notification.create.already-existing": "Funkcja recenzenta już jest przypisana do tej grupy", + "confirmation-modal.delete-subscription.header": "Usuń subksrypcje", + "confirmation-modal.delete-subscription.info": "Czy na pewno chcesz usunąć subskrypcję: "{{ dsoName }}"", + "confirmation-modal.delete-subscription.cancel": "Anuluj", + "confirmation-modal.delete-subscription.confirm": "Usuń", + "error.validation.metadata.name.invalid-pattern": "To pole nie może zawierać kropek, przecinków i spacji. Zamiast tego This field cannot contain dots, commas or spaces. Zamiast tego może użyć pól z notacji SNEQ", + "error.validation.metadata.name.max-length": "To pole nie może zawierać więcej niż 32 znaki", + "error.validation.metadata.namespace.max-length": "To pole nie może zawierać więcej niż 256 znaków", + "error.validation.metadata.element.invalid-pattern": "To pole nie może zawierać kropek, przecinków i spacji. Zamiast tego This field cannot contain dots, commas or spaces. Zamiast tego może użyć pól z notacji SNEQ", + "error.validation.metadata.element.max-length": "To pole nie może zawierać więcej niż 64 znaki", + "error.validation.metadata.qualifier.invalid-pattern": "To pole nie może zawierać kropek, przecinków i spacji", + "error.validation.metadata.qualifier.max-length": "To pole nie może zawierać więcej niż 64 znaki", + "forgot-email.form.email.error.not-email-form": "Wpisz prawidłowy adres e-mail", + "form.other-information.email": "Adres e-mail", + "form.other-information.first-name": "Imię", + "form.other-information.insolr": "Solr Index", + "form.other-information.institution": "Instytucja", + "form.other-information.last-name": "Nazwisko", + "form.other-information.orcid": "ORCID", + "form.create": "Utwórz", + "info.end-user-agreement.hosting-country": "Stany Zjednoczone", + "item.edit.identifiers.doi.status.UNKNOWN": "Nieznane", + "item.edit.identifiers.doi.status.TO_BE_REGISTERED": "W kolejce do rejestracji", + "item.edit.identifiers.doi.status.TO_BE_RESERVED": "W kolejce do rezerwacji", + "item.edit.identifiers.doi.status.IS_REGISTERED": "Zarejestrowane", + "item.edit.identifiers.doi.status.IS_RESERVED": "Zarezerwowane", + "item.edit.identifiers.doi.status.UPDATE_RESERVED": "Zarezerwowane (aktualizacja w kolejce)", + "item.edit.identifiers.doi.status.UPDATE_REGISTERED": "Zarejestrowane (aktualizacja w kolejce)", + "item.edit.identifiers.doi.status.UPDATE_BEFORE_REGISTRATION": "W kolejce do aktualizacji i rejestracji", + "item.edit.identifiers.doi.status.TO_BE_DELETED": "Zakolejkowane do usunięcia", + "item.edit.identifiers.doi.status.DELETED": "Usunięte", + "item.edit.identifiers.doi.status.PENDING": "Oczekujące (niezarejestrowane)", + "item.edit.identifiers.doi.status.MINTED": "Rezerwowanie nazwy (niezarejestrowane)", + "item.edit.tabs.status.buttons.register-doi.label": "Zarejestruj nowe lub oczekujące DOI", + "item.edit.tabs.status.buttons.register-doi.button": "Rejestruj DOI...", + "item.edit.register-doi.header": "Zarejestruj nowe lub oczekujące DOI", + "item.edit.register-doi.description": "Zweryfikuj poniższe identyfikatory i metadane pozycji i rozpocznij rejestrację DOI lub anuluj", + "item.edit.register-doi.confirm": "Zatwierdź", + "item.edit.register-doi.cancel": "Anuluj", + "item.edit.register-doi.success": "DOI jest w kolejce do rejestracji.", + "item.edit.register-doi.error": "Wystąpił błąd poczas rejestracji DOI", + "item.edit.register-doi.to-update": "To DOI zostało zarezerwowane i będzie znajdować się w kolejce do rejestracji", + "item.edit.metadata.edit.buttons.confirm": "Zatwierdź", + "item.edit.metadata.edit.buttons.drag": "Przeciągnij, aby zmienić kolejność", + "item.edit.metadata.edit.buttons.virtual": "To pole przechowuje wirutalne wartości metadanych, np. wartość pobraną z encji, z którą jest połączona ta pozycja. Dodaj lub usuń relację w zakładce 'Relacje' ", + "item.edit.metadata.metadatafield.error": "Wystąpił błąd podczas walidcji pól metadanych", + "item.edit.metadata.reset-order-button": "Cofnij zamianę kolejności", + "item.edit.curate.title": "Zarządzaj pozycją: {{item}}", + "item.edit.tabs.access-control.head": "Dostęp", + "item.edit.tabs.access-control.title": "Edycja pozycji - dostęp", + "workflow-item.search.result.delete-supervision.modal.header": "Usuń zadanie dla recenzenta", + "workflow-item.search.result.delete-supervision.modal.info": "Czy na pewno usunąć zadanie dla recenzenta", + "workflow-item.search.result.delete-supervision.modal.cancel": "Anuluj", + "workflow-item.search.result.delete-supervision.modal.confirm": "Usuń", + "workflow-item.search.result.notification.deleted.success": "Usunięto zadanie dla recenzenta "{{name}}"", + "workflow-item.search.result.notification.deleted.failure": "Nie usunięto zadania dla recenzenta "{{name}}"", + "workflow-item.search.result.list.element.supervised-by": "Recenzja:", + "workflow-item.search.result.list.element.supervised.remove-tooltip": "Usuń grupę recenzencką", + "item.preview.dc.subject": "Słowo kluczowe:", + "item.preview.dc.publisher": "Wydawca:", + "itemtemplate.edit.metadata.add-button": "Dodaj", + "itemtemplate.edit.metadata.discard-button": "Cofnij", + "itemtemplate.edit.metadata.edit.buttons.confirm": "Zatwierdź", + "itemtemplate.edit.metadata.edit.buttons.drag": "Przeciągnij, aby zmienić kolejność", + "itemtemplate.edit.metadata.edit.buttons.edit": "Edytuj", + "itemtemplate.edit.metadata.edit.buttons.remove": "Usuń", + "itemtemplate.edit.metadata.edit.buttons.undo": "Cofnij zmiany", + "itemtemplate.edit.metadata.edit.buttons.unedit": "Nie edytuj", + "itemtemplate.edit.metadata.empty": "To pozycja nie zawiera żadnych metadanych. Wybierz Dodaj, aby je wprowadzić.", + "itemtemplate.edit.metadata.headers.edit": "Edytuj", + "itemtemplate.edit.metadata.headers.field": "Pole", + "itemtemplate.edit.metadata.headers.language": "Język", + "itemtemplate.edit.metadata.headers.value": "Wartość", + "itemtemplate.edit.metadata.metadatafield.error": "Wystąpił błąd podczas walidowania pola metadanych", + "itemtemplate.edit.metadata.metadatafield.invalid": "Wybierz odpowiednie pole metadanych", + "itemtemplate.edit.metadata.notifications.discarded.content": "Twoje zmiany nie zostały zachowane. Aby spróbować wprowadzić je ponownie wybierz Cofnij", + "itemtemplate.edit.metadata.notifications.discarded.title": "Zmiany nie zostały zachowane", + "itemtemplate.edit.metadata.notifications.error.title": "Wystąpił błąd", + "itemtemplate.edit.metadata.notifications.invalid.content": "Twoje zmiany nie zostały zapisane. Upewnij się, że wszystkie pola zostały wypełnione prawidłowo.", + "itemtemplate.edit.metadata.notifications.invalid.title": "Nieprawidłowe metadan", + "itemtemplate.edit.metadata.notifications.outdated.content": "Wzór dla pozycji, na którą w tym momencie pracujesz, został zmodyfikowany przez innego użytkownika. Twoje zmiany zostały odrzucone, aby uniknąć konfliktów pomiędzy wersjami.", + "itemtemplate.edit.metadata.notifications.outdated.title": "Zmiany zostały odrzucone", + "itemtemplate.edit.metadata.notifications.saved.content": "Zmiany w metadanych wzoru pozycji zostały zapisane.", + "itemtemplate.edit.metadata.notifications.saved.title": "Metadane zostały zapisane", + "itemtemplate.edit.metadata.reinstate-button": "Cofnij", + "itemtemplate.edit.metadata.reset-order-button": "Cofnij zmianę kolejności", + "itemtemplate.edit.metadata.save-button": "Zapisz", + "menu.section.access_control_bulk": "Zbiorowe zarządzanie dostępem", + "menu.section.browse_global_by_srsc": "Wg słów kluczowych", + "mydspace.show.supervisedWorkspace": "Pozycje recenzowane", + "mydspace.status.mydspaceArchived": "Opublikowano", + "mydspace.status.mydspaceValidation": "Walidacja", + "mydspace.status.mydspaceWaitingController": "Oczekiwanie na redakctora", + "mydspace.status.mydspaceWorkflow": "Redakcja", + "mydspace.status.mydspaceWorkspace": "Przestrzeń robocza", + "nav.context-help-toggle": "Przełącz pomoc kontekstową", + "nav.search.button": "Wpisz wyszukiwaną frazę", + "nav.subscriptions": "Subksrypcje", + "process.new.notification.error.max-upload.content": "Plik jest większy niż maksymalny dozwolony rozmiar pliku", + "register-page.registration.email.error.not-email-form": "Wprowadź poprawny adres e-mail", + "register-page.registration.email.error.not-valid-domain": "Użyj adresu e-mail z domeny: {{ domains }}", + "register-page.registration.error.maildomain": "Tego adresu e-mail nie możesz zarejestrować, ponieważ nie ma go na liście domen. Dozwolone domeny to: {{ domains }}", + "register-page.registration.info.maildomain": "Konta mogą być założone dla adresów e-mail z domeną", + "repository.title": "Repozytorium DSpace" + "search.filters.applied.f.supervisedBy": "Recenzent" + "search.filters.filter.show-tree": "Przeglądaj {{ name }} strukturę recenzentów", + "search.filters.filter.supervisedBy.head": "Recenzent", + "search.filters.filter.supervisedBy.placeholder": "Recenzent", + "search.filters.filter.supervisedBy.label": "Wyszukaj recenzenta", + "statistics.table.no-name": "(nazwa obiektu nie może zostać załadowana)", + "submission.import-external.source.datacite": "DataCite", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor": "Publikacje autora", + "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor": "Publikacje", + "submission.sections.identifiers.info": "Te identyfikatory zostaną utworzone dla pozycji:", + "submission.sections.identifiers.no_handle": "Do tej pozycji nie zostały przypisane żadne Handle", + "submission.sections.identifiers.no_doi": "Do tej pozycji nie zostały przypisane żadne DOI", + "submission.sections.identifiers.handle_label": "Handle: ", + "submission.sections.identifiers.doi_label": "DOI: ", + "submission.sections.identifiers.otherIdentifiers_label": "Inne identyfikatory: ", + "submission.sections.submit.progressbar.identifiers": "Identyfikatory", + "submission.workflow.generic.submit_select_reviewer": "Wybierz recenzenta", + "submission.workflow.generic.submit_select_reviewer-help": "", + "submission.workflow.generic.submit_score": "Wynik", + "submission.workflow.generic.submit_score-help": "", + "submission.workflow.tasks.claimed.decline": "Odrzuć", + "submission.workflow.tasks.claimed.decline_help": "", + "submitter.empty": "n.d.", + "subscriptions.title": "Subskrypcje", + "subscriptions.item": "Subskrypcje pozycji", + "subscriptions.collection": "Subskrypcje kolekcji", + "subscriptions.community": "Subskrypcje zbiorów", + "subscriptions.subscription_type": "Typ subksrypcji", + "subscriptions.frequency": "Częstotliwość subskrypcji", + "subscriptions.frequency.D": "Codziennie", + "subscriptions.frequency.M": "Co miesiąc", + "subscriptions.frequency.W": "Co tydzień", + "subscriptions.tooltip": "Subskrybuj", + "subscriptions.modal.title": "Subksrypcje", + "subscriptions.modal.type-frequency": "Rodzaj i częstotliwość subksrypcji", + "subscriptions.modal.close": "Zamknij", + "subscriptions.modal.delete-info": "Aby usunąć tę subksrypcję przejdź do strony 'Subskrypcje', która znajduje się w profilu użytkownika", + "subscriptions.modal.new-subscription-form.type.content": "Zawartość", + "subscriptions.modal.new-subscription-form.frequency.D": "Codziennie", + "subscriptions.modal.new-subscription-form.frequency.W": "Co tydzień", + "subscriptions.modal.new-subscription-form.frequency.M": "Co miesiąc", + "subscriptions.modal.new-subscription-form.submit": "Zapisz", + "subscriptions.modal.new-subscription-form.processing": "Ładowanie...", + "subscriptions.modal.create.success": "Zasubskrybowano {{ type }}", + "subscriptions.modal.delete.success": "Subskrypcja została anulowana", + "subscriptions.modal.update.success": "Twoja subskrypcja {{ type }} została zaktualizowana", + "subscriptions.modal.create.error": "Wystąpił bład podczas tworzenia subskrypcji", + "subscriptions.modal.delete.error": "Wystąpił bład podczas usuwania subskrypcji", + "subscriptions.modal.update.error": "Wystąpił bład podczas aktualizacji subskrypcji", + "subscriptions.table.dso": "Słowo kluczowe", + "subscriptions.table.subscription_type": "Typ subskrypcji", + "subscriptions.table.subscription_frequency": "Częstotliwość subskrypcji", + "subscriptions.table.action": "Akcja", + "subscriptions.table.edit": "Edytuj", + "subscriptions.table.delete": "Usuń", + "subscriptions.table.not-available": "Niedostępne", + "subscriptions.table.not-available-message": "Ta pozycja została usunięta lun nie masz do niej dostępu, aby ją wyswietlić", + "subscriptions.table.empty.message": "Ta pozycja nie ma w tym momencie żadnych subksrypcji. Aby zasubkrybować i otrzymywać aktualizacje o tym zbiorze lub kolekcji, wybierz przycisk subskrypcji na stronie pozycji.", + "vocabulary-treeview.info": "Wybierz słowo kluczowe, aby dodać je do filtra", + "supervisedWorkspace.search.results.head": "Pozycje recenzowane", + "supervision.search.results.head": "Status zadań: Szkic i redakcja", + "workspace-item.delete.breadcrumbs": "Usunięto wersję roboczą", + "workspace-item.delete.header": "Usuń wersję roboczą", + "workspace-item.delete.button.confirm": "Usuń", + "workspace-item.delete.button.cancel": "Anuluj", + "workspace-item.delete.notification.success.title": "Usunięto", + "workspace-item.delete.title": "Wersja robocza została usunieta", + "workspace-item.delete.notification.error.title": "Coś poszło nie tak", + "workspace-item.delete.notification.error.content": "Wersja robocza nie może zostać usunieta", + "workflow-item.advanced.title": "Zaawansowane workflow", + "workflow-item.selectrevieweraction.notification.success.title": "Wybrany recenzent", + "workflow-item.selectrevieweraction.notification.success.content": "Recenzent został przypisany", + "workflow-item.selectrevieweraction.notification.error.title": "Coś poszło nie tak", + "workflow-item.selectrevieweraction.notification.error.content": "Nie udało się wybrać recenzenta dla pozycji", + "workflow-item.selectrevieweraction.title": "Wybierz recenzenta", + "workflow-item.selectrevieweraction.header": "Wybierz recenzenta", + "workflow-item.selectrevieweraction.button.cancel": "Anuluj", + "workflow-item.selectrevieweraction.button.confirm": "Zatwierdź", + "workflow-item.scorereviewaction.notification.success.title": "Ocena recenzji", + "workflow-item.scorereviewaction.notification.success.content": "Ocena tej pozycji została zapisana", + "workflow-item.scorereviewaction.notification.error.title": "Coś poszło nie tak", + "workflow-item.scorereviewaction.notification.error.content": "Nie można ocenić tej pozycji", + "workflow-item.scorereviewaction.title": "Oceń pozycję", + "workflow-item.scorereviewaction.header": "Oceń pozycję", + "workflow-item.scorereviewaction.button.cancel": "Anuluj", + "workflow-item.scorereviewaction.button.confirm": "Potwierdź", + "listable-notification-object.default-message": "Ta pozycja nie może być odzyskana", + "system-wide-alert-banner.retrieval.error": "Coś poszło nie tak podczas odzyskiwania alertu systemowego", + "system-wide-alert-banner.countdown.prefix": "W", + "system-wide-alert-banner.countdown.days": "{{days}} dni,", + "system-wide-alert-banner.countdown.hours": "{{hours}} godziny", + "system-wide-alert-banner.countdown.minutes": "{{minutes}} minut:", + "menu.section.system-wide-alert": "Alert systemowy", + "system-wide-alert.form.header": "Alert systemowy", + "system-wide-alert-form.retrieval.error": "Coś poszło nie tak podczas odzyskiwania alertu systemowego", + "system-wide-alert.form.cancel": "Anuluj", + "system-wide-alert.form.save": "Zapisz", + "system-wide-alert.form.label.active": "AKTYWNE", + "system-wide-alert.form.label.inactive": "NIEAKTYWNE", + "system-wide-alert.form.error.message": "Alert systemowy musi zawierać wiadomość", + "system-wide-alert.form.label.message": "Alert systemowy", + "system-wide-alert.form.label.countdownTo.enable": "Wprowadź licznik czasowy", + "system-wide-alert.form.label.countdownTo.hint": "Wskazówka: Wpisz wartość licznika czasu. Kiedy licznik jest włączony, alert systemowy zostanie wyświetlony o wybranym czasie. Kiedy odliczanie zostanie zakończone, alert systemowy zostanie wyłączony. Serwer NIE zostanie zatrzymany automatycznie.", + "system-wide-alert.form.label.preview": "Podgląd alertu systemowego", + "system-wide-alert.form.update.success": "Alert systemowy został zaktualizowany", + "system-wide-alert.form.update.error": "Coś poszło nie tak podczas aktualizacji alertu systemowego", + "system-wide-alert.form.create.success": "Alert systemowy został utworzony", + "system-wide-alert.form.create.error": "Coś poszło nie tak podczas tworzenia alertu systemowego", + "admin.system-wide-alert.breadcrumbs": "Alerty systemowe", + "admin.system-wide-alert.title": "Alerty systemowe", + "item-access-control-title": "Ta strona pozwala na zmianę dostępów metadanych pozycji i plików do nich dołączonych.", + "collection-access-control-title": "Ta strona pozwala na zmianę warunków dostępu dla wszystkich pozycji w tej kolekcji. Zmiany mogą być wykonywane zarówno na metadanych pozycji jak i plikach do nich dołączonych.", + "community-access-control-title": "Ta strona pozwala na zmianę warunków dostępu dla wszystkich pozycji w każdej kolekcji w tym zbiorze. Zmiany mogą być wykonywane zarówno na metadanych pozycji jak i plikach do nich dołączonych.", + "access-control-item-header-toggle": "Metadane pozycji", + "access-control-bitstream-header-toggle": "Pliki", + "access-control-mode": "Tryb", + "access-control-access-conditions": "Warunki dostępu", + "access-control-no-access-conditions-warning-message": "W tym momencie żadne warunki dostępu nie zostały określone. Jeśli zadanie zostanie rozpoczęte, obecne warunki dostępu zostaną zastąpione domyślnymi warunkami dostępu z nadrzędnej kolekcji.", + "access-control-replace-all": "Zastąp warunki dostępu", + "access-control-add-to-existing": "Dodaj do już istniejących", + "access-control-limit-to-specific": "Ogranicz zmiany do wybranych plików", + "access-control-process-all-bitstreams": "Zaktualizuj wszystkie pliki dla tej pozycji", + "access-control-bitstreams-selected": "wybrane pliki", + "access-control-cancel": "Anuluj", + "access-control-execute": "Wykonaj", + "access-control-add-more": "Dodaj więcej", + "access-control-select-bitstreams-modal.title": "Wybierz pliki", + "access-control-select-bitstreams-modal.no-items": "Brak pozycji do wyświetlenia.", + "access-control-select-bitstreams-modal.close": "Zamknij", + "access-control-option-label": "Typ warunków dostępu", + "access-control-option-note": "Wybierz warunki dostępu, które chcesz przypisać do zaznaczonych pozycji.", + "access-control-option-start-date": "Dostęp od", + "access-control-option-start-date-note": "Wybierz datę, kiedy wybrane warunki dostępu mają obowiązywać", + "access-control-option-end-date": "Dostęp do", + "access-control-option-end-date-note": "Wybierz datę, kiedy wybrane warunki dostępu mają obowiązywać", } From 93299ec83da645189b1183806faee1d11a8e2e20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Dykas?= <96572102+michdyk@users.noreply.github.com> Date: Tue, 22 Aug 2023 15:50:37 +0200 Subject: [PATCH 310/425] Update pl.json5 fix issues from tests --- src/assets/i18n/pl.json5 | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/assets/i18n/pl.json5 b/src/assets/i18n/pl.json5 index 39e1fce8e6..0bc2b2ec4a 100644 --- a/src/assets/i18n/pl.json5 +++ b/src/assets/i18n/pl.json5 @@ -2336,12 +2336,12 @@ "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "Adres e-mail", "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.netid": "NetID", "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit": "Usuń / Dodaj", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove": "Usuń użytkownika z nazwę "{{name}}"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember": "Dodano użytkownika o nazwie: "{{name}}"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.addMember": "Nie dodano użytkownika: "{{name}}"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.deleteMember": "Usunięto użytkownika: "{{name}}"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.deleteMember": "Nie usunięto użytkownika: "{{name}}"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Dodano użytkownika "{{name}}"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove": "Usuń użytkownika z nazwę \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember": "Dodano użytkownika o nazwie: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.addMember": "Nie dodano użytkownika: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.deleteMember": "Usunięto użytkownika: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.deleteMember": "Nie usunięto użytkownika: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Dodano użytkownika \"{{name}}\"", "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "Brak aktywnej grupy, najpierw wpisz nazwę.", "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-members-yet": "W tej grupie nie ma użytkowników, wyszukaj ich i dodaj.", "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-items": "Nie znaleziono żadnych użytkowników", @@ -2381,7 +2381,7 @@ "supervision-group-selector.notification.create.failure.title": "Błąd", "supervision-group-selector.notification.create.already-existing": "Funkcja recenzenta już jest przypisana do tej grupy", "confirmation-modal.delete-subscription.header": "Usuń subksrypcje", - "confirmation-modal.delete-subscription.info": "Czy na pewno chcesz usunąć subskrypcję: "{{ dsoName }}"", + "confirmation-modal.delete-subscription.info": "Czy na pewno chcesz usunąć subskrypcję: \"{{ dsoName }}\"", "confirmation-modal.delete-subscription.cancel": "Anuluj", "confirmation-modal.delete-subscription.confirm": "Usuń", "error.validation.metadata.name.invalid-pattern": "To pole nie może zawierać kropek, przecinków i spacji. Zamiast tego This field cannot contain dots, commas or spaces. Zamiast tego może użyć pól z notacji SNEQ", @@ -2433,8 +2433,8 @@ "workflow-item.search.result.delete-supervision.modal.info": "Czy na pewno usunąć zadanie dla recenzenta", "workflow-item.search.result.delete-supervision.modal.cancel": "Anuluj", "workflow-item.search.result.delete-supervision.modal.confirm": "Usuń", - "workflow-item.search.result.notification.deleted.success": "Usunięto zadanie dla recenzenta "{{name}}"", - "workflow-item.search.result.notification.deleted.failure": "Nie usunięto zadania dla recenzenta "{{name}}"", + "workflow-item.search.result.notification.deleted.success": "Usunięto zadanie dla recenzenta \"{{name}}\"", + "workflow-item.search.result.notification.deleted.failure": "Nie usunięto zadania dla recenzenta \"{{name}}\"", "workflow-item.search.result.list.element.supervised-by": "Recenzja:", "workflow-item.search.result.list.element.supervised.remove-tooltip": "Usuń grupę recenzencką", "item.preview.dc.subject": "Słowo kluczowe:", @@ -2482,8 +2482,8 @@ "register-page.registration.email.error.not-valid-domain": "Użyj adresu e-mail z domeny: {{ domains }}", "register-page.registration.error.maildomain": "Tego adresu e-mail nie możesz zarejestrować, ponieważ nie ma go na liście domen. Dozwolone domeny to: {{ domains }}", "register-page.registration.info.maildomain": "Konta mogą być założone dla adresów e-mail z domeną", - "repository.title": "Repozytorium DSpace" - "search.filters.applied.f.supervisedBy": "Recenzent" + "repository.title": "Repozytorium DSpace", + "search.filters.applied.f.supervisedBy": "Recenzent", "search.filters.filter.show-tree": "Przeglądaj {{ name }} strukturę recenzentów", "search.filters.filter.supervisedBy.head": "Recenzent", "search.filters.filter.supervisedBy.placeholder": "Recenzent", From f58a7a2e9b4ea09359c48604d1867ca94185977b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Dykas?= <96572102+michdyk@users.noreply.github.com> Date: Tue, 22 Aug 2023 16:18:36 +0200 Subject: [PATCH 311/425] Update pl.json5 fix test 2 spaces instead of 1 --- src/assets/i18n/pl.json5 | 5238 +++++++++++++++++++------------------- 1 file changed, 2619 insertions(+), 2619 deletions(-) diff --git a/src/assets/i18n/pl.json5 b/src/assets/i18n/pl.json5 index 0bc2b2ec4a..7a857ae4fd 100644 --- a/src/assets/i18n/pl.json5 +++ b/src/assets/i18n/pl.json5 @@ -1,2621 +1,2621 @@ { - "401.help": "Nie masz uprawnień do dostępu do tej strony. Możesz użyć przycisku poniżej, aby powrócić do strony głównej.", - "401.link.home-page": "Zabierz mnie na stronę główną", - "401.unauthorized": "nieautoryzowany", - "403.help": "Nie masz uprawnień do dostępu do tej strony. Możesz użyć przycisku poniżej, aby wrócić do strony głównej.", - "403.link.home-page": "Zabierz mnie na stronę główną", - "403.forbidden": "zabroniony", - "404.help": "Nie możemy znaleźć strony, której szukasz. Strona mogła zostać przeniesiona lub usunięta. Możesz użyć przycisku poniżej, aby powrócić do strony głównej. ", - "404.link.home-page": "Zabierz mnie na stronę główną", - "404.page-not-found": "strona nie została znaleziona", - "admin.curation-tasks.breadcrumbs": "Systemowe zadania administracyjne", - "admin.curation-tasks.title": "Systemowe zadania administracyjne", - "admin.curation-tasks.header": "Systemowe zadania administracyjne", - "admin.registries.bitstream-formats.breadcrumbs": "Rejestr formatów", - "admin.registries.bitstream-formats.create.breadcrumbs": "Format strumienia bitów", - "admin.registries.bitstream-formats.create.failure.content": "Wystąpił błąd podczas tworzenia nowego formatu strumienia bitów.", - "admin.registries.bitstream-formats.create.failure.head": "Nie udało się", - "admin.registries.bitstream-formats.create.head": "Utwórz nowy format", - "admin.registries.bitstream-formats.create.new": "Dodaj nowy format", - "admin.registries.bitstream-formats.create.success.content": "Nowy format strumienia bitów został pomyślnie utworzony.", - "admin.registries.bitstream-formats.create.success.head": "Udało się", - "admin.registries.bitstream-formats.delete.failure.amount": "Nie udało się usunąć {{ amount }} formatu(ów)", - "admin.registries.bitstream-formats.delete.failure.head": "Nie udało się", - "admin.registries.bitstream-formats.delete.success.amount": "Udało się usunąć {{ amount }} formatu(ów)", - "admin.registries.bitstream-formats.delete.success.head": "Udało się", - "admin.registries.bitstream-formats.description": "Na liście formatów wyświetlono informacje o obsługiwanych formatach i czy są one wspierane przez system.", - "admin.registries.bitstream-formats.edit.breadcrumbs": "Format strumienia bitów", - "admin.registries.bitstream-formats.edit.description.hint": "", - "admin.registries.bitstream-formats.edit.description.label": "Opis", - "admin.registries.bitstream-formats.edit.extensions.hint": "Rozszerzenia to rozszerzenia plików, które są używane do automatycznej identyfikacji formatu przesyłanych plików. Możesz wprowadzić kilka rozszerzeń dla każdego formatu.", - "admin.registries.bitstream-formats.edit.extensions.label": "Rozszerzenia plików", - "admin.registries.bitstream-formats.edit.extensions.placeholder": "Wprowadź rozszerzenie pliku bez kropki", - "admin.registries.bitstream-formats.edit.failure.content": "Wystąpił błąd podczas edycji formatu pliku.", - "admin.registries.bitstream-formats.edit.failure.head": "Nie udało się", - "admin.registries.bitstream-formats.edit.head": "Format plików: {{ format }}", - "admin.registries.bitstream-formats.edit.internal.hint": "Formaty oznaczone jako wewnętrzne są ukryte przed użytkownikiem i wykorzystywane do celów administracyjnych.", - "admin.registries.bitstream-formats.edit.internal.label": "Wewnętrzny", - "admin.registries.bitstream-formats.edit.mimetype.hint": "Typ MIME powiązany z tym formatem, nie musi być unikalny.", - "admin.registries.bitstream-formats.edit.mimetype.label": "Typ MIME", - "admin.registries.bitstream-formats.edit.shortDescription.hint": "Unikalna nazwa dla tego formatu, (np. Microsoft Word XP lub Microsoft Word 2000)", - "admin.registries.bitstream-formats.edit.shortDescription.label": "Nazwa", - "admin.registries.bitstream-formats.edit.success.content": "Format strumienia bitów został pomyślnie edytowany.", - "admin.registries.bitstream-formats.edit.success.head": "Udało się", - "admin.registries.bitstream-formats.edit.supportLevel.hint": "Poziom wsparcia, jaki Twoja instytucja deklaruje dla tego formatu.", - "admin.registries.bitstream-formats.edit.supportLevel.label": "Obsługiwany format", - "admin.registries.bitstream-formats.head": "Rejestr formatów", - "admin.registries.bitstream-formats.no-items": "Brak formatów plików do wyświetlenia.", - "admin.registries.bitstream-formats.table.delete": "Usuń zaznaczone", - "admin.registries.bitstream-formats.table.deselect-all": "Odznacz wszystkie", - "admin.registries.bitstream-formats.table.internal": "wewnętrzne", - "admin.registries.bitstream-formats.table.mimetype": "Typ MIME", - "admin.registries.bitstream-formats.table.name": "Nazwa", - "admin.registries.bitstream-formats.table.return": "Powrót", - "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Znane", - "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Wspierane", - "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Nieznane", - "admin.registries.bitstream-formats.table.supportLevel.head": "Obsługiwany format", - "admin.registries.bitstream-formats.title": "Rejestr formatów plików", - "admin.registries.metadata.breadcrumbs": "Rejestr metadanych", - "admin.registries.metadata.description": "W rejestrze metadanych przechowywana jest lista wszystkich pól metadanych dostępnych w repozytorium. Przechowywane pola są przechowywane w kilku rejestrach. DSpace wymaga kwalifikowanego rejestru metadanych Dublin Core.", - "admin.registries.metadata.form.create": "Utwórz schemat metadanych", - "admin.registries.metadata.form.edit": "Edytuj schemat metadanych", - "admin.registries.metadata.form.name": "Nazwa", - "admin.registries.metadata.form.namespace": "Nazwa schematu", - "admin.registries.metadata.head": "Rejestr metadanych", - "admin.registries.metadata.schemas.no-items": "Brak rejestrów metadanych do pokazania.", - "admin.registries.metadata.schemas.table.delete": "Usuń zaznaczone", - "admin.registries.metadata.schemas.table.id": "ID", - "admin.registries.metadata.schemas.table.name": "Nazwa", - "admin.registries.metadata.schemas.table.namespace": "Nazwa schematu", - "admin.registries.metadata.title": "Rejestr metadanych", - "admin.registries.schema.breadcrumbs": "Schemat metadanych", - "admin.registries.schema.description": "Ten schemat metadanych jest stworzony na podstawie \"{{namespace}}\".", - "admin.registries.schema.fields.head": "Pola schematu metadanych", - "admin.registries.schema.fields.no-items": "Brak pól metadanych do pokazania.", - "admin.registries.schema.fields.table.delete": "Usuń zaznaczone", - "admin.registries.schema.fields.table.field": "Pole", - "admin.registries.schema.fields.table.scopenote": "Uwagi", - "admin.registries.schema.form.create": "Stwórz pole metadanych", - "admin.registries.schema.form.edit": "Edytuj pole metadanych", - "admin.registries.schema.form.element": "Element", - "admin.registries.schema.form.qualifier": "Kwalifikator", - "admin.registries.schema.form.scopenote": "Uwagi", - "admin.registries.schema.head": "Schemat metadanych", - "admin.registries.schema.notification.created": "Udało się utworzyć schemat metdanych \"{{prefix}}\"", - "admin.registries.schema.notification.deleted.failure": "Nie udało się usunąć {{amount}} schematów metadanych", - "admin.registries.schema.notification.deleted.success": "Udało się usunąć {{amount}} schematów metadanych", - "admin.registries.schema.notification.edited": "Udało się edytować schemat metadanych \"{{prefix}}\"", - "admin.registries.schema.notification.failure": "Błąd", - "admin.registries.schema.notification.field.created": "Udało się utworzyć pole metadanych \"{{field}}\"", - "admin.registries.schema.notification.field.deleted.failure": "Nie udało się usunąć {{amount}} pól metadanych", - "admin.registries.schema.notification.field.deleted.success": "Udało się usunąć {{amount}} pól metadanych", - "admin.registries.schema.notification.field.edited": "SUdało się edytować pole metadanych \"{{field}}\"", - "admin.registries.schema.notification.success": "Udało się", - "admin.registries.schema.return": "Powrót", - "admin.registries.schema.title": "Rejestr schematów metadanych", - "admin.access-control.epeople.actions.delete": "Usuń użytkownika", - "admin.access-control.epeople.actions.impersonate": "Personifikuj użytkownika", - "admin.access-control.epeople.actions.reset": "Zresetuj hasło", - "admin.access-control.epeople.actions.stop-impersonating": "Przestań personifikować użytkownika", - "admin.access-control.epeople.breadcrumbs": "Użytkownicy", - "admin.access-control.epeople.title": "Użytkownicy", - "admin.access-control.epeople.head": "Użytkownicy", - "admin.access-control.epeople.search.head": "Wyszukaj", - "admin.access-control.epeople.button.see-all": "Przeglądaj wszystko", - "admin.access-control.epeople.search.scope.metadata": "Metadane", - "admin.access-control.epeople.search.scope.email": "E-mail", - "admin.access-control.epeople.search.button": "Wyszukaj", - "admin.access-control.epeople.search.placeholder": "Wyszukaj użytkownika...", - "admin.access-control.epeople.button.add": "Dodaj użytkownika", - "admin.access-control.epeople.table.id": "ID", - "admin.access-control.epeople.table.name": "Nazwa", - "admin.access-control.epeople.table.email": "E-mail", - "admin.access-control.epeople.table.edit": "Edytuj", - "admin.access-control.epeople.table.edit.buttons.edit": "Edytuj \"{{name}}\"", - "admin.access-control.epeople.table.edit.buttons.edit-disabled": "Brak uprawnień do edycji wybranej grupy", - "admin.access-control.epeople.table.edit.buttons.remove": "Usuń \"{{name}}\"", - "admin.access-control.epeople.no-items": "Brak użytkowników do wyświetlenia.", - "admin.access-control.epeople.form.create": "Utwórz użytkownika", - "admin.access-control.epeople.form.edit": "Edytuj użytkownika", - "admin.access-control.epeople.form.firstName": "Imię", - "admin.access-control.epeople.form.lastName": "Nazwisko", - "admin.access-control.epeople.form.email": "E-mail", - "admin.access-control.epeople.form.emailHint": "Adres e-mail musi być poprawny", - "admin.access-control.epeople.form.canLogIn": "Możliwość zalogowania", - "admin.access-control.epeople.form.requireCertificate": "Wymagany certyfikat", - "admin.access-control.epeople.form.return": "Powrót", - "admin.access-control.epeople.form.notification.created.success": "Udało się utworzyć użytkownika \"{{name}}\"", - "admin.access-control.epeople.form.notification.created.failure": "Nie udało się utworzyć użytkownika \"{{name}}\"", - "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Nie udało się utworzyć użytkownika \"{{name}}\", email \"{{email}}\" już w użyciu.", - "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Nie udało się utworzyć użytkownika \"{{name}}\", email \"{{email}}\" już w użyciu.", - "admin.access-control.epeople.form.notification.edited.success": "Udało się edytować użytkownika \"{{name}}\"", - "admin.access-control.epeople.form.notification.edited.failure": "Nie udało się edytować użytkownika \"{{name}}\"", - "admin.access-control.epeople.form.notification.deleted.success": "Udało się usunąć użytkownika \"{{name}}\"", - "admin.access-control.epeople.form.notification.deleted.failure": "Nie udało się usunąć użytkownika \"{{name}}\"", - "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Członek grup:", - "admin.access-control.epeople.form.table.id": "ID", - "admin.access-control.epeople.form.table.name": "Nazwa", - "admin.access-control.epeople.form.table.collectionOrCommunity": "Zbiór/kolekcja", - "admin.access-control.epeople.form.memberOfNoGroups": "Ten użytkownik nie jest członkiem żadnej grupy", - "admin.access-control.epeople.form.goToGroups": "Dodaj do grup", - "admin.access-control.epeople.notification.deleted.failure": "Nie udało się usunąć użytkownika: \"{{name}}\"", - "admin.access-control.epeople.notification.deleted.success": "Udało się usunąć użytkownika: \"{{name}}\"", - "admin.access-control.groups.title": "Grupy", - "admin.access-control.groups.breadcrumbs": "Grupy", - "admin.access-control.groups.singleGroup.breadcrumbs": "Edytuj grupę", - "admin.access-control.groups.title.singleGroup": "Edytuj grupę", - "admin.access-control.groups.title.addGroup": "Nowa grupa", - "admin.access-control.groups.addGroup.breadcrumbs": "Nowa grupa", - "admin.access-control.groups.head": "Grupy/role", - "admin.access-control.groups.button.add": "Dodaj grupę", - "admin.access-control.groups.search.head": "Szukaj grup", - "admin.access-control.groups.button.see-all": "Przeszukaj wszystko", - "admin.access-control.groups.search.button": "Wyszukaj", - "admin.access-control.groups.search.placeholder": "Wyszukaj grupy...", - "admin.access-control.groups.table.id": "ID", - "admin.access-control.groups.table.name": "Nazwa", - "admin.access-control.groups.table.collectionOrCommunity": "Zbiór/kolekcja", - "admin.access-control.groups.table.members": "Członkowie", - "admin.access-control.groups.table.edit": "Edytuj", - "admin.access-control.groups.table.edit.buttons.edit": "Edytuj \"{{name}}\"", - "admin.access-control.groups.no-items": "Nie znaleziono grup z podaną frazą lub podanym UUID", - "admin.access-control.groups.notification.deleted.success": "Udało się usunąć grupę \"{{name}}\"", - "admin.access-control.groups.notification.deleted.failure.title": "Nie udało się usunąć grupy \"{{name}}\"", - "admin.access-control.groups.notification.deleted.failure.content": "Powód: \"{{cause}}\"", - "admin.access-control.groups.form.alert.permanent": "Ta grupa jest stała, więc nie może być edytowana ani usunięta. Nadal możesz dodawać i usuwać członków grupy za pomocą tej strony.", - "admin.access-control.groups.form.alert.workflowGroup": "Ta grupa nie może być edytowana lub usunięta, ponieważ odnosi się do roli lub bierze udział w procesie \"{{name}}\" {{comcol}}. Możesz ją usunąć ze strony \"assign roles\" edycji {{comcol}}. Wciąż może dodawać i usuwać członków tej grupy, korzystając z tej strony.", - "admin.access-control.groups.form.head.create": "Utwórz grupę", - "admin.access-control.groups.form.head.edit": "Edytuj grupę", - "admin.access-control.groups.form.groupName": "Nazwa grupy", - "admin.access-control.groups.form.groupCommunity": "Zbiór lub kolekcja", - "admin.access-control.groups.form.groupDescription": "Opis", - "admin.access-control.groups.form.notification.created.success": "Udało się utworzyć grupę \"{{name}}\"", - "admin.access-control.groups.form.notification.created.failure": "Nie udało się utworzyć grupy \"{{name}}\"", - "admin.access-control.groups.form.notification.created.failure.groupNameInUse": "Nie udało się utworzyć grupy o nazwie: \"{{name}}\", upewnij się, że nazwa nie jest już używana.", - "admin.access-control.groups.form.notification.edited.failure": "Nie udało się edytować grupy \"{{name}}\"", - "admin.access-control.groups.form.notification.edited.failure.groupNameInUse": "Nazwa \"{{name}}\" już w użyciu!", - "admin.access-control.groups.form.notification.edited.success": "Udało się edytować grupę \"{{name}}\"", - "admin.access-control.groups.form.actions.delete": "Usuń grupę", - "admin.access-control.groups.form.delete-group.modal.header": "Usuń grupę \"{{ dsoName }}\"", - "admin.access-control.groups.form.delete-group.modal.info": "Czy na pewno chcesz usunąć grupę \"{{ dsoName }}\"", - "admin.access-control.groups.form.delete-group.modal.cancel": "Anuluj", - "admin.access-control.groups.form.delete-group.modal.confirm": "Usuń", - "admin.access-control.groups.form.notification.deleted.success": "Udało się usunąć grupę \"{{ name }}\"", - "admin.access-control.groups.form.notification.deleted.failure.title": "Nie udało się usunąć grupy \"{{ name }}\"", - "admin.access-control.groups.form.notification.deleted.failure.content": "Powód: \"{{ cause }}\"", - "admin.access-control.groups.form.members-list.head": "Użytkownik", - "admin.access-control.groups.form.members-list.search.head": "Dodaj użytkownika", - "admin.access-control.groups.form.members-list.button.see-all": "Pokaż wszystkich", - "admin.access-control.groups.form.members-list.headMembers": "Aktualni członkowie", - "admin.access-control.groups.form.members-list.search.scope.metadata": "Metadane", - "admin.access-control.groups.form.members-list.search.scope.email": "E-mail", - "admin.access-control.groups.form.members-list.search.button": "Wyszukaj", - "admin.access-control.groups.form.members-list.table.id": "ID", - "admin.access-control.groups.form.members-list.table.name": "Nazwa", - "admin.access-control.groups.form.members-list.table.identity": "Tożsamość", - "admin.access-control.groups.form.members-list.table.email": "E-mail", - "admin.access-control.groups.form.members-list.table.netid": "NetID", - "admin.access-control.groups.form.members-list.table.edit": "Usuń / Dodaj", - "admin.access-control.groups.form.members-list.table.edit.buttons.remove": "Usuń użytkownika o nazwie \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.success.addMember": "Udało się dodać użytkownika o nazwie: \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.failure.addMember": "Nie udało się dodać użytkownika o nazwie: \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Udało się usunąć użytkownika o nazwie: \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Nie udało się usunąć użytkownika o nazwie: \"{{name}}\"", - "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Dodaj użytkownika o nazwie \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup": "Brak aktywnej grupy, najpierw wpisz nazwę grupy.", - "admin.access-control.groups.form.members-list.no-members-yet": "Brak użytkowników w grupie, wyszukaj ich i dodaj.", - "admin.access-control.groups.form.members-list.no-items": "Nie znaleziono użytkowników podczas wyszukiwania", - "admin.access-control.groups.form.subgroups-list.notification.failure": "Coś poszło nie tak: \"{{cause}}\"", - "admin.access-control.groups.form.subgroups-list.head": "Grupy", - "admin.access-control.groups.form.subgroups-list.search.head": "Dodaj podgrupę", - "admin.access-control.groups.form.subgroups-list.button.see-all": "Przeglądaj wszystkie", - "admin.access-control.groups.form.subgroups-list.headSubgroups": "Aktualne podgrupy", - "admin.access-control.groups.form.subgroups-list.search.button": "Wyszukaj", - "admin.access-control.groups.form.subgroups-list.table.id": "ID", - "admin.access-control.groups.form.subgroups-list.table.name": "Nazwa", - "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Zbiór/kolekcja", - "admin.access-control.groups.form.subgroups-list.table.edit": "Usuń / Dodaj", - "admin.access-control.groups.form.subgroups-list.table.edit.buttons.remove": "Usuń podgrupę o nazwie \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.table.edit.buttons.add": "Dodaj podgrupę o nazwie \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Aktualna grupa", - "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup": "Udało się dodać podgrupę: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.failure.addSubgroup": "Nie udało się dodać podgrupy: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Udało się usunąć podgrupę: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Nie udało się usunąć podgrupy: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "Brak aktywnej grupy, najpierw wpisz nazwę grupy.", - "admin.access-control.groups.form.subgroups-list.notification.failure.subgroupToAddIsActiveGroup": "Ta grupa jest już stworzona i nie może zostać dodana pononwie.", - "admin.access-control.groups.form.subgroups-list.no-items": "Nie znaleziono grup z tą nazwą lub UUID", - "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "Brak podgrup w grupie.", - "admin.access-control.groups.form.return": "Powrót", - "admin.search.breadcrumbs": "Wyszukiwanie administracyjne", - "admin.search.collection.edit": "Edytuj", - "admin.search.community.edit": "Edytuj", - "admin.search.item.delete": "Usuń", - "admin.search.item.edit": "Edytuj", - "admin.search.item.make-private": "Ukryj", - "admin.search.item.make-public": "Upublicznij", - "admin.search.item.move": "Przenieś", - "admin.search.item.reinstate": "Zmień instancję", - "admin.search.item.withdraw": "Wycofane", - "admin.search.title": "Wyszukiwanie administracyjne", - "administrativeView.search.results.head": "Wyszukiwanie administracyjne", - "admin.workflow.breadcrumbs": "Zarządzaj procesem", - "admin.workflow.title": "Zarządzaj procesem", - "admin.workflow.item.workflow": "Proces", - "admin.workflow.item.delete": "Usuń", - "admin.workflow.item.send-back": "Odeślij z powrotem", - "admin.metadata-import.breadcrumbs": "Importuj metadane", - "admin.metadata-import.title": "Importuj metadane", - "admin.metadata-import.page.header": "Importuj metadane", - "admin.metadata-import.page.help": "Tutaj możesz zaimportować pliki CSV, w których znajdują się metadane do operacji wsadowej. Zaimportuj je poprzez upuszczenie ich lub znajdź je na swoim komputerze", - "admin.metadata-import.page.dropMsg": "Upuść plik w formacie CSV", - "admin.metadata-import.page.dropMsgReplace": "Upuść, aby zastąpić metadane w formacie CSV do importu", - "admin.metadata-import.page.button.return": "Powrót", - "admin.metadata-import.page.button.proceed": "Zastosuj", - "admin.metadata-import.page.error.addFile": "Najpierw wybierz plik!", - "auth.errors.invalid-user": "Niewłaściwy adres e-mail lub hasło.", - "auth.messages.expired": "Twoja sesja wygasła. Zaloguj się ponownie.", - "auth.messages.token-refresh-failed": "Odświeżenie sesji nie powiodło się. Zaloguj się ponownie.", - "bitstream.download.page": "Pobieranie {{bitstream}}...", - "bitstream.download.page.back": "Powrót", - "bitstream.edit.authorizations.link": "Edytuj polityki plików", - "bitstream.edit.authorizations.title": "Edytuj polityki plików", - "bitstream.edit.return": "Powrót", - "bitstream.edit.bitstream": "Pliki: ", - "bitstream.edit.form.description.hint": "Opcjonalnie wprowadź krótki opis pliku, np.: \"Główna część artykułu\" lub \"Dane z eksperymentu\".", - "bitstream.edit.form.description.label": "Opis", - "bitstream.edit.form.embargo.hint": "Pierwszy dzień, od kiedy dostęp zostanie udzielony. Tej daty nie może być edytować w tym formularzu. Aby wybrać okres embarga czasowego, wybierz Status pozycji tab, kliknij Autoryzacje..., stwórz lub edytuj plik PRZEYCZTAJ zasady i wybierz określoną Datę początkową.", - "bitstream.edit.form.embargo.label": "Embargo do wybranej daty", - "bitstream.edit.form.fileName.hint": "Zmiana nazwy pliku dla strumienia bitów. Zauważ, że zmieni to wyświetlany adres URL strumienia bitów, ale stare linki nadal będą działać, o ile nie zmieni się identyfikator sekwencji.", - "bitstream.edit.form.fileName.label": "Nazwa pliku", - "bitstream.edit.form.newFormat.label": "Opisz nowy format", - "bitstream.edit.form.newFormat.hint": "Program, którego użyto do stworzenia pliku i numer wersji (np.: \"ACMESoft SuperApp version 1.5\").", - "bitstream.edit.form.primaryBitstream.label": "Pierwotny plik", - "bitstream.edit.form.selectedFormat.hint": "Jeśli formatu nie ma na powyższej liście, wybierz \"format not in list\" above i opisz jako \"Describe new format\".", - "bitstream.edit.form.selectedFormat.label": "Wybrany format", - "bitstream.edit.form.selectedFormat.unknown": "Tego formatu nie ma na liście", - "bitstream.edit.notifications.error.format.title": "Wystąpił błąd podczas zapisu formatu pliku", - "bitstream.edit.notifications.saved.content": "Zmiany w pliku zostały zapisane.", - "bitstream.edit.notifications.saved.title": "Plik został zapisany", - "bitstream.edit.title": "Edytuj plik", - "bitstream-request-a-copy.alert.canDownload1": "Masz już dostęp do tego pliki. Jeśli chcesz go pobrać, kliknij ", - "bitstream-request-a-copy.alert.canDownload2": "tutaj", - "bitstream-request-a-copy.header": "Wystąp o kopię wybranego pliku", - "bitstream-request-a-copy.intro": "Wpisz następujące informacje, aby wystąpić o kopię tej pozycji: ", - "bitstream-request-a-copy.intro.bitstream.one": "Wystąpienie o dostęp do następujących plików: ", - "bitstream-request-a-copy.intro.bitstream.all": "Wystąpienie o dostęp do wszystkich plików. ", - "bitstream-request-a-copy.name.label": "Imię *", - "bitstream-request-a-copy.name.error": "Imię jest wymagane", - "bitstream-request-a-copy.email.label": "Adres e-mail *", - "bitstream-request-a-copy.email.hint": "Plik zostanie przesłany na podany adres e-mail", - "bitstream-request-a-copy.email.error": "Proszę wprowadzić prawidłowy adres e-mail", - "bitstream-request-a-copy.allfiles.label": "Pliki", - "bitstream-request-a-copy.files-all-false.label": "Tylko plik, dla którego wystąpiono o dostęp", - "bitstream-request-a-copy.files-all-true.label": "Wszystkie pliki (w tej pozycji) z ograniczonym dostępem", - "bitstream-request-a-copy.message.label": "Wiadomość", - "bitstream-request-a-copy.return": "Powrót", - "bitstream-request-a-copy.submit": "Wystąp o kopię", - "bitstream-request-a-copy.submit.success": "Wystąpienie o dostęp do pliku zostało przesłane.", - "bitstream-request-a-copy.submit.error": "Coś poszło nie tak podczas wysyłania wystąpienia o dostęp do pliku", - "browse.comcol.by.author": "wg autorów", - "browse.comcol.by.dateissued": "wg daty wydania", - "browse.comcol.by.subject": "wg tematu", - "browse.comcol.by.title": "wg tytułu", - "browse.comcol.head": "Przeglądaj", - "browse.empty": "Brak rekordów do wyświetlenia.", - "browse.metadata.author": "Autor", - "browse.metadata.dateissued": "Data wydania", - "browse.metadata.subject": "Temat", - "browse.metadata.title": "Tytuł", - "browse.metadata.author.breadcrumbs": "Przeglądaj wg autorów", - "browse.metadata.dateissued.breadcrumbs": "Przeglądaj wg daty wydania", - "browse.metadata.subject.breadcrumbs": "Przeglądaj wg tematów", - "browse.metadata.title.breadcrumbs": "Przeglądaj wg tytułów", - "browse.startsWith.choose_start": "(Wybierz start)", - "browse.startsWith.choose_year": "(Wybierz rok)", - "browse.startsWith.choose_year.label": "Wybierz rok wydania", - "browse.startsWith.jump": "Przejdź do miejsca w indeksie:", - "browse.startsWith.months.april": "kwiecień", - "browse.startsWith.months.august": "sierpień", - "browse.startsWith.months.december": "grudzień", - "browse.startsWith.months.february": "luty", - "browse.startsWith.months.january": "styczeń", - "browse.startsWith.months.july": "lipiec", - "browse.startsWith.months.june": "czerwiec", - "browse.startsWith.months.march": "marzec", - "browse.startsWith.months.may": "maj", - "browse.startsWith.months.none": "(wybierz miesiąc)", - "browse.startsWith.months.none.label": "Wybierz miesiąc wydania", - "browse.startsWith.months.november": "listopad", - "browse.startsWith.months.october": "październik", - "browse.startsWith.months.september": "wrzesień", - "browse.startsWith.submit": "Zastosuj", - "browse.startsWith.type_date": "Lub wybierz datę (rok-miesiąc) i kliknij 'Przeglądaj'", - "browse.startsWith.type_date.label": "Lub wybierz datę (rok-miesiąc) i kliknij przycisk przeglądania", - "browse.startsWith.type_text": "Wpisz kilka pierwszych liter i kliknij przycisk przeglądania", - "browse.title": "Przeglądaj {{ collection }} wg {{ field }} {{ value }}", - "chips.remove": "Usuń chip", - "collection.create.head": "Utwórz kolekcję", - "collection.create.notifications.success": "Udało się utworzyć kolekcję", - "collection.create.sub-head": "Udało się utworzyć kolekcję dla zbioru {{ parent }}", - "collection.curate.header": "Administrator kolekcji: {{collection}}", - "collection.delete.cancel": "Anuluj", - "collection.delete.confirm": "Zatwierdź", - "collection.delete.processing": "Usuwanie", - "collection.delete.head": "Usuń kolekcję", - "collection.delete.notification.fail": "Kolekcja nie może być usunięt", - "collection.delete.notification.success": "Udało się usunąć kolekcję", - "collection.delete.text": "Czy na pewno chcesz usunąć kolekcję \"{{ dso }}\"", - "collection.edit.delete": "Usuń kolekcję", - "collection.edit.head": "Edytuj kolekcję", - "collection.edit.breadcrumbs": "Edytuj kolekcję", - "collection.edit.tabs.mapper.head": "Item Mapper", - "collection.edit.tabs.item-mapper.title": "Edytuj kolekcję - Item Mapper", - "collection.edit.item-mapper.cancel": "Anuluj", - "collection.edit.item-mapper.collection": "Kolekcja: \"{{name}}\"", - "collection.edit.item-mapper.confirm": "Mapuj wybrane elementy", - "collection.edit.item-mapper.description": "To jest narzędzie mapowania elementów, które pozwala administratorom kolekcji mapować elementy z innych kolekcji do tej kolekcji. Możesz wyszukiwać elementy z innych kolekcji i mapować je lub przeglądać listę aktualnie zmapowanych elementów.", - "collection.edit.item-mapper.head": "Item Mapper - Mapuj pozycje z innych kolekcji", - "collection.edit.item-mapper.no-search": "Wpisz co chcesz wyszukać", - "collection.edit.item-mapper.notifications.map.error.content": "Wystąpiły błędy podczas mapowania {{amount}} pozycji.", - "collection.edit.item-mapper.notifications.map.error.head": "Mapowanie błędów", - "collection.edit.item-mapper.notifications.map.success.content": "Udało się zmapować {{amount}} pozycji.", - "collection.edit.item-mapper.notifications.map.success.head": "Mapowanie zakończone", - "collection.edit.item-mapper.notifications.unmap.error.content": "Błędy wystąpiły podczas usuwania mapowania z {{amount}} elementów.", - "collection.edit.item-mapper.notifications.unmap.error.head": "Usuń błędy mapowania", - "collection.edit.item-mapper.notifications.unmap.success.content": "Udało się usunąć błędy mapowania z {{amount}} elementów.", - "collection.edit.item-mapper.notifications.unmap.success.head": "Usuwanie mapowania zakończone", - "collection.edit.item-mapper.remove": "Usuń wybrane mapowanie elementów", - "collection.edit.item-mapper.search-form.placeholder": "Wyszukaj pozycje...", - "collection.edit.item-mapper.tabs.browse": "Wyszukaj mapowane elementy", - "collection.edit.item-mapper.tabs.map": "Mapuj nowe elementy", - "collection.edit.logo.delete.title": "Usuń", - "collection.edit.logo.delete-undo.title": "Cofnij usunięcie", - "collection.edit.logo.label": "Logo kolekcji", - "collection.edit.logo.notifications.add.error": "Przesyłanie logo kolekcji nie powiodło się. Proszę zweryfikować zawartość przed ponowną ", - "collection.edit.logo.notifications.add.success": "Udało się przesłać logo kolekcji.", - "collection.edit.logo.notifications.delete.success.title": "Logo usunięte", - "collection.edit.logo.notifications.delete.success.content": "Udało się usunąć logo kolekcji", - "collection.edit.logo.notifications.delete.error.title": "Błąd podczas usuwania loga", - "collection.edit.logo.upload": "Upuść logo kolekcji, aby je wgrać", - "collection.edit.notifications.success": "Udało się edytować kolekcję", - "collection.edit.return": "Powrót", - "collection.edit.tabs.curate.head": "Kurator", - "collection.edit.tabs.curate.title": "Edytowanie kolekcji - kurator", - "collection.edit.tabs.authorizations.head": "Autoryzacje", - "collection.edit.tabs.authorizations.title": "Edytowanie kolekcji - autoryzacje", - "collection.edit.tabs.metadata.head": "Edytuj metadane", - "collection.edit.tabs.metadata.title": "Edytowanie kolekcji - metadane", - "collection.edit.tabs.roles.head": "Przypisz role", - "collection.edit.tabs.roles.title": "Edytowanie kolekcji - role", - "collection.edit.tabs.source.external": "Ta kolekcja pobiera swoją zawartość z zewnętrznego źródła", - "collection.edit.tabs.source.form.errors.oaiSource.required": "Musisz wskazać id docelowej kolekcji.", - "collection.edit.tabs.source.form.harvestType": "Odczytywanie zawartości", - "collection.edit.tabs.source.form.head": "Skonfiguruj zewnętrzne źródło", - "collection.edit.tabs.source.form.metadataConfigId": "Format metadanych", - "collection.edit.tabs.source.form.oaiSetId": "Określony zestaw ID OAI", - "collection.edit.tabs.source.form.oaiSource": "Dostawca OAI", - "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_BITSTREAMS": "Odczytaj metadane i pliki (wymaga wsparcia ORE)", - "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_REF": "Odczytaj metadane i bibliografię (wymaga wsparcia ORE)", - "collection.edit.tabs.source.form.options.harvestType.METADATA_ONLY": "Odczytaj tylko metadane", - "collection.edit.tabs.source.head": "Źródło treści", - "collection.edit.tabs.source.notifications.discarded.content": "Twoje zmiany zostały odrzucone. Aby odzyskać swoje zmiany wybierz 'Powrót'", - "collection.edit.tabs.source.notifications.discarded.title": "Zmiany odrzucone", - "collection.edit.tabs.source.notifications.invalid.content": "Zmiany nie zostały zapisane. Sprawdź czy wszystkie pola są wypełnione poprawne przed zapisem.", - "collection.edit.tabs.source.notifications.invalid.title": "Nieprawidłowe metadane", - "collection.edit.tabs.source.notifications.saved.content": "Zmiany wprowadzone w kolekcji zostały zapisane.", - "collection.edit.tabs.source.notifications.saved.title": "Źródło treści zapisane", - "collection.edit.tabs.source.title": "Collection Edit - Źródło treści", - "collection.edit.template.add-button": "Dodaj", - "collection.edit.template.breadcrumbs": "Szablon pozycji", - "collection.edit.template.cancel": "Anuluj", - "collection.edit.template.delete-button": "Usuń", - "collection.edit.template.edit-button": "Edytuj", - "collection.edit.template.error": "Wystąpił błąd podczas odzyskiwania szablonu pozycji", - "collection.edit.template.head": "Edytuj szablon dla kolekcji \"{{ collection }}\"", - "collection.edit.template.label": "Szablon pozycji", - "collection.edit.template.loading": "ładowanie szablonu pozycji...", - "collection.edit.template.notifications.delete.error": "Nie udało się usunąć szablonu pozycji", - "collection.edit.template.notifications.delete.success": "Udało się usunąć szablon pozycji", - "collection.edit.template.title": "Edytuj szablon pozycji", - "collection.form.abstract": "Opis skrócony", - "collection.form.description": "Tekst powitalny (HTML)", - "collection.form.errors.title.required": "Wpisz nazwę kolekcji", - "collection.form.license": "Licencja", - "collection.form.provenance": "Pochodzenie", - "collection.form.rights": "Tekst praw autorskich (HTML)", - "collection.form.tableofcontents": "Wiadomości (HTML)", - "collection.form.title": "Nazwa", - "collection.form.entityType": "Typ danych", - "collection.page.browse.recent.head": "Ostatnie zgłoszenia", - "collection.page.browse.recent.empty": "Brak pozycji do wyświetlenia", - "collection.page.edit": "Edytuj kolekcję", - "collection.page.handle": "Stały URI dla kolekcji", - "collection.page.license": "Licencja", - "collection.page.news": "Wiadomości", - "collection.select.confirm": "Zaakceptuj zaznaczone", - "collection.select.empty": "Brak kolekcji do wyświetlenia", - "collection.select.table.title": "Tytuł", - "collection.source.controls.head": "Kontrolki odczytywania", - "collection.source.controls.test.submit.error": "Coś poszło nie tak podczas rozpoczynania testów ustawień", - "collection.source.controls.test.failed": "Scenariusz testowy ustawień nie zadziałał", - "collection.source.controls.test.completed": "Scenariusz testowy ustawień został zakończony", - "collection.source.controls.test.submit": "Konfiguracja testowa", - "collection.source.controls.test.running": "Testowanie konfiguracji...", - "collection.source.controls.import.submit.success": "Import został rozpoczęty", - "collection.source.controls.import.submit.error": "Coś poszło nie tak podczas rozpoczynania importu", - "collection.source.controls.import.submit": "Importuj teraz", - "collection.source.controls.import.running": "Importowanie...", - "collection.source.controls.import.failed": "Wystąpił błąd podczas importu", - "collection.source.controls.import.completed": "Import zakończony", - "collection.source.controls.reset.submit.success": "Reset ustawień i powtórny import zostały rozpoczęte poprawnie", - "collection.source.controls.reset.submit.error": "Coś poszło nie tak podczas rozpoczynania zresetowanego, powtórnego importu", - "collection.source.controls.reset.failed": "Wystąpił błąd podczas resetowania ustawień i ponownego importu", - "collection.source.controls.reset.completed": "Reset ustawień i powtórny import zostały zakończone", - "collection.source.controls.reset.submit": "Resetowanie i powtórny import", - "collection.source.controls.reset.running": "Resetowanie i powtórny import...", - "collection.source.controls.harvest.status": "Status odczytywania:", - "collection.source.controls.harvest.start": "Czas rozpoczęcia odczytywania:", - "collection.source.controls.harvest.last": "Czas ostatniego odczytywania:", - "collection.source.controls.harvest.message": "Informacje nt. odczytywania:", - "collection.source.controls.harvest.no-information": "bd.", - "collection.source.update.notifications.error.content": "Te ustawienia zostały przetestowane i nie działają.", - "collection.source.update.notifications.error.title": "Błąd serwera", - "communityList.breadcrumbs": "Lista zbiorów", - "communityList.tabTitle": "Lista zbiorów", - "communityList.title": "Lista zbiorów", - "communityList.showMore": "Pokaż więcej", - "community.create.head": "Utwórz zbiór", - "community.create.notifications.success": "Udało się utworzyć zbiór", - "community.create.sub-head": "Utwórz podzbiór dla zbioru {{ parent }}", - "community.curate.header": "Zarządzaj zbiorem: {{community}}", - "community.delete.cancel": "Anuluj", - "community.delete.confirm": "Potwierdź", - "community.delete.processing": "Usuwanie...", - "community.delete.head": "Usuń zbiór", - "community.delete.notification.fail": "Zbiór nie może być usunięty", - "community.delete.notification.success": "Udało się usunąć zbiór", - "community.delete.text": "Czy na pewno chcesz usunąć zbiór \"{{ dso }}\"", - "community.edit.delete": "Usuń ten zbiór", - "community.edit.head": "Edytuj zbiór", - "community.edit.breadcrumbs": "Edytuj zbiór", - "community.edit.logo.delete.title": "Usuń logo", - "community.edit.logo.delete-undo.title": "Cofnij usunięcie", - "community.edit.logo.label": "Logo zbioru", - "community.edit.logo.notifications.add.error": "Przesłanie loga zbioru nie powiodło się. Sprawdź czy wszystkie parametry są odpowiednie przed próbą ponownego przesłania.", - "community.edit.logo.notifications.add.success": "Przesłanie loga powiodło się.", - "community.edit.logo.notifications.delete.success.title": "Logo usunięte", - "community.edit.logo.notifications.delete.success.content": "Usunięcie loga zbioru powiodło się", - "community.edit.logo.notifications.delete.error.title": "Błąd podczas usuwania loga", - "community.edit.logo.upload": "Upuść logo zbioru, aby je przesłać", - "community.edit.notifications.success": "Udało się edytować zbiór", - "community.edit.notifications.unauthorized": "Nie masz uprawnień, aby wykonać te zmiany", - "community.edit.notifications.error": "Wystąpił błąd podczas edycji zbioru", - "community.edit.return": "Cofnij", - "community.edit.tabs.curate.head": "Administruj", - "community.edit.tabs.curate.title": "Edycja zbioru - administrator", - "community.edit.tabs.metadata.head": "Edytuj metadane", - "community.edit.tabs.metadata.title": "Edycja zbioru - metadane", - "community.edit.tabs.roles.head": "Przypisz role", - "community.edit.tabs.roles.title": "Edycja zbioru - role", - "community.edit.tabs.authorizations.head": "Uprawnienia", - "community.edit.tabs.authorizations.title": "Edycja zbioru - uprawnienia", - "community.listelement.badge": "Zbiór", - "comcol-role.edit.no-group": "Brak", - "comcol-role.edit.create": "Utwórz", - "comcol-role.edit.restrict": "Ogranicz", - "comcol-role.edit.delete": "Usuń", - "comcol-role.edit.community-admin.name": "Administratorzy", - "comcol-role.edit.collection-admin.name": "Administratorzy", - "comcol-role.edit.community-admin.description": "Administratorzy zbioru mogą tworzyć podzbiory lub kolekcje i zarządzać nimi lub przydzielać zarządzanie tymi podzbiorami lub kolekcji innym użytkownikom. Ponadto decydują, kto może przesyłać elementy do dowolnych podkolekcji, edytować metadane pozycji (po przesłaniu) i dodawać (mapować) istniejące pozycje z innych kolekcji (z zastrzeżeniem autoryzacji).", - "comcol-role.edit.collection-admin.description": "Administratorzy kolekcji decydują o tym, kto może przesyłać pozycje do kolekcji, edytować metadane pozycji (po ich przesłaniu) oraz dodawać (mapować) istniejące elementy z innych kolekcji do tej kolekcji (z zastrzeżeniem uprawnień dla danej kolekcji).", - "comcol-role.edit.submitters.name": "Zgłaszający", - "comcol-role.edit.submitters.description": "Użytkownicy i grupy, którzy mają uprawnienia do przesyłania nowych pozycji do tej kolekcji.", - "comcol-role.edit.item_read.name": "Domyślny dostęp do odczytu pozycji", - "comcol-role.edit.item_read.description": "Użytkownicy i grupy, które mogą odczytywać nowe pozycje zgłoszone do tej kolekcji. Zmiany w tej roli nie działają wstecz. Istniejące pozycje w systemie będą nadal widoczne dla osób, które miały dostęp do odczytu w momencie ich dodania.", - "comcol-role.edit.item_read.anonymous-group": "Domyślny odczyt dla nowych pozycji jest obecnie ustawiony na Anonimowy.", - "comcol-role.edit.bitstream_read.name": "Domyślny dostęp do oczytu plików", - "comcol-role.edit.bitstream_read.description": "Administratorzy zbiorów mogą tworzyć podzbiory lub kolekcje, a także zarządzać nimi. Ponadto decydują o tym, kto może przesyłać elementy do podkolekcji, edytować metadane pozycji (po ich przesłaniu) oraz dodawać (mapować) istniejące pozycje z innych kolekcji (pod warunkiem posiadania odpowiednich uprawnień).", - "comcol-role.edit.bitstream_read.anonymous-group": "Domyślny status odczytu dla nowych plików to Anonimowy.", - "comcol-role.edit.editor.name": "Redaktorzy", - "comcol-role.edit.editor.description": "Redaktorzy mogą edytować metadane nowych pozycji, a następnie akceptować je lub odrzucać.", - "comcol-role.edit.finaleditor.name": "Redaktorzy końcowi", - "comcol-role.edit.finaleditor.description": "Redaktorzy końcowi mogą edytować metadane nowych pozycji, ale nie mogę odrzucać pozycji.", - "comcol-role.edit.reviewer.name": "Recenzenci", - "comcol-role.edit.reviewer.description": "Recenzenci mogą akceptować lub odrzucać nowe pozycje, ale nie mogę edytować ich metadanych.", - "community.form.abstract": "Opis skrócony", - "community.form.description": "Wstęp (HTML)", - "community.form.errors.title.required": "Wprowadź nazwę zbioru", - "community.form.rights": "Prawa autoskie (HTML)", - "community.form.tableofcontents": "Wiadomości (HTML)", - "community.form.title": "Nazwa", - "community.page.edit": "Edytuj ten zbiór", - "community.page.handle": "Stały URI zbioru", - "community.page.license": "Licencja", - "community.page.news": "Wiadomości", - "community.all-lists.head": "Podzbiory i kolekcje", - "community.sub-collection-list.head": "Kolekcje w tym zbiorze", - "community.sub-community-list.head": "Kolekcje w tym zbiorze", - "cookies.consent.accept-all": "Zaakceptuj wszystko", - "cookies.consent.accept-selected": "Zaakceptuj wybrane", - "cookies.consent.app.opt-out.description": "Aplikacja jest domyślnie włączona (możesz ją wyłączyć)", - "cookies.consent.app.opt-out.title": "(możesz ją wyłaczyć)", - "cookies.consent.app.purpose": "cel", - "cookies.consent.app.required.description": "Ta aplikacja jest zawsze wymagana", - "cookies.consent.app.required.title": "(zawsze wymagana)", - "cookies.consent.update": "Od ostatniej wizyty zostały wprowadzone zmiany. Zweryfikuj swoje zgody.", - "cookies.consent.close": "Zamknij", - "cookies.consent.decline": "Odrzuć", - "cookies.consent.content-notice.description": "Zbieramy i przetwarzamy Twoje dane do następujących celów: weryfikacja, preferencje, zgody i statystyka.
    Jeśli chcesz się dowiedzieć więcej, przycztaj naszą {privacyPolicy}.", - "cookies.consent.content-notice.learnMore": "Dostosuj", - "cookies.consent.content-modal.description": "Tutaj są wyświetlane informacje, które zbieramy o Tobie. Możesz je dostosować według swojego uznania.", - "cookies.consent.content-modal.privacy-policy.name": "polityka prywatności", - "cookies.consent.content-modal.privacy-policy.text": "Aby dowiedzieć się więcej przeczytaj naszą {privacyPolicy}.", - "cookies.consent.content-modal.title": "Informacje, które zbieramy", - "cookies.consent.app.title.authentication": "Logowanie", - "cookies.consent.app.description.authentication": "Musisz się zalogować", - "cookies.consent.app.title.preferences": "Preferencje", - "cookies.consent.app.description.preferences": "Wymagane, aby zapisać Twoje preferencje", - "cookies.consent.app.title.acknowledgement": "Zgody", - "cookies.consent.app.description.acknowledgement": "Wymagane, aby zapisać Twoje preferencje", - "cookies.consent.app.title.google-analytics": "Google Analytics", - "cookies.consent.app.description.google-analytics": "Pozwól na śledzenie do celów statystycznych", - "cookies.consent.purpose.functional": "Funkcjonalne", - "cookies.consent.purpose.statistical": "Statystyczne", - "curation-task.task.checklinks.label": "Sprawdź odnośniki w metadanych", - "curation-task.task.noop.label": "NOOP", - "curation-task.task.profileformats.label": "Profil formatów plików", - "curation-task.task.requiredmetadata.label": "Sprawdź poprawność wymaganych metadanych", - "curation-task.task.translate.label": "Microsoft Translator", - "curation-task.task.vscan.label": "Skan antywirusowy", - "curation.form.task-select.label": "Zadanie:", - "curation.form.submit": "Start", - "curation.form.submit.success.head": "Udało się rozpocząć zadanie administratora", - "curation.form.submit.success.content": "Zostaniesz przeniesiony na stronę procesu.", - "curation.form.submit.error.head": "Nie udało się się zakończyć zadania administratora", - "curation.form.submit.error.content": "Wystąpił błąd podczas rozpoczynania zadania administracyjnego.", - "curation.form.handle.label": "Automatyzacja:", - "curation.form.handle.hint": "Wskazówka: Wpisz [prefix swojego identyfikatora]/0, aby zautomatyzować zadanie (nie wszystkie zadania mogą wspierać tę funkcję)", - "deny-request-copy.email.message": "Drogi użytkowniku {{ recipientName }},\nW odpowiedzi na Państwa zapytanie, przykro mi poinformować, że to niemożliwe, aby przestać kopię pliku, o który Państwo prosili: \"{{ itemUrl }}\" ({{ itemName }}), którego jestem autorem.\n\nPozdrawiam serdecznie,\n{{ authorName }} <{{ authorEmail }}>", - "deny-request-copy.email.subject": "Wystąp o kopię dokumentu", - "deny-request-copy.error": "Wystąpił błąd", - "deny-request-copy.header": "Odrzuć prośbę o przesłanie kopii dokumentu", - "deny-request-copy.intro": "Ta wiadomość zostanie przesłana do osoby, która wystąpiła o dostęp", - "deny-request-copy.success": "Z powodzeniem odrzucono prośbę o udostępnienie pozycji", - "dso.name.untitled": "Brak tytułu", - "dso-selector.claim.item.head": "Wskazówki profilu", - "dso-selector.claim.item.body": "Istnieją profile, które mogą odnosić się do Ciebie. Jeśli, któryś z tych profilów jest Twój, wybierz go i przejdź do szczegółów, z opcji wybierz opcję przypisania profilu. W innym przypadku możesz utworzyć nowy profil z szablonu, wybierając przycisk poniżej.", - "dso-selector.claim.item.create-from-scratch": "Utwórz nowy", - "dso-selector.claim.item.not-mine-label": "Żaden nie jest mój", - "dso-selector.create.collection.head": "Nowa kolekcja", - "dso-selector.create.collection.sub-level": "Utwórz nową kolekcję w", - "dso-selector.create.community.head": "Nowy zbiór", - "dso-selector.create.community.sub-level": "Utwórz nowy zbiór", - "dso-selector.create.community.top-level": "Utwórz nowy nadrzędny zbiór", - "dso-selector.create.item.head": "Nowa pozycja", - "dso-selector.create.item.sub-level": "Utwórz nową pozycję w", - "dso-selector.create.submission.head": "Nowe zgłoszenie", - "dso-selector.edit.collection.head": "Edytuj kolekcję", - "dso-selector.edit.community.head": "Edytuj zbiór", - "dso-selector.edit.item.head": "Edytuj pozycję", - "dso-selector.error.title": "Wystąpił błąd podczas wyszukiwania typu {{ type }}", - "dso-selector.export-metadata.dspaceobject.head": "Eksportuj metadane z", - "dso-selector.no-results": "Nie znaleziono {{ type }}", - "dso-selector.placeholder": "Wyszukaj {{ type }}", - "dso-selector.select.collection.head": "Wybierz kolekcję", - "dso-selector.set-scope.community.head": "Wybierz wyszukiwanie zakresu", - "dso-selector.set-scope.community.button": "Wyszukaj w całym DSpace", - "dso-selector.set-scope.community.input-header": "Wyszukaj zbiór lub kolekcję", - "confirmation-modal.export-metadata.header": "Eksportuj metadane z {{ dsoName }}", - "confirmation-modal.export-metadata.info": "Czy na pewno chcesz eksportować metadane z {{ dsoName }}", - "confirmation-modal.export-metadata.cancel": "Anuluj", - "confirmation-modal.export-metadata.confirm": "Eksportuj", - "confirmation-modal.delete-eperson.header": "Usuń użytkownika \"{{ dsoName }}\"", - "confirmation-modal.delete-eperson.info": "Czy na pewno chcesz usunąć użytkownika \"{{ dsoName }}\"", - "confirmation-modal.delete-eperson.cancel": "Anuluj", - "confirmation-modal.delete-eperson.confirm": "Usuń", - "error.bitstream": "Wystąpił błąd podczas tworzenia plików", - "error.browse-by": "Wystąpił błąd podczas tworzenia pozycji", - "error.collection": "Wystąpił błąd podczas tworzenia kolekcji", - "error.collections": "Wystąpił błąd podczas tworzenia kolekcji", - "error.community": "Wystąpił błąd podczas tworzenia ziboru", - "error.identifier": "Nie znaleziono pozycji z podanym identyfikatorem", - "error.default": "Błąd", - "error.item": "Wystąpił błąd podczas tworzenia pozycji", - "error.items": "Wystąpił błąd podczas tworzenia pozycji", - "error.objects": "Wystąpił błąd podczas tworzenia obiektów", - "error.recent-submissions": "Wystąpił błąd podczas tworzenia ostatniego zgłoszenia", - "error.search-results": "Wystąpił błąd podczas tworzenia wyników wyszukiwania", - "error.sub-collections": "Wystąpił błąd podczas tworzenia podkolekcji", - "error.sub-communities": "Wystąpił błąd podczas tworzenia podzbiorów", - "error.submission.sections.init-form-error": "Wystąpił błąd w czasie inicjalizacji sekcji, sprawdź konfigurację. Szczegóły poniżej:

    ", - "error.top-level-communities": "Błąd podczas pobierania nadrzędnego zbioru", - "error.validation.license.notgranted": "Musisz wyrazić tę zgodę, aby przesłać swoje zgłoszenie. Jeśli nie możesz wyrazić zgody w tym momencie, możesz zapisać swoją pracę i wrócić do niej później lub usunąć zgłoszenie.", - "error.validation.pattern": "Te dane wejściowe są ograniczone przez aktualny wzór: {{ pattern }}.", - "error.validation.filerequired": "Przesłanie pliku jest obowiązkowe", - "error.validation.required": "Pole jest wymagane", - "error.validation.NotValidEmail": "E-mail nie jest poprawny", - "error.validation.emailTaken": "E-mail jest już zarejestrowany", - "error.validation.groupExists": "Ta grupa już istnieje", - "file-section.error.header": "Błąd podczas uzyskiwania plików dla tej pozycji", - "footer.copyright": "copyright © 2002-{{ year }}", - "footer.link.dspace": "oprogramowanie DSpace", - "footer.link.lyrasis": "LYRASIS", - "footer.link.cookies": "Ustawienia plików cookies", - "footer.link.privacy-policy": "Polityka prywatności", - "footer.link.end-user-agreement": "Umowa użytkownika", - "forgot-email.form.header": "Nie pamiętam hasła", - "forgot-email.form.info": "Zarejestruj się, aby otrzymywać wiadomości o nowych pozycjach w obserowanych kolekcjach, a także przesyłać nowe pozycje do repozytorium.", - "forgot-email.form.email": "Adres e-mail *", - "forgot-email.form.email.error.required": "Uzupełnij adres e-mail", - "forgot-email.form.email.error.pattern": "Uzupełnij prawidłowy adres e-mail", - "forgot-email.form.email.hint": "Ten adres e-mail będzie zweryfikowany i będziesz go używać jako swój login.", - "forgot-email.form.submit": "Wyślij", - "forgot-email.form.success.head": "Wysłano wiadomość weryfikacyjną", - "forgot-email.form.success.content": "Wiadomość została wysłana na adres e-mail {{ email }}. Zawiera ona unikatowy link i dalsze instrukcje postępowania.", - "forgot-email.form.error.head": "Błąd podczas rejestracji adresu e-mail", - "forgot-email.form.error.content": "Wystąpił błąd poczas próby rejestracji tego adresu e-mail: {{ email }}", - "forgot-password.title": "Nie pamiętam hasła", - "forgot-password.form.head": "Nie pamiętam hasła", - "forgot-password.form.info": "Wpisz nowe hasło w polu poniżej i potwierdź je wpisując je ponownie w drugim polu. Hasło powinno mieć co najmniej sześć znaków.", - "forgot-password.form.card.security": "Bezpieczeństwo", - "forgot-password.form.identification.header": "Identifikacja", - "forgot-password.form.identification.email": "Adres e-mail: ", - "forgot-password.form.label.password": "Hasło", - "forgot-password.form.label.passwordrepeat": "Potwierdź hasło", - "forgot-password.form.error.empty-password": "Wpisz hasło poniżej.", - "forgot-password.form.error.matching-passwords": "Hasła nie są identyczne.", - "forgot-password.form.notification.error.title": "Błąd podczas próby ustawienia nowego hasła", - "forgot-password.form.notification.success.content": "Resetowanie hasła udało się. Zalogowano jako stworzony przed momemntem użytkownik.", - "forgot-password.form.notification.success.title": "Resetowanie hasła udane", - "forgot-password.form.submit": "Wpisz hasło", - "form.add": "Dodaj", - "form.add-help": "Wybierz ten przycisk, aby dodać aktualny wpis lub dodać następny", - "form.cancel": "Anuluj", - "form.clear": "Wyczyść", - "form.clear-help": "Kliknij tutaj, aby usunąć wybraną wartość", - "form.discard": "Odrzuć", - "form.drag": "Przeciągnij", - "form.edit": "Edytuj", - "form.edit-help": "Kliknij tutaj, aby edytować wybraną wartość", - "form.first-name": "Imię", - "form.last-name": "Nazwisko", - "form.loading": "Ładowanie...", - "form.lookup": "Przeglądaj", - "form.lookup-help": "Kliknij tutaj, aby zobaczyć istniejące powiązania", - "form.no-results": "Nie znaleziono rezultatów", - "form.no-value": "Nie wprowadzono wartości", - "form.remove": "Usuń", - "form.save": "Zapisz", - "form.save-help": "Zapisz zmiany", - "form.search": "Wyszukaj", - "form.search-help": "Kliknij tutaj, aby wyszukać w istniejących komentarzach", - "form.submit": "Zapisz", - "form.repeatable.sort.tip": "Upuść nową pozycję w nowym miejscu", - "grant-deny-request-copy.deny": "Nie przesyłaj kopii", - "grant-deny-request-copy.email.back": "Cofnij", - "grant-deny-request-copy.email.message": "Wiadomości", - "grant-deny-request-copy.email.message.empty": "Proszę wprowadzić wiadomość", - "grant-deny-request-copy.email.permissions.info": "W tym miejscu możesz przemyśleć ograniczenie dostępu do dokumentu, aby odpowiadać na mniej próśb o dostęp. Jeśli chcesz wystąpić do administratorów reposytorium o zniesienie restrykcji, zaznacz okienko poniżej.", - "grant-deny-request-copy.email.permissions.label": "Ustaw jako otwarty dostęp", - "grant-deny-request-copy.email.send": "Wyślij", - "grant-deny-request-copy.email.subject": "Temat", - "grant-deny-request-copy.email.subject.empty": "Wpisz temat", - "grant-deny-request-copy.grant": "Wyślij kopię", - "grant-deny-request-copy.header": "Prośba o przesłanie kopii dokumentu", - "grant-deny-request-copy.home-page": "Zabierz mnie na stronę główną", - "grant-deny-request-copy.intro1": "Jeśli jesteś jednym z autorów dokumentu {{ name }}, wybierz jedną z poniższych opcji, aby odpowiedzieć zapytaniu użytkownika.", - "grant-deny-request-copy.intro2": "Po wybraniu opcji, zostaną wyświetlone sugerowane odpowiedzi, które można edytować.", - "grant-deny-request-copy.processed": "Ta prośba jest już procesowana. Możesz użyć przycisku poniżej, aby wrócić do strony głównej.", - "grant-request-copy.email.message": "Drogi użytkowniku {{ recipientName }},\nW odpowiedzi na Państwa zapytanie, miło mi poinformować, że w załączniku przesyłam kopię dokumentu, o który Państwo prosili: \"{{ itemUrl }}\" ({{ itemName }}), którego jestem autorem.\n\nPozdrawiam serdecznie,\n{{ authorName }} <{{ authorEmail }}>", - "grant-request-copy.email.subject": "Prośba o kopię dokumentu", - "grant-request-copy.error": "Wystąpił błąd", - "grant-request-copy.header": "Zezwól na wysłanie kopii dokumentu", - "grant-request-copy.intro": "To wiadomość zostanie wysłana do osoby, która wystąpiła o dostęp. Wskazane dokumenty zostaną dołączone jako załącznik.", - "grant-request-copy.success": "Prośba o dostęp do dokumentu została przyjęta", - "home.description": "", - "home.breadcrumbs": "Strona główna", - "home.search-form.placeholder": "Przeszukaj repozytorium...", - "home.title": "Strona główna", - "home.top-level-communities.head": "Zbiory w DSpace", - "home.top-level-communities.help": "Przeszukaj kolekcje", - "info.end-user-agreement.accept": "Przeczytałem/am i akceptuję umowę użytkownika", - "info.end-user-agreement.accept.error": "Błąd wystąpił podczas akceptowania umowy użytkownika", - "info.end-user-agreement.accept.success": "Udało się zaktualizować umowę użytkownika", - "info.end-user-agreement.breadcrumbs": "Umowa użytkownika", - "info.end-user-agreement.buttons.cancel": "Anuluj", - "info.end-user-agreement.buttons.save": "Zapisz", - "info.end-user-agreement.head": "Umowa użytkownika", - "info.end-user-agreement.title": "Umowa użytkownika", - "info.privacy.breadcrumbs": "Oświadczenie polityki prywatności", - "info.privacy.head": "Oświadczenie polityki prywatności", - "info.privacy.title": "Oświadczenie polityki prywatności", - "item.alerts.private": "Ta pozycja jest prywatna", - "item.alerts.withdrawn": "Ta pozycja została wycofana", - "item.edit.authorizations.heading": "Za pomocą tego edytora możesz przeglądać i zmieniać polityki dla danej pozycji, a także zmieniać polityki dla poszczególnych części pozycji: paczek i strumieni bitów. W skrócie, pozycja jest kontenerem pakietów, a pakiety są kontenerami strumieni bitów. Kontenery zazwyczaj mają polityki ADD/REMOVE/READ/WRITE, natomiast strumienie bitów mają tylko polityki READ/WRITE.", - "item.edit.authorizations.title": "Edytuj politykę tej pozycji", - "item.badge.private": "Prywatny status publikacji", - "item.badge.withdrawn": "Wycofane publikacje", - "item.bitstreams.upload.bundle": "Pakiet", - "item.bitstreams.upload.bundle.placeholder": "Wybierz pakiet", - "item.bitstreams.upload.bundle.new": "Utworz pakiet", - "item.bitstreams.upload.bundles.empty": "Ta pozycja nie zawiera żadnych pakietów, do których można przesłać strumień bitów.", - "item.bitstreams.upload.cancel": "Anuluj", - "item.bitstreams.upload.drop-message": "Upuść plik, aby przesłać", - "item.bitstreams.upload.item": "Pozycja: ", - "item.bitstreams.upload.notifications.bundle.created.content": "Udało się utworzyć nowy pakiet.", - "item.bitstreams.upload.notifications.bundle.created.title": "Utwórz pakiet", - "item.bitstreams.upload.notifications.upload.failed": "Zweryfikuj pliki przed spróbowaniem ponownie.", - "item.bitstreams.upload.title": "Prześlij strumień bitów", - "item.edit.bitstreams.bundle.edit.buttons.upload": "Prześlij", - "item.edit.bitstreams.bundle.displaying": "Obecnie wyświetlono {{ amount }} plików z {{ total }}.", - "item.edit.bitstreams.bundle.load.all": "Załaduj wszystkie ({{ total }})", - "item.edit.bitstreams.bundle.load.more": "Załaduj więcej", - "item.edit.bitstreams.bundle.name": "PACZKA: {{ name }}", - "item.edit.bitstreams.discard-button": "Odrzuć", - "item.edit.bitstreams.edit.buttons.download": "Pobierz", - "item.edit.bitstreams.edit.buttons.drag": "Przeciągnij", - "item.edit.bitstreams.edit.buttons.edit": "Edytuj", - "item.edit.bitstreams.edit.buttons.remove": "Usuń", - "item.edit.bitstreams.edit.buttons.undo": "Cofnij zmiany", - "item.edit.bitstreams.empty": "Ta pozycja nie zawiera żadnych strumieni bitów. Wybierz strumienie do załadowania, aby je utworzyć.", - "item.edit.bitstreams.headers.actions": "Akcje", - "item.edit.bitstreams.headers.bundle": "Paczka", - "item.edit.bitstreams.headers.description": "Opis", - "item.edit.bitstreams.headers.format": "Format", - "item.edit.bitstreams.headers.name": "Nazwa", - "item.edit.bitstreams.notifications.discarded.content": "Twoje zmiany zostały odrzucone. Aby je przywrócić, wybierz przycisk 'Cofnij'", - "item.edit.bitstreams.notifications.discarded.title": "Zmiany odrzucone", - "item.edit.bitstreams.notifications.move.failed.title": "Błąd podczas przenoszenia plików", - "item.edit.bitstreams.notifications.move.saved.content": "Zmiany pozycji dla pliku tej pozycji oraz jego paczki zostały zapisane.", - "item.edit.bitstreams.notifications.move.saved.title": "Zmiana pozycji została zapisana", - "item.edit.bitstreams.notifications.outdated.content": "Pozycja została w międzyczasie zmieniona przez innego użytkownika. Twoje zmiany zostały cofnięte, aby uniknąć ewentualnych konfliktów", - "item.edit.bitstreams.notifications.outdated.title": "Zmiany nieaktualne", - "item.edit.bitstreams.notifications.remove.failed.title": "Błąd podczas usuwania pliku", - "item.edit.bitstreams.notifications.remove.saved.content": "Twoje zmiany dotyczące usunięcia plików z tej pozycji zostały zapisane.", - "item.edit.bitstreams.notifications.remove.saved.title": "Zmiany dotyczące usunięcia zapisane", - "item.edit.bitstreams.reinstate-button": "Cofnij", - "item.edit.bitstreams.save-button": "Zapisz", - "item.edit.bitstreams.upload-button": "Prześlij", - "item.edit.delete.cancel": "Anuluj", - "item.edit.delete.confirm": "Usuń", - "item.edit.delete.description": "Czy jesteś pewien, że ta pozycja powinna zostać całkowicie usunięta? Ostrożnie: Teraz nie pozostanie po tej pozycji żaden ślad.", - "item.edit.delete.error": "Błąd wystąpił podczas usuwania pozycji", - "item.edit.delete.header": "Usuń pozycję: {{ id }}", - "item.edit.delete.success": "Ta pozycja została usunięta", - "item.edit.head": "Edytuj pozycję", - "item.edit.breadcrumbs": "Edytuj pozycję", - "item.edit.tabs.disabled.tooltip": "Nie masz dostępu do tej strony", - "item.edit.tabs.mapper.head": "Mapper kolekcji", - "item.edit.tabs.item-mapper.title": "Edytowanie pozycji - Mapper kolekcji", - "item.edit.item-mapper.buttons.add": "Mapowanie pozycji do wybranych kolekcji", - "item.edit.item-mapper.buttons.remove": "Usuń mapowanie pozycji do wybranych kolekcji", - "item.edit.item-mapper.cancel": "Anuluj", - "item.edit.item-mapper.description": "To jest narzędzie do mapowania elementów, które pozwala administratorom mapować tę pozycję do innych kolekcji. Możesz wyszukiwać kolekcje i je mapować lub przeglądać listę kolekcji, do których dana pozycja jest aktualnie zmapowana.", - "item.edit.item-mapper.head": "Mapper pozycji - Mapowanie pozycji do kolekcji", - "item.edit.item-mapper.item": "Pozycja: \"{{name}}\"", - "item.edit.item-mapper.no-search": "Wpisz zapytanie, które chcesz wyszukać", - "item.edit.item-mapper.notifications.add.error.content": "Wystąpiły błędy dla mapowania pozycji w {{amount}} kolekcjach.", - "item.edit.item-mapper.notifications.add.error.head": "Błędy mapowania", - "item.edit.item-mapper.notifications.add.success.content": "Udało się zmapować elementy dla {{amount}} kolekcji.", - "item.edit.item-mapper.notifications.add.success.head": "Mapowanie zakończone", - "item.edit.item-mapper.notifications.remove.error.content": "Wystąpiły błędy podczas usuwania mapowania do {{amount}} kolekcji.", - "item.edit.item-mapper.notifications.remove.error.head": "Usunięcie mapowania błędów", - "item.edit.item-mapper.notifications.remove.success.content": "Udało się usunąć mapowanie pozycji w {{amount}} kolekcjach.", - "item.edit.item-mapper.notifications.remove.success.head": "Usuwanie mapowania zakończone", - "item.edit.item-mapper.search-form.placeholder": "Przeszukaj kolekcje...", - "item.edit.item-mapper.tabs.browse": "Przeglądaj zmapowane kolekcje", - "item.edit.item-mapper.tabs.map": "Mapuj nowe kolekcje", - "item.edit.metadata.add-button": "Dodaj", - "item.edit.metadata.discard-button": "Odrzuć", - "item.edit.metadata.edit.buttons.edit": "Edytuj", - "item.edit.metadata.edit.buttons.remove": "Usuń", - "item.edit.metadata.edit.buttons.undo": "Cofnij zmiany", - "item.edit.metadata.edit.buttons.unedit": "Zatrzymaj edycję", - "item.edit.metadata.empty": "Ta pozycja nie zawiera żadnych metadanych. Wybierz Dodaj, aby dodać metadane.", - "item.edit.metadata.headers.edit": "Edytuj", - "item.edit.metadata.headers.field": "Pole", - "item.edit.metadata.headers.language": "Język", - "item.edit.metadata.headers.value": "Wartość", - "item.edit.metadata.metadatafield.invalid": "Wybierz aktualne pole metadanych", - "item.edit.metadata.notifications.discarded.content": "Twoje zmiany zostały odrzucone. Aby wgrać je ponownie wybierz przycisk 'Cofnij'", - "item.edit.metadata.notifications.discarded.title": "Zmiany odrzucone", - "item.edit.metadata.notifications.error.title": "Wystąpił błąd", - "item.edit.metadata.notifications.invalid.content": "Twoje zmiany nie zostały zapisane. Przed zapisaniem upewnij się, że wszystkie pola są wypełnione prawidłowo.", - "item.edit.metadata.notifications.invalid.title": "Nieprawidłowe metadane", - "item.edit.metadata.notifications.outdated.content": "Pozycja została w międzyczasie zmieniona przez innego użytkownika. Twoje zmiany zostały cofnięte, aby zapobiec ewentualnym konfliktom", - "item.edit.metadata.notifications.outdated.title": "Zmiany nieaktualne", - "item.edit.metadata.notifications.saved.content": "Twoje zmiany metadanych tej pozycji zostały zapisane.", - "item.edit.metadata.notifications.saved.title": "Metadane zostały zapisane", - "item.edit.metadata.reinstate-button": "Cofnij", - "item.edit.metadata.save-button": "Zapisz", - "item.edit.modify.overview.field": "Pole", - "item.edit.modify.overview.language": "Język", - "item.edit.modify.overview.value": "Wartość", - "item.edit.move.cancel": "Anuluj", - "item.edit.move.save-button": "Zapisz", - "item.edit.move.discard-button": "Odrzuć", - "item.edit.move.description": "Wybierz kolekcję, do której chcesz przenieść tę pozycję. Aby zawęzić listę wyświetlanych kolekcji, możesz wprowadzić zapytanie w polu wyszukiwania.", - "item.edit.move.error": "Wystąpił błąd podczas przenoszenia pozycji", - "item.edit.move.head": "Przenieś pozycję: {{id}}", - "item.edit.move.inheritpolicies.checkbox": "Dziedziczenie polityk", - "item.edit.move.inheritpolicies.description": "Dziedzczenie domyślnych polityk z kolekcji docelowej", - "item.edit.move.move": "Przenieś", - "item.edit.move.processing": "Przenoszenie...", - "item.edit.move.search.placeholder": "Wpisz zapytanie, aby wyszukać w kolekcjach", - "item.edit.move.success": "Pozycja została przeniesiona", - "item.edit.move.title": "Przenieś pozycję", - "item.edit.private.cancel": "Anuluj", - "item.edit.private.confirm": "Ukryj", - "item.edit.private.description": "Czy chcesz ukryć tę pozycję?", - "item.edit.private.error": "Wystąpił błąd podczas ukrywania pozycji", - "item.edit.private.header": "Ukryj pozycję: {{ id }}", - "item.edit.private.success": "Pozycja jest teraz ukryta", - "item.edit.public.cancel": "Anuluj", - "item.edit.public.confirm": "Upublicznij", - "item.edit.public.description": "Czy chcesz upublicznić tę pozycję?", - "item.edit.public.error": "Wystąpił błąd podczas upubliczniania pozycji", - "item.edit.public.header": "Upublicznij pozycję: {{ id }}", - "item.edit.public.success": "Pozycja jest teraz publiczna", - "item.edit.reinstate.cancel": "Anuluj", - "item.edit.reinstate.confirm": "Przywróć", - "item.edit.reinstate.description": "Czy chcesz przywrócić tę pozycję?", - "item.edit.reinstate.error": "Wystąpił błąd podczas przywracania pozycji", - "item.edit.reinstate.header": "Przywróć pozycję: {{ id }}", - "item.edit.reinstate.success": "Pozycja została przywrócona", - "item.edit.relationships.discard-button": "Odrzuć", - "item.edit.relationships.edit.buttons.add": "Dodaj", - "item.edit.relationships.edit.buttons.remove": "Usuń", - "item.edit.relationships.edit.buttons.undo": "Cofnij zmiany", - "item.edit.relationships.no-relationships": "Brak relacji", - "item.edit.relationships.notifications.discarded.content": "Twoje zmiany zostały cofnięte. Aby przywrócić zmiany wybierz przycisk 'Cofnij'", - "item.edit.relationships.notifications.discarded.title": "Zmiany zostały cofnięte", - "item.edit.relationships.notifications.failed.title": "Wystąpił błąd podczas edytowania relacji", - "item.edit.relationships.notifications.outdated.content": "Ta pozycja została właśnie zmieniona przez innego użytkownika. Twoje zmiany zostały cofnięte, aby uniknąć konfliktów", - "item.edit.relationships.notifications.outdated.title": "Zmiany są nieaktualne", - "item.edit.relationships.notifications.saved.content": "Twoje zmiany w relacjach tej pozycji zostały zapisane.", - "item.edit.relationships.notifications.saved.title": "Relacje zostały zapisane", - "item.edit.relationships.reinstate-button": "Cofnij", - "item.edit.relationships.save-button": "Zapisz", - "item.edit.relationships.no-entity-type": "Dodaj metadaną 'dspace.entity.type', aby umożliwić dodawanie relacji do pozycji", - "item.edit.return": "Cofnij", - "item.edit.tabs.bitstreams.head": "Pliki", - "item.edit.tabs.bitstreams.title": "Edycja pozycji - pliki", - "item.edit.tabs.curate.head": "Administruj", - "item.edit.tabs.curate.title": "Edytowanie pozycji - administruj", - "item.edit.tabs.metadata.head": "Metadane", - "item.edit.tabs.metadata.title": "Edycja pozycji - metadane", - "item.edit.tabs.relationships.head": "Relacje", - "item.edit.tabs.relationships.title": "Edycja pozycja - relacje", - "item.edit.tabs.status.buttons.authorizations.button": "Dostępy...", - "item.edit.tabs.status.buttons.authorizations.label": "Określu dostęp do pozycji", - "item.edit.tabs.status.buttons.delete.button": "Usuń permanentnie", - "item.edit.tabs.status.buttons.delete.label": "Usuń pozycję permanentnie", - "item.edit.tabs.status.buttons.mappedCollections.button": "Zmapowane kolekcje", - "item.edit.tabs.status.buttons.mappedCollections.label": "Zarządzaj mapowanymi kolekcjami", - "item.edit.tabs.status.buttons.move.button": "Przenieś...", - "item.edit.tabs.status.buttons.move.label": "Przenieś pozycję do innej kolekcji", - "item.edit.tabs.status.buttons.private.button": "Ukryj...", - "item.edit.tabs.status.buttons.private.label": "Ukry pozycję", - "item.edit.tabs.status.buttons.public.button": "Upublicznij...", - "item.edit.tabs.status.buttons.public.label": "Upublicznij pozycję", - "item.edit.tabs.status.buttons.reinstate.button": "Przywróć...", - "item.edit.tabs.status.buttons.reinstate.label": "Przywróć pozycję", - "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", - "item.edit.tabs.status.buttons.withdraw.button": "Wycofaj...", - "item.edit.tabs.status.buttons.withdraw.label": "Wycofaj z repozytorium", - "item.edit.tabs.status.description": "Witamy na stronie zarządzania pozycjami. Z tego miejsca możesz wycofać, przywrócić, przenieść lub usunąć daną pozycję. Możesz również aktualizować lub dodawać nowe metadane lub pliki..", - "item.edit.tabs.status.head": "Status", - "item.edit.tabs.status.labels.handle": "Identyfikator", - "item.edit.tabs.status.labels.id": "ID pozycji", - "item.edit.tabs.status.labels.itemPage": "Strona pozycji", - "item.edit.tabs.status.labels.lastModified": "Ostatnia modyfikacja", - "item.edit.tabs.status.title": "Edycja pozycji - Status", - "item.edit.tabs.versionhistory.head": "Historia wersji", - "item.edit.tabs.versionhistory.title": "Edycja pozycji - historia wersji", - "item.edit.tabs.versionhistory.under-construction": "Edytowanie lub dodawanie nowych wersji jest niedostępne w tego poziomu interfejsu.", - "item.edit.tabs.view.head": "Widok pozycji", - "item.edit.tabs.view.title": "Edycja pozycji - widok", - "item.edit.withdraw.cancel": "Anuluj", - "item.edit.withdraw.confirm": "Wycofaj", - "item.edit.withdraw.description": "Czy na pewno chcesz wycofać pozycję?", - "item.edit.withdraw.error": "Wystąpił błąd podczas wycofywania pozycji", - "item.edit.withdraw.header": "Wycofaj pozycję: {{ id }}", - "item.edit.withdraw.success": "Pozycja została wycofana", - "item.listelement.badge": "Pozycja", - "item.page.description": "Opis", - "item.page.journal-issn": "ISSN czasopisma", - "item.page.journal-title": "Tytuł czasopisma", - "item.page.publisher": "Wydawca", - "item.page.titleprefix": "Pozycja: ", - "item.page.volume-title": "Tytuł tomu", - "item.search.results.head": "Wyniki wyszukiwania pozycji", - "item.search.title": "Wyszukiwanie pozycji", - "item.page.abstract": "Abstrakt", - "item.page.author": "Autorzy", - "item.page.citation": "Cytowanie", - "item.page.collections": "Kolekcje", - "item.page.collections.loading": "Ładowanie...", - "item.page.collections.load-more": "Załaduj więcej", - "item.page.date": "Data", - "item.page.edit": "Edytuj pozycję", - "item.page.files": "Pliki", - "item.page.filesection.description": "Opis:", - "item.page.filesection.download": "Pobierz", - "item.page.filesection.format": "Format:", - "item.page.filesection.name": "Nazwa:", - "item.page.filesection.size": "Rozmiar:", - "item.page.journal.search.title": "Artykuły w czasopiśmie", - "item.page.link.full": "Zobacz szczegóły", - "item.page.link.simple": "Uproszczony widok", - "item.page.person.search.title": "Artykuły tego autora", - "item.page.related-items.view-more": "Pokaż o {{ amount }} więcej", - "item.page.related-items.view-less": "Ukryj {{ amount }}", - "item.page.relationships.isAuthorOfPublication": "Publikacje", - "item.page.relationships.isJournalOfPublication": "Publikacje", - "item.page.relationships.isOrgUnitOfPerson": "Autorzy", - "item.page.relationships.isOrgUnitOfProject": "Projekty naukowe", - "item.page.subject": "Słowa kluczowe", - "item.page.uri": "URI", - "item.page.bitstreams.view-more": "Pokaż więcej", - "item.page.bitstreams.collapse": "Pokaż mniej", - "item.page.filesection.original.bundle": "Oryginalne pliki", - "item.page.filesection.license.bundle": "Licencja", - "item.page.return": "Powrót", - "item.page.version.create": "Utwórz nową wersję", - "item.page.version.hasDraft": "Nowa wersja nie może zostać utworzona, ponieważ istnieje już oczekujące na akceptację zgłoszenie dokumentu tego pliku", - "item.preview.dc.identifier.doi": "DOI", - "item.preview.dc.relation.ispartof": "Czasopismo lub seria", - "item.preview.dc.identifier.isbn": "ISBN", - "item.preview.dc.identifier.uri": "Identyfikator:", - "item.preview.dc.contributor.author": "Autorzy:", - "item.preview.dc.date.issued": "Data publikacji:", - "item.preview.dc.description.abstract": "Abstrakt:", - "item.preview.dc.identifier.other": "Inny identyfikator:", - "item.preview.dc.language.iso": "Język:", - "item.preview.dc.title": "Tytuł:", - "item.preview.dc.title.alternative": "Tytuł alternatywny", - "item.preview.dc.type": "Typ:", - "item.preview.dc.identifier": "Identyfikator:", - "item.preview.dc.relation.issn": "ISSN", - "item.preview.oaire.citation.issue": "Numer wydania", - "item.preview.oaire.citation.volume": "Numer tomu", - "item.preview.person.familyName": "Nazwisko:", - "item.preview.person.givenName": "Nazwa:", - "item.preview.person.identifier.orcid": "ORCID:", - "item.preview.project.funder.name": "Fundator:", - "item.preview.project.funder.identifier": "Identyfikator fundatora:", - "item.preview.oaire.awardNumber": "ID finansowania:", - "item.preview.dc.coverage.spatial": "Jurysdykcja:", - "item.preview.oaire.fundingStream": "Źródło finansowania:", - "item.select.confirm": "Potwierdź zaznaczone", - "item.select.empty": "Brak pozycji do wyświetlenia", - "item.select.table.author": "Autor", - "item.select.table.collection": "Kolekcja", - "item.select.table.title": "Tytuł", - "item.version.history.empty": "Jeszcze nie ma innych wersji tej pozycji.", - "item.version.history.head": "Poprzednie wersje", - "item.version.history.return": "Powrót", - "item.version.history.selected": "Wybrane wersje", - "item.version.history.selected.alert": "W tym momencie wyświetlono wersję {{version}} pozycji.", - "item.version.history.table.version": "Wersja", - "item.version.history.table.item": "Pozycja", - "item.version.history.table.editor": "Redaktor", - "item.version.history.table.date": "Data", - "item.version.history.table.summary": "Podsumowanie", - "item.version.history.table.workspaceItem": "Wersja robocza", - "item.version.history.table.workflowItem": "Pozycja workflow", - "item.version.history.table.actions": "Akcja", - "item.version.history.table.action.editWorkspaceItem": "Edytuj wersję roboczą pozycji", - "item.version.history.table.action.editSummary": "Edytuj podsumowanie", - "item.version.history.table.action.saveSummary": "Zapisz edycje podsumowania", - "item.version.history.table.action.discardSummary": "Odrzuć edycje podsumowania", - "item.version.history.table.action.newVersion": "Utwórz nową wersję z tej wersji", - "item.version.history.table.action.deleteVersion": "Wersja usunięta", - "item.version.history.table.action.hasDraft": "Nowa wersja nie może zostać utworzona, ponieważ istnieje już oczekujące na akceptację zgłoszenie dokumentu tego pliku", - "item.version.notice": "To nie jest najnowsza wersja tej pozycji. Najnowsza wersja jest dostępna tutaj.", - "item.version.create.modal.header": "Nowa wersja", - "item.version.create.modal.text": "Utwórz nową wersję tej pozycji", - "item.version.create.modal.text.startingFrom": "zaczynając od wersji {{version}}", - "item.version.create.modal.button.confirm": "Utwórz", - "item.version.create.modal.button.confirm.tooltip": "Utwórz nową wersję", - "item.version.create.modal.button.cancel": "Anuluj", - "item.version.create.modal.button.cancel.tooltip": "Nie stwarzaj nowej wersji", - "item.version.create.modal.form.summary.label": "Podsumowanie", - "item.version.create.modal.form.summary.placeholder": "Wprowadź podsumowanie nowej wersji", - "item.version.create.notification.success": "Nowa wersja została utworzona z numerem {{version}}", - "item.version.create.notification.failure": "Nowa wersja nie została utworzona", - "item.version.create.notification.inProgress": "Nowa wersja nie może być utworzona, ponieważ propozycja innej wersji jest już złożona do zaakceptowania", - "item.version.delete.modal.header": "Usuń wersję", - "item.version.delete.modal.text": "Czy chcesz usunąć wersję {{version}}?", - "item.version.delete.modal.button.confirm": "Usuń", - "item.version.delete.modal.button.confirm.tooltip": "Usuń wersję", - "item.version.delete.modal.button.cancel": "Anuluj", - "item.version.delete.modal.button.cancel.tooltip": "Nie usuwaj tej wersji", - "item.version.delete.notification.success": "Wersja {{version}} została usunięta", - "item.version.delete.notification.failure": "Wersja {{version}} nie została usunięta", - "item.version.edit.notification.success": "Podsumowanie wersji {{version}} zostało zmienione", - "item.version.edit.notification.failure": "Podsumowanie wersji {{version}} nie zostało zmienione", - "journal.listelement.badge": "Czasopismo", - "journal.page.description": "Opis", - "journal.page.edit": "Edytuj tę pozycję", - "journal.page.editor": "Redaktor naczelny", - "journal.page.issn": "ISSN", - "journal.page.publisher": "Wydawca", - "journal.page.titleprefix": "Czasopismo: ", - "journal.search.results.head": "Wyniki wyszukiwania czasopism", - "journal.search.title": "Wyszukiwanie czasopism", - "journalissue.listelement.badge": "Numer czasopisma", - "journalissue.page.description": "Opis", - "journalissue.page.edit": "Edytuj pozycję", - "journalissue.page.issuedate": "Data wydania", - "journalissue.page.journal-issn": "ISSN czasopisma", - "journalissue.page.journal-title": "Tytuł czasopisma", - "journalissue.page.keyword": "Słowa kluczowe", - "journalissue.page.number": "Numer", - "journalissue.page.titleprefix": "Wydanie czasopisma: ", - "journalvolume.listelement.badge": "Numer tomu czasopisma", - "journalvolume.page.description": "Opis", - "journalvolume.page.edit": "Edytuj pozycję", - "journalvolume.page.issuedate": "Data wydania", - "journalvolume.page.titleprefix": "Numer tomu czasopisma: ", - "journalvolume.page.volume": "Numer wydania", - "iiifsearchable.listelement.badge": "Multimedia dokumentu", - "iiifsearchable.page.titleprefix": "Dokument: ", - "iiifsearchable.page.doi": "Stały link: ", - "iiifsearchable.page.issue": "Wydanie: ", - "iiifsearchable.page.description": "Opis: ", - "iiifviewer.fullscreen.notice": "Wyświetl na pełnym ekranie dla lepszego widoku.", - "iiif.listelement.badge": "Multimedia obrazu", - "iiif.page.titleprefix": "Obraz: ", - "iiif.page.doi": "Stały link: ", - "iiif.page.issue": "Numer wydania: ", - "iiif.page.description": "Opis: ", - "loading.bitstream": "Ładowanie pliku...", - "loading.bitstreams": "Ładowanie plików...", - "loading.browse-by": "Ładowanie pozycji...", - "loading.browse-by-page": "Ładowanie strony...", - "loading.collection": "Ładowanie kolekcji...", - "loading.collections": "Ładowanie kolekcji...", - "loading.content-source": "Ładowanie źródła treści...", - "loading.community": "Ładowanie zbioru...", - "loading.default": "Ładowanie...", - "loading.item": "Ładowanie pozycji...", - "loading.items": "Ładowanie pozycji...", - "loading.mydspace-results": "Ładowanie pozycji...", - "loading.objects": "Ładowanie...", - "loading.recent-submissions": "Ładowanie ostatnich zgłoszeń...", - "loading.search-results": "Ładowanie wyników wyszukiwania...", - "loading.sub-collections": "Ładowanie podkolekcji...", - "loading.sub-communities": "Ładowanie podzbioru...", - "loading.top-level-communities": "Ładowanie zbioru wyszego szczebla...", - "login.form.email": "Adres e-mail", - "login.form.forgot-password": "Nie pamiętasz hasła?", - "login.form.header": "Zaloguj się do DSpace", - "login.form.new-user": "Nie masz konta? Zarejestruj się.", - "login.form.or-divider": "lub", - "login.form.orcid": "Zaloguj za pomocą ORCID", - "login.form.oidc": "Zaloguj za pomocą OIDC", - "login.form.password": "Hasło", - "login.form.shibboleth": "Zaloguj za pomocą Shibboleth", - "login.form.submit": "Zaloguj się", - "login.title": "Zaloguj", - "login.breadcrumbs": "Zaloguj", - "logout.form.header": "Wyloguj się z DSpace", - "logout.form.submit": "Wyloguj się", - "logout.title": "Wylogowywanie", - "menu.header.admin": "Panel administracyjny", - "menu.header.image.logo": "Logo repozytorium", - "menu.header.admin.description": "Menu administratora", - "menu.section.access_control": "Uprawnienia", - "menu.section.access_control_authorizations": "Dostępy", - "menu.section.access_control_groups": "Grupy", - "menu.section.access_control_people": "Użytkownicy", - "menu.section.admin_search": "Wyszukiwanie administracyjne", - "menu.section.browse_community": "Ten zbiór", - "menu.section.browse_community_by_author": "Wg autorów", - "menu.section.browse_community_by_issue_date": "Wg daty wydania", - "menu.section.browse_community_by_title": "Wg tytułów", - "menu.section.browse_global": "Wszystko na DSpace", - "menu.section.browse_global_by_author": "Wg autorów", - "menu.section.browse_global_by_dateissued": "Wg daty wydania", - "menu.section.browse_global_by_subject": "Wg tematu", - "menu.section.browse_global_by_title": "Wg tytułu", - "menu.section.browse_global_communities_and_collections": "Zbiory i kolekcje", - "menu.section.control_panel": "Panel sterowania", - "menu.section.curation_task": "Zadanie administracyjne", - "menu.section.edit": "Edytuj", - "menu.section.edit_collection": "Kolekcja", - "menu.section.edit_community": "Zbiór", - "menu.section.edit_item": "Pozycja", - "menu.section.export": "Eksport", - "menu.section.export_collection": "Kolekcja", - "menu.section.export_community": "Zbiór", - "menu.section.export_item": "Pozycja", - "menu.section.export_metadata": "Metadane", - "menu.section.icon.access_control": "Sekcja menu Uprawnienia", - "menu.section.icon.admin_search": "Sekcja menu Wyszukiwanie administracyjne", - "menu.section.icon.control_panel": "Sekcja menu Panel sterowania", - "menu.section.icon.curation_tasks": "Sekcja menu Zadanie administracyjne", - "menu.section.icon.edit": "Sekcja menu Edycja", - "menu.section.icon.export": "Sekcja menu Eksport", - "menu.section.icon.find": "Sekcja menu Wyszukiwanie", - "menu.section.icon.import": "Sekcja menu Import", - "menu.section.icon.new": "Sekcja menu Dodaj", - "menu.section.icon.pin": "Przypnij boczny pasek", - "menu.section.icon.processes": "Sekcja menu Procesy", - "menu.section.icon.registries": "Sekcja menu Rejestry", - "menu.section.icon.statistics_task": "Sekcja menu Zadanie statystyczne", - "menu.section.icon.workflow": "Sekcja menu Zarządzanie workflow", - "menu.section.icon.unpin": "Odepnij boczny pasek", - "menu.section.import": "Import", - "menu.section.import_batch": "Import masowy (ZIP)", - "menu.section.import_metadata": "Metadane", - "menu.section.new": "Dodaj", - "menu.section.new_collection": "Kolekcja", - "menu.section.new_community": "Zbiór", - "menu.section.new_item": "Pozycja", - "menu.section.new_item_version": "Wersja pozycji", - "menu.section.new_process": "Proces", - "menu.section.pin": "Przypnij pasek boczny", - "menu.section.unpin": "Odepnij pasek boczny", - "menu.section.processes": "Procesy", - "menu.section.registries": "Rejestry", - "menu.section.registries_format": "Formaty", - "menu.section.registries_metadata": "Metadane", - "menu.section.statistics": "Statystyki", - "menu.section.statistics_task": "Zadanie statystyczne", - "menu.section.toggle.access_control": "Przełącz sekcję Uprawnienia", - "menu.section.toggle.control_panel": "Przełącz sekcję Panel sterowania", - "menu.section.toggle.curation_task": "Przełącz sekcję Zadanie kuratora", - "menu.section.toggle.edit": "Przełącz sekcję Edytuj", - "menu.section.toggle.export": "Przełącz sekcję Eksport", - "menu.section.toggle.find": "Przełącz sekcję Wyszukiwanie", - "menu.section.toggle.import": "Przełącz sekcję Import", - "menu.section.toggle.new": "Przełącz nową sekcję", - "menu.section.toggle.registries": "Przełącz sekcję Rejestry", - "menu.section.toggle.statistics_task": "Przełącz sekcję Zadanie statystyczne", - "menu.section.workflow": "Zarządzaj Workflow", - "mydspace.breadcrumbs": "Mój DSpace", - "mydspace.description": "", - "mydspace.messages.controller-help": "Wybierz tę opcję, aby przesłać wiadomość do zgłaszającego.", - "mydspace.messages.description-placeholder": "Wpisz swoją wiadomość tutaj...", - "mydspace.messages.hide-msg": "Ukryj wiadomość", - "mydspace.messages.mark-as-read": "Oznacz jako przeczytane", - "mydspace.messages.mark-as-unread": "Oznacz jako nieprzeczytane", - "mydspace.messages.no-content": "Brak treści.", - "mydspace.messages.no-messages": "Brak wiadomości.", - "mydspace.messages.send-btn": "Wysłano", - "mydspace.messages.show-msg": "Pokaż wiadomość", - "mydspace.messages.subject-placeholder": "Temat...", - "mydspace.messages.submitter-help": "Wybierz tę opcję, aby przesłać wiadomość do osoby kontrolującej.", - "mydspace.messages.title": "Wiadomości", - "mydspace.messages.to": "Do", - "mydspace.new-submission": "Nowe zgłoszenie", - "mydspace.new-submission-external": "Import medatanych z zewnętrznego źródła", - "mydspace.new-submission-external-short": "Import metadanych", - "mydspace.results.head": "Twoje zadania", - "mydspace.results.no-abstract": "Brak abstraktu", - "mydspace.results.no-authors": "Brak autorów", - "mydspace.results.no-collections": "Brak kolekcji", - "mydspace.results.no-date": "Brak daty", - "mydspace.results.no-files": "Brak plików", - "mydspace.results.no-results": "Brak pozycji do wyświetlenia", - "mydspace.results.no-title": "Brak tytułu", - "mydspace.results.no-uri": "Brak Uri", - "mydspace.search-form.placeholder": "Wyszukaj w mydspace...", - "mydspace.show.workflow": "Wszystkie zadania", - "mydspace.show.workspace": "Twoje zadania", - "mydspace.status.mydspaceArchived": "Zarchiwizowano", - "mydspace.status.mydspaceValidation": "Walidacja", - "mydspace.status.mydspaceWaitingController": "Oczekiwanie na redaktora", - "mydspace.status.mydspaceWorkflow": "Workflow", - "mydspace.status.mydspaceWorkspace": "Wersja robocza", - "mydspace.title": "Mój DSpace", - "mydspace.upload.upload-failed": "Bład podczas tworzenia nowej wersji roboczej. Sprawdź poprawność plików i spróbuj ponownie.", - "mydspace.upload.upload-failed-manyentries": "Plik jest niemożliwy do przetworzenia. Wykryto wiele wejść, a dopuszczalne jest tylko jedno dla jednego pliku.", - "mydspace.upload.upload-failed-moreonefile": "Zapytanie niemożliwe do przetworzenia. Tylko jeden plik jest dopuszczalny.", - "mydspace.upload.upload-multiple-successful": "Utworzono {{qty}} przestrzeni roboczych.", - "mydspace.view-btn": "Widok", - "nav.browse.header": "Cały DSpace", - "nav.community-browse.header": "Wg zbiorów", - "nav.language": "Zmień język", - "nav.login": "Zaloguj", - "nav.logout": "Menu profilu użytkownika i wylogowywanie", - "nav.main.description": "Główny pasek nawigacji", - "nav.mydspace": "Mój DSpace", - "nav.profile": "Profil", - "nav.search": "Wyszukiwanie", - "nav.statistics.header": "Statystyki", - "nav.stop-impersonating": "Przestań impersonifikować użytkownika", - "nav.toggle": "Przełącz nawigację", - "nav.user.description": "Pasek profilu użytkownika", - "none.listelement.badge": "Pozycja", - "person.listelement.badge": "Osoba", - "person.listelement.no-title": "Nie znaleziono imienia", - "person.page.birthdate": "Data urodzenia", - "person.page.edit": "Edytuj pozycję", - "person.page.email": "Adres e-mail", - "person.page.firstname": "Imię", - "person.page.jobtitle": "Stanowisko", - "person.page.lastname": "Nazwisko", - "person.page.link.full": "Pokaż wszystkie metadane", - "person.page.orcid": "ORCID", - "person.page.orcid.create": "Utwórz ORCID ID", - "person.page.orcid.granted-authorizations": "Udzielone dostępy", - "person.page.orcid.grant-authorizations": "Udziel dostępu", - "person.page.orcid.link": "Połącz z ORCID ID", - "person.page.orcid.orcid-not-linked-message": "ORCID iD tego profilu ({{ orcid }}) nie jest połączony z bazą ORCID lub połączenie wygasło.", - "person.page.orcid.unlink": "Odepnij z ORCID", - "person.page.orcid.unlink.processing": "Procesowanie...", - "person.page.orcid.missing-authorizations": "Brak dostępów", - "person.page.orcid.missing-authorizations-message": "Brakuj następujących dostępów:", - "person.page.orcid.no-missing-authorizations-message": "Świetnie! To miejsce jest puste, co oznacza, że masz dostęp do wszystkich uprawnień, które są dostępne w Twojej instytucji.", - "person.page.orcid.no-orcid-message": "Brak przypisanego ORCID iD. Poprez wybranie przycisku poniżej możesz powiązać ten profil wraz z kontem ORCID.", - "person.page.orcid.profile-preferences": "Preferencje profilu", - "person.page.orcid.funding-preferences": "Preferencje finansowania", - "person.page.orcid.publications-preferences": "Preferencje publikacji", - "person.page.orcid.remove-orcid-message": "Jeśli chcesz usunąć Twój ORCID, skontaktuj się z administratorem repozytorium", - "person.page.orcid.save.preference.changes": "Aktualizuj ustawienia", - "person.page.orcid.sync-profile.affiliation": "Afiliacja", - "person.page.orcid.sync-profile.biographical": "Biografia", - "person.page.orcid.sync-profile.education": "Edukacja", - "person.page.orcid.sync-profile.identifiers": "Identyfikatory", - "person.page.orcid.sync-fundings.all": "Wszystkie źrodła finansowania", - "person.page.orcid.sync-fundings.mine": "Moje źrodła finansowania", - "person.page.orcid.sync-fundings.my_selected": "Wybrane źródła finansowania", - "person.page.orcid.sync-fundings.disabled": "Nieaktywne", - "person.page.orcid.sync-publications.all": "Wszystkie publikacje", - "person.page.orcid.sync-publications.mine": "Moje publikacje", - "person.page.orcid.sync-publications.my_selected": "Wybrane publikacje", - "person.page.orcid.sync-publications.disabled": "Nieaktywne", - "person.page.orcid.sync-queue.discard": "Odrzuć zmianę i nie synchronizuj z ORCID", - "person.page.orcid.sync-queue.discard.error": "Rekord kolejki ORCID nie został odrzucony", - "person.page.orcid.sync-queue.discard.success": "Rekord kolejki ORCID został odrzucony", - "person.page.orcid.sync-queue.empty-message": "Rejestr kolejki w ORCID jest pusty", - "person.page.orcid.sync-queue.description.affiliation": "Afiliacje", - "person.page.orcid.sync-queue.description.country": "Kraj", - "person.page.orcid.sync-queue.description.education": "Edukacja", - "person.page.orcid.sync-queue.description.external_ids": "Zewnętrzne identyfikatory", - "person.page.orcid.sync-queue.description.other_names": "Inne imiona", - "person.page.orcid.sync-queue.description.qualification": "Kwalifikacje", - "person.page.orcid.sync-queue.description.researcher_urls": "URL naukowca", - "person.page.orcid.sync-queue.description.keywords": "Słowa kluczowe", - "person.page.orcid.sync-queue.tooltip.insert": "Dodaj nowy wpis w rejestrze ORCID", - "person.page.orcid.sync-queue.tooltip.update": "Aktualizuj ten wpis w rejestrze ORCID", - "person.page.orcid.sync-queue.tooltip.delete": "Usuń ten wpis z rejestru ORCID", - "person.page.orcid.sync-queue.tooltip.publication": "Publikacja", - "person.page.orcid.sync-queue.tooltip.affiliation": "Afiliacja", - "person.page.orcid.sync-queue.tooltip.education": "Edukacja", - "person.page.orcid.sync-queue.tooltip.qualification": "Kwalifikacje", - "person.page.orcid.sync-queue.tooltip.other_names": "Inna nazwa", - "person.page.orcid.sync-queue.tooltip.country": "Kraj", - "person.page.orcid.sync-queue.tooltip.keywords": "Słowa kluczowe", - "person.page.orcid.sync-queue.tooltip.external_ids": "Zewnętrzny identyfikator", - "person.page.orcid.sync-queue.tooltip.researcher_urls": "URL naukowca", - "person.page.orcid.sync-queue.send": "Synchronizuj z rejestrem ORCID", - "person.page.orcid.sync-queue.send.unauthorized-error.title": "Wysłanie zgłoszenia do ORCID nieudane z powodu braku uprawnień.", - "person.page.orcid.sync-queue.send.unauthorized-error.content": "Wybierz here, aby wystąpić o niezbędne uprawnienia. Jeśli problem wciąż występuje, skontaktuj się z administratorem", - "person.page.orcid.sync-queue.send.bad-request-error": "Wysłanie zgłoszenia do ORCID nie powiodło się ponieważ źródła wysłane do rejestru ORCID nie jest poprawne", - "person.page.orcid.sync-queue.send.error": "Wysłanie zgłoszenia do ORCID nie powiodło się", - "person.page.orcid.sync-queue.send.conflict-error": "Zgłoszenie do ORCID nie powiodło się, ponieważ ta pozycja jest już dodana do rejestru ORCID", - "person.page.orcid.sync-queue.send.not-found-warning": "Pozycja nie istnieje już w rejestrze ORCID.", - "person.page.orcid.sync-queue.send.success": "Zgłoszenie do ORCID zostało zakończone pomyślnie", - "person.page.orcid.sync-queue.send.validation-error": "Dane, które chcesz zsynchronizować z ORCID nie są poprawne", - "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "Waluta jest wymagana", - "person.page.orcid.sync-queue.send.validation-error.external-id.required": "Aby wysłać pozycję, należy podać przynajmniej jeden identyfikator", - "person.page.orcid.sync-queue.send.validation-error.title.required": "Tytuł jest wymagany", - "person.page.orcid.sync-queue.send.validation-error.type.required": "Typ jest wymagany", - "person.page.orcid.sync-queue.send.validation-error.start-date.required": "Data początkowa jest wymagana", - "person.page.orcid.sync-queue.send.validation-error.funder.required": "Instytucja finansująca jest wymagana", - "person.page.orcid.sync-queue.send.validation-error.organization.required": "Instytucja jest wymagana", - "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "Nazwa instytucji jest wymagana", - "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "Aby wysłać instytucję, należy podać adres", - "person.page.orcid.sync-queue.send.validation-error.organization.city-required": "Aby wysłać adres, należy podać miasto", - "person.page.orcid.sync-queue.send.validation-error.organization.country-required": "Aby wysłać adres, należy podać kraj", - "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.required": "Wymagany jest identyfikator umożliwiający rozróżnienie instytucji. Obsługiwane identyfikatory to GRID, Ringgold, kod LEI oraz identyfikatory z rejestru instytucji finansujących Crossref.", - "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.value-required": "Należy uzupełnić wartość w identyfikatorze instytucji", - "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "Należy uzupełnić źródło w identyfikatorze instytucji", - "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "Źródło jednego z identyfikatorów organizcji jest niepoprawne. Wspierane źródła to RINGGOLD, GRID, LEI and FUNDREF", - "person.page.orcid.synchronization-mode": "Tryb synchronizacji", - "person.page.orcid.synchronization-mode.batch": "Wsad", - "person.page.orcid.synchronization-mode.label": "Tryb synchronizacji", - "person.page.orcid.synchronization-mode-message": "Włącz tryb 'Manual' synchronizacja, aby wyłaczyć tryb synchronizacji wsadowej, wtedy dane do rejestru ORCID będą musiały zostać wysłane ręcznie", - "person.page.orcid.synchronization-settings-update.success": "Opcje synchronizacji zostały zaktualizowane", - "person.page.orcid.synchronization-settings-update.error": "Opcje synchronizacji nie zostały zaktualizowane", - "person.page.orcid.synchronization-mode.manual": "Ręczna", - "person.page.orcid.scope.authenticate": "Uzyskaj swój ORCID iD", - "person.page.orcid.scope.read-limited": "Przeczytaj informacje o ustawieniach widoczności z firmami trzeciami", - "person.page.orcid.scope.activities-update": "Dodaj/aktualizuj swoje aktywności naukowe", - "person.page.orcid.scope.person-update": "Dodaj/aktualizuj inne informacje o Tobie", - "person.page.orcid.unlink.success": "Odłączenie Twojego profilu od rejestru ORCID powiodło się", - "person.page.orcid.unlink.error": "Wystąpił błąd podczas odłączania Twojego profilu od rejestru ORCID. Spróbuj ponownie", - "person.page.staffid": "ID pracownika", - "person.page.titleprefix": "Osoba: ", - "person.search.results.head": "Wyniki wyszukiwania użytkowników", - "person.search.title": "Wyniki wyszukiwania użytkowników", - "process.new.select-parameters": "Parametry", - "process.new.cancel": "Anuluj", - "process.new.submit": "Zapisz", - "process.new.select-script": "Skrypt", - "process.new.select-script.placeholder": "Wybierz skrypt...", - "process.new.select-script.required": "Skrypt jest wymagany", - "process.new.parameter.file.upload-button": "Wybierz plik...", - "process.new.parameter.file.required": "Proszę wybrać plik", - "process.new.parameter.string.required": "Wartość parametru jest wymagana", - "process.new.parameter.type.value": "wartość", - "process.new.parameter.type.file": "plik", - "process.new.parameter.required.missing": "Te parametry są wymagane, ale nie zostały uzupełnione:", - "process.new.notification.success.title": "Udało się", - "process.new.notification.success.content": "Udało się stworzyć proces", - "process.new.notification.error.title": "Błąd", - "process.new.notification.error.content": "Wystąpił błąd podczas tworzenia procesu", - "process.new.header": "Utwórz nowy proces", - "process.new.title": "Utwórz nowy proces", - "process.new.breadcrumbs": "Utwórz nowy proces", - "process.detail.arguments": "Argumenty", - "process.detail.arguments.empty": "Do tego procesu nie zostały przypisane żadne argumenty", - "process.detail.back": "Cofnij", - "process.detail.output": "Dane wyjściowe procesu", - "process.detail.logs.button": "Odzyskaj dane wyjściowe procesu", - "process.detail.logs.loading": "Odzyskiwanie", - "process.detail.logs.none": "Ten proces nie ma danych wyjściowych", - "process.detail.output-files": "Pliki", - "process.detail.output-files.empty": "Ten proces nie ma żadnych plików danych wyjściowych", - "process.detail.script": "Skrypt", - "process.detail.title": "Proces: {{ id }} - {{ name }}", - "process.detail.start-time": "Czas rozpoczęcia procesu", - "process.detail.end-time": "Czas zakończenia procesu", - "process.detail.status": "Status", - "process.detail.create": "Stwórz podobny proces", - "process.overview.table.finish": "Czas zakończenia (UTC)", - "process.overview.table.id": "Identyfikator procesu", - "process.overview.table.name": "Nazwa", - "process.overview.table.start": "Czas rozpoczęcia (UTC)", - "process.overview.table.status": "Status", - "process.overview.table.user": "Użytkownik", - "process.overview.title": "Przegląd procesów", - "process.overview.breadcrumbs": "Przegląd procesów", - "process.overview.new": "Nowy", - "profile.breadcrumbs": "Zaktualizuj profil", - "profile.card.identify": "Dane", - "profile.card.security": "Bezpieczeństwo", - "profile.form.submit": "Zaktualizuj profil", - "profile.groups.head": "Posiadane uprawnienia do kolekcji", - "profile.head": "Zaktualizuj profil", - "profile.metadata.form.error.firstname.required": "Imię jest wymagane", - "profile.metadata.form.error.lastname.required": "Nazwisko jest wymagane", - "profile.metadata.form.label.email": "Adres e-mail", - "profile.metadata.form.label.firstname": "Imię", - "profile.metadata.form.label.language": "Język", - "profile.metadata.form.label.lastname": "Nazwisko", - "profile.metadata.form.label.phone": "Telefon kontaktowy", - "profile.metadata.form.notifications.success.content": "Zmiany w profilu zostały zapisane.", - "profile.metadata.form.notifications.success.title": "Profil zapisany", - "profile.notifications.warning.no-changes.content": "Nie dokonano żadnych zmian w profilu.", - "profile.notifications.warning.no-changes.title": "Brak zmian", - "profile.security.form.error.matching-passwords": "Hasła nie są identyczne.", - "profile.security.form.info": "Możesz wprowadzić nowe hasło w polu poniżej i zatwierdzić poprzez ponowne wpisanie. Hasło musi mieć przynajmniej 6 znaków.", - "profile.security.form.label.password": "Hasło", - "profile.security.form.label.passwordrepeat": "Potwierdź hasło", - "profile.security.form.notifications.success.content": "Twoje zmiany w haśle zostały zapisane.", - "profile.security.form.notifications.success.title": "Hasło zapisane", - "profile.security.form.notifications.error.title": "Błąd podczas próby zmiany hasła", - "profile.security.form.notifications.error.not-same": "Hasła nie są identyczne.", - "profile.title": "Zaktualizuj profil", - "profile.card.researcher": "Profil naukowca", - "project.listelement.badge": "Projekt badawczy", - "project.page.contributor": "Autorzy", - "project.page.description": "Opis", - "project.page.edit": "Edytuj pozycję", - "project.page.expectedcompletion": "Spodziewany termin zakończenia", - "project.page.funder": "Instytucje finansujące", - "project.page.id": "ID", - "project.page.keyword": "Słowa kluczowe", - "project.page.status": "Status", - "project.page.titleprefix": "Projekt badawczy: ", - "project.search.results.head": "Wyniki wyszukiwania projektów", - "publication.listelement.badge": "Publikacja", - "publication.page.description": "Opis", - "publication.page.edit": "Edytuj pozycję", - "publication.page.journal-issn": "ISSN czasopisma", - "publication.page.journal-title": "Tytuł czasopisma", - "publication.page.publisher": "Wydawca", - "publication.page.titleprefix": "Publikacja: ", - "publication.page.volume-title": "Tytuł tomu", - "publication.search.results.head": "Wyniki wyszukiwania publikacji", - "publication.search.title": "Wyszukiwanie publikacji", - "media-viewer.next": "Nowy", - "media-viewer.previous": "Poprzedni", - "media-viewer.playlist": "Playlista", - "register-email.title": "Rejestracja nowego użytkownika", - "register-page.create-profile.header": "Stwórz profil", - "register-page.create-profile.identification.header": "Dane", - "register-page.create-profile.identification.email": "Adres e-mail", - "register-page.create-profile.identification.first-name": "Imię *", - "register-page.create-profile.identification.first-name.error": "Wpisz imię", - "register-page.create-profile.identification.last-name": "Nazwisko *", - "register-page.create-profile.identification.last-name.error": "Wpisz nazwisko", - "register-page.create-profile.identification.contact": "Telefon kontaktowy", - "register-page.create-profile.identification.language": "Język", - "register-page.create-profile.security.header": "Bezpieczeństwo", - "register-page.create-profile.security.info": "Wprowadź nowe hasło w polu poniżej i zatwierdź poprzez ponowne wpisanie w drugim polu. Hasło musi mieć przynajmniej 6 znaków.", - "register-page.create-profile.security.label.password": "Hasło *", - "register-page.create-profile.security.label.passwordrepeat": "Potwierdź hasło *", - "register-page.create-profile.security.error.empty-password": "Wprowadź hasło w polu poniżej.", - "register-page.create-profile.security.error.matching-passwords": "Hasła nie są identyczne.", - "register-page.create-profile.submit": "Rejestracja zakończona", - "register-page.create-profile.submit.error.content": "Coś się nie udało podczas rejestracji nowego użytkownika.", - "register-page.create-profile.submit.error.head": "Rejestracja nie powiodła się", - "register-page.create-profile.submit.success.content": "Rejestracja powiodła się. Zalogowano jako stworzony użytkownik.", - "register-page.create-profile.submit.success.head": "Rejestracja zakończona", - "register-page.registration.header": "Rejestracja nowego użytkownika", - "register-page.registration.info": "Zarejestruj się, aby otrzymywać wiadomości o nowych pozycjach w obserowanych kolekcjach, a także przesyłać nowe pozycje do repozytorium.", - "register-page.registration.email": "Adres e-mail *", - "register-page.registration.email.error.required": "Wypełnij adres e-mail", - "register-page.registration.email.error.pattern": "Wypełnij poprawny adres e-mail", - "register-page.registration.email.hint": "Ten adres e-mail będzie zweryfikowany i będziesz go używać jako swój login.", - "register-page.registration.submit": "Zarejestruj się", - "register-page.registration.success.head": "Wiadomość weryfikacyjna zostałą wysłana", - "register-page.registration.success.content": "Wiadomość została wysłana na adres e-mail {{ email }}. Zawiera ona unikatowy link i dalsze instrukcje postępowania.", - "register-page.registration.error.head": "Błąd podczas próby rejestracji adresu e-mail", - "register-page.registration.error.content": "Błąd podczas próby rejestracji adresu e-mail: {{ email }}", - "relationships.add.error.relationship-type.content": "Nie znaleziono dopasowania dla typu relacji {{ type }} pomiędzy dwoma pozycjami", - "relationships.add.error.server.content": "Błąd serwera", - "relationships.add.error.title": "Nie można dodać relacji", - "relationships.isAuthorOf": "Autorzy", - "relationships.isAuthorOf.Person": "Autorzy (osoby)", - "relationships.isAuthorOf.OrgUnit": "Autorzy (jednostki organizacyjne)", - "relationships.isIssueOf": "Numery czasopisma", - "relationships.isJournalIssueOf": "Numer czasopisma", - "relationships.isJournalOf": "Czasopisma", - "relationships.isOrgUnitOf": "Jednostki organizacyjne", - "relationships.isPersonOf": "Autorzy", - "relationships.isProjectOf": "Projekty badawcze", - "relationships.isPublicationOf": "Publikacje", - "relationships.isPublicationOfJournalIssue": "Artykuły", - "relationships.isSingleJournalOf": "Czasopismo", - "relationships.isSingleVolumeOf": "Tom czasopisma", - "relationships.isVolumeOf": "Tomy czasopisma", - "relationships.isContributorOf": "Autorzy", - "relationships.isContributorOf.OrgUnit": "Autor (Jednostka organizacyjna)", - "relationships.isContributorOf.Person": "Autor", - "relationships.isFundingAgencyOf.OrgUnit": "Instytucja finansująca", - "repository.image.logo": "Logo repozytorium", - "repository.title.prefix": "DSpace Angular :: ", - "researcher.profile.action.processing": "Procesowanie...", - "researcher.profile.associated": "Przypisanie profilu badacza", - "researcher.profile.create.new": "Utwórz nowy", - "researcher.profile.create.success": "Profil badacza został utworzony", - "researcher.profile.create.fail": "Wystąpił błąd poczas tworzenia profilu badacza.", - "researcher.profile.delete": "Usuń", - "researcher.profile.expose": "Ujawnij", - "researcher.profile.hide": "Ukryj", - "researcher.profile.not.associated": "Profil badacza nie został jeszcze przypisany", - "researcher.profile.view": "Widok", - "researcher.profile.private.visibility": "PRYWATNY", - "researcher.profile.public.visibility": "PUBLICZNY", - "researcher.profile.status": "Status:", - "researcherprofile.claim.not-authorized": "Nie masz uprawnień, aby wystąpić o tę pozycję. Aby otrzymać więcej szczegółów, skontaktuj się z administratorami.", - "researcherprofile.error.claim.body": "Wystąpił błąd podczas wystąpienia z prośbą o przypisanie profilu. Spróbuj ponownie później.", - "researcherprofile.error.claim.title": "Błąd", - "researcherprofile.success.claim.body": "Wystąpienie z prośbą o przypisanie profilu udane", - "researcherprofile.success.claim.title": "Sukces", - "repository.title.prefixDSpace": "DSpace Angular ::", - "resource-policies.add.button": "Dodaj", - "resource-policies.add.for.": "Dodaj nową politykę", - "resource-policies.add.for.bitstream": "Dodaj nową politykę dla plików", - "resource-policies.add.for.bundle": "Dodaj nową politykę paczek", - "resource-policies.add.for.item": "Dodaj nową politykę pozycji", - "resource-policies.add.for.community": "Dodaj nową politykę zbioru", - "resource-policies.add.for.collection": "Dodaj nową politykę kolekcji", - "resource-policies.create.page.heading": "Utwórz nową politykę zasobu dla ", - "resource-policies.create.page.failure.content": "Wystąpił błąd podczas dodawania polityki zasobów.", - "resource-policies.create.page.success.content": "Działanie powiodło się", - "resource-policies.create.page.title": "Utwórz nową politykę zasobu", - "resource-policies.delete.btn": "Usuń zaznaczone", - "resource-policies.delete.btn.title": "Usuń zaznaczone polityki zasobów", - "resource-policies.delete.failure.content": "Wystąpił błąd podczas usuwania wybranych polityk zasobów.", - "resource-policies.delete.success.content": "Działanie powiodło się", - "resource-policies.edit.page.heading": "Edytuj politykę zasobu ", - "resource-policies.edit.page.failure.content": "Wystąpił błąd poczas edytowania polityki zasobu.", - "resource-policies.edit.page.success.content": "Działanie udało się", - "resource-policies.edit.page.title": "Edytuj politykę zasobu", - "resource-policies.form.action-type.label": "Wybierz ten typ akcji", - "resource-policies.form.action-type.required": "Musisz wybrać akcję polityki zasobu.", - "resource-policies.form.eperson-group-list.label": "Użytkownik lub grupa, która otrzyma uprawnienia.", - "resource-policies.form.eperson-group-list.select.btn": "Wybierz", - "resource-policies.form.eperson-group-list.tab.eperson": "Wyszukaj użytkownika", - "resource-policies.form.eperson-group-list.tab.group": "Wyszukaj grupę", - "resource-policies.form.eperson-group-list.table.headers.action": "Akcja", - "resource-policies.form.eperson-group-list.table.headers.id": "ID", - "resource-policies.form.eperson-group-list.table.headers.name": "Nazwa", - "resource-policies.form.date.end.label": "Data zakończenia", - "resource-policies.form.date.start.label": "Data rozpoczęcia", - "resource-policies.form.description.label": "Opis", - "resource-policies.form.name.label": "Nazwa", - "resource-policies.form.policy-type.label": "Wybierz typ polityki", - "resource-policies.form.policy-type.required": "Musisz wybrać typ polityki zasobu.", - "resource-policies.table.headers.action": "Akcja", - "resource-policies.table.headers.date.end": "Data zakończenia", - "resource-policies.table.headers.date.start": "Data rozpoczęcia", - "resource-policies.table.headers.edit": "Edytuj", - "resource-policies.table.headers.edit.group": "Edytuj grupę", - "resource-policies.table.headers.edit.policy": "Edytuj politykę", - "resource-policies.table.headers.eperson": "Użytkownik", - "resource-policies.table.headers.group": "Grupa", - "resource-policies.table.headers.id": "ID", - "resource-policies.table.headers.name": "Nazwa", - "resource-policies.table.headers.policyType": "typ", - "resource-policies.table.headers.title.for.bitstream": "Polityki dla plików", - "resource-policies.table.headers.title.for.bundle": "Polityki dla paczek", - "resource-policies.table.headers.title.for.item": "Polityki dla pozycji", - "resource-policies.table.headers.title.for.community": "Polityki dla zbioru", - "resource-policies.table.headers.title.for.collection": "Polityki dla kolekcji", - "search.description": "", - "search.switch-configuration.title": "Pokaż", - "search.title": "Szukaj", - "search.breadcrumbs": "Szukaj", - "search.search-form.placeholder": "Szukaj w repozytorium...", - "search.filters.applied.f.author": "Autor", - "search.filters.applied.f.dateIssued.max": "Data zakończenia", - "search.filters.applied.f.dateIssued.min": "Data rozpoczęcia", - "search.filters.applied.f.dateSubmitted": "Data zgłoszenia", - "search.filters.applied.f.discoverable": "Ukryty", - "search.filters.applied.f.entityType": "Typ pozycji", - "search.filters.applied.f.has_content_in_original_bundle": "Ma przypisane pliki", - "search.filters.applied.f.itemtype": "Typ", - "search.filters.applied.f.namedresourcetype": "Status", - "search.filters.applied.f.subject": "Temat", - "search.filters.applied.f.submitter": "Zgłaszający", - "search.filters.applied.f.jobTitle": "Stanowisko", - "search.filters.applied.f.birthDate.max": "Data zakończenia tworzenia", - "search.filters.applied.f.birthDate.min": "Data rozpoczęcia tworzenia", - "search.filters.applied.f.withdrawn": "Wycofane", - "search.filters.filter.author.head": "Autor", - "search.filters.filter.author.placeholder": "Autor", - "search.filters.filter.author.label": "Wyszukaj autora", - "search.filters.filter.birthDate.head": "Data urodzenia", - "search.filters.filter.birthDate.placeholder": "Data urodzenia", - "search.filters.filter.birthDate.label": "Wyszukaj datę urodzenia", - "search.filters.filter.collapse": "Ukryj filtr", - "search.filters.filter.creativeDatePublished.head": "Data opublikowania", - "search.filters.filter.creativeDatePublished.placeholder": "Data opublikowania", - "search.filters.filter.creativeDatePublished.label": "Wyszukaj datę opublikowania", - "search.filters.filter.creativeWorkEditor.head": "Redaktor", - "search.filters.filter.creativeWorkEditor.placeholder": "Redaktor", - "search.filters.filter.creativeWorkEditor.label": "Wyszukaj redaktora", - "search.filters.filter.creativeWorkKeywords.head": "Słowo kluczowe", - "search.filters.filter.creativeWorkKeywords.placeholder": "Słowo kluczowe", - "search.filters.filter.creativeWorkKeywords.label": "Wyszukaj temat", - "search.filters.filter.creativeWorkPublisher.head": "Wydawca", - "search.filters.filter.creativeWorkPublisher.placeholder": "Wydawca", - "search.filters.filter.creativeWorkPublisher.label": "Wyszukaj wydawcę", - "search.filters.filter.dateIssued.head": "Data", - "search.filters.filter.dateIssued.max.placeholder": "Data maksymalna", - "search.filters.filter.dateIssued.max.label": "Koniec", - "search.filters.filter.dateIssued.min.placeholder": "Data minimalna", - "search.filters.filter.dateIssued.min.label": "Start", - "search.filters.filter.dateSubmitted.head": "Data zgłoszenia", - "search.filters.filter.dateSubmitted.placeholder": "Data zgłoszenia", - "search.filters.filter.dateSubmitted.label": "Wyszukaj datę zgłoszenia", - "search.filters.filter.discoverable.head": "Ukryty", - "search.filters.filter.withdrawn.head": "Wycofane", - "search.filters.filter.entityType.head": "Typ pozycji", - "search.filters.filter.entityType.placeholder": "Typ pozycji", - "search.filters.filter.entityType.label": "Wyszukaj typ pozycji", - "search.filters.filter.expand": "Rozwiń filtr", - "search.filters.filter.has_content_in_original_bundle.head": "Ma przypisane pliki", - "search.filters.filter.itemtype.head": "Typ", - "search.filters.filter.itemtype.placeholder": "Typ", - "search.filters.filter.itemtype.label": "Wyszukaj typ", - "search.filters.filter.jobTitle.head": "Stanowisko", - "search.filters.filter.jobTitle.placeholder": "Stanowisko", - "search.filters.filter.jobTitle.label": "Wyszukaj stanowisko", - "search.filters.filter.knowsLanguage.head": "Znajomość języka", - "search.filters.filter.knowsLanguage.placeholder": "Znajomość języka", - "search.filters.filter.knowsLanguage.label": "Wyszukaj wg znajomości języka", - "search.filters.filter.namedresourcetype.head": "Status", - "search.filters.filter.namedresourcetype.placeholder": "Status", - "search.filters.filter.namedresourcetype.label": "Wyszukaj status", - "search.filters.filter.objectpeople.head": "Osoby", - "search.filters.filter.objectpeople.placeholder": "Osoby", - "search.filters.filter.objectpeople.label": "Wyszukaj użytkowników", - "search.filters.filter.organizationAddressCountry.head": "Kraj", - "search.filters.filter.organizationAddressCountry.placeholder": "Kraj", - "search.filters.filter.organizationAddressCountry.label": "Wyszukaj kraj", - "search.filters.filter.organizationAddressLocality.head": "Miasto", - "search.filters.filter.organizationAddressLocality.placeholder": "Miasto", - "search.filters.filter.organizationAddressLocality.label": "Wyszukaj miasto", - "search.filters.filter.organizationFoundingDate.head": "Data założenia", - "search.filters.filter.organizationFoundingDate.placeholder": "Data założenia", - "search.filters.filter.organizationFoundingDate.label": "Wyszukaj datę założenia", - "search.filters.filter.scope.head": "Zakres", - "search.filters.filter.scope.placeholder": "Filtr zakresu", - "search.filters.filter.scope.label": "Wyszukaj filtr zakresu", - "search.filters.filter.show-less": "Pokaż mniej", - "search.filters.filter.show-more": "Pokaż więcej", - "search.filters.filter.subject.head": "Temat", - "search.filters.filter.subject.placeholder": "Temat", - "search.filters.filter.subject.label": "Wyszukaj temat", - "search.filters.filter.submitter.head": "Zgłaszający", - "search.filters.filter.submitter.placeholder": "Zgłaszający", - "search.filters.filter.submitter.label": "Wyszukaj zgłaszającego", - "search.filters.entityType.JournalIssue": "Numer czasopisma", - "search.filters.entityType.JournalVolume": "Tom czasopisma", - "search.filters.entityType.OrgUnit": "Jednostka organizacyjna", - "search.filters.has_content_in_original_bundle.true": "Tak", - "search.filters.has_content_in_original_bundle.false": "Nie", - "search.filters.discoverable.true": "Nie", - "search.filters.discoverable.false": "Tak", - "search.filters.withdrawn.true": "Tak", - "search.filters.withdrawn.false": "Nie", - "search.filters.head": "Filtry", - "search.filters.reset": "Resetuj filtry", - "search.filters.search.submit": "Zastosuj", - "search.form.search": "Wyszukaj", - "search.form.search_dspace": "W repozytorium", - "search.form.scope.all": "W całym DSpace", - "search.results.head": "Wyniki wyszukiwania", - "default.search.results.head": "Wyniki wyszukiwania", - "search.results.no-results": "Twoj wyszukiwanie nie zwróciło żadnych rezultatów. Masz problem ze znalezieniem tego czego szukasz? Spróbuj użyć", - "search.results.no-results-link": "fraz podobnych do Twojego wyszukiwania", - "search.results.empty": "Twoje wyszukiwanie nie zwróciło żadnych rezultatów.", - "search.sidebar.close": "Wróć do wyników wyszukiwania", - "search.sidebar.filters.title": "Filtry", - "search.sidebar.open": "Narzędzia wyszukiwania", - "search.sidebar.results": "wyniki", - "search.sidebar.settings.rpp": "Wyników na stronie", - "search.sidebar.settings.sort-by": "Sortuj według", - "search.sidebar.settings.title": "Ustawienia", - "search.view-switch.show-detail": "Wyświetl widok szczegółowy", - "search.view-switch.show-grid": "Wyświetl jako siatkę", - "search.view-switch.show-list": "Wyświetl jako listę", - "sorting.ASC": "Rosnąco", - "sorting.DESC": "Malejąco", - "sorting.dc.title.ASC": "Tytułami rosnąco", - "sorting.dc.title.DESC": "Tytułami malejąco", - "sorting.score.ASC": "Najmniej trafne", - "sorting.score.DESC": "Najbardziej trafne", - "sorting.dc.date.issued.ASC": "Data wydania rosnąco", - "sorting.dc.date.issued.DESC": "Data wydania malejąco", - "sorting.dc.date.accessioned.ASC": "Data dostępu rosnąco", - "sorting.dc.date.accessioned.DESC": "Data dostępu malejąco", - "sorting.lastModified.ASC": "Ostatnia modyfikacja rosnąco", - "sorting.lastModified.DESC": "Ostatnia modyfikacja malejąco", - "statistics.title": "Statystyki", - "statistics.header": "Statystyki dla {{ scope }}", - "statistics.breadcrumbs": "Statystyki", - "statistics.page.no-data": "Brak dostępnych danych", - "statistics.table.no-data": "Brak dostępnych danych", - "statistics.table.header.views": "Wyświetlenia", - "submission.edit.breadcrumbs": "Edytuj zgłoszenie", - "submission.edit.title": "Edytuj zgłoszenie", - "submission.general.cancel": "Anuluj", - "submission.general.cannot_submit": "Nie masz uprawnień, aby utworzyć nowe zgłoszenie.", - "submission.general.deposit": "Deponuj", - "submission.general.discard.confirm.cancel": "Anuluj", - "submission.general.discard.confirm.info": "Czy na pewno? To działanie nie może zostać cofnięte.", - "submission.general.discard.confirm.submit": "Tak, na pewno", - "submission.general.discard.confirm.title": "Odrzuć zgłoszenie", - "submission.general.discard.submit": "Odrzuć", - "submission.general.info.saved": "Zapisane", - "submission.general.info.pending-changes": "Niezapisane zmiany", - "submission.general.save": "Zapisz", - "submission.general.save-later": "Zapisz wersję roboczą", - "submission.import-external.page.title": "Importuj metdane z zewnętrznego źródła", - "submission.import-external.title": "Importuj metadane z zewnętrznego źródła", - "submission.import-external.title.Journal": "Importuj czasopismo z zewnętrznego źródła", - "submission.import-external.title.JournalIssue": "Importuj numer czasopisma z zewnętrznego źródła", - "submission.import-external.title.JournalVolume": "Importuj tom czasopisma z zewnętrznego źródła", - "submission.import-external.title.OrgUnit": "Importuj wydawcę z zewnętrznego źródła", - "submission.import-external.title.Person": "Importuj osobę z zewnętrznego źródła", - "submission.import-external.title.Project": "Importuj projekt z zewnętrznego źródła", - "submission.import-external.title.Publication": "Importuj publikację z zewnętrznego źródła", - "submission.import-external.title.none": "Importuj metadane z zewnętrznego źródła", - "submission.import-external.page.hint": "Enter a query above to find items from the web to import in to DSpace.", - "submission.import-external.back-to-my-dspace": "Powrót do MyDSpace", - "submission.import-external.search.placeholder": "Wyszukaj zewnętrzne źródła danych", - "submission.import-external.search.button": "Szukaj", - "submission.import-external.search.button.hint": "Zacznij wpisywać frazę, aby wyszukać", - "submission.import-external.search.source.hint": "Wybierz zewnętrzne źródło", - "submission.import-external.source.ads": "NASA/ADS", - "submission.import-external.source.arxiv": "arXiv", - "submission.import-external.source.cinii": "CiNii", - "submission.import-external.source.crossref": "CrossRef", - "submission.import-external.source.loading": "ładowanie...", - "submission.import-external.source.sherpaJournal": "Czasopisma w SHERPA", - "submission.import-external.source.sherpaJournalIssn": "Czasopisma w SHERPA wg ISSN", - "submission.import-external.source.sherpaPublisher": "Wydawcy w SHERPA", - "submission.import-external.source.openAIREFunding": "Finansowanie OpenAIRE API", - "submission.import-external.source.orcid": "ORCID", - "submission.import-external.source.orcidWorks": "ORCID", - "submission.import-external.source.pubmed": "Pubmed", - "submission.import-external.source.pubmedeu": "Pubmed Europe", - "submission.import-external.source.lcname": "Nazwy Biblioteki Kongresu", - "submission.import-external.source.scielo": "SciELO", - "submission.import-external.source.scopus": "Scopus", - "submission.import-external.source.vufind": "VuFind", - "submission.import-external.source.wos": "Web Of Science", - "submission.import-external.source.epo": "Europejski Urząd Patentowy (EPO)", - "submission.import-external.preview.title.Journal": "Podgląd czasopisma", - "submission.import-external.preview.title.OrgUnit": "Podgląd organizacji", - "submission.import-external.preview.title.Person": "Podgląd osoby", - "submission.import-external.preview.title.Project": "Podgląd projektu", - "submission.import-external.preview.title.Publication": "Podgląd publikacji", - "submission.import-external.preview.subtitle": "Metadane poniżej zostały zaimportowane z zewnętrznego źródła. Niektóre pola zostaną uzupełnione automatycznie, kiedy rozpoczniesz zgłaszanie pozycji.", - "submission.import-external.preview.button.import": "Rozpocznij zgłoszenie", - "submission.import-external.preview.error.import.title": "Błąd zgłoszenia", - "submission.import-external.preview.error.import.body": "Wystąpił błąd podczas procesu importowania pozycji z zewnętrznego źródła.", - "submission.sections.describe.relationship-lookup.close": "Zamknij", - "submission.sections.describe.relationship-lookup.external-source.added": "Udało się dodać wpis do selekcji", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Importuj zdalnego autora", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Importuj zdalne czasopismo", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Importuj zdalny numer czasopisma", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Importuj zdalny tom czasopisma", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Projekt", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "Nowy typ danych dodany!", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Projekt", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Finansowanie OpenAIRE API", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Importuj zdalnego autora", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Person": "Importuj zdalną osobę", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Product": "Importuj zdalny produkt", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Equipment": "Importuj zdalną aparaturę badawczą", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Event": "Importuj zdalne wydarzenie", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Funding": "Importuj zdalną instytucję finansującą", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.OrgUnit": "Importuj zdalnego wydawcę", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Patent": "Importuj zdalnie patent", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Project": "Importuj zdalnie projekt", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Importuj zdalnie publikację", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Udało się dodać autora do selekcji", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.new-entity": "Udało się zaimportować i dodać zewnętrznego autora do selekcji", - "submission.sections.describe.relationship-lookup.external-source.import-modal.authority": "Nadrzędność", - "submission.sections.describe.relationship-lookup.external-source.import-modal.authority.new": "Importuj jako nową, lokalną, nadrzędną pozycję", - "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel": "Anuluj", - "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Wybierz kolekcję do zaimportowania nowych pozycji", - "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Typ danych", - "submission.sections.describe.relationship-lookup.external-source.import-modal.entities.new": "Importuj jako nowy lokalny typ danych", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "Importuj z LC Name", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "Importuj z ORCID", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "Importuj z Sherpa Journal", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "Importuj z Sherpa Publisher", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "Importuj z PubMed", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "Importuj z arXiv", - "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Import", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Importuj zdalne czasopismo", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Successfully added local journal to the selection", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Successfully imported and added external journal to the selection", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title": "Importuj zdalny numer czasopisma", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Udało się dodać lokalne czasopismo do zaznaczenia", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity": "Udało się zaimportować i dodać czasopismo zewnętrzne do zaznaczenia", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.title": "Importuj zdalny numer czasopisma", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Udało się dodać lokalny numer czasopismo do zaznaczenia", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Udało się zaimportować i dodać zewnętrzny numer czasopisma do zaznaczenia", - "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Wybierz lokalne powiązanie:", - "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Odznacz wszystko", - "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Odznacz stronę", - "submission.sections.describe.relationship-lookup.search-tab.loading": "Ładowanie...", - "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Wyszukaj zapytanie", - "submission.sections.describe.relationship-lookup.search-tab.search": "Zastosuj", - "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Wyszukaj...", - "submission.sections.describe.relationship-lookup.search-tab.select-all": "Zaznacz wszystko", - "submission.sections.describe.relationship-lookup.search-tab.select-page": "Zaznacz stronę", - "submission.sections.describe.relationship-lookup.selected": "Zaznacz {{ size }} pozycji", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Autorzy lokalni ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Czasopisma lokalne ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Projekty lokalne ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Publikacje lokalne ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Autorzy lokalni ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Lokalne jednostki organizacyjne ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Lokalne paczki danych ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Lokalne pliki danych ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Lokalne czasopisma ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Lokalne numery czasopism ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Lokalne numery czasopism ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Lokalne tomy czasopism ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Lokalne tomy czasopism ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Sherpa Journals ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaPublisher": "Sherpa Publishers ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid": "ORCID ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "LC Names ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.arxiv": "arXiv ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Wyszukaj instytucje finansujące", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Wyszukaj finansowanie", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Wyszukaj jednostki organizacyjne", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Finansowanie OpenAIRE API", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projekty", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Instytucja finansująca projekt", - "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Finansowanie OpenAIRE API", - "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Projekt", - "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projekty", - "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Instytucja finansująca projekt", - "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Wyszukaj...", - "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Aktualne zaznaczenie ({{ count }})", - "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Numery czasopisma", - "submission.sections.describe.relationship-lookup.title.JournalIssue": "Numery czasopisma", - "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Tomy czasopisma", - "submission.sections.describe.relationship-lookup.title.JournalVolume": "Tomy czasopisma", - "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Czasopisma", - "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication": "Autorzy", - "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Instytucja finansująca", - "submission.sections.describe.relationship-lookup.title.Project": "Projekty", - "submission.sections.describe.relationship-lookup.title.Publication": "Publikacje", - "submission.sections.describe.relationship-lookup.title.Person": "Autorzy", - "submission.sections.describe.relationship-lookup.title.OrgUnit": "Jednostki organizacyjne", - "submission.sections.describe.relationship-lookup.title.DataPackage": "Paczki danych", - "submission.sections.describe.relationship-lookup.title.DataFile": "Pliki danych", - "submission.sections.describe.relationship-lookup.title.Funding Agency": "Instytucja finansująca", - "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Finansowanie", - "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Nadrzędna jednostka organizacyjna", - "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Przełącz na listę rozwijaną", - "submission.sections.describe.relationship-lookup.selection-tab.settings": "Ustawienia", - "submission.sections.describe.relationship-lookup.selection-tab.no-selection": "Twoje zaznaczenie jest puste.", - "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Wybrani autorzy", - "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Wybrane czasopisma", - "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Wybrane tomy czasopisma", - "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Wybrane projekty", - "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Wybrane publikacje", - "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Wybrani autorzy", - "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Wybrane jednostki organizacyjne", - "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Wybrane pakiety danych", - "submission.sections.describe.relationship-lookup.selection-tab.title.DataFile": "Wybrane pliki danych", - "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Wybrane czasopisma", - "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Wybrany numer wydania", - "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Wybrany tom czasopisma", - "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Wybrane instytucje finansujące", - "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Wybrane finansowanie", - "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Wybrany numer wydania", - "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Wybrana jednostka organizacyjna", - "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.epo": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.scopus": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.scielo": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.selection-tab.title": "Wyniki wyszukiwania", - "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Czy chcesz zapisać \"{{ value }}\" jako wariant imienia dla tego użytkownika, aby Ty lub inni użytkownicy mogli używać tego wariantu w przyszłych zgłoszeniach?. Jeśli nie, nadal możesz użyć tego wariantu w tym zgłoszeniu.", - "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Zapisz nowy wariant imienia", - "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Użyj tylko w tym zgłoszeniu", - "submission.sections.ccLicense.type": "Typ licencji", - "submission.sections.ccLicense.select": "Wybierz typ licencji…", - "submission.sections.ccLicense.change": "Zmień typ licencji…", - "submission.sections.ccLicense.none": "Brak dostępnych licencji", - "submission.sections.ccLicense.option.select": "Wybierz opcję…", - "submission.sections.ccLicense.link": "Wybrano licencję:", - "submission.sections.ccLicense.confirmation": "Udzielam powyższej licencji", - "submission.sections.general.add-more": "Dodaj więcej", - "submission.sections.general.collection": "Kolekcja", - "submission.sections.general.deposit_error_notice": "Wystąpił błąd podczas zgłaszania pozycji. Spróbuj ponownie później.", - "submission.sections.general.deposit_success_notice": "Udało się wprowadzić pozycję.", - "submission.sections.general.discard_error_notice": "Wystąpił błąd podczas odrzucania pozycji. Spróbuj ponownie później.", - "submission.sections.general.discard_success_notice": "Udało się odrzucić pozycję.", - "submission.sections.general.metadata-extracted": "Nowe metadane zostany rozpakowane i dodane do sekcji {{sectionId}}.", - "submission.sections.general.metadata-extracted-new-section": "Nowa sekcja {{sectionId}} została dodana do zgłoszenia.", - "submission.sections.general.no-collection": "Nie znaleziono kolekcji", - "submission.sections.general.no-sections": "Opcje niedostępne", - "submission.sections.general.save_error_notice": "Wystąpił błąd podczas zapisywania numeru. Spróbuj ponownie później. Po odświeżeniu strony niezapisane zmiany mogą zostać utracone.", - "submission.sections.general.save_success_notice": "Udało się zapisać zgłoszenie.", - "submission.sections.general.search-collection": "Szukaj kolekcji", - "submission.sections.general.sections_not_valid": "Niektóre sekcje są niekompletne.", - "submission.sections.submit.progressbar.CClicense": "Licencja Creative Commons", - "submission.sections.submit.progressbar.describe.recycle": "Odzyskaj", - "submission.sections.submit.progressbar.describe.stepcustom": "Opisz", - "submission.sections.submit.progressbar.describe.stepone": "Opisz", - "submission.sections.submit.progressbar.describe.steptwo": "Opisz", - "submission.sections.submit.progressbar.detect-duplicate": "Potencjalne duplikaty", - "submission.sections.submit.progressbar.license": "Zdeponuj licencję", - "submission.sections.submit.progressbar.upload": "Prześlij pliki", - "submission.sections.status.errors.title": "Błędy", - "submission.sections.status.valid.title": "Poprawność", - "submission.sections.status.warnings.title": "Ostrzeżenia", - "submission.sections.status.errors.aria": "ma błędy", - "submission.sections.status.valid.aria": "jest poprawne", - "submission.sections.status.warnings.aria": "ma ostrzeżenia", - "submission.sections.toggle.open": "Otwórz sekcję", - "submission.sections.toggle.close": "Zamknij sekcję", - "submission.sections.toggle.aria.open": "Rozwiń sekcję {{sectionHeader}}", - "submission.sections.toggle.aria.close": "Zwiń sekcję {{sectionHeader}}", - "submission.sections.upload.delete.confirm.cancel": "Anuluj", - "submission.sections.upload.delete.confirm.info": "Czy na pewno? To działanie nie może zostać cofnięte.", - "submission.sections.upload.delete.confirm.submit": "Tak, na pewno", - "submission.sections.upload.delete.confirm.title": "Usuń plik", - "submission.sections.upload.delete.submit": "Usuń", - "submission.sections.upload.download.title": "Pobierz plik", - "submission.sections.upload.drop-message": "Upuść pliki, aby załączyć je do tej pozycji", - "submission.sections.upload.edit.title": "Edytuj plik", - "submission.sections.upload.form.access-condition-label": "Typ dostępu", - "submission.sections.upload.form.date-required": "Data jest wymagana.", - "submission.sections.upload.form.date-required-from": "Data przyznania dostępu od jest wymagana.", - "submission.sections.upload.form.date-required-until": "Data przyznania dostępu do jest wymagana.", - "submission.sections.upload.form.from-label": "Pozwól na dostęp od", - "submission.sections.upload.form.from-placeholder": "Od", - "submission.sections.upload.form.group-label": "Grupa", - "submission.sections.upload.form.group-required": "Grupa jest wymagana", - "submission.sections.upload.form.until-label": "Pozwól na dostęp do", - "submission.sections.upload.form.until-placeholder": "Do", - "submission.sections.upload.header.policy.default.nolist": "Pliki wgrane do kolekcji {{collectionName}} będą dostępne dla poniższych grup:", - "submission.sections.upload.header.policy.default.withlist": "Zwróć uwagę na to, że pliki w kolekcji {{collectionName}} będą dostępne dla poniższych grup, z wyjątkiem tych, które zostały wyłączone z dostępu:", - "submission.sections.upload.info": "Tutaj znajdują się wszystkie pliki dodane w tym momencie do pozycji. Możesz zaktualizować metadane pliku i warunki dostępu lub przesłać dodatkowe pliki, przeciągając i opuszczając je gdziekolwiek na tej stronie", - "submission.sections.upload.no-entry": "Nie", - "submission.sections.upload.no-file-uploaded": "Pliki nie zostały jeszcze wgrane.", - "submission.sections.upload.save-metadata": "Zapisz metadane", - "submission.sections.upload.undo": "Anuluj", - "submission.sections.upload.upload-failed": "Przesyłanie nieudane", - "submission.sections.upload.upload-successful": "Przesyłanie udane", - "submission.submit.breadcrumbs": "Nowe zgłoszenie", - "submission.submit.title": "Nowe zgłoszenie", - "submission.workflow.generic.delete": "Usuń", - "submission.workflow.generic.delete-help": "Jeśli chcesz odrzucić tę pozycję, wybierz \"Delete\". Będzie wymagane potwierdzenie tej decyzji.", - "submission.workflow.generic.edit": "Edytuj", - "submission.workflow.generic.edit-help": "Wybierz tę opcję, aby zmienić metadane pozycji.", - "submission.workflow.generic.view": "Podgląd", - "submission.workflow.generic.view-help": "Wybierz tę opcję, aby wyświetlić metadane pozycji.", - "submission.workflow.tasks.claimed.approve": "Zatwierdź", - "submission.workflow.tasks.claimed.approve_help": "Jeśli ta pozycja ma zostać zatwierdzona i wprowadzona do kolekcji, wybierz \"Approve\".", - "submission.workflow.tasks.claimed.edit": "Edytuj", - "submission.workflow.tasks.claimed.edit_help": "Wybierz tę opcję, aby zmienić metadane pozycji.", - "submission.workflow.tasks.claimed.reject.reason.info": "Proszę wpisać powód odrzucenia zgłoszenia w poniższe pole, wskazując, czy zgłaszający może poprawić problem i ponownie przesłać zgłoszenie.", - "submission.workflow.tasks.claimed.reject.reason.placeholder": "Opisz powód odrzucenia zgłoszenia", - "submission.workflow.tasks.claimed.reject.reason.submit": "Odrzuć pozycję", - "submission.workflow.tasks.claimed.reject.reason.title": "Powód", - "submission.workflow.tasks.claimed.reject.submit": "Odrzuć", - "submission.workflow.tasks.claimed.reject_help": "Jeśli po przejrzeniu pozycji stwierdzono, że nie nadaje się ona do włączenia do kolekcji, wybierz opcję \"Reject\". Zostaniesz wtedy poproszony o określenie powodu odrzucenia, i wskazanie czy zgłaszający powinien wprowadzić zmiany i przesłać ponownie pozycję.", - "submission.workflow.tasks.claimed.return": "Cofnij do puli zadań", - "submission.workflow.tasks.claimed.return_help": "Cofnij zadanie do puli, aby inny użytkownik mógł się go podjąć.", - "submission.workflow.tasks.generic.error": "Podczas działania wystąpił błąd...", - "submission.workflow.tasks.generic.processing": "Procesowanie...", - "submission.workflow.tasks.generic.submitter": "Zgłaszający", - "submission.workflow.tasks.generic.success": "Udało się", - "submission.workflow.tasks.pool.claim": "Podejmij pracę", - "submission.workflow.tasks.pool.claim_help": "Przypisz to zadanie do siebie.", - "submission.workflow.tasks.pool.hide-detail": "Ukryj szczegóły", - "submission.workflow.tasks.pool.show-detail": "Pokaż szczegóły", - "thumbnail.default.alt": "Miniatura", - "thumbnail.default.placeholder": "Brak miniatury", - "thumbnail.project.alt": "Logo projektu", - "thumbnail.project.placeholder": "Obraz zastępczy projketu", - "thumbnail.orgunit.alt": "Logo jednostki organizacyjnej", - "thumbnail.orgunit.placeholder": "Obraz zastępczy jednostki organizacyjnej", - "thumbnail.person.alt": "Zdjęcie profilowe", - "thumbnail.person.placeholder": "Brak zdjęcia profilowego", - "title": "DSpace", - "vocabulary-treeview.header": "Widok drzewka", - "vocabulary-treeview.load-more": "Pokaż więcej", - "vocabulary-treeview.search.form.reset": "Resetuj", - "vocabulary-treeview.search.form.search": "Szukaj", - "vocabulary-treeview.search.no-result": "Brak pozycji do wyświetlenia", - "vocabulary-treeview.tree.description.nsi": "The Norwegian Science Index", - "vocabulary-treeview.tree.description.srsc": "Kategorie tematów badań", - "uploader.browse": "wyszukaj na swoim urządzeniu", - "uploader.drag-message": "Przeciągnij i upuść pliki tutaj", - "uploader.delete.btn-title": "Usuń", - "uploader.or": ", lub ", - "uploader.processing": "Procesowanie", - "uploader.queue-length": "Długość kolejki", - "virtual-metadata.delete-item.info": "Wybierz typy, dla których chcesz zapisać wirtualne metadane jako rzeczywiste metadane", - "virtual-metadata.delete-item.modal-head": "Wirtualne metadane tego powiązania", - "virtual-metadata.delete-relationship.modal-head": "Wybierz pozycje, dla których chcesz zapisać wirtualne metadane jako rzeczywiste metadane", - "workflowAdmin.search.results.head": "Zarządzaj procesami", - "workflow-item.edit.breadcrumbs": "Edytuj pozycję procesu", - "workflow-item.edit.title": "Edytuj pozycję procesu", - "workflow-item.delete.notification.success.title": "Usunięte", - "workflow-item.delete.notification.success.content": "Ten element procesu został usunięty", - "workflow-item.delete.notification.error.title": "Coś poszło nie tak", - "workflow-item.delete.notification.error.content": "Ten element procesu nie mógł zostać usunięty", - "workflow-item.delete.title": "Usuń element procesu", - "workflow-item.delete.header": "Usuń element procesu", - "workflow-item.delete.button.cancel": "Anuluj", - "workflow-item.delete.button.confirm": "Usuń", - "workflow-item.send-back.notification.success.title": "SOdeślij do zgłaszającego", - "workflow-item.send-back.notification.success.content": "Ten element procesu został odesłany do zgłaszającego", - "workflow-item.send-back.notification.error.title": "Coś poszło nie tak", - "workflow-item.send-back.notification.error.content": "Ten element procesu nie mógł zostać odesłany do zgłaszającego", - "workflow-item.send-back.title": "Odeślij element procesu do zgłaszającego", - "workflow-item.send-back.header": "Odeślij element procesu do zgłaszającego", - "workflow-item.send-back.button.cancel": "Anuluj", - "workflow-item.send-back.button.confirm": "Odeślij", - "workflow-item.view.breadcrumbs": "Widok procesu", - "idle-modal.header": "Sesja wkrótce wygaśnie", - "idle-modal.info": "Ze względów bezpieczeństwa sesja wygaśnie po {{ timeToExpire }} minutach nieaktywności. Twoja sesja wkrótce wygaśnie. Czy chcesz ją przedłużyć albo wylogować się?", - "idle-modal.log-out": "Wyloguj", - "idle-modal.extend-session": "Wydłuż sesję", - "workspace.search.results.head": "Twoje zadania", - "orgunit.listelement.badge": "Jednostka organizacyjna", - "orgunit.page.city": "Miasto", - "orgunit.page.country": "Kraj", - "orgunit.page.dateestablished": "Data założenia", - "orgunit.page.description": "Opis", - "orgunit.page.edit": "Edytuj pozycję", - "orgunit.page.id": "ID", - "orgunit.page.titleprefix": "Jednostka organizacyjna: ", - "pagination.options.description": "Opcje strony", - "pagination.results-per-page": "Wyników na stronę", - "pagination.showing.detail": "{{ range }} z {{ total }}", - "pagination.showing.label": "Teraz wyświetlane ", - "pagination.sort-direction": "Opcje sortowania", - "cookies.consent.purpose.sharing": "Udostępnianie", - "item.preview.dc.identifier.issn": "ISSN", - "500.page-internal-server-error": "Usługa niedostępna", - "500.help": "Serwer jest tymczasowo niezdolny do obsługi Twojego żądania z powodu przestoju konserwacyjnego lub problemów z przepustowością. Prosimy spróbować ponownie później.", - "500.link.home-page": "Zabierz mnie na stronę główną", - "error-page.description.401": "brak autoryzacji", - "error-page.description.403": "brak dostępu", - "error-page.description.500": "usługa niedostępna", - "error-page.description.404": "nie znaleziono strony", - "error-page.orcid.generic-error": "Podczas logowania za pomocą ORCID wystąpił błąd. Upewnij się, że udostępniłeś DSpace adres e-mail swojego konta ORCID. Jeśli błąd nadal występuje, skontaktuj się z administratorem", - "access-status.embargo.listelement.badge": "Embargo", - "access-status.metadata.only.listelement.badge": "Tylko metadane", - "access-status.open.access.listelement.badge": "Open Access", - "access-status.restricted.listelement.badge": "Brak dostępu", - "access-status.unknown.listelement.badge": "Nieznane", - "admin.access-control.groups.table.edit.buttons.remove": "Usuń \"{{name}}\"", - "admin.metadata-import.page.validateOnly": "Tylko waliduj", - "admin.metadata-import.page.validateOnly.hint": "Po wybraniu tej opcji przesłany plik CSV zostanie poddany walidacji. Otrzymasz raport o wykrytych zmianach, ale żadne zmiany nie zostaną zapisane.", - "bitstream.edit.form.iiifLabel.label": "Etykieta canvyIIIF", - "bitstream.edit.form.iiifLabel.hint": "Etykieta dla tego obrazu. Jeśli nie została dostarczona, zostanie użyta domyślna etykieta.", - "bitstream.edit.form.iiifToc.label": "Spis treści IIIF", - "bitstream.edit.form.iiifToc.hint": "Dodanie tekstu tutaj zapoczątkuje nowy zakres spisu treści.", - "bitstream.edit.form.iiifWidth.label": "Szerokość canvy IIIF", - "bitstream.edit.form.iiifWidth.hint": "Szerokość canvy jest zwykle równa szerokości obrazu.", - "bitstream.edit.form.iiifHeight.label": "Wysokość canvy IIIF", - "bitstream.edit.form.iiifHeight.hint": "Wysokość canvy jest zwykle równa szerokości obrazu.", - "browse.back.all-results": "Wszystkie wyniki wyszukiwania", - "pagination.next.button": "Następny", - "pagination.previous.button": "Poprzedni", - "pagination.next.button.disabled.tooltip": "Brak więcej stron z wynikami wyszukiwania", - "browse.startsWith": ", zaczyna się od {{ startsWith }}", - "browse.title.page": "Przeszukiwanie {{ collection }} wg {{ field }} {{ value }}", - "collection.edit.item.authorizations.load-bundle-button": "Załaduj więcej paczek", - "collection.edit.item.authorizations.load-more-button": "Załaduj więcej", - "collection.edit.item.authorizations.show-bitstreams-button": "Pokaż polityki plików dla paczek", - "comcol-role.edit.create.error.title": "Nie udało się utworzyć grupy dla roli '{{ role }}'", - "curation.form.submit.error.invalid-handle": "Nie ustalono identyfikatora dla tego obiektu", - "confirmation-modal.delete-profile.header": "Usuń profil", - "confirmation-modal.delete-profile.info": "Czy na pewno chcesz usunąć profil", - "confirmation-modal.delete-profile.cancel": "Anuluj", - "confirmation-modal.delete-profile.confirm": "Usuń", - "error.invalid-search-query": "Zapytanie nie jest poprawne. Wejdź na Solr query syntax, aby dowiedzieć się o najlepszych praktykach i dodatkowych informacjach o tym błędzie.", - "feed.description": "Aktualności", - "footer.link.feedback": "Prześlij uwagi", - "form.group-collapse": "Zwiń", - "form.group-collapse-help": "Kliknij tutaj, aby zwinąć", - "form.group-expand": "Rozwiń", - "form.group-expand-help": "Kliknij tutaj, aby rozwinąć", - "health.breadcrumbs": "Stan systemu", - "health-page.heading": "Stan systemu", - "health-page.info-tab": "Informacje", - "health-page.status-tab": "Status", - "health-page.error.msg": "Serwis stanu systemu jest tymczasowo niedostępny", - "health-page.property.status": "Kod statusu", - "health-page.section.db.title": "Baza danych", - "health-page.section.geoIp.title": "GeoIp", - "health-page.section.solrAuthorityCore.title": "Autentykacja", - "health-page.section.solrOaiCore.title": "OAI", - "health-page.section.solrSearchCore.title": "Wyszukiwarka", - "health-page.section.solrStatisticsCore.title": "Statystyki", - "health-page.section-info.app.title": "Backend aplikacji", - "health-page.section-info.java.title": "Java", - "health-page.status": "Status", - "health-page.status.ok.info": "operacyjny", - "health-page.status.error.info": "Wykryte problemy", - "health-page.status.warning.info": "Wykryte potencjalne problemy", - "health-page.title": "Stan systemu", - "health-page.section.no-issues": "Nie wykryto żadnych problemów", - "info.feedback.breadcrumbs": "Uwagi", - "info.feedback.head": "Uwagi", - "info.feedback.title": "Uwagi", - "info.feedback.info": "Dziękujemy za podzielenie się opinią na temat systemu DSpace. Doceniamy Twój wkład w lepsze działanie systemu!", - "info.feedback.email_help": "Ten adres zostanie użyty, aby przesłać odpowiedź na uwagi.", - "info.feedback.send": "Prześlij uwagi", - "info.feedback.comments": "Komentarz", - "info.feedback.email-label": "Twoj adres e-mail", - "info.feedback.create.success": "Uwagi przesłane!", - "info.feedback.error.email.required": "Poprawny adres e-mail jest wymagany", - "info.feedback.error.message.required": "Treść komentarza jest wymagana", - "info.feedback.page-label": "Strona", - "info.feedback.page_help": "Ta strona odnosi się do uwag.", - "item.orcid.return": "Powrót", - "item.truncatable-part.show-more": "Pokaż więcej", - "item.truncatable-part.show-less": "Pokaż mniej", - "item.page.orcid.title": "ORCID", - "item.page.orcid.tooltip": "Otwórz ustawienia ORCID", - "item.page.claim.button": "Podejmij pracę", - "item.page.claim.tooltip": "Podejmij pracę jako profil", - "item.version.create.modal.submitted.header": "Tworzenie nowej wersji...", - "item.version.create.modal.submitted.text": "Nowa wersja została utworzona. Mogło to trwać chwilę, jeśli pozycja ma wiele powiązań.", - "journal-relationships.search.results.head": "Wyniki wyszukiwania czasopism", - "menu.section.icon.health": "Sekcja menu Stan systemu", - "menu.section.health": "Stan systemu", - "metadata-export-search.tooltip": "Eksportuj wyniki wyszukiwania w formacie CSV", - "metadata-export-search.submit.success": "Eksport rozpoczął się", - "metadata-export-search.submit.error": "Eksport nie rozpoczął się", - "person.page.name": "Nazwa", - "person-relationships.search.results.head": "Wyniki wyszukiwania osób", - "profile.special.groups.head": "Autoryzacja do specjalnych grup, do których należysz", - "project-relationships.search.results.head": "Wyniki wyszukiwania projektów", - "publication-relationships.search.results.head": "Wyniki wyszukiwania publikacji", - "resource-policies.edit.page.target-failure.content": "Wystąpił błąd podczas edycji (użytkownika lub grupy) związany z polityką zasobu.", - "resource-policies.edit.page.other-failure.content": "Wystąpił błąd podczas edycji polityki zasobu. Użytkownik lub grupa zostały zaktualizowane pomyślnie.", - "resource-policies.form.eperson-group-list.modal.header": "Nie można zmienić typu", - "resource-policies.form.eperson-group-list.modal.text1.toGroup": "Nie można zastąpić użytkownika grupą.", - "resource-policies.form.eperson-group-list.modal.text1.toEPerson": "Nie można zastąpić grupy użytkownikiem.", - "resource-policies.form.eperson-group-list.modal.text2": "Usuń obecną polityke zasobu i stwórz nową o określonym typie.", - "resource-policies.form.eperson-group-list.modal.close": "Ok", - "search.results.view-result": "Widok", - "default-relationships.search.results.head": "Wyniki wyszukiwania", - "statistics.table.title.TotalVisits": "Wyświetlnia ogółem", - "statistics.table.title.TotalVisitsPerMonth": "Wyświetlenia w miesiącu", - "statistics.table.title.TotalDownloads": "Pobrania", - "statistics.table.title.TopCountries": "Wyświetlenia wg krajów", - "statistics.table.title.TopCities": "Wyświetlenia wg miast", - "submission.import-external.preview.title": "Podgląd pozycji", - "submission.import-external.preview.title.none": "Podgląd pozycji", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.none": "Import pozycji zdalnie", - "submission.sections.general.cannot_deposit": "Nie można zakończyć deponowania, ponieważ w formularzu wystąpiły błędy.
    Aby zakończyć deponowanie, wypełnij wszystkie obowiązkowe pola.", - "submission.sections.submit.progressbar.accessCondition": "Warunki dostępu do pozycji", - "submission.sections.submit.progressbar.sherpapolicy": "Polityki Sherpa", - "submission.sections.submit.progressbar.sherpaPolicies": "Informacje o polityce open access wydawcy.", - "submission.sections.status.info.title": "Dodatkowe informacje", - "submission.sections.status.info.aria": "Dodatkowe informacje", - "submission.sections.upload.form.access-condition-hint": "Wybierz w jaki sposób pliki dla tej pozycji po jest zdeponowaniu będą mogły być udostępnione", - "submission.sections.upload.form.from-hint": "Wybierz datę, od której ma zostać zastosowany warunek dostępu", - "submission.sections.upload.form.until-hint": "Wybierz datę, do której ma zostać zastosowany warunek dostępu", - "submission.sections.accesses.form.discoverable-description": "Jeśli checkbox jest zaznaczony, pozycja będzie wyświetlana w wynikach wyszukiwania. Jeśli checkbox jest odznaczony, dostęp do pozycji będzie dostępny tylko przez bezpośredni link, pozycja nie będzie wyświetlana w wynikach wyszukiwania.", - "submission.sections.accesses.form.discoverable-label": "Niemożliwe do wyszukania", - "submission.sections.accesses.form.access-condition-label": "Typ warunku dostępu", - "submission.sections.accesses.form.access-condition-hint": "Wybierz warunek dostępu, aby przypisać go do pozycji, kiedy zostanie zdeponowany.", - "submission.sections.accesses.form.date-required": "Data jest wymagana.", - "submission.sections.accesses.form.date-required-from": "Początkowa data przyznania dostępu jest wymagana.", - "submission.sections.accesses.form.date-required-until": "Końcowa data przyznania dostępu jest wymagana.", - "submission.sections.accesses.form.from-label": "Udziel dostępu od", - "submission.sections.accesses.form.from-hint": "Wybierz datę, od kiedy zostanie przyznany dostęp do tej pozycji", - "submission.sections.accesses.form.from-placeholder": "Od", - "submission.sections.accesses.form.group-label": "Grupa", - "submission.sections.accesses.form.group-required": "Grupa jest wymagana.", - "submission.sections.accesses.form.until-label": "Udziel dostępu do", - "submission.sections.accesses.form.until-hint": "Wybierz datę, do kiedy zostanie przyznany dostęp do tej pozycji", - "submission.sections.accesses.form.until-placeholder": "Do", - "submission.sections.sherpa.publication.information": "Informacje o publikacji", - "submission.sections.sherpa.publication.information.title": "Tytuł", - "submission.sections.sherpa.publication.information.issns": "Numery ISSN", - "submission.sections.sherpa.publication.information.url": "URL", - "submission.sections.sherpa.publication.information.publishers": "Wydawca", - "submission.sections.sherpa.publication.information.romeoPub": "Wydawca Romeo", - "submission.sections.sherpa.publication.information.zetoPub": "Wydawca Zeto", - "submission.sections.sherpa.publisher.policy": "Polityka wydawnicza", - "submission.sections.sherpa.publisher.policy.description": "Poniższe informacje zostały znalezione za pośrednictwem Sherpa Romeo. W oparciu o politykę Twojego wydawcy, zawiera ona porady dotyczące tego, czy embargo może być konieczne i/lub jakie pliki możesz przesłać. Jeśli masz pytania, skontaktuj się z administratorem strony poprzez formularz.", - "submission.sections.sherpa.publisher.policy.openaccess": "Rodzaje Open Access dozwolone przez politykę wydawniczą tego czasopisma są wymienione poniżej. Kliknij na wybrany rodzaj, aby przejść do szczegółowego widoku", - "submission.sections.sherpa.publisher.policy.more.information": "Aby uzuyskać więcej informacji, kliknij tutaj:", - "submission.sections.sherpa.publisher.policy.version": "Wersja", - "submission.sections.sherpa.publisher.policy.embargo": "Embargo", - "submission.sections.sherpa.publisher.policy.noembargo": "Brak embargo", - "submission.sections.sherpa.publisher.policy.nolocation": "Brak", - "submission.sections.sherpa.publisher.policy.license": "Licencja", - "submission.sections.sherpa.publisher.policy.prerequisites": "Wymagania wstępne", - "submission.sections.sherpa.publisher.policy.location": "Lokalizacja", - "submission.sections.sherpa.publisher.policy.conditions": "Wymagania", - "submission.sections.sherpa.publisher.policy.refresh": "Odśwież", - "submission.sections.sherpa.record.information": "Informacje o rekordzie", - "submission.sections.sherpa.record.information.id": "ID", - "submission.sections.sherpa.record.information.date.created": "Data utworzenia", - "submission.sections.sherpa.record.information.date.modified": "Ostatnia modyfikacja", - "submission.sections.sherpa.record.information.uri": "URI", - "submission.sections.sherpa.error.message": "Wystąpił błąd podczas pobierania informacji z Sherpa", - "submission.workspace.generic.view": "Podgląd", - "submission.workspace.generic.view-help": "Wybierz tę opcje, aby zobaczyć metadane.", - "workflow.search.results.head": "Zadania na workflow", - "workspace-item.view.breadcrumbs": "Widok wersji roboczej", - "workspace-item.view.title": "Widok wersji roboczej", - "researcher.profile.change-visibility.fail": "Wystąpił niespodziewany błąd podczas zmiany widoczności profilu", - "person.page.orcid.link.processing": "Łączenie profilu z ORCID...", - "person.page.orcid.link.error.message": "Coś poszło nie tak podczas łączenia z ORCID. Jeśli problem będzie się powtarzał, skontaktuj się z administratorem.", - "person.page.orcid.sync-queue.table.header.type": "Typ", - "person.page.orcid.sync-queue.table.header.description": "Opis", - "person.page.orcid.sync-queue.table.header.action": "Akcja", - "person.page.orcid.sync-queue.tooltip.project": "Projekt", - "person.page.orcid.sync-queue.send.validation-error.country.invalid": "Niewłaściwy dwuznakowy kod kraju ISO 3166", - "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "Wymagana data publikacji to co najmniej rok po 1900", - "person.page.orcid.synchronization-mode-funding-message": "Wybierz, czy chcesz wysłać swoje projekty na swoją listę informacji o projektach w profilu ORCID.", - "person.page.orcid.synchronization-mode-publication-message": "Wybierz, czy chcesz wysłać swoje publikacje na swoją listę informacji o publikacjach w profilu ORCID.", - "person.page.orcid.synchronization-mode-profile-message": "Wybierz, czy chcesz wysłać swoje dane bibliograficzne lub osobiste identyfikatory do swojego profilu ORCID.", - "person.orcid.sync.setting": "Ustawienia synchronizacji z ORCID", - "person.orcid.registry.queue": "Kolejka rejestru z ORCID", - "person.orcid.registry.auth": "Autoryzacje z ORCID", - "home.recent-submissions.head": "Najnowsze publikacje", - "submission.sections.sherpa-policy.title-empty": "Nie wybrano ISSN i informacje o polityce wydawniczej czasopisma są niedostępne", - "admin.batch-import.breadcrumbs": "Import zbiorczy", - "admin.batch-import.page.dropMsg": "Drop a batch ZIP to import", - "admin.batch-import.page.dropMsgReplace": "Drop to replace the batch ZIP to import", - "admin.batch-import.page.error.addFile": "Najpierw wybierz plik (ZIP)", - "admin.batch-import.page.header": "Import masowy", - "admin.batch-import.page.help": "Wybierz kolekcję do zaimportowania kolekcji. Potem, upuść lub przeszukaj plik SAF, który zawiera pozycje do importu", - "admin.batch-import.page.remove": "usuń", - "admin.batch-import.page.validateOnly.hint": "Jeśli wybrano, importowany plik ZIP będzie walidowany. Otrzymasz raport ze zmianami, ale żadne zmiany nie zostaną wykonane zapisane.", - "collection.form.correctionSubmissionDefinition": "Wzór zgłoszenia do prośby o korektę", - "comcol-role.edit.delete.error.title": "Nie udało się usunąć roli '{{ role }}' dla grup", - "confirmation-modal.export-batch.header": "Eksport maasowy (ZIP) {{ dsoName }}", - "confirmation-modal.export-batch.info": "Czy na pewno chcesz wyeksportować plik ZIP z {{ dsoName }}", - "dso-selector.export-batch.dspaceobject.head": "Eksport masowy (ZIP) z", - "menu.section.export_batch": "Eksport masowy (ZIP)", - "nav.user-profile-menu-and-logout": "Profil użytkownika i wylogowywanie", - "process.detail.actions": "Akcje", - "process.detail.delete.body": "Czy na pewno chcesz usunąć bieżący proces?", - "process.detail.delete.button": "Usuń proces", - "process.detail.delete.cancel": "Anuluj", - "process.detail.delete.confirm": "Usuń proces", - "process.detail.delete.error": "Nie udało się usunąć procesu", - "process.detail.delete.header": "Usuń proces", - "process.detail.delete.success": "Proces został usunięty.", - "admin.batch-import.title": "Masowy import", - "admin.metadata-import.page.button.select-collection": "Wybierz kolekcję", - "admin.registries.bitstream-formats.table.id": "ID", - "admin.registries.schema.fields.table.id": "ID", - "cookies.consent.app.description.google-recaptcha": "Podczas rejestracji i odzyskiwania hasła używamy narzędzia google reCAPTCHA", - "cookies.consent.app.disable-all.description": "Przełącz, aby zaakceptować lub odrzucić wszystkie", - "cookies.consent.app.disable-all.title": "Akceptowacja lub odrzucenie wszystkich", - "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", - "cookies.consent.content-modal.service": "usługa", - "cookies.consent.content-modal.services": "usługi", - "cookies.consent.content-notice.description.no-privacy": "Zbieramy i przetwarzamy Twoje dane w celu: autentykacji, ustawień preferencji i zgód oraz do celów statystycznych.", - "cookies.consent.content-notice.title": "Zgoda na ciasteczka", - "cookies.consent.ok": "Zgadzam się", - "cookies.consent.purpose.registration-password-recovery": "Rejestracja i odzyskiwanie hasła", - "cookies.consent.save": "Zapisz", - "curation-task.task.citationpage.label": "Generuj stronę z cytowaniem", - "dso-selector.import-batch.dspaceobject.head": "Import masowy z", - "orgunit.listelement.no-title": "Brak tytyłu", - "process.bulk.delete.error.body": "Proces z ID {{processId}} nie może być usunięty. Pozostałe procesy zostaną usunięte.", - "process.bulk.delete.error.head": "Błąd podczas usuwania procesu", - "process.bulk.delete.success": "{{count}} proces/y został/y usunięte", - "process.overview.delete": "Usuń {{count}} proces/y", - "process.overview.delete.body": "Czy na pewno usunąć {{count}} proces/y?", - "process.overview.delete.clear": "Wyczyść selekcję procesów do usunięcia", - "process.overview.delete.header": "Usuń procesy", - "process.overview.delete.processing": "{{count}} procesów zostanie usuniętych. Poczekaj, gdy usuwanie się zakończy. Może to zająć chwilę.", - "process.overview.table.actions": "Akcje", - "profile.security.form.label.current-password": "Aktualne hasło", - "profile.security.form.notifications.error.change-failed": "Wystąpił błąd podczas próby zmiany hasła. Sprawdź czy aktualne hasło jest prawidłowe.", - "profile.security.form.notifications.error.general": "Uzupełnij wymagane pola dla bezpieczeństwa na formularzu", - "register-page.registration.error.recaptcha": "Wystąpił błąd podczas próby autentykacji przez reCAPTCHA", - "register-page.registration.google-recaptcha.must-accept-cookies": "Aby się zarejestrować, musisz zaakceptować ciasteczka dla rejestracji i odzyskiwania hasła (Google reCaptcha).", - "register-page.registration.google-recaptcha.notification.message.error": "Wystąpił błąd podczas weryfikacji reCaptcha", - "register-page.registration.google-recaptcha.notification.message.expired": "Weryfikacja wygasła. Zweryfikuj ponownie.", - "register-page.registration.google-recaptcha.notification.title": "Google reCaptcha", - "register-page.registration.google-recaptcha.open-cookie-settings": "Otwórz ustawienia plików cookies", - "search.results.response.500": "Wystąpił błąd podczas wysyłania zapytania. Spróbuj ponownie później", - "submission.sections.license.granted-label": "Potwierdzam akceptację powyższej licencji", - "submission.sections.license.notgranted": "Najpierw musisz zaakceptować licencję", - "submission.sections.license.required": "Najpierw musisz zaakceptować licencję", - "confirmation-modal.export-batch.confirm": "Eksportuj", - "confirmation-modal.export-batch.cancel": "Anuluj", - "admin.access-control.bulk-access.breadcrumbs": "Zbiorcza edycja dostępu do osiągnięć", - "administrativeBulkAccess.search.results.head": "Wyniki wyszukiwania", - "admin.access-control.bulk-access": "Zbiorcza edycja dostępu do osiągnięć", - "admin.access-control.bulk-access.title": "Zbiorcza edycja dostępu do osiągnięć", - "admin.access-control.bulk-access-browse.header": "Krok 1: Wybierz pozycje", - "admin.access-control.bulk-access-browse.search.header": "Wyszukaj", - "admin.access-control.bulk-access-browse.selected.header": "Obecny wybór({{number}})", - "admin.access-control.bulk-access-settings.header": "Krok 2: Działanie do wykonania", - "admin.access-control.groups.form.tooltip.editGroupPage": "Na tej stronie można edytować opcje grupy i przypisane do niej osoby. W górnej sekcji można edytować nazwę i opis grupy, chyba że jest to grupa administratorów dla zbioru i kolekcji. W tym przypadku nazwa i opis grupy są generowane automatycznie i nie można ich edytować. W kolejnych sekcjach można edytować przypisanie użytkowników do grupy. Szczegóły na [stronie](https://wiki.lyrasis.org/display/DSDOC7x/Create+or+manage+a+user+group).", - "admin.access-control.groups.form.tooltip.editGroup.addEpeople": "Aby dodać lub usunąć użytkownika do/z tej grupy, kliknij przycisk 'Przeglądaj wszystko' lub użyj paska wyszukiwania poniżej, aby wyszukać użytkowników (użyj listy rozwijanej po lewej stronie paska wyszukiwania, aby wybrać, czy chcesz wyszukiwać według imienia i nazwiska, czy według adresu e-mail). Następnie kliknij ikonę plusa przy każdym użytkowniku, którego chcesz dodać do poniższej listy, lub ikonę kosza przy każdym użytkowniku, którego chcesz usunąć. Poniższa lista może mieć kilka stron: użyj strzałek pod listą, aby przejść do kolejnych stron. Gdy wszystkie zmiany zostaną wprowadzone, zapisz je, klikając przycisk 'Zapisz' w górnej sekcji.", - "admin.access-control.groups.form.tooltip.editGroup.addSubgroups": "Aby dodać lub usunąć podgrupę do/z tej grupy, kliknij przycisk 'Przeglądaj wszystko' lub użyj wyszukiwarki poniżej, aby wyszukać użytkowników. Następnie kliknij ikonę plusa przy każdym użytkowniku, którego chcesz dodać do poniższej listy, lub ikonę kosza przy każdym użytkowniku, którego chcesz usunąć. Poniższa lista może składać się z kilku stron: użyj przycisków pod listą, aby przejść do kolejnych stron. Gdy wszystkie zmiany zostaną wprowadzone, zapisz je, klikając przycisk 'Zapisz' w górnej sekcji.", - "admin.workflow.item.workspace": "Przestrzeń robocza", - "admin.workflow.item.policies": "Polityki", - "admin.workflow.item.supervision": "Recenzja", - "admin.batch-import.page.toggle.help": "It is possible to perform import either with file upload or via URL, use above toggle to set the input source", - "admin.metadata-import.page.error.addFileUrl": "Najpierw wpisz URL pliku!", - "admin.metadata-import.page.toggle.upload": "Prześlij", - "admin.metadata-import.page.toggle.url": "URL", - "admin.metadata-import.page.urlMsg": "Wpisz URL pliku ZIP, aby wykonać import masowy", - "advanced-workflow-action.rating.form.rating.label": "Ocena", - "advanced-workflow-action.rating.form.rating.error": "Ta pozycja musi zostać oceniona", - "advanced-workflow-action.rating.form.review.label": "Recenzja", - "advanced-workflow-action.rating.form.review.error": "Musisz wpisać tekst recenzji", - "advanced-workflow-action.rating.description": "Wybierz ocenę poniżej", - "advanced-workflow-action.rating.description-requiredDescription": "Wybierz ocenę poniżej i wpisz uzasadnienie", - "advanced-workflow-action.select-reviewer.description-single": "Wybierz recenzenta przed zdeponowaniem pozycji", - "advanced-workflow-action.select-reviewer.description-multiple": "Wybierz jednego lub więcej recenzentów przed zdeponowaniem pozycji", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.head": "Użytkownicy", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.head": "Dodaj użytkownika", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.button.see-all": "Przeglądaj wszystko", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.headMembers": "Aktualni użytkownicy", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.metadata": "Metadane", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.email": "Adres e-mail (dokładny)", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.button": "Wyszukaj", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.id": "ID", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.name": "Nazwa", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity": "Tożsamość", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "Adres e-mail", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.netid": "NetID", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit": "Usuń / Dodaj", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove": "Usuń użytkownika z nazwę \"{{name}}\"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember": "Dodano użytkownika o nazwie: \"{{name}}\"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.addMember": "Nie dodano użytkownika: \"{{name}}\"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.deleteMember": "Usunięto użytkownika: \"{{name}}\"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.deleteMember": "Nie usunięto użytkownika: \"{{name}}\"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Dodano użytkownika \"{{name}}\"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "Brak aktywnej grupy, najpierw wpisz nazwę.", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-members-yet": "W tej grupie nie ma użytkowników, wyszukaj ich i dodaj.", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-items": "Nie znaleziono żadnych użytkowników", - "advanced-workflow-action.select-reviewer.no-reviewer-selected.error": "Recenzent nie jest wybrany.", - "bitstream.edit.notifications.error.primaryBitstream.title": "Wystąpił błąd podczas zapisu pliku.", - "browse.comcol.by.srsc": "Wg słów kluczowych", - "browse.metadata.srsc.breadcrumbs": "Przeglądaj wg słów kluczowych", - "browse.startsWith.input": "Filtr", - "browse.taxonomy.button": "Przeglądaj", - "search.browse.item-back": "Powrót do wyników wyszukiwania", - "claimed-approved-search-result-list-element.title": "Zaakceptowano", - "claimed-declined-search-result-list-element.title": "Odrzucono i przesłano do deponującego", - "claimed-declined-task-search-result-list-element.title": "Odrzucono i przesłano do recenzenta", - "collection.edit.tabs.access-control.head": "Dostępy", - "collection.edit.tabs.access-control.title": "Edycja kolekcji - dostępy", - "collection.listelement.badge": "Kolekcja", - "community.edit.tabs.access-control.head": "Dostępy", - "community.edit.tabs.access-control.title": "Edycja zbioru - dostępy", - "comcol-role.edit.scorereviewers.name": "Ocena recenzenta", - "comcol-role.edit.scorereviewers.description": "Recenzenci mogą oceniać zdeponowane pozycje, co określi, czy pozycja zostanie przyjęta lub odrzucona.", - "curation-task.task.register-doi.label": "Rejestracja DOI", - "dso.name.unnamed": "Bez nazwy", - "dso-selector.create.community.or-divider": "lub", - "dso-selector.set-scope.community.or-divider": "lub", - "dso-selector.results-could-not-be-retrieved": "Wystąpił błąd, proszę odświeżyć stronę", - "supervision-group-selector.header": "Wybór grupy recenzenckiej", - "supervision-group-selector.select.type-of-order.label": "Wybierz typ funkcji", - "supervision-group-selector.select.type-of-order.option.none": "BRAK", - "supervision-group-selector.select.type-of-order.option.editor": "REDAKTOR", - "supervision-group-selector.select.type-of-order.option.observer": "OBSERWATOR", - "supervision-group-selector.select.group.label": "Wybierz grupę", - "supervision-group-selector.button.cancel": "Anuluj", - "supervision-group-selector.button.save": "Zapisz", - "supervision-group-selector.select.type-of-order.error": "Wybierz typ funkcji", - "supervision-group-selector.select.group.error": "Wybierz grupę", - "supervision-group-selector.notification.create.success.title": "Grupa recenzencka został dodana dla grupy {{ name }}", - "supervision-group-selector.notification.create.failure.title": "Błąd", - "supervision-group-selector.notification.create.already-existing": "Funkcja recenzenta już jest przypisana do tej grupy", - "confirmation-modal.delete-subscription.header": "Usuń subksrypcje", - "confirmation-modal.delete-subscription.info": "Czy na pewno chcesz usunąć subskrypcję: \"{{ dsoName }}\"", - "confirmation-modal.delete-subscription.cancel": "Anuluj", - "confirmation-modal.delete-subscription.confirm": "Usuń", - "error.validation.metadata.name.invalid-pattern": "To pole nie może zawierać kropek, przecinków i spacji. Zamiast tego This field cannot contain dots, commas or spaces. Zamiast tego może użyć pól z notacji SNEQ", - "error.validation.metadata.name.max-length": "To pole nie może zawierać więcej niż 32 znaki", - "error.validation.metadata.namespace.max-length": "To pole nie może zawierać więcej niż 256 znaków", - "error.validation.metadata.element.invalid-pattern": "To pole nie może zawierać kropek, przecinków i spacji. Zamiast tego This field cannot contain dots, commas or spaces. Zamiast tego może użyć pól z notacji SNEQ", - "error.validation.metadata.element.max-length": "To pole nie może zawierać więcej niż 64 znaki", - "error.validation.metadata.qualifier.invalid-pattern": "To pole nie może zawierać kropek, przecinków i spacji", - "error.validation.metadata.qualifier.max-length": "To pole nie może zawierać więcej niż 64 znaki", - "forgot-email.form.email.error.not-email-form": "Wpisz prawidłowy adres e-mail", - "form.other-information.email": "Adres e-mail", - "form.other-information.first-name": "Imię", - "form.other-information.insolr": "Solr Index", - "form.other-information.institution": "Instytucja", - "form.other-information.last-name": "Nazwisko", - "form.other-information.orcid": "ORCID", - "form.create": "Utwórz", - "info.end-user-agreement.hosting-country": "Stany Zjednoczone", - "item.edit.identifiers.doi.status.UNKNOWN": "Nieznane", - "item.edit.identifiers.doi.status.TO_BE_REGISTERED": "W kolejce do rejestracji", - "item.edit.identifiers.doi.status.TO_BE_RESERVED": "W kolejce do rezerwacji", - "item.edit.identifiers.doi.status.IS_REGISTERED": "Zarejestrowane", - "item.edit.identifiers.doi.status.IS_RESERVED": "Zarezerwowane", - "item.edit.identifiers.doi.status.UPDATE_RESERVED": "Zarezerwowane (aktualizacja w kolejce)", - "item.edit.identifiers.doi.status.UPDATE_REGISTERED": "Zarejestrowane (aktualizacja w kolejce)", - "item.edit.identifiers.doi.status.UPDATE_BEFORE_REGISTRATION": "W kolejce do aktualizacji i rejestracji", - "item.edit.identifiers.doi.status.TO_BE_DELETED": "Zakolejkowane do usunięcia", - "item.edit.identifiers.doi.status.DELETED": "Usunięte", - "item.edit.identifiers.doi.status.PENDING": "Oczekujące (niezarejestrowane)", - "item.edit.identifiers.doi.status.MINTED": "Rezerwowanie nazwy (niezarejestrowane)", - "item.edit.tabs.status.buttons.register-doi.label": "Zarejestruj nowe lub oczekujące DOI", - "item.edit.tabs.status.buttons.register-doi.button": "Rejestruj DOI...", - "item.edit.register-doi.header": "Zarejestruj nowe lub oczekujące DOI", - "item.edit.register-doi.description": "Zweryfikuj poniższe identyfikatory i metadane pozycji i rozpocznij rejestrację DOI lub anuluj", - "item.edit.register-doi.confirm": "Zatwierdź", - "item.edit.register-doi.cancel": "Anuluj", - "item.edit.register-doi.success": "DOI jest w kolejce do rejestracji.", - "item.edit.register-doi.error": "Wystąpił błąd poczas rejestracji DOI", - "item.edit.register-doi.to-update": "To DOI zostało zarezerwowane i będzie znajdować się w kolejce do rejestracji", - "item.edit.metadata.edit.buttons.confirm": "Zatwierdź", - "item.edit.metadata.edit.buttons.drag": "Przeciągnij, aby zmienić kolejność", - "item.edit.metadata.edit.buttons.virtual": "To pole przechowuje wirutalne wartości metadanych, np. wartość pobraną z encji, z którą jest połączona ta pozycja. Dodaj lub usuń relację w zakładce 'Relacje' ", - "item.edit.metadata.metadatafield.error": "Wystąpił błąd podczas walidcji pól metadanych", - "item.edit.metadata.reset-order-button": "Cofnij zamianę kolejności", - "item.edit.curate.title": "Zarządzaj pozycją: {{item}}", - "item.edit.tabs.access-control.head": "Dostęp", - "item.edit.tabs.access-control.title": "Edycja pozycji - dostęp", - "workflow-item.search.result.delete-supervision.modal.header": "Usuń zadanie dla recenzenta", - "workflow-item.search.result.delete-supervision.modal.info": "Czy na pewno usunąć zadanie dla recenzenta", - "workflow-item.search.result.delete-supervision.modal.cancel": "Anuluj", - "workflow-item.search.result.delete-supervision.modal.confirm": "Usuń", - "workflow-item.search.result.notification.deleted.success": "Usunięto zadanie dla recenzenta \"{{name}}\"", - "workflow-item.search.result.notification.deleted.failure": "Nie usunięto zadania dla recenzenta \"{{name}}\"", - "workflow-item.search.result.list.element.supervised-by": "Recenzja:", - "workflow-item.search.result.list.element.supervised.remove-tooltip": "Usuń grupę recenzencką", - "item.preview.dc.subject": "Słowo kluczowe:", - "item.preview.dc.publisher": "Wydawca:", - "itemtemplate.edit.metadata.add-button": "Dodaj", - "itemtemplate.edit.metadata.discard-button": "Cofnij", - "itemtemplate.edit.metadata.edit.buttons.confirm": "Zatwierdź", - "itemtemplate.edit.metadata.edit.buttons.drag": "Przeciągnij, aby zmienić kolejność", - "itemtemplate.edit.metadata.edit.buttons.edit": "Edytuj", - "itemtemplate.edit.metadata.edit.buttons.remove": "Usuń", - "itemtemplate.edit.metadata.edit.buttons.undo": "Cofnij zmiany", - "itemtemplate.edit.metadata.edit.buttons.unedit": "Nie edytuj", - "itemtemplate.edit.metadata.empty": "To pozycja nie zawiera żadnych metadanych. Wybierz Dodaj, aby je wprowadzić.", - "itemtemplate.edit.metadata.headers.edit": "Edytuj", - "itemtemplate.edit.metadata.headers.field": "Pole", - "itemtemplate.edit.metadata.headers.language": "Język", - "itemtemplate.edit.metadata.headers.value": "Wartość", - "itemtemplate.edit.metadata.metadatafield.error": "Wystąpił błąd podczas walidowania pola metadanych", - "itemtemplate.edit.metadata.metadatafield.invalid": "Wybierz odpowiednie pole metadanych", - "itemtemplate.edit.metadata.notifications.discarded.content": "Twoje zmiany nie zostały zachowane. Aby spróbować wprowadzić je ponownie wybierz Cofnij", - "itemtemplate.edit.metadata.notifications.discarded.title": "Zmiany nie zostały zachowane", - "itemtemplate.edit.metadata.notifications.error.title": "Wystąpił błąd", - "itemtemplate.edit.metadata.notifications.invalid.content": "Twoje zmiany nie zostały zapisane. Upewnij się, że wszystkie pola zostały wypełnione prawidłowo.", - "itemtemplate.edit.metadata.notifications.invalid.title": "Nieprawidłowe metadan", - "itemtemplate.edit.metadata.notifications.outdated.content": "Wzór dla pozycji, na którą w tym momencie pracujesz, został zmodyfikowany przez innego użytkownika. Twoje zmiany zostały odrzucone, aby uniknąć konfliktów pomiędzy wersjami.", - "itemtemplate.edit.metadata.notifications.outdated.title": "Zmiany zostały odrzucone", - "itemtemplate.edit.metadata.notifications.saved.content": "Zmiany w metadanych wzoru pozycji zostały zapisane.", - "itemtemplate.edit.metadata.notifications.saved.title": "Metadane zostały zapisane", - "itemtemplate.edit.metadata.reinstate-button": "Cofnij", - "itemtemplate.edit.metadata.reset-order-button": "Cofnij zmianę kolejności", - "itemtemplate.edit.metadata.save-button": "Zapisz", - "menu.section.access_control_bulk": "Zbiorowe zarządzanie dostępem", - "menu.section.browse_global_by_srsc": "Wg słów kluczowych", - "mydspace.show.supervisedWorkspace": "Pozycje recenzowane", - "mydspace.status.mydspaceArchived": "Opublikowano", - "mydspace.status.mydspaceValidation": "Walidacja", - "mydspace.status.mydspaceWaitingController": "Oczekiwanie na redakctora", - "mydspace.status.mydspaceWorkflow": "Redakcja", - "mydspace.status.mydspaceWorkspace": "Przestrzeń robocza", - "nav.context-help-toggle": "Przełącz pomoc kontekstową", - "nav.search.button": "Wpisz wyszukiwaną frazę", - "nav.subscriptions": "Subksrypcje", - "process.new.notification.error.max-upload.content": "Plik jest większy niż maksymalny dozwolony rozmiar pliku", - "register-page.registration.email.error.not-email-form": "Wprowadź poprawny adres e-mail", - "register-page.registration.email.error.not-valid-domain": "Użyj adresu e-mail z domeny: {{ domains }}", - "register-page.registration.error.maildomain": "Tego adresu e-mail nie możesz zarejestrować, ponieważ nie ma go na liście domen. Dozwolone domeny to: {{ domains }}", - "register-page.registration.info.maildomain": "Konta mogą być założone dla adresów e-mail z domeną", - "repository.title": "Repozytorium DSpace", - "search.filters.applied.f.supervisedBy": "Recenzent", - "search.filters.filter.show-tree": "Przeglądaj {{ name }} strukturę recenzentów", - "search.filters.filter.supervisedBy.head": "Recenzent", - "search.filters.filter.supervisedBy.placeholder": "Recenzent", - "search.filters.filter.supervisedBy.label": "Wyszukaj recenzenta", - "statistics.table.no-name": "(nazwa obiektu nie może zostać załadowana)", - "submission.import-external.source.datacite": "DataCite", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor": "Publikacje autora", - "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor": "Publikacje", - "submission.sections.identifiers.info": "Te identyfikatory zostaną utworzone dla pozycji:", - "submission.sections.identifiers.no_handle": "Do tej pozycji nie zostały przypisane żadne Handle", - "submission.sections.identifiers.no_doi": "Do tej pozycji nie zostały przypisane żadne DOI", - "submission.sections.identifiers.handle_label": "Handle: ", - "submission.sections.identifiers.doi_label": "DOI: ", - "submission.sections.identifiers.otherIdentifiers_label": "Inne identyfikatory: ", - "submission.sections.submit.progressbar.identifiers": "Identyfikatory", - "submission.workflow.generic.submit_select_reviewer": "Wybierz recenzenta", - "submission.workflow.generic.submit_select_reviewer-help": "", - "submission.workflow.generic.submit_score": "Wynik", - "submission.workflow.generic.submit_score-help": "", - "submission.workflow.tasks.claimed.decline": "Odrzuć", - "submission.workflow.tasks.claimed.decline_help": "", - "submitter.empty": "n.d.", - "subscriptions.title": "Subskrypcje", - "subscriptions.item": "Subskrypcje pozycji", - "subscriptions.collection": "Subskrypcje kolekcji", - "subscriptions.community": "Subskrypcje zbiorów", - "subscriptions.subscription_type": "Typ subksrypcji", - "subscriptions.frequency": "Częstotliwość subskrypcji", - "subscriptions.frequency.D": "Codziennie", - "subscriptions.frequency.M": "Co miesiąc", - "subscriptions.frequency.W": "Co tydzień", - "subscriptions.tooltip": "Subskrybuj", - "subscriptions.modal.title": "Subksrypcje", - "subscriptions.modal.type-frequency": "Rodzaj i częstotliwość subksrypcji", - "subscriptions.modal.close": "Zamknij", - "subscriptions.modal.delete-info": "Aby usunąć tę subksrypcję przejdź do strony 'Subskrypcje', która znajduje się w profilu użytkownika", - "subscriptions.modal.new-subscription-form.type.content": "Zawartość", - "subscriptions.modal.new-subscription-form.frequency.D": "Codziennie", - "subscriptions.modal.new-subscription-form.frequency.W": "Co tydzień", - "subscriptions.modal.new-subscription-form.frequency.M": "Co miesiąc", - "subscriptions.modal.new-subscription-form.submit": "Zapisz", - "subscriptions.modal.new-subscription-form.processing": "Ładowanie...", - "subscriptions.modal.create.success": "Zasubskrybowano {{ type }}", - "subscriptions.modal.delete.success": "Subskrypcja została anulowana", - "subscriptions.modal.update.success": "Twoja subskrypcja {{ type }} została zaktualizowana", - "subscriptions.modal.create.error": "Wystąpił bład podczas tworzenia subskrypcji", - "subscriptions.modal.delete.error": "Wystąpił bład podczas usuwania subskrypcji", - "subscriptions.modal.update.error": "Wystąpił bład podczas aktualizacji subskrypcji", - "subscriptions.table.dso": "Słowo kluczowe", - "subscriptions.table.subscription_type": "Typ subskrypcji", - "subscriptions.table.subscription_frequency": "Częstotliwość subskrypcji", - "subscriptions.table.action": "Akcja", - "subscriptions.table.edit": "Edytuj", - "subscriptions.table.delete": "Usuń", - "subscriptions.table.not-available": "Niedostępne", - "subscriptions.table.not-available-message": "Ta pozycja została usunięta lun nie masz do niej dostępu, aby ją wyswietlić", - "subscriptions.table.empty.message": "Ta pozycja nie ma w tym momencie żadnych subksrypcji. Aby zasubkrybować i otrzymywać aktualizacje o tym zbiorze lub kolekcji, wybierz przycisk subskrypcji na stronie pozycji.", - "vocabulary-treeview.info": "Wybierz słowo kluczowe, aby dodać je do filtra", - "supervisedWorkspace.search.results.head": "Pozycje recenzowane", - "supervision.search.results.head": "Status zadań: Szkic i redakcja", - "workspace-item.delete.breadcrumbs": "Usunięto wersję roboczą", - "workspace-item.delete.header": "Usuń wersję roboczą", - "workspace-item.delete.button.confirm": "Usuń", - "workspace-item.delete.button.cancel": "Anuluj", - "workspace-item.delete.notification.success.title": "Usunięto", - "workspace-item.delete.title": "Wersja robocza została usunieta", - "workspace-item.delete.notification.error.title": "Coś poszło nie tak", - "workspace-item.delete.notification.error.content": "Wersja robocza nie może zostać usunieta", - "workflow-item.advanced.title": "Zaawansowane workflow", - "workflow-item.selectrevieweraction.notification.success.title": "Wybrany recenzent", - "workflow-item.selectrevieweraction.notification.success.content": "Recenzent został przypisany", - "workflow-item.selectrevieweraction.notification.error.title": "Coś poszło nie tak", - "workflow-item.selectrevieweraction.notification.error.content": "Nie udało się wybrać recenzenta dla pozycji", - "workflow-item.selectrevieweraction.title": "Wybierz recenzenta", - "workflow-item.selectrevieweraction.header": "Wybierz recenzenta", - "workflow-item.selectrevieweraction.button.cancel": "Anuluj", - "workflow-item.selectrevieweraction.button.confirm": "Zatwierdź", - "workflow-item.scorereviewaction.notification.success.title": "Ocena recenzji", - "workflow-item.scorereviewaction.notification.success.content": "Ocena tej pozycji została zapisana", - "workflow-item.scorereviewaction.notification.error.title": "Coś poszło nie tak", - "workflow-item.scorereviewaction.notification.error.content": "Nie można ocenić tej pozycji", - "workflow-item.scorereviewaction.title": "Oceń pozycję", - "workflow-item.scorereviewaction.header": "Oceń pozycję", - "workflow-item.scorereviewaction.button.cancel": "Anuluj", - "workflow-item.scorereviewaction.button.confirm": "Potwierdź", - "listable-notification-object.default-message": "Ta pozycja nie może być odzyskana", - "system-wide-alert-banner.retrieval.error": "Coś poszło nie tak podczas odzyskiwania alertu systemowego", - "system-wide-alert-banner.countdown.prefix": "W", - "system-wide-alert-banner.countdown.days": "{{days}} dni,", - "system-wide-alert-banner.countdown.hours": "{{hours}} godziny", - "system-wide-alert-banner.countdown.minutes": "{{minutes}} minut:", - "menu.section.system-wide-alert": "Alert systemowy", - "system-wide-alert.form.header": "Alert systemowy", - "system-wide-alert-form.retrieval.error": "Coś poszło nie tak podczas odzyskiwania alertu systemowego", - "system-wide-alert.form.cancel": "Anuluj", - "system-wide-alert.form.save": "Zapisz", - "system-wide-alert.form.label.active": "AKTYWNE", - "system-wide-alert.form.label.inactive": "NIEAKTYWNE", - "system-wide-alert.form.error.message": "Alert systemowy musi zawierać wiadomość", - "system-wide-alert.form.label.message": "Alert systemowy", - "system-wide-alert.form.label.countdownTo.enable": "Wprowadź licznik czasowy", - "system-wide-alert.form.label.countdownTo.hint": "Wskazówka: Wpisz wartość licznika czasu. Kiedy licznik jest włączony, alert systemowy zostanie wyświetlony o wybranym czasie. Kiedy odliczanie zostanie zakończone, alert systemowy zostanie wyłączony. Serwer NIE zostanie zatrzymany automatycznie.", - "system-wide-alert.form.label.preview": "Podgląd alertu systemowego", - "system-wide-alert.form.update.success": "Alert systemowy został zaktualizowany", - "system-wide-alert.form.update.error": "Coś poszło nie tak podczas aktualizacji alertu systemowego", - "system-wide-alert.form.create.success": "Alert systemowy został utworzony", - "system-wide-alert.form.create.error": "Coś poszło nie tak podczas tworzenia alertu systemowego", - "admin.system-wide-alert.breadcrumbs": "Alerty systemowe", - "admin.system-wide-alert.title": "Alerty systemowe", - "item-access-control-title": "Ta strona pozwala na zmianę dostępów metadanych pozycji i plików do nich dołączonych.", - "collection-access-control-title": "Ta strona pozwala na zmianę warunków dostępu dla wszystkich pozycji w tej kolekcji. Zmiany mogą być wykonywane zarówno na metadanych pozycji jak i plikach do nich dołączonych.", - "community-access-control-title": "Ta strona pozwala na zmianę warunków dostępu dla wszystkich pozycji w każdej kolekcji w tym zbiorze. Zmiany mogą być wykonywane zarówno na metadanych pozycji jak i plikach do nich dołączonych.", - "access-control-item-header-toggle": "Metadane pozycji", - "access-control-bitstream-header-toggle": "Pliki", - "access-control-mode": "Tryb", - "access-control-access-conditions": "Warunki dostępu", - "access-control-no-access-conditions-warning-message": "W tym momencie żadne warunki dostępu nie zostały określone. Jeśli zadanie zostanie rozpoczęte, obecne warunki dostępu zostaną zastąpione domyślnymi warunkami dostępu z nadrzędnej kolekcji.", - "access-control-replace-all": "Zastąp warunki dostępu", - "access-control-add-to-existing": "Dodaj do już istniejących", - "access-control-limit-to-specific": "Ogranicz zmiany do wybranych plików", - "access-control-process-all-bitstreams": "Zaktualizuj wszystkie pliki dla tej pozycji", - "access-control-bitstreams-selected": "wybrane pliki", - "access-control-cancel": "Anuluj", - "access-control-execute": "Wykonaj", - "access-control-add-more": "Dodaj więcej", - "access-control-select-bitstreams-modal.title": "Wybierz pliki", - "access-control-select-bitstreams-modal.no-items": "Brak pozycji do wyświetlenia.", - "access-control-select-bitstreams-modal.close": "Zamknij", - "access-control-option-label": "Typ warunków dostępu", - "access-control-option-note": "Wybierz warunki dostępu, które chcesz przypisać do zaznaczonych pozycji.", - "access-control-option-start-date": "Dostęp od", - "access-control-option-start-date-note": "Wybierz datę, kiedy wybrane warunki dostępu mają obowiązywać", - "access-control-option-end-date": "Dostęp do", - "access-control-option-end-date-note": "Wybierz datę, kiedy wybrane warunki dostępu mają obowiązywać", + "401.help": "Nie masz uprawnień do dostępu do tej strony. Możesz użyć przycisku poniżej, aby powrócić do strony głównej.", + "401.link.home-page": "Zabierz mnie na stronę główną", + "401.unauthorized": "nieautoryzowany", + "403.help": "Nie masz uprawnień do dostępu do tej strony. Możesz użyć przycisku poniżej, aby wrócić do strony głównej.", + "403.link.home-page": "Zabierz mnie na stronę główną", + "403.forbidden": "zabroniony", + "404.help": "Nie możemy znaleźć strony, której szukasz. Strona mogła zostać przeniesiona lub usunięta. Możesz użyć przycisku poniżej, aby powrócić do strony głównej. ", + "404.link.home-page": "Zabierz mnie na stronę główną", + "404.page-not-found": "strona nie została znaleziona", + "admin.curation-tasks.breadcrumbs": "Systemowe zadania administracyjne", + "admin.curation-tasks.title": "Systemowe zadania administracyjne", + "admin.curation-tasks.header": "Systemowe zadania administracyjne", + "admin.registries.bitstream-formats.breadcrumbs": "Rejestr formatów", + "admin.registries.bitstream-formats.create.breadcrumbs": "Format strumienia bitów", + "admin.registries.bitstream-formats.create.failure.content": "Wystąpił błąd podczas tworzenia nowego formatu strumienia bitów.", + "admin.registries.bitstream-formats.create.failure.head": "Nie udało się", + "admin.registries.bitstream-formats.create.head": "Utwórz nowy format", + "admin.registries.bitstream-formats.create.new": "Dodaj nowy format", + "admin.registries.bitstream-formats.create.success.content": "Nowy format strumienia bitów został pomyślnie utworzony.", + "admin.registries.bitstream-formats.create.success.head": "Udało się", + "admin.registries.bitstream-formats.delete.failure.amount": "Nie udało się usunąć {{ amount }} formatu(ów)", + "admin.registries.bitstream-formats.delete.failure.head": "Nie udało się", + "admin.registries.bitstream-formats.delete.success.amount": "Udało się usunąć {{ amount }} formatu(ów)", + "admin.registries.bitstream-formats.delete.success.head": "Udało się", + "admin.registries.bitstream-formats.description": "Na liście formatów wyświetlono informacje o obsługiwanych formatach i czy są one wspierane przez system.", + "admin.registries.bitstream-formats.edit.breadcrumbs": "Format strumienia bitów", + "admin.registries.bitstream-formats.edit.description.hint": "", + "admin.registries.bitstream-formats.edit.description.label": "Opis", + "admin.registries.bitstream-formats.edit.extensions.hint": "Rozszerzenia to rozszerzenia plików, które są używane do automatycznej identyfikacji formatu przesyłanych plików. Możesz wprowadzić kilka rozszerzeń dla każdego formatu.", + "admin.registries.bitstream-formats.edit.extensions.label": "Rozszerzenia plików", + "admin.registries.bitstream-formats.edit.extensions.placeholder": "Wprowadź rozszerzenie pliku bez kropki", + "admin.registries.bitstream-formats.edit.failure.content": "Wystąpił błąd podczas edycji formatu pliku.", + "admin.registries.bitstream-formats.edit.failure.head": "Nie udało się", + "admin.registries.bitstream-formats.edit.head": "Format plików: {{ format }}", + "admin.registries.bitstream-formats.edit.internal.hint": "Formaty oznaczone jako wewnętrzne są ukryte przed użytkownikiem i wykorzystywane do celów administracyjnych.", + "admin.registries.bitstream-formats.edit.internal.label": "Wewnętrzny", + "admin.registries.bitstream-formats.edit.mimetype.hint": "Typ MIME powiązany z tym formatem, nie musi być unikalny.", + "admin.registries.bitstream-formats.edit.mimetype.label": "Typ MIME", + "admin.registries.bitstream-formats.edit.shortDescription.hint": "Unikalna nazwa dla tego formatu, (np. Microsoft Word XP lub Microsoft Word 2000)", + "admin.registries.bitstream-formats.edit.shortDescription.label": "Nazwa", + "admin.registries.bitstream-formats.edit.success.content": "Format strumienia bitów został pomyślnie edytowany.", + "admin.registries.bitstream-formats.edit.success.head": "Udało się", + "admin.registries.bitstream-formats.edit.supportLevel.hint": "Poziom wsparcia, jaki Twoja instytucja deklaruje dla tego formatu.", + "admin.registries.bitstream-formats.edit.supportLevel.label": "Obsługiwany format", + "admin.registries.bitstream-formats.head": "Rejestr formatów", + "admin.registries.bitstream-formats.no-items": "Brak formatów plików do wyświetlenia.", + "admin.registries.bitstream-formats.table.delete": "Usuń zaznaczone", + "admin.registries.bitstream-formats.table.deselect-all": "Odznacz wszystkie", + "admin.registries.bitstream-formats.table.internal": "wewnętrzne", + "admin.registries.bitstream-formats.table.mimetype": "Typ MIME", + "admin.registries.bitstream-formats.table.name": "Nazwa", + "admin.registries.bitstream-formats.table.return": "Powrót", + "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Znane", + "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Wspierane", + "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Nieznane", + "admin.registries.bitstream-formats.table.supportLevel.head": "Obsługiwany format", + "admin.registries.bitstream-formats.title": "Rejestr formatów plików", + "admin.registries.metadata.breadcrumbs": "Rejestr metadanych", + "admin.registries.metadata.description": "W rejestrze metadanych przechowywana jest lista wszystkich pól metadanych dostępnych w repozytorium. Przechowywane pola są przechowywane w kilku rejestrach. DSpace wymaga kwalifikowanego rejestru metadanych Dublin Core.", + "admin.registries.metadata.form.create": "Utwórz schemat metadanych", + "admin.registries.metadata.form.edit": "Edytuj schemat metadanych", + "admin.registries.metadata.form.name": "Nazwa", + "admin.registries.metadata.form.namespace": "Nazwa schematu", + "admin.registries.metadata.head": "Rejestr metadanych", + "admin.registries.metadata.schemas.no-items": "Brak rejestrów metadanych do pokazania.", + "admin.registries.metadata.schemas.table.delete": "Usuń zaznaczone", + "admin.registries.metadata.schemas.table.id": "ID", + "admin.registries.metadata.schemas.table.name": "Nazwa", + "admin.registries.metadata.schemas.table.namespace": "Nazwa schematu", + "admin.registries.metadata.title": "Rejestr metadanych", + "admin.registries.schema.breadcrumbs": "Schemat metadanych", + "admin.registries.schema.description": "Ten schemat metadanych jest stworzony na podstawie \"{{namespace}}\".", + "admin.registries.schema.fields.head": "Pola schematu metadanych", + "admin.registries.schema.fields.no-items": "Brak pól metadanych do pokazania.", + "admin.registries.schema.fields.table.delete": "Usuń zaznaczone", + "admin.registries.schema.fields.table.field": "Pole", + "admin.registries.schema.fields.table.scopenote": "Uwagi", + "admin.registries.schema.form.create": "Stwórz pole metadanych", + "admin.registries.schema.form.edit": "Edytuj pole metadanych", + "admin.registries.schema.form.element": "Element", + "admin.registries.schema.form.qualifier": "Kwalifikator", + "admin.registries.schema.form.scopenote": "Uwagi", + "admin.registries.schema.head": "Schemat metadanych", + "admin.registries.schema.notification.created": "Udało się utworzyć schemat metdanych \"{{prefix}}\"", + "admin.registries.schema.notification.deleted.failure": "Nie udało się usunąć {{amount}} schematów metadanych", + "admin.registries.schema.notification.deleted.success": "Udało się usunąć {{amount}} schematów metadanych", + "admin.registries.schema.notification.edited": "Udało się edytować schemat metadanych \"{{prefix}}\"", + "admin.registries.schema.notification.failure": "Błąd", + "admin.registries.schema.notification.field.created": "Udało się utworzyć pole metadanych \"{{field}}\"", + "admin.registries.schema.notification.field.deleted.failure": "Nie udało się usunąć {{amount}} pól metadanych", + "admin.registries.schema.notification.field.deleted.success": "Udało się usunąć {{amount}} pól metadanych", + "admin.registries.schema.notification.field.edited": "SUdało się edytować pole metadanych \"{{field}}\"", + "admin.registries.schema.notification.success": "Udało się", + "admin.registries.schema.return": "Powrót", + "admin.registries.schema.title": "Rejestr schematów metadanych", + "admin.access-control.epeople.actions.delete": "Usuń użytkownika", + "admin.access-control.epeople.actions.impersonate": "Personifikuj użytkownika", + "admin.access-control.epeople.actions.reset": "Zresetuj hasło", + "admin.access-control.epeople.actions.stop-impersonating": "Przestań personifikować użytkownika", + "admin.access-control.epeople.breadcrumbs": "Użytkownicy", + "admin.access-control.epeople.title": "Użytkownicy", + "admin.access-control.epeople.head": "Użytkownicy", + "admin.access-control.epeople.search.head": "Wyszukaj", + "admin.access-control.epeople.button.see-all": "Przeglądaj wszystko", + "admin.access-control.epeople.search.scope.metadata": "Metadane", + "admin.access-control.epeople.search.scope.email": "E-mail", + "admin.access-control.epeople.search.button": "Wyszukaj", + "admin.access-control.epeople.search.placeholder": "Wyszukaj użytkownika...", + "admin.access-control.epeople.button.add": "Dodaj użytkownika", + "admin.access-control.epeople.table.id": "ID", + "admin.access-control.epeople.table.name": "Nazwa", + "admin.access-control.epeople.table.email": "E-mail", + "admin.access-control.epeople.table.edit": "Edytuj", + "admin.access-control.epeople.table.edit.buttons.edit": "Edytuj \"{{name}}\"", + "admin.access-control.epeople.table.edit.buttons.edit-disabled": "Brak uprawnień do edycji wybranej grupy", + "admin.access-control.epeople.table.edit.buttons.remove": "Usuń \"{{name}}\"", + "admin.access-control.epeople.no-items": "Brak użytkowników do wyświetlenia.", + "admin.access-control.epeople.form.create": "Utwórz użytkownika", + "admin.access-control.epeople.form.edit": "Edytuj użytkownika", + "admin.access-control.epeople.form.firstName": "Imię", + "admin.access-control.epeople.form.lastName": "Nazwisko", + "admin.access-control.epeople.form.email": "E-mail", + "admin.access-control.epeople.form.emailHint": "Adres e-mail musi być poprawny", + "admin.access-control.epeople.form.canLogIn": "Możliwość zalogowania", + "admin.access-control.epeople.form.requireCertificate": "Wymagany certyfikat", + "admin.access-control.epeople.form.return": "Powrót", + "admin.access-control.epeople.form.notification.created.success": "Udało się utworzyć użytkownika \"{{name}}\"", + "admin.access-control.epeople.form.notification.created.failure": "Nie udało się utworzyć użytkownika \"{{name}}\"", + "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Nie udało się utworzyć użytkownika \"{{name}}\", email \"{{email}}\" już w użyciu.", + "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Nie udało się utworzyć użytkownika \"{{name}}\", email \"{{email}}\" już w użyciu.", + "admin.access-control.epeople.form.notification.edited.success": "Udało się edytować użytkownika \"{{name}}\"", + "admin.access-control.epeople.form.notification.edited.failure": "Nie udało się edytować użytkownika \"{{name}}\"", + "admin.access-control.epeople.form.notification.deleted.success": "Udało się usunąć użytkownika \"{{name}}\"", + "admin.access-control.epeople.form.notification.deleted.failure": "Nie udało się usunąć użytkownika \"{{name}}\"", + "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Członek grup:", + "admin.access-control.epeople.form.table.id": "ID", + "admin.access-control.epeople.form.table.name": "Nazwa", + "admin.access-control.epeople.form.table.collectionOrCommunity": "Zbiór/kolekcja", + "admin.access-control.epeople.form.memberOfNoGroups": "Ten użytkownik nie jest członkiem żadnej grupy", + "admin.access-control.epeople.form.goToGroups": "Dodaj do grup", + "admin.access-control.epeople.notification.deleted.failure": "Nie udało się usunąć użytkownika: \"{{name}}\"", + "admin.access-control.epeople.notification.deleted.success": "Udało się usunąć użytkownika: \"{{name}}\"", + "admin.access-control.groups.title": "Grupy", + "admin.access-control.groups.breadcrumbs": "Grupy", + "admin.access-control.groups.singleGroup.breadcrumbs": "Edytuj grupę", + "admin.access-control.groups.title.singleGroup": "Edytuj grupę", + "admin.access-control.groups.title.addGroup": "Nowa grupa", + "admin.access-control.groups.addGroup.breadcrumbs": "Nowa grupa", + "admin.access-control.groups.head": "Grupy/role", + "admin.access-control.groups.button.add": "Dodaj grupę", + "admin.access-control.groups.search.head": "Szukaj grup", + "admin.access-control.groups.button.see-all": "Przeszukaj wszystko", + "admin.access-control.groups.search.button": "Wyszukaj", + "admin.access-control.groups.search.placeholder": "Wyszukaj grupy...", + "admin.access-control.groups.table.id": "ID", + "admin.access-control.groups.table.name": "Nazwa", + "admin.access-control.groups.table.collectionOrCommunity": "Zbiór/kolekcja", + "admin.access-control.groups.table.members": "Członkowie", + "admin.access-control.groups.table.edit": "Edytuj", + "admin.access-control.groups.table.edit.buttons.edit": "Edytuj \"{{name}}\"", + "admin.access-control.groups.no-items": "Nie znaleziono grup z podaną frazą lub podanym UUID", + "admin.access-control.groups.notification.deleted.success": "Udało się usunąć grupę \"{{name}}\"", + "admin.access-control.groups.notification.deleted.failure.title": "Nie udało się usunąć grupy \"{{name}}\"", + "admin.access-control.groups.notification.deleted.failure.content": "Powód: \"{{cause}}\"", + "admin.access-control.groups.form.alert.permanent": "Ta grupa jest stała, więc nie może być edytowana ani usunięta. Nadal możesz dodawać i usuwać członków grupy za pomocą tej strony.", + "admin.access-control.groups.form.alert.workflowGroup": "Ta grupa nie może być edytowana lub usunięta, ponieważ odnosi się do roli lub bierze udział w procesie \"{{name}}\" {{comcol}}. Możesz ją usunąć ze strony \"assign roles\" edycji {{comcol}}. Wciąż może dodawać i usuwać członków tej grupy, korzystając z tej strony.", + "admin.access-control.groups.form.head.create": "Utwórz grupę", + "admin.access-control.groups.form.head.edit": "Edytuj grupę", + "admin.access-control.groups.form.groupName": "Nazwa grupy", + "admin.access-control.groups.form.groupCommunity": "Zbiór lub kolekcja", + "admin.access-control.groups.form.groupDescription": "Opis", + "admin.access-control.groups.form.notification.created.success": "Udało się utworzyć grupę \"{{name}}\"", + "admin.access-control.groups.form.notification.created.failure": "Nie udało się utworzyć grupy \"{{name}}\"", + "admin.access-control.groups.form.notification.created.failure.groupNameInUse": "Nie udało się utworzyć grupy o nazwie: \"{{name}}\", upewnij się, że nazwa nie jest już używana.", + "admin.access-control.groups.form.notification.edited.failure": "Nie udało się edytować grupy \"{{name}}\"", + "admin.access-control.groups.form.notification.edited.failure.groupNameInUse": "Nazwa \"{{name}}\" już w użyciu!", + "admin.access-control.groups.form.notification.edited.success": "Udało się edytować grupę \"{{name}}\"", + "admin.access-control.groups.form.actions.delete": "Usuń grupę", + "admin.access-control.groups.form.delete-group.modal.header": "Usuń grupę \"{{ dsoName }}\"", + "admin.access-control.groups.form.delete-group.modal.info": "Czy na pewno chcesz usunąć grupę \"{{ dsoName }}\"", + "admin.access-control.groups.form.delete-group.modal.cancel": "Anuluj", + "admin.access-control.groups.form.delete-group.modal.confirm": "Usuń", + "admin.access-control.groups.form.notification.deleted.success": "Udało się usunąć grupę \"{{ name }}\"", + "admin.access-control.groups.form.notification.deleted.failure.title": "Nie udało się usunąć grupy \"{{ name }}\"", + "admin.access-control.groups.form.notification.deleted.failure.content": "Powód: \"{{ cause }}\"", + "admin.access-control.groups.form.members-list.head": "Użytkownik", + "admin.access-control.groups.form.members-list.search.head": "Dodaj użytkownika", + "admin.access-control.groups.form.members-list.button.see-all": "Pokaż wszystkich", + "admin.access-control.groups.form.members-list.headMembers": "Aktualni członkowie", + "admin.access-control.groups.form.members-list.search.scope.metadata": "Metadane", + "admin.access-control.groups.form.members-list.search.scope.email": "E-mail", + "admin.access-control.groups.form.members-list.search.button": "Wyszukaj", + "admin.access-control.groups.form.members-list.table.id": "ID", + "admin.access-control.groups.form.members-list.table.name": "Nazwa", + "admin.access-control.groups.form.members-list.table.identity": "Tożsamość", + "admin.access-control.groups.form.members-list.table.email": "E-mail", + "admin.access-control.groups.form.members-list.table.netid": "NetID", + "admin.access-control.groups.form.members-list.table.edit": "Usuń / Dodaj", + "admin.access-control.groups.form.members-list.table.edit.buttons.remove": "Usuń użytkownika o nazwie \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.success.addMember": "Udało się dodać użytkownika o nazwie: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.failure.addMember": "Nie udało się dodać użytkownika o nazwie: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Udało się usunąć użytkownika o nazwie: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Nie udało się usunąć użytkownika o nazwie: \"{{name}}\"", + "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Dodaj użytkownika o nazwie \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup": "Brak aktywnej grupy, najpierw wpisz nazwę grupy.", + "admin.access-control.groups.form.members-list.no-members-yet": "Brak użytkowników w grupie, wyszukaj ich i dodaj.", + "admin.access-control.groups.form.members-list.no-items": "Nie znaleziono użytkowników podczas wyszukiwania", + "admin.access-control.groups.form.subgroups-list.notification.failure": "Coś poszło nie tak: \"{{cause}}\"", + "admin.access-control.groups.form.subgroups-list.head": "Grupy", + "admin.access-control.groups.form.subgroups-list.search.head": "Dodaj podgrupę", + "admin.access-control.groups.form.subgroups-list.button.see-all": "Przeglądaj wszystkie", + "admin.access-control.groups.form.subgroups-list.headSubgroups": "Aktualne podgrupy", + "admin.access-control.groups.form.subgroups-list.search.button": "Wyszukaj", + "admin.access-control.groups.form.subgroups-list.table.id": "ID", + "admin.access-control.groups.form.subgroups-list.table.name": "Nazwa", + "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Zbiór/kolekcja", + "admin.access-control.groups.form.subgroups-list.table.edit": "Usuń / Dodaj", + "admin.access-control.groups.form.subgroups-list.table.edit.buttons.remove": "Usuń podgrupę o nazwie \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.table.edit.buttons.add": "Dodaj podgrupę o nazwie \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Aktualna grupa", + "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup": "Udało się dodać podgrupę: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure.addSubgroup": "Nie udało się dodać podgrupy: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Udało się usunąć podgrupę: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Nie udało się usunąć podgrupy: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "Brak aktywnej grupy, najpierw wpisz nazwę grupy.", + "admin.access-control.groups.form.subgroups-list.notification.failure.subgroupToAddIsActiveGroup": "Ta grupa jest już stworzona i nie może zostać dodana pononwie.", + "admin.access-control.groups.form.subgroups-list.no-items": "Nie znaleziono grup z tą nazwą lub UUID", + "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "Brak podgrup w grupie.", + "admin.access-control.groups.form.return": "Powrót", + "admin.search.breadcrumbs": "Wyszukiwanie administracyjne", + "admin.search.collection.edit": "Edytuj", + "admin.search.community.edit": "Edytuj", + "admin.search.item.delete": "Usuń", + "admin.search.item.edit": "Edytuj", + "admin.search.item.make-private": "Ukryj", + "admin.search.item.make-public": "Upublicznij", + "admin.search.item.move": "Przenieś", + "admin.search.item.reinstate": "Zmień instancję", + "admin.search.item.withdraw": "Wycofane", + "admin.search.title": "Wyszukiwanie administracyjne", + "administrativeView.search.results.head": "Wyszukiwanie administracyjne", + "admin.workflow.breadcrumbs": "Zarządzaj procesem", + "admin.workflow.title": "Zarządzaj procesem", + "admin.workflow.item.workflow": "Proces", + "admin.workflow.item.delete": "Usuń", + "admin.workflow.item.send-back": "Odeślij z powrotem", + "admin.metadata-import.breadcrumbs": "Importuj metadane", + "admin.metadata-import.title": "Importuj metadane", + "admin.metadata-import.page.header": "Importuj metadane", + "admin.metadata-import.page.help": "Tutaj możesz zaimportować pliki CSV, w których znajdują się metadane do operacji wsadowej. Zaimportuj je poprzez upuszczenie ich lub znajdź je na swoim komputerze", + "admin.metadata-import.page.dropMsg": "Upuść plik w formacie CSV", + "admin.metadata-import.page.dropMsgReplace": "Upuść, aby zastąpić metadane w formacie CSV do importu", + "admin.metadata-import.page.button.return": "Powrót", + "admin.metadata-import.page.button.proceed": "Zastosuj", + "admin.metadata-import.page.error.addFile": "Najpierw wybierz plik!", + "auth.errors.invalid-user": "Niewłaściwy adres e-mail lub hasło.", + "auth.messages.expired": "Twoja sesja wygasła. Zaloguj się ponownie.", + "auth.messages.token-refresh-failed": "Odświeżenie sesji nie powiodło się. Zaloguj się ponownie.", + "bitstream.download.page": "Pobieranie {{bitstream}}...", + "bitstream.download.page.back": "Powrót", + "bitstream.edit.authorizations.link": "Edytuj polityki plików", + "bitstream.edit.authorizations.title": "Edytuj polityki plików", + "bitstream.edit.return": "Powrót", + "bitstream.edit.bitstream": "Pliki: ", + "bitstream.edit.form.description.hint": "Opcjonalnie wprowadź krótki opis pliku, np.: \"Główna część artykułu\" lub \"Dane z eksperymentu\".", + "bitstream.edit.form.description.label": "Opis", + "bitstream.edit.form.embargo.hint": "Pierwszy dzień, od kiedy dostęp zostanie udzielony. Tej daty nie może być edytować w tym formularzu. Aby wybrać okres embarga czasowego, wybierz Status pozycji tab, kliknij Autoryzacje..., stwórz lub edytuj plik PRZEYCZTAJ zasady i wybierz określoną Datę początkową.", + "bitstream.edit.form.embargo.label": "Embargo do wybranej daty", + "bitstream.edit.form.fileName.hint": "Zmiana nazwy pliku dla strumienia bitów. Zauważ, że zmieni to wyświetlany adres URL strumienia bitów, ale stare linki nadal będą działać, o ile nie zmieni się identyfikator sekwencji.", + "bitstream.edit.form.fileName.label": "Nazwa pliku", + "bitstream.edit.form.newFormat.label": "Opisz nowy format", + "bitstream.edit.form.newFormat.hint": "Program, którego użyto do stworzenia pliku i numer wersji (np.: \"ACMESoft SuperApp version 1.5\").", + "bitstream.edit.form.primaryBitstream.label": "Pierwotny plik", + "bitstream.edit.form.selectedFormat.hint": "Jeśli formatu nie ma na powyższej liście, wybierz \"format not in list\" above i opisz jako \"Describe new format\".", + "bitstream.edit.form.selectedFormat.label": "Wybrany format", + "bitstream.edit.form.selectedFormat.unknown": "Tego formatu nie ma na liście", + "bitstream.edit.notifications.error.format.title": "Wystąpił błąd podczas zapisu formatu pliku", + "bitstream.edit.notifications.saved.content": "Zmiany w pliku zostały zapisane.", + "bitstream.edit.notifications.saved.title": "Plik został zapisany", + "bitstream.edit.title": "Edytuj plik", + "bitstream-request-a-copy.alert.canDownload1": "Masz już dostęp do tego pliki. Jeśli chcesz go pobrać, kliknij ", + "bitstream-request-a-copy.alert.canDownload2": "tutaj", + "bitstream-request-a-copy.header": "Wystąp o kopię wybranego pliku", + "bitstream-request-a-copy.intro": "Wpisz następujące informacje, aby wystąpić o kopię tej pozycji: ", + "bitstream-request-a-copy.intro.bitstream.one": "Wystąpienie o dostęp do następujących plików: ", + "bitstream-request-a-copy.intro.bitstream.all": "Wystąpienie o dostęp do wszystkich plików. ", + "bitstream-request-a-copy.name.label": "Imię *", + "bitstream-request-a-copy.name.error": "Imię jest wymagane", + "bitstream-request-a-copy.email.label": "Adres e-mail *", + "bitstream-request-a-copy.email.hint": "Plik zostanie przesłany na podany adres e-mail", + "bitstream-request-a-copy.email.error": "Proszę wprowadzić prawidłowy adres e-mail", + "bitstream-request-a-copy.allfiles.label": "Pliki", + "bitstream-request-a-copy.files-all-false.label": "Tylko plik, dla którego wystąpiono o dostęp", + "bitstream-request-a-copy.files-all-true.label": "Wszystkie pliki (w tej pozycji) z ograniczonym dostępem", + "bitstream-request-a-copy.message.label": "Wiadomość", + "bitstream-request-a-copy.return": "Powrót", + "bitstream-request-a-copy.submit": "Wystąp o kopię", + "bitstream-request-a-copy.submit.success": "Wystąpienie o dostęp do pliku zostało przesłane.", + "bitstream-request-a-copy.submit.error": "Coś poszło nie tak podczas wysyłania wystąpienia o dostęp do pliku", + "browse.comcol.by.author": "wg autorów", + "browse.comcol.by.dateissued": "wg daty wydania", + "browse.comcol.by.subject": "wg tematu", + "browse.comcol.by.title": "wg tytułu", + "browse.comcol.head": "Przeglądaj", + "browse.empty": "Brak rekordów do wyświetlenia.", + "browse.metadata.author": "Autor", + "browse.metadata.dateissued": "Data wydania", + "browse.metadata.subject": "Temat", + "browse.metadata.title": "Tytuł", + "browse.metadata.author.breadcrumbs": "Przeglądaj wg autorów", + "browse.metadata.dateissued.breadcrumbs": "Przeglądaj wg daty wydania", + "browse.metadata.subject.breadcrumbs": "Przeglądaj wg tematów", + "browse.metadata.title.breadcrumbs": "Przeglądaj wg tytułów", + "browse.startsWith.choose_start": "(Wybierz start)", + "browse.startsWith.choose_year": "(Wybierz rok)", + "browse.startsWith.choose_year.label": "Wybierz rok wydania", + "browse.startsWith.jump": "Przejdź do miejsca w indeksie:", + "browse.startsWith.months.april": "kwiecień", + "browse.startsWith.months.august": "sierpień", + "browse.startsWith.months.december": "grudzień", + "browse.startsWith.months.february": "luty", + "browse.startsWith.months.january": "styczeń", + "browse.startsWith.months.july": "lipiec", + "browse.startsWith.months.june": "czerwiec", + "browse.startsWith.months.march": "marzec", + "browse.startsWith.months.may": "maj", + "browse.startsWith.months.none": "(wybierz miesiąc)", + "browse.startsWith.months.none.label": "Wybierz miesiąc wydania", + "browse.startsWith.months.november": "listopad", + "browse.startsWith.months.october": "październik", + "browse.startsWith.months.september": "wrzesień", + "browse.startsWith.submit": "Zastosuj", + "browse.startsWith.type_date": "Lub wybierz datę (rok-miesiąc) i kliknij 'Przeglądaj'", + "browse.startsWith.type_date.label": "Lub wybierz datę (rok-miesiąc) i kliknij przycisk przeglądania", + "browse.startsWith.type_text": "Wpisz kilka pierwszych liter i kliknij przycisk przeglądania", + "browse.title": "Przeglądaj {{ collection }} wg {{ field }} {{ value }}", + "chips.remove": "Usuń chip", + "collection.create.head": "Utwórz kolekcję", + "collection.create.notifications.success": "Udało się utworzyć kolekcję", + "collection.create.sub-head": "Udało się utworzyć kolekcję dla zbioru {{ parent }}", + "collection.curate.header": "Administrator kolekcji: {{collection}}", + "collection.delete.cancel": "Anuluj", + "collection.delete.confirm": "Zatwierdź", + "collection.delete.processing": "Usuwanie", + "collection.delete.head": "Usuń kolekcję", + "collection.delete.notification.fail": "Kolekcja nie może być usunięt", + "collection.delete.notification.success": "Udało się usunąć kolekcję", + "collection.delete.text": "Czy na pewno chcesz usunąć kolekcję \"{{ dso }}\"", + "collection.edit.delete": "Usuń kolekcję", + "collection.edit.head": "Edytuj kolekcję", + "collection.edit.breadcrumbs": "Edytuj kolekcję", + "collection.edit.tabs.mapper.head": "Item Mapper", + "collection.edit.tabs.item-mapper.title": "Edytuj kolekcję - Item Mapper", + "collection.edit.item-mapper.cancel": "Anuluj", + "collection.edit.item-mapper.collection": "Kolekcja: \"{{name}}\"", + "collection.edit.item-mapper.confirm": "Mapuj wybrane elementy", + "collection.edit.item-mapper.description": "To jest narzędzie mapowania elementów, które pozwala administratorom kolekcji mapować elementy z innych kolekcji do tej kolekcji. Możesz wyszukiwać elementy z innych kolekcji i mapować je lub przeglądać listę aktualnie zmapowanych elementów.", + "collection.edit.item-mapper.head": "Item Mapper - Mapuj pozycje z innych kolekcji", + "collection.edit.item-mapper.no-search": "Wpisz co chcesz wyszukać", + "collection.edit.item-mapper.notifications.map.error.content": "Wystąpiły błędy podczas mapowania {{amount}} pozycji.", + "collection.edit.item-mapper.notifications.map.error.head": "Mapowanie błędów", + "collection.edit.item-mapper.notifications.map.success.content": "Udało się zmapować {{amount}} pozycji.", + "collection.edit.item-mapper.notifications.map.success.head": "Mapowanie zakończone", + "collection.edit.item-mapper.notifications.unmap.error.content": "Błędy wystąpiły podczas usuwania mapowania z {{amount}} elementów.", + "collection.edit.item-mapper.notifications.unmap.error.head": "Usuń błędy mapowania", + "collection.edit.item-mapper.notifications.unmap.success.content": "Udało się usunąć błędy mapowania z {{amount}} elementów.", + "collection.edit.item-mapper.notifications.unmap.success.head": "Usuwanie mapowania zakończone", + "collection.edit.item-mapper.remove": "Usuń wybrane mapowanie elementów", + "collection.edit.item-mapper.search-form.placeholder": "Wyszukaj pozycje...", + "collection.edit.item-mapper.tabs.browse": "Wyszukaj mapowane elementy", + "collection.edit.item-mapper.tabs.map": "Mapuj nowe elementy", + "collection.edit.logo.delete.title": "Usuń", + "collection.edit.logo.delete-undo.title": "Cofnij usunięcie", + "collection.edit.logo.label": "Logo kolekcji", + "collection.edit.logo.notifications.add.error": "Przesyłanie logo kolekcji nie powiodło się. Proszę zweryfikować zawartość przed ponowną ", + "collection.edit.logo.notifications.add.success": "Udało się przesłać logo kolekcji.", + "collection.edit.logo.notifications.delete.success.title": "Logo usunięte", + "collection.edit.logo.notifications.delete.success.content": "Udało się usunąć logo kolekcji", + "collection.edit.logo.notifications.delete.error.title": "Błąd podczas usuwania loga", + "collection.edit.logo.upload": "Upuść logo kolekcji, aby je wgrać", + "collection.edit.notifications.success": "Udało się edytować kolekcję", + "collection.edit.return": "Powrót", + "collection.edit.tabs.curate.head": "Kurator", + "collection.edit.tabs.curate.title": "Edytowanie kolekcji - kurator", + "collection.edit.tabs.authorizations.head": "Autoryzacje", + "collection.edit.tabs.authorizations.title": "Edytowanie kolekcji - autoryzacje", + "collection.edit.tabs.metadata.head": "Edytuj metadane", + "collection.edit.tabs.metadata.title": "Edytowanie kolekcji - metadane", + "collection.edit.tabs.roles.head": "Przypisz role", + "collection.edit.tabs.roles.title": "Edytowanie kolekcji - role", + "collection.edit.tabs.source.external": "Ta kolekcja pobiera swoją zawartość z zewnętrznego źródła", + "collection.edit.tabs.source.form.errors.oaiSource.required": "Musisz wskazać id docelowej kolekcji.", + "collection.edit.tabs.source.form.harvestType": "Odczytywanie zawartości", + "collection.edit.tabs.source.form.head": "Skonfiguruj zewnętrzne źródło", + "collection.edit.tabs.source.form.metadataConfigId": "Format metadanych", + "collection.edit.tabs.source.form.oaiSetId": "Określony zestaw ID OAI", + "collection.edit.tabs.source.form.oaiSource": "Dostawca OAI", + "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_BITSTREAMS": "Odczytaj metadane i pliki (wymaga wsparcia ORE)", + "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_REF": "Odczytaj metadane i bibliografię (wymaga wsparcia ORE)", + "collection.edit.tabs.source.form.options.harvestType.METADATA_ONLY": "Odczytaj tylko metadane", + "collection.edit.tabs.source.head": "Źródło treści", + "collection.edit.tabs.source.notifications.discarded.content": "Twoje zmiany zostały odrzucone. Aby odzyskać swoje zmiany wybierz 'Powrót'", + "collection.edit.tabs.source.notifications.discarded.title": "Zmiany odrzucone", + "collection.edit.tabs.source.notifications.invalid.content": "Zmiany nie zostały zapisane. Sprawdź czy wszystkie pola są wypełnione poprawne przed zapisem.", + "collection.edit.tabs.source.notifications.invalid.title": "Nieprawidłowe metadane", + "collection.edit.tabs.source.notifications.saved.content": "Zmiany wprowadzone w kolekcji zostały zapisane.", + "collection.edit.tabs.source.notifications.saved.title": "Źródło treści zapisane", + "collection.edit.tabs.source.title": "Collection Edit - Źródło treści", + "collection.edit.template.add-button": "Dodaj", + "collection.edit.template.breadcrumbs": "Szablon pozycji", + "collection.edit.template.cancel": "Anuluj", + "collection.edit.template.delete-button": "Usuń", + "collection.edit.template.edit-button": "Edytuj", + "collection.edit.template.error": "Wystąpił błąd podczas odzyskiwania szablonu pozycji", + "collection.edit.template.head": "Edytuj szablon dla kolekcji \"{{ collection }}\"", + "collection.edit.template.label": "Szablon pozycji", + "collection.edit.template.loading": "ładowanie szablonu pozycji...", + "collection.edit.template.notifications.delete.error": "Nie udało się usunąć szablonu pozycji", + "collection.edit.template.notifications.delete.success": "Udało się usunąć szablon pozycji", + "collection.edit.template.title": "Edytuj szablon pozycji", + "collection.form.abstract": "Opis skrócony", + "collection.form.description": "Tekst powitalny (HTML)", + "collection.form.errors.title.required": "Wpisz nazwę kolekcji", + "collection.form.license": "Licencja", + "collection.form.provenance": "Pochodzenie", + "collection.form.rights": "Tekst praw autorskich (HTML)", + "collection.form.tableofcontents": "Wiadomości (HTML)", + "collection.form.title": "Nazwa", + "collection.form.entityType": "Typ danych", + "collection.page.browse.recent.head": "Ostatnie zgłoszenia", + "collection.page.browse.recent.empty": "Brak pozycji do wyświetlenia", + "collection.page.edit": "Edytuj kolekcję", + "collection.page.handle": "Stały URI dla kolekcji", + "collection.page.license": "Licencja", + "collection.page.news": "Wiadomości", + "collection.select.confirm": "Zaakceptuj zaznaczone", + "collection.select.empty": "Brak kolekcji do wyświetlenia", + "collection.select.table.title": "Tytuł", + "collection.source.controls.head": "Kontrolki odczytywania", + "collection.source.controls.test.submit.error": "Coś poszło nie tak podczas rozpoczynania testów ustawień", + "collection.source.controls.test.failed": "Scenariusz testowy ustawień nie zadziałał", + "collection.source.controls.test.completed": "Scenariusz testowy ustawień został zakończony", + "collection.source.controls.test.submit": "Konfiguracja testowa", + "collection.source.controls.test.running": "Testowanie konfiguracji...", + "collection.source.controls.import.submit.success": "Import został rozpoczęty", + "collection.source.controls.import.submit.error": "Coś poszło nie tak podczas rozpoczynania importu", + "collection.source.controls.import.submit": "Importuj teraz", + "collection.source.controls.import.running": "Importowanie...", + "collection.source.controls.import.failed": "Wystąpił błąd podczas importu", + "collection.source.controls.import.completed": "Import zakończony", + "collection.source.controls.reset.submit.success": "Reset ustawień i powtórny import zostały rozpoczęte poprawnie", + "collection.source.controls.reset.submit.error": "Coś poszło nie tak podczas rozpoczynania zresetowanego, powtórnego importu", + "collection.source.controls.reset.failed": "Wystąpił błąd podczas resetowania ustawień i ponownego importu", + "collection.source.controls.reset.completed": "Reset ustawień i powtórny import zostały zakończone", + "collection.source.controls.reset.submit": "Resetowanie i powtórny import", + "collection.source.controls.reset.running": "Resetowanie i powtórny import...", + "collection.source.controls.harvest.status": "Status odczytywania:", + "collection.source.controls.harvest.start": "Czas rozpoczęcia odczytywania:", + "collection.source.controls.harvest.last": "Czas ostatniego odczytywania:", + "collection.source.controls.harvest.message": "Informacje nt. odczytywania:", + "collection.source.controls.harvest.no-information": "bd.", + "collection.source.update.notifications.error.content": "Te ustawienia zostały przetestowane i nie działają.", + "collection.source.update.notifications.error.title": "Błąd serwera", + "communityList.breadcrumbs": "Lista zbiorów", + "communityList.tabTitle": "Lista zbiorów", + "communityList.title": "Lista zbiorów", + "communityList.showMore": "Pokaż więcej", + "community.create.head": "Utwórz zbiór", + "community.create.notifications.success": "Udało się utworzyć zbiór", + "community.create.sub-head": "Utwórz podzbiór dla zbioru {{ parent }}", + "community.curate.header": "Zarządzaj zbiorem: {{community}}", + "community.delete.cancel": "Anuluj", + "community.delete.confirm": "Potwierdź", + "community.delete.processing": "Usuwanie...", + "community.delete.head": "Usuń zbiór", + "community.delete.notification.fail": "Zbiór nie może być usunięty", + "community.delete.notification.success": "Udało się usunąć zbiór", + "community.delete.text": "Czy na pewno chcesz usunąć zbiór \"{{ dso }}\"", + "community.edit.delete": "Usuń ten zbiór", + "community.edit.head": "Edytuj zbiór", + "community.edit.breadcrumbs": "Edytuj zbiór", + "community.edit.logo.delete.title": "Usuń logo", + "community.edit.logo.delete-undo.title": "Cofnij usunięcie", + "community.edit.logo.label": "Logo zbioru", + "community.edit.logo.notifications.add.error": "Przesłanie loga zbioru nie powiodło się. Sprawdź czy wszystkie parametry są odpowiednie przed próbą ponownego przesłania.", + "community.edit.logo.notifications.add.success": "Przesłanie loga powiodło się.", + "community.edit.logo.notifications.delete.success.title": "Logo usunięte", + "community.edit.logo.notifications.delete.success.content": "Usunięcie loga zbioru powiodło się", + "community.edit.logo.notifications.delete.error.title": "Błąd podczas usuwania loga", + "community.edit.logo.upload": "Upuść logo zbioru, aby je przesłać", + "community.edit.notifications.success": "Udało się edytować zbiór", + "community.edit.notifications.unauthorized": "Nie masz uprawnień, aby wykonać te zmiany", + "community.edit.notifications.error": "Wystąpił błąd podczas edycji zbioru", + "community.edit.return": "Cofnij", + "community.edit.tabs.curate.head": "Administruj", + "community.edit.tabs.curate.title": "Edycja zbioru - administrator", + "community.edit.tabs.metadata.head": "Edytuj metadane", + "community.edit.tabs.metadata.title": "Edycja zbioru - metadane", + "community.edit.tabs.roles.head": "Przypisz role", + "community.edit.tabs.roles.title": "Edycja zbioru - role", + "community.edit.tabs.authorizations.head": "Uprawnienia", + "community.edit.tabs.authorizations.title": "Edycja zbioru - uprawnienia", + "community.listelement.badge": "Zbiór", + "comcol-role.edit.no-group": "Brak", + "comcol-role.edit.create": "Utwórz", + "comcol-role.edit.restrict": "Ogranicz", + "comcol-role.edit.delete": "Usuń", + "comcol-role.edit.community-admin.name": "Administratorzy", + "comcol-role.edit.collection-admin.name": "Administratorzy", + "comcol-role.edit.community-admin.description": "Administratorzy zbioru mogą tworzyć podzbiory lub kolekcje i zarządzać nimi lub przydzielać zarządzanie tymi podzbiorami lub kolekcji innym użytkownikom. Ponadto decydują, kto może przesyłać elementy do dowolnych podkolekcji, edytować metadane pozycji (po przesłaniu) i dodawać (mapować) istniejące pozycje z innych kolekcji (z zastrzeżeniem autoryzacji).", + "comcol-role.edit.collection-admin.description": "Administratorzy kolekcji decydują o tym, kto może przesyłać pozycje do kolekcji, edytować metadane pozycji (po ich przesłaniu) oraz dodawać (mapować) istniejące elementy z innych kolekcji do tej kolekcji (z zastrzeżeniem uprawnień dla danej kolekcji).", + "comcol-role.edit.submitters.name": "Zgłaszający", + "comcol-role.edit.submitters.description": "Użytkownicy i grupy, którzy mają uprawnienia do przesyłania nowych pozycji do tej kolekcji.", + "comcol-role.edit.item_read.name": "Domyślny dostęp do odczytu pozycji", + "comcol-role.edit.item_read.description": "Użytkownicy i grupy, które mogą odczytywać nowe pozycje zgłoszone do tej kolekcji. Zmiany w tej roli nie działają wstecz. Istniejące pozycje w systemie będą nadal widoczne dla osób, które miały dostęp do odczytu w momencie ich dodania.", + "comcol-role.edit.item_read.anonymous-group": "Domyślny odczyt dla nowych pozycji jest obecnie ustawiony na Anonimowy.", + "comcol-role.edit.bitstream_read.name": "Domyślny dostęp do oczytu plików", + "comcol-role.edit.bitstream_read.description": "Administratorzy zbiorów mogą tworzyć podzbiory lub kolekcje, a także zarządzać nimi. Ponadto decydują o tym, kto może przesyłać elementy do podkolekcji, edytować metadane pozycji (po ich przesłaniu) oraz dodawać (mapować) istniejące pozycje z innych kolekcji (pod warunkiem posiadania odpowiednich uprawnień).", + "comcol-role.edit.bitstream_read.anonymous-group": "Domyślny status odczytu dla nowych plików to Anonimowy.", + "comcol-role.edit.editor.name": "Redaktorzy", + "comcol-role.edit.editor.description": "Redaktorzy mogą edytować metadane nowych pozycji, a następnie akceptować je lub odrzucać.", + "comcol-role.edit.finaleditor.name": "Redaktorzy końcowi", + "comcol-role.edit.finaleditor.description": "Redaktorzy końcowi mogą edytować metadane nowych pozycji, ale nie mogę odrzucać pozycji.", + "comcol-role.edit.reviewer.name": "Recenzenci", + "comcol-role.edit.reviewer.description": "Recenzenci mogą akceptować lub odrzucać nowe pozycje, ale nie mogę edytować ich metadanych.", + "community.form.abstract": "Opis skrócony", + "community.form.description": "Wstęp (HTML)", + "community.form.errors.title.required": "Wprowadź nazwę zbioru", + "community.form.rights": "Prawa autoskie (HTML)", + "community.form.tableofcontents": "Wiadomości (HTML)", + "community.form.title": "Nazwa", + "community.page.edit": "Edytuj ten zbiór", + "community.page.handle": "Stały URI zbioru", + "community.page.license": "Licencja", + "community.page.news": "Wiadomości", + "community.all-lists.head": "Podzbiory i kolekcje", + "community.sub-collection-list.head": "Kolekcje w tym zbiorze", + "community.sub-community-list.head": "Kolekcje w tym zbiorze", + "cookies.consent.accept-all": "Zaakceptuj wszystko", + "cookies.consent.accept-selected": "Zaakceptuj wybrane", + "cookies.consent.app.opt-out.description": "Aplikacja jest domyślnie włączona (możesz ją wyłączyć)", + "cookies.consent.app.opt-out.title": "(możesz ją wyłaczyć)", + "cookies.consent.app.purpose": "cel", + "cookies.consent.app.required.description": "Ta aplikacja jest zawsze wymagana", + "cookies.consent.app.required.title": "(zawsze wymagana)", + "cookies.consent.update": "Od ostatniej wizyty zostały wprowadzone zmiany. Zweryfikuj swoje zgody.", + "cookies.consent.close": "Zamknij", + "cookies.consent.decline": "Odrzuć", + "cookies.consent.content-notice.description": "Zbieramy i przetwarzamy Twoje dane do następujących celów: weryfikacja, preferencje, zgody i statystyka.
    Jeśli chcesz się dowiedzieć więcej, przycztaj naszą {privacyPolicy}.", + "cookies.consent.content-notice.learnMore": "Dostosuj", + "cookies.consent.content-modal.description": "Tutaj są wyświetlane informacje, które zbieramy o Tobie. Możesz je dostosować według swojego uznania.", + "cookies.consent.content-modal.privacy-policy.name": "polityka prywatności", + "cookies.consent.content-modal.privacy-policy.text": "Aby dowiedzieć się więcej przeczytaj naszą {privacyPolicy}.", + "cookies.consent.content-modal.title": "Informacje, które zbieramy", + "cookies.consent.app.title.authentication": "Logowanie", + "cookies.consent.app.description.authentication": "Musisz się zalogować", + "cookies.consent.app.title.preferences": "Preferencje", + "cookies.consent.app.description.preferences": "Wymagane, aby zapisać Twoje preferencje", + "cookies.consent.app.title.acknowledgement": "Zgody", + "cookies.consent.app.description.acknowledgement": "Wymagane, aby zapisać Twoje preferencje", + "cookies.consent.app.title.google-analytics": "Google Analytics", + "cookies.consent.app.description.google-analytics": "Pozwól na śledzenie do celów statystycznych", + "cookies.consent.purpose.functional": "Funkcjonalne", + "cookies.consent.purpose.statistical": "Statystyczne", + "curation-task.task.checklinks.label": "Sprawdź odnośniki w metadanych", + "curation-task.task.noop.label": "NOOP", + "curation-task.task.profileformats.label": "Profil formatów plików", + "curation-task.task.requiredmetadata.label": "Sprawdź poprawność wymaganych metadanych", + "curation-task.task.translate.label": "Microsoft Translator", + "curation-task.task.vscan.label": "Skan antywirusowy", + "curation.form.task-select.label": "Zadanie:", + "curation.form.submit": "Start", + "curation.form.submit.success.head": "Udało się rozpocząć zadanie administratora", + "curation.form.submit.success.content": "Zostaniesz przeniesiony na stronę procesu.", + "curation.form.submit.error.head": "Nie udało się się zakończyć zadania administratora", + "curation.form.submit.error.content": "Wystąpił błąd podczas rozpoczynania zadania administracyjnego.", + "curation.form.handle.label": "Automatyzacja:", + "curation.form.handle.hint": "Wskazówka: Wpisz [prefix swojego identyfikatora]/0, aby zautomatyzować zadanie (nie wszystkie zadania mogą wspierać tę funkcję)", + "deny-request-copy.email.message": "Drogi użytkowniku {{ recipientName }},\nW odpowiedzi na Państwa zapytanie, przykro mi poinformować, że to niemożliwe, aby przestać kopię pliku, o który Państwo prosili: \"{{ itemUrl }}\" ({{ itemName }}), którego jestem autorem.\n\nPozdrawiam serdecznie,\n{{ authorName }} <{{ authorEmail }}>", + "deny-request-copy.email.subject": "Wystąp o kopię dokumentu", + "deny-request-copy.error": "Wystąpił błąd", + "deny-request-copy.header": "Odrzuć prośbę o przesłanie kopii dokumentu", + "deny-request-copy.intro": "Ta wiadomość zostanie przesłana do osoby, która wystąpiła o dostęp", + "deny-request-copy.success": "Z powodzeniem odrzucono prośbę o udostępnienie pozycji", + "dso.name.untitled": "Brak tytułu", + "dso-selector.claim.item.head": "Wskazówki profilu", + "dso-selector.claim.item.body": "Istnieją profile, które mogą odnosić się do Ciebie. Jeśli, któryś z tych profilów jest Twój, wybierz go i przejdź do szczegółów, z opcji wybierz opcję przypisania profilu. W innym przypadku możesz utworzyć nowy profil z szablonu, wybierając przycisk poniżej.", + "dso-selector.claim.item.create-from-scratch": "Utwórz nowy", + "dso-selector.claim.item.not-mine-label": "Żaden nie jest mój", + "dso-selector.create.collection.head": "Nowa kolekcja", + "dso-selector.create.collection.sub-level": "Utwórz nową kolekcję w", + "dso-selector.create.community.head": "Nowy zbiór", + "dso-selector.create.community.sub-level": "Utwórz nowy zbiór", + "dso-selector.create.community.top-level": "Utwórz nowy nadrzędny zbiór", + "dso-selector.create.item.head": "Nowa pozycja", + "dso-selector.create.item.sub-level": "Utwórz nową pozycję w", + "dso-selector.create.submission.head": "Nowe zgłoszenie", + "dso-selector.edit.collection.head": "Edytuj kolekcję", + "dso-selector.edit.community.head": "Edytuj zbiór", + "dso-selector.edit.item.head": "Edytuj pozycję", + "dso-selector.error.title": "Wystąpił błąd podczas wyszukiwania typu {{ type }}", + "dso-selector.export-metadata.dspaceobject.head": "Eksportuj metadane z", + "dso-selector.no-results": "Nie znaleziono {{ type }}", + "dso-selector.placeholder": "Wyszukaj {{ type }}", + "dso-selector.select.collection.head": "Wybierz kolekcję", + "dso-selector.set-scope.community.head": "Wybierz wyszukiwanie zakresu", + "dso-selector.set-scope.community.button": "Wyszukaj w całym DSpace", + "dso-selector.set-scope.community.input-header": "Wyszukaj zbiór lub kolekcję", + "confirmation-modal.export-metadata.header": "Eksportuj metadane z {{ dsoName }}", + "confirmation-modal.export-metadata.info": "Czy na pewno chcesz eksportować metadane z {{ dsoName }}", + "confirmation-modal.export-metadata.cancel": "Anuluj", + "confirmation-modal.export-metadata.confirm": "Eksportuj", + "confirmation-modal.delete-eperson.header": "Usuń użytkownika \"{{ dsoName }}\"", + "confirmation-modal.delete-eperson.info": "Czy na pewno chcesz usunąć użytkownika \"{{ dsoName }}\"", + "confirmation-modal.delete-eperson.cancel": "Anuluj", + "confirmation-modal.delete-eperson.confirm": "Usuń", + "error.bitstream": "Wystąpił błąd podczas tworzenia plików", + "error.browse-by": "Wystąpił błąd podczas tworzenia pozycji", + "error.collection": "Wystąpił błąd podczas tworzenia kolekcji", + "error.collections": "Wystąpił błąd podczas tworzenia kolekcji", + "error.community": "Wystąpił błąd podczas tworzenia ziboru", + "error.identifier": "Nie znaleziono pozycji z podanym identyfikatorem", + "error.default": "Błąd", + "error.item": "Wystąpił błąd podczas tworzenia pozycji", + "error.items": "Wystąpił błąd podczas tworzenia pozycji", + "error.objects": "Wystąpił błąd podczas tworzenia obiektów", + "error.recent-submissions": "Wystąpił błąd podczas tworzenia ostatniego zgłoszenia", + "error.search-results": "Wystąpił błąd podczas tworzenia wyników wyszukiwania", + "error.sub-collections": "Wystąpił błąd podczas tworzenia podkolekcji", + "error.sub-communities": "Wystąpił błąd podczas tworzenia podzbiorów", + "error.submission.sections.init-form-error": "Wystąpił błąd w czasie inicjalizacji sekcji, sprawdź konfigurację. Szczegóły poniżej:

    ", + "error.top-level-communities": "Błąd podczas pobierania nadrzędnego zbioru", + "error.validation.license.notgranted": "Musisz wyrazić tę zgodę, aby przesłać swoje zgłoszenie. Jeśli nie możesz wyrazić zgody w tym momencie, możesz zapisać swoją pracę i wrócić do niej później lub usunąć zgłoszenie.", + "error.validation.pattern": "Te dane wejściowe są ograniczone przez aktualny wzór: {{ pattern }}.", + "error.validation.filerequired": "Przesłanie pliku jest obowiązkowe", + "error.validation.required": "Pole jest wymagane", + "error.validation.NotValidEmail": "E-mail nie jest poprawny", + "error.validation.emailTaken": "E-mail jest już zarejestrowany", + "error.validation.groupExists": "Ta grupa już istnieje", + "file-section.error.header": "Błąd podczas uzyskiwania plików dla tej pozycji", + "footer.copyright": "copyright © 2002-{{ year }}", + "footer.link.dspace": "oprogramowanie DSpace", + "footer.link.lyrasis": "LYRASIS", + "footer.link.cookies": "Ustawienia plików cookies", + "footer.link.privacy-policy": "Polityka prywatności", + "footer.link.end-user-agreement": "Umowa użytkownika", + "forgot-email.form.header": "Nie pamiętam hasła", + "forgot-email.form.info": "Zarejestruj się, aby otrzymywać wiadomości o nowych pozycjach w obserowanych kolekcjach, a także przesyłać nowe pozycje do repozytorium.", + "forgot-email.form.email": "Adres e-mail *", + "forgot-email.form.email.error.required": "Uzupełnij adres e-mail", + "forgot-email.form.email.error.pattern": "Uzupełnij prawidłowy adres e-mail", + "forgot-email.form.email.hint": "Ten adres e-mail będzie zweryfikowany i będziesz go używać jako swój login.", + "forgot-email.form.submit": "Wyślij", + "forgot-email.form.success.head": "Wysłano wiadomość weryfikacyjną", + "forgot-email.form.success.content": "Wiadomość została wysłana na adres e-mail {{ email }}. Zawiera ona unikatowy link i dalsze instrukcje postępowania.", + "forgot-email.form.error.head": "Błąd podczas rejestracji adresu e-mail", + "forgot-email.form.error.content": "Wystąpił błąd poczas próby rejestracji tego adresu e-mail: {{ email }}", + "forgot-password.title": "Nie pamiętam hasła", + "forgot-password.form.head": "Nie pamiętam hasła", + "forgot-password.form.info": "Wpisz nowe hasło w polu poniżej i potwierdź je wpisując je ponownie w drugim polu. Hasło powinno mieć co najmniej sześć znaków.", + "forgot-password.form.card.security": "Bezpieczeństwo", + "forgot-password.form.identification.header": "Identifikacja", + "forgot-password.form.identification.email": "Adres e-mail: ", + "forgot-password.form.label.password": "Hasło", + "forgot-password.form.label.passwordrepeat": "Potwierdź hasło", + "forgot-password.form.error.empty-password": "Wpisz hasło poniżej.", + "forgot-password.form.error.matching-passwords": "Hasła nie są identyczne.", + "forgot-password.form.notification.error.title": "Błąd podczas próby ustawienia nowego hasła", + "forgot-password.form.notification.success.content": "Resetowanie hasła udało się. Zalogowano jako stworzony przed momemntem użytkownik.", + "forgot-password.form.notification.success.title": "Resetowanie hasła udane", + "forgot-password.form.submit": "Wpisz hasło", + "form.add": "Dodaj", + "form.add-help": "Wybierz ten przycisk, aby dodać aktualny wpis lub dodać następny", + "form.cancel": "Anuluj", + "form.clear": "Wyczyść", + "form.clear-help": "Kliknij tutaj, aby usunąć wybraną wartość", + "form.discard": "Odrzuć", + "form.drag": "Przeciągnij", + "form.edit": "Edytuj", + "form.edit-help": "Kliknij tutaj, aby edytować wybraną wartość", + "form.first-name": "Imię", + "form.last-name": "Nazwisko", + "form.loading": "Ładowanie...", + "form.lookup": "Przeglądaj", + "form.lookup-help": "Kliknij tutaj, aby zobaczyć istniejące powiązania", + "form.no-results": "Nie znaleziono rezultatów", + "form.no-value": "Nie wprowadzono wartości", + "form.remove": "Usuń", + "form.save": "Zapisz", + "form.save-help": "Zapisz zmiany", + "form.search": "Wyszukaj", + "form.search-help": "Kliknij tutaj, aby wyszukać w istniejących komentarzach", + "form.submit": "Zapisz", + "form.repeatable.sort.tip": "Upuść nową pozycję w nowym miejscu", + "grant-deny-request-copy.deny": "Nie przesyłaj kopii", + "grant-deny-request-copy.email.back": "Cofnij", + "grant-deny-request-copy.email.message": "Wiadomości", + "grant-deny-request-copy.email.message.empty": "Proszę wprowadzić wiadomość", + "grant-deny-request-copy.email.permissions.info": "W tym miejscu możesz przemyśleć ograniczenie dostępu do dokumentu, aby odpowiadać na mniej próśb o dostęp. Jeśli chcesz wystąpić do administratorów reposytorium o zniesienie restrykcji, zaznacz okienko poniżej.", + "grant-deny-request-copy.email.permissions.label": "Ustaw jako otwarty dostęp", + "grant-deny-request-copy.email.send": "Wyślij", + "grant-deny-request-copy.email.subject": "Temat", + "grant-deny-request-copy.email.subject.empty": "Wpisz temat", + "grant-deny-request-copy.grant": "Wyślij kopię", + "grant-deny-request-copy.header": "Prośba o przesłanie kopii dokumentu", + "grant-deny-request-copy.home-page": "Zabierz mnie na stronę główną", + "grant-deny-request-copy.intro1": "Jeśli jesteś jednym z autorów dokumentu {{ name }}, wybierz jedną z poniższych opcji, aby odpowiedzieć zapytaniu użytkownika.", + "grant-deny-request-copy.intro2": "Po wybraniu opcji, zostaną wyświetlone sugerowane odpowiedzi, które można edytować.", + "grant-deny-request-copy.processed": "Ta prośba jest już procesowana. Możesz użyć przycisku poniżej, aby wrócić do strony głównej.", + "grant-request-copy.email.message": "Drogi użytkowniku {{ recipientName }},\nW odpowiedzi na Państwa zapytanie, miło mi poinformować, że w załączniku przesyłam kopię dokumentu, o który Państwo prosili: \"{{ itemUrl }}\" ({{ itemName }}), którego jestem autorem.\n\nPozdrawiam serdecznie,\n{{ authorName }} <{{ authorEmail }}>", + "grant-request-copy.email.subject": "Prośba o kopię dokumentu", + "grant-request-copy.error": "Wystąpił błąd", + "grant-request-copy.header": "Zezwól na wysłanie kopii dokumentu", + "grant-request-copy.intro": "To wiadomość zostanie wysłana do osoby, która wystąpiła o dostęp. Wskazane dokumenty zostaną dołączone jako załącznik.", + "grant-request-copy.success": "Prośba o dostęp do dokumentu została przyjęta", + "home.description": "", + "home.breadcrumbs": "Strona główna", + "home.search-form.placeholder": "Przeszukaj repozytorium...", + "home.title": "Strona główna", + "home.top-level-communities.head": "Zbiory w DSpace", + "home.top-level-communities.help": "Przeszukaj kolekcje", + "info.end-user-agreement.accept": "Przeczytałem/am i akceptuję umowę użytkownika", + "info.end-user-agreement.accept.error": "Błąd wystąpił podczas akceptowania umowy użytkownika", + "info.end-user-agreement.accept.success": "Udało się zaktualizować umowę użytkownika", + "info.end-user-agreement.breadcrumbs": "Umowa użytkownika", + "info.end-user-agreement.buttons.cancel": "Anuluj", + "info.end-user-agreement.buttons.save": "Zapisz", + "info.end-user-agreement.head": "Umowa użytkownika", + "info.end-user-agreement.title": "Umowa użytkownika", + "info.privacy.breadcrumbs": "Oświadczenie polityki prywatności", + "info.privacy.head": "Oświadczenie polityki prywatności", + "info.privacy.title": "Oświadczenie polityki prywatności", + "item.alerts.private": "Ta pozycja jest prywatna", + "item.alerts.withdrawn": "Ta pozycja została wycofana", + "item.edit.authorizations.heading": "Za pomocą tego edytora możesz przeglądać i zmieniać polityki dla danej pozycji, a także zmieniać polityki dla poszczególnych części pozycji: paczek i strumieni bitów. W skrócie, pozycja jest kontenerem pakietów, a pakiety są kontenerami strumieni bitów. Kontenery zazwyczaj mają polityki ADD/REMOVE/READ/WRITE, natomiast strumienie bitów mają tylko polityki READ/WRITE.", + "item.edit.authorizations.title": "Edytuj politykę tej pozycji", + "item.badge.private": "Prywatny status publikacji", + "item.badge.withdrawn": "Wycofane publikacje", + "item.bitstreams.upload.bundle": "Pakiet", + "item.bitstreams.upload.bundle.placeholder": "Wybierz pakiet", + "item.bitstreams.upload.bundle.new": "Utworz pakiet", + "item.bitstreams.upload.bundles.empty": "Ta pozycja nie zawiera żadnych pakietów, do których można przesłać strumień bitów.", + "item.bitstreams.upload.cancel": "Anuluj", + "item.bitstreams.upload.drop-message": "Upuść plik, aby przesłać", + "item.bitstreams.upload.item": "Pozycja: ", + "item.bitstreams.upload.notifications.bundle.created.content": "Udało się utworzyć nowy pakiet.", + "item.bitstreams.upload.notifications.bundle.created.title": "Utwórz pakiet", + "item.bitstreams.upload.notifications.upload.failed": "Zweryfikuj pliki przed spróbowaniem ponownie.", + "item.bitstreams.upload.title": "Prześlij strumień bitów", + "item.edit.bitstreams.bundle.edit.buttons.upload": "Prześlij", + "item.edit.bitstreams.bundle.displaying": "Obecnie wyświetlono {{ amount }} plików z {{ total }}.", + "item.edit.bitstreams.bundle.load.all": "Załaduj wszystkie ({{ total }})", + "item.edit.bitstreams.bundle.load.more": "Załaduj więcej", + "item.edit.bitstreams.bundle.name": "PACZKA: {{ name }}", + "item.edit.bitstreams.discard-button": "Odrzuć", + "item.edit.bitstreams.edit.buttons.download": "Pobierz", + "item.edit.bitstreams.edit.buttons.drag": "Przeciągnij", + "item.edit.bitstreams.edit.buttons.edit": "Edytuj", + "item.edit.bitstreams.edit.buttons.remove": "Usuń", + "item.edit.bitstreams.edit.buttons.undo": "Cofnij zmiany", + "item.edit.bitstreams.empty": "Ta pozycja nie zawiera żadnych strumieni bitów. Wybierz strumienie do załadowania, aby je utworzyć.", + "item.edit.bitstreams.headers.actions": "Akcje", + "item.edit.bitstreams.headers.bundle": "Paczka", + "item.edit.bitstreams.headers.description": "Opis", + "item.edit.bitstreams.headers.format": "Format", + "item.edit.bitstreams.headers.name": "Nazwa", + "item.edit.bitstreams.notifications.discarded.content": "Twoje zmiany zostały odrzucone. Aby je przywrócić, wybierz przycisk 'Cofnij'", + "item.edit.bitstreams.notifications.discarded.title": "Zmiany odrzucone", + "item.edit.bitstreams.notifications.move.failed.title": "Błąd podczas przenoszenia plików", + "item.edit.bitstreams.notifications.move.saved.content": "Zmiany pozycji dla pliku tej pozycji oraz jego paczki zostały zapisane.", + "item.edit.bitstreams.notifications.move.saved.title": "Zmiana pozycji została zapisana", + "item.edit.bitstreams.notifications.outdated.content": "Pozycja została w międzyczasie zmieniona przez innego użytkownika. Twoje zmiany zostały cofnięte, aby uniknąć ewentualnych konfliktów", + "item.edit.bitstreams.notifications.outdated.title": "Zmiany nieaktualne", + "item.edit.bitstreams.notifications.remove.failed.title": "Błąd podczas usuwania pliku", + "item.edit.bitstreams.notifications.remove.saved.content": "Twoje zmiany dotyczące usunięcia plików z tej pozycji zostały zapisane.", + "item.edit.bitstreams.notifications.remove.saved.title": "Zmiany dotyczące usunięcia zapisane", + "item.edit.bitstreams.reinstate-button": "Cofnij", + "item.edit.bitstreams.save-button": "Zapisz", + "item.edit.bitstreams.upload-button": "Prześlij", + "item.edit.delete.cancel": "Anuluj", + "item.edit.delete.confirm": "Usuń", + "item.edit.delete.description": "Czy jesteś pewien, że ta pozycja powinna zostać całkowicie usunięta? Ostrożnie: Teraz nie pozostanie po tej pozycji żaden ślad.", + "item.edit.delete.error": "Błąd wystąpił podczas usuwania pozycji", + "item.edit.delete.header": "Usuń pozycję: {{ id }}", + "item.edit.delete.success": "Ta pozycja została usunięta", + "item.edit.head": "Edytuj pozycję", + "item.edit.breadcrumbs": "Edytuj pozycję", + "item.edit.tabs.disabled.tooltip": "Nie masz dostępu do tej strony", + "item.edit.tabs.mapper.head": "Mapper kolekcji", + "item.edit.tabs.item-mapper.title": "Edytowanie pozycji - Mapper kolekcji", + "item.edit.item-mapper.buttons.add": "Mapowanie pozycji do wybranych kolekcji", + "item.edit.item-mapper.buttons.remove": "Usuń mapowanie pozycji do wybranych kolekcji", + "item.edit.item-mapper.cancel": "Anuluj", + "item.edit.item-mapper.description": "To jest narzędzie do mapowania elementów, które pozwala administratorom mapować tę pozycję do innych kolekcji. Możesz wyszukiwać kolekcje i je mapować lub przeglądać listę kolekcji, do których dana pozycja jest aktualnie zmapowana.", + "item.edit.item-mapper.head": "Mapper pozycji - Mapowanie pozycji do kolekcji", + "item.edit.item-mapper.item": "Pozycja: \"{{name}}\"", + "item.edit.item-mapper.no-search": "Wpisz zapytanie, które chcesz wyszukać", + "item.edit.item-mapper.notifications.add.error.content": "Wystąpiły błędy dla mapowania pozycji w {{amount}} kolekcjach.", + "item.edit.item-mapper.notifications.add.error.head": "Błędy mapowania", + "item.edit.item-mapper.notifications.add.success.content": "Udało się zmapować elementy dla {{amount}} kolekcji.", + "item.edit.item-mapper.notifications.add.success.head": "Mapowanie zakończone", + "item.edit.item-mapper.notifications.remove.error.content": "Wystąpiły błędy podczas usuwania mapowania do {{amount}} kolekcji.", + "item.edit.item-mapper.notifications.remove.error.head": "Usunięcie mapowania błędów", + "item.edit.item-mapper.notifications.remove.success.content": "Udało się usunąć mapowanie pozycji w {{amount}} kolekcjach.", + "item.edit.item-mapper.notifications.remove.success.head": "Usuwanie mapowania zakończone", + "item.edit.item-mapper.search-form.placeholder": "Przeszukaj kolekcje...", + "item.edit.item-mapper.tabs.browse": "Przeglądaj zmapowane kolekcje", + "item.edit.item-mapper.tabs.map": "Mapuj nowe kolekcje", + "item.edit.metadata.add-button": "Dodaj", + "item.edit.metadata.discard-button": "Odrzuć", + "item.edit.metadata.edit.buttons.edit": "Edytuj", + "item.edit.metadata.edit.buttons.remove": "Usuń", + "item.edit.metadata.edit.buttons.undo": "Cofnij zmiany", + "item.edit.metadata.edit.buttons.unedit": "Zatrzymaj edycję", + "item.edit.metadata.empty": "Ta pozycja nie zawiera żadnych metadanych. Wybierz Dodaj, aby dodać metadane.", + "item.edit.metadata.headers.edit": "Edytuj", + "item.edit.metadata.headers.field": "Pole", + "item.edit.metadata.headers.language": "Język", + "item.edit.metadata.headers.value": "Wartość", + "item.edit.metadata.metadatafield.invalid": "Wybierz aktualne pole metadanych", + "item.edit.metadata.notifications.discarded.content": "Twoje zmiany zostały odrzucone. Aby wgrać je ponownie wybierz przycisk 'Cofnij'", + "item.edit.metadata.notifications.discarded.title": "Zmiany odrzucone", + "item.edit.metadata.notifications.error.title": "Wystąpił błąd", + "item.edit.metadata.notifications.invalid.content": "Twoje zmiany nie zostały zapisane. Przed zapisaniem upewnij się, że wszystkie pola są wypełnione prawidłowo.", + "item.edit.metadata.notifications.invalid.title": "Nieprawidłowe metadane", + "item.edit.metadata.notifications.outdated.content": "Pozycja została w międzyczasie zmieniona przez innego użytkownika. Twoje zmiany zostały cofnięte, aby zapobiec ewentualnym konfliktom", + "item.edit.metadata.notifications.outdated.title": "Zmiany nieaktualne", + "item.edit.metadata.notifications.saved.content": "Twoje zmiany metadanych tej pozycji zostały zapisane.", + "item.edit.metadata.notifications.saved.title": "Metadane zostały zapisane", + "item.edit.metadata.reinstate-button": "Cofnij", + "item.edit.metadata.save-button": "Zapisz", + "item.edit.modify.overview.field": "Pole", + "item.edit.modify.overview.language": "Język", + "item.edit.modify.overview.value": "Wartość", + "item.edit.move.cancel": "Anuluj", + "item.edit.move.save-button": "Zapisz", + "item.edit.move.discard-button": "Odrzuć", + "item.edit.move.description": "Wybierz kolekcję, do której chcesz przenieść tę pozycję. Aby zawęzić listę wyświetlanych kolekcji, możesz wprowadzić zapytanie w polu wyszukiwania.", + "item.edit.move.error": "Wystąpił błąd podczas przenoszenia pozycji", + "item.edit.move.head": "Przenieś pozycję: {{id}}", + "item.edit.move.inheritpolicies.checkbox": "Dziedziczenie polityk", + "item.edit.move.inheritpolicies.description": "Dziedzczenie domyślnych polityk z kolekcji docelowej", + "item.edit.move.move": "Przenieś", + "item.edit.move.processing": "Przenoszenie...", + "item.edit.move.search.placeholder": "Wpisz zapytanie, aby wyszukać w kolekcjach", + "item.edit.move.success": "Pozycja została przeniesiona", + "item.edit.move.title": "Przenieś pozycję", + "item.edit.private.cancel": "Anuluj", + "item.edit.private.confirm": "Ukryj", + "item.edit.private.description": "Czy chcesz ukryć tę pozycję?", + "item.edit.private.error": "Wystąpił błąd podczas ukrywania pozycji", + "item.edit.private.header": "Ukryj pozycję: {{ id }}", + "item.edit.private.success": "Pozycja jest teraz ukryta", + "item.edit.public.cancel": "Anuluj", + "item.edit.public.confirm": "Upublicznij", + "item.edit.public.description": "Czy chcesz upublicznić tę pozycję?", + "item.edit.public.error": "Wystąpił błąd podczas upubliczniania pozycji", + "item.edit.public.header": "Upublicznij pozycję: {{ id }}", + "item.edit.public.success": "Pozycja jest teraz publiczna", + "item.edit.reinstate.cancel": "Anuluj", + "item.edit.reinstate.confirm": "Przywróć", + "item.edit.reinstate.description": "Czy chcesz przywrócić tę pozycję?", + "item.edit.reinstate.error": "Wystąpił błąd podczas przywracania pozycji", + "item.edit.reinstate.header": "Przywróć pozycję: {{ id }}", + "item.edit.reinstate.success": "Pozycja została przywrócona", + "item.edit.relationships.discard-button": "Odrzuć", + "item.edit.relationships.edit.buttons.add": "Dodaj", + "item.edit.relationships.edit.buttons.remove": "Usuń", + "item.edit.relationships.edit.buttons.undo": "Cofnij zmiany", + "item.edit.relationships.no-relationships": "Brak relacji", + "item.edit.relationships.notifications.discarded.content": "Twoje zmiany zostały cofnięte. Aby przywrócić zmiany wybierz przycisk 'Cofnij'", + "item.edit.relationships.notifications.discarded.title": "Zmiany zostały cofnięte", + "item.edit.relationships.notifications.failed.title": "Wystąpił błąd podczas edytowania relacji", + "item.edit.relationships.notifications.outdated.content": "Ta pozycja została właśnie zmieniona przez innego użytkownika. Twoje zmiany zostały cofnięte, aby uniknąć konfliktów", + "item.edit.relationships.notifications.outdated.title": "Zmiany są nieaktualne", + "item.edit.relationships.notifications.saved.content": "Twoje zmiany w relacjach tej pozycji zostały zapisane.", + "item.edit.relationships.notifications.saved.title": "Relacje zostały zapisane", + "item.edit.relationships.reinstate-button": "Cofnij", + "item.edit.relationships.save-button": "Zapisz", + "item.edit.relationships.no-entity-type": "Dodaj metadaną 'dspace.entity.type', aby umożliwić dodawanie relacji do pozycji", + "item.edit.return": "Cofnij", + "item.edit.tabs.bitstreams.head": "Pliki", + "item.edit.tabs.bitstreams.title": "Edycja pozycji - pliki", + "item.edit.tabs.curate.head": "Administruj", + "item.edit.tabs.curate.title": "Edytowanie pozycji - administruj", + "item.edit.tabs.metadata.head": "Metadane", + "item.edit.tabs.metadata.title": "Edycja pozycji - metadane", + "item.edit.tabs.relationships.head": "Relacje", + "item.edit.tabs.relationships.title": "Edycja pozycja - relacje", + "item.edit.tabs.status.buttons.authorizations.button": "Dostępy...", + "item.edit.tabs.status.buttons.authorizations.label": "Określu dostęp do pozycji", + "item.edit.tabs.status.buttons.delete.button": "Usuń permanentnie", + "item.edit.tabs.status.buttons.delete.label": "Usuń pozycję permanentnie", + "item.edit.tabs.status.buttons.mappedCollections.button": "Zmapowane kolekcje", + "item.edit.tabs.status.buttons.mappedCollections.label": "Zarządzaj mapowanymi kolekcjami", + "item.edit.tabs.status.buttons.move.button": "Przenieś...", + "item.edit.tabs.status.buttons.move.label": "Przenieś pozycję do innej kolekcji", + "item.edit.tabs.status.buttons.private.button": "Ukryj...", + "item.edit.tabs.status.buttons.private.label": "Ukry pozycję", + "item.edit.tabs.status.buttons.public.button": "Upublicznij...", + "item.edit.tabs.status.buttons.public.label": "Upublicznij pozycję", + "item.edit.tabs.status.buttons.reinstate.button": "Przywróć...", + "item.edit.tabs.status.buttons.reinstate.label": "Przywróć pozycję", + "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", + "item.edit.tabs.status.buttons.withdraw.button": "Wycofaj...", + "item.edit.tabs.status.buttons.withdraw.label": "Wycofaj z repozytorium", + "item.edit.tabs.status.description": "Witamy na stronie zarządzania pozycjami. Z tego miejsca możesz wycofać, przywrócić, przenieść lub usunąć daną pozycję. Możesz również aktualizować lub dodawać nowe metadane lub pliki..", + "item.edit.tabs.status.head": "Status", + "item.edit.tabs.status.labels.handle": "Identyfikator", + "item.edit.tabs.status.labels.id": "ID pozycji", + "item.edit.tabs.status.labels.itemPage": "Strona pozycji", + "item.edit.tabs.status.labels.lastModified": "Ostatnia modyfikacja", + "item.edit.tabs.status.title": "Edycja pozycji - Status", + "item.edit.tabs.versionhistory.head": "Historia wersji", + "item.edit.tabs.versionhistory.title": "Edycja pozycji - historia wersji", + "item.edit.tabs.versionhistory.under-construction": "Edytowanie lub dodawanie nowych wersji jest niedostępne w tego poziomu interfejsu.", + "item.edit.tabs.view.head": "Widok pozycji", + "item.edit.tabs.view.title": "Edycja pozycji - widok", + "item.edit.withdraw.cancel": "Anuluj", + "item.edit.withdraw.confirm": "Wycofaj", + "item.edit.withdraw.description": "Czy na pewno chcesz wycofać pozycję?", + "item.edit.withdraw.error": "Wystąpił błąd podczas wycofywania pozycji", + "item.edit.withdraw.header": "Wycofaj pozycję: {{ id }}", + "item.edit.withdraw.success": "Pozycja została wycofana", + "item.listelement.badge": "Pozycja", + "item.page.description": "Opis", + "item.page.journal-issn": "ISSN czasopisma", + "item.page.journal-title": "Tytuł czasopisma", + "item.page.publisher": "Wydawca", + "item.page.titleprefix": "Pozycja: ", + "item.page.volume-title": "Tytuł tomu", + "item.search.results.head": "Wyniki wyszukiwania pozycji", + "item.search.title": "Wyszukiwanie pozycji", + "item.page.abstract": "Abstrakt", + "item.page.author": "Autorzy", + "item.page.citation": "Cytowanie", + "item.page.collections": "Kolekcje", + "item.page.collections.loading": "Ładowanie...", + "item.page.collections.load-more": "Załaduj więcej", + "item.page.date": "Data", + "item.page.edit": "Edytuj pozycję", + "item.page.files": "Pliki", + "item.page.filesection.description": "Opis:", + "item.page.filesection.download": "Pobierz", + "item.page.filesection.format": "Format:", + "item.page.filesection.name": "Nazwa:", + "item.page.filesection.size": "Rozmiar:", + "item.page.journal.search.title": "Artykuły w czasopiśmie", + "item.page.link.full": "Zobacz szczegóły", + "item.page.link.simple": "Uproszczony widok", + "item.page.person.search.title": "Artykuły tego autora", + "item.page.related-items.view-more": "Pokaż o {{ amount }} więcej", + "item.page.related-items.view-less": "Ukryj {{ amount }}", + "item.page.relationships.isAuthorOfPublication": "Publikacje", + "item.page.relationships.isJournalOfPublication": "Publikacje", + "item.page.relationships.isOrgUnitOfPerson": "Autorzy", + "item.page.relationships.isOrgUnitOfProject": "Projekty naukowe", + "item.page.subject": "Słowa kluczowe", + "item.page.uri": "URI", + "item.page.bitstreams.view-more": "Pokaż więcej", + "item.page.bitstreams.collapse": "Pokaż mniej", + "item.page.filesection.original.bundle": "Oryginalne pliki", + "item.page.filesection.license.bundle": "Licencja", + "item.page.return": "Powrót", + "item.page.version.create": "Utwórz nową wersję", + "item.page.version.hasDraft": "Nowa wersja nie może zostać utworzona, ponieważ istnieje już oczekujące na akceptację zgłoszenie dokumentu tego pliku", + "item.preview.dc.identifier.doi": "DOI", + "item.preview.dc.relation.ispartof": "Czasopismo lub seria", + "item.preview.dc.identifier.isbn": "ISBN", + "item.preview.dc.identifier.uri": "Identyfikator:", + "item.preview.dc.contributor.author": "Autorzy:", + "item.preview.dc.date.issued": "Data publikacji:", + "item.preview.dc.description.abstract": "Abstrakt:", + "item.preview.dc.identifier.other": "Inny identyfikator:", + "item.preview.dc.language.iso": "Język:", + "item.preview.dc.title": "Tytuł:", + "item.preview.dc.title.alternative": "Tytuł alternatywny", + "item.preview.dc.type": "Typ:", + "item.preview.dc.identifier": "Identyfikator:", + "item.preview.dc.relation.issn": "ISSN", + "item.preview.oaire.citation.issue": "Numer wydania", + "item.preview.oaire.citation.volume": "Numer tomu", + "item.preview.person.familyName": "Nazwisko:", + "item.preview.person.givenName": "Nazwa:", + "item.preview.person.identifier.orcid": "ORCID:", + "item.preview.project.funder.name": "Fundator:", + "item.preview.project.funder.identifier": "Identyfikator fundatora:", + "item.preview.oaire.awardNumber": "ID finansowania:", + "item.preview.dc.coverage.spatial": "Jurysdykcja:", + "item.preview.oaire.fundingStream": "Źródło finansowania:", + "item.select.confirm": "Potwierdź zaznaczone", + "item.select.empty": "Brak pozycji do wyświetlenia", + "item.select.table.author": "Autor", + "item.select.table.collection": "Kolekcja", + "item.select.table.title": "Tytuł", + "item.version.history.empty": "Jeszcze nie ma innych wersji tej pozycji.", + "item.version.history.head": "Poprzednie wersje", + "item.version.history.return": "Powrót", + "item.version.history.selected": "Wybrane wersje", + "item.version.history.selected.alert": "W tym momencie wyświetlono wersję {{version}} pozycji.", + "item.version.history.table.version": "Wersja", + "item.version.history.table.item": "Pozycja", + "item.version.history.table.editor": "Redaktor", + "item.version.history.table.date": "Data", + "item.version.history.table.summary": "Podsumowanie", + "item.version.history.table.workspaceItem": "Wersja robocza", + "item.version.history.table.workflowItem": "Pozycja workflow", + "item.version.history.table.actions": "Akcja", + "item.version.history.table.action.editWorkspaceItem": "Edytuj wersję roboczą pozycji", + "item.version.history.table.action.editSummary": "Edytuj podsumowanie", + "item.version.history.table.action.saveSummary": "Zapisz edycje podsumowania", + "item.version.history.table.action.discardSummary": "Odrzuć edycje podsumowania", + "item.version.history.table.action.newVersion": "Utwórz nową wersję z tej wersji", + "item.version.history.table.action.deleteVersion": "Wersja usunięta", + "item.version.history.table.action.hasDraft": "Nowa wersja nie może zostać utworzona, ponieważ istnieje już oczekujące na akceptację zgłoszenie dokumentu tego pliku", + "item.version.notice": "To nie jest najnowsza wersja tej pozycji. Najnowsza wersja jest dostępna tutaj.", + "item.version.create.modal.header": "Nowa wersja", + "item.version.create.modal.text": "Utwórz nową wersję tej pozycji", + "item.version.create.modal.text.startingFrom": "zaczynając od wersji {{version}}", + "item.version.create.modal.button.confirm": "Utwórz", + "item.version.create.modal.button.confirm.tooltip": "Utwórz nową wersję", + "item.version.create.modal.button.cancel": "Anuluj", + "item.version.create.modal.button.cancel.tooltip": "Nie stwarzaj nowej wersji", + "item.version.create.modal.form.summary.label": "Podsumowanie", + "item.version.create.modal.form.summary.placeholder": "Wprowadź podsumowanie nowej wersji", + "item.version.create.notification.success": "Nowa wersja została utworzona z numerem {{version}}", + "item.version.create.notification.failure": "Nowa wersja nie została utworzona", + "item.version.create.notification.inProgress": "Nowa wersja nie może być utworzona, ponieważ propozycja innej wersji jest już złożona do zaakceptowania", + "item.version.delete.modal.header": "Usuń wersję", + "item.version.delete.modal.text": "Czy chcesz usunąć wersję {{version}}?", + "item.version.delete.modal.button.confirm": "Usuń", + "item.version.delete.modal.button.confirm.tooltip": "Usuń wersję", + "item.version.delete.modal.button.cancel": "Anuluj", + "item.version.delete.modal.button.cancel.tooltip": "Nie usuwaj tej wersji", + "item.version.delete.notification.success": "Wersja {{version}} została usunięta", + "item.version.delete.notification.failure": "Wersja {{version}} nie została usunięta", + "item.version.edit.notification.success": "Podsumowanie wersji {{version}} zostało zmienione", + "item.version.edit.notification.failure": "Podsumowanie wersji {{version}} nie zostało zmienione", + "journal.listelement.badge": "Czasopismo", + "journal.page.description": "Opis", + "journal.page.edit": "Edytuj tę pozycję", + "journal.page.editor": "Redaktor naczelny", + "journal.page.issn": "ISSN", + "journal.page.publisher": "Wydawca", + "journal.page.titleprefix": "Czasopismo: ", + "journal.search.results.head": "Wyniki wyszukiwania czasopism", + "journal.search.title": "Wyszukiwanie czasopism", + "journalissue.listelement.badge": "Numer czasopisma", + "journalissue.page.description": "Opis", + "journalissue.page.edit": "Edytuj pozycję", + "journalissue.page.issuedate": "Data wydania", + "journalissue.page.journal-issn": "ISSN czasopisma", + "journalissue.page.journal-title": "Tytuł czasopisma", + "journalissue.page.keyword": "Słowa kluczowe", + "journalissue.page.number": "Numer", + "journalissue.page.titleprefix": "Wydanie czasopisma: ", + "journalvolume.listelement.badge": "Numer tomu czasopisma", + "journalvolume.page.description": "Opis", + "journalvolume.page.edit": "Edytuj pozycję", + "journalvolume.page.issuedate": "Data wydania", + "journalvolume.page.titleprefix": "Numer tomu czasopisma: ", + "journalvolume.page.volume": "Numer wydania", + "iiifsearchable.listelement.badge": "Multimedia dokumentu", + "iiifsearchable.page.titleprefix": "Dokument: ", + "iiifsearchable.page.doi": "Stały link: ", + "iiifsearchable.page.issue": "Wydanie: ", + "iiifsearchable.page.description": "Opis: ", + "iiifviewer.fullscreen.notice": "Wyświetl na pełnym ekranie dla lepszego widoku.", + "iiif.listelement.badge": "Multimedia obrazu", + "iiif.page.titleprefix": "Obraz: ", + "iiif.page.doi": "Stały link: ", + "iiif.page.issue": "Numer wydania: ", + "iiif.page.description": "Opis: ", + "loading.bitstream": "Ładowanie pliku...", + "loading.bitstreams": "Ładowanie plików...", + "loading.browse-by": "Ładowanie pozycji...", + "loading.browse-by-page": "Ładowanie strony...", + "loading.collection": "Ładowanie kolekcji...", + "loading.collections": "Ładowanie kolekcji...", + "loading.content-source": "Ładowanie źródła treści...", + "loading.community": "Ładowanie zbioru...", + "loading.default": "Ładowanie...", + "loading.item": "Ładowanie pozycji...", + "loading.items": "Ładowanie pozycji...", + "loading.mydspace-results": "Ładowanie pozycji...", + "loading.objects": "Ładowanie...", + "loading.recent-submissions": "Ładowanie ostatnich zgłoszeń...", + "loading.search-results": "Ładowanie wyników wyszukiwania...", + "loading.sub-collections": "Ładowanie podkolekcji...", + "loading.sub-communities": "Ładowanie podzbioru...", + "loading.top-level-communities": "Ładowanie zbioru wyszego szczebla...", + "login.form.email": "Adres e-mail", + "login.form.forgot-password": "Nie pamiętasz hasła?", + "login.form.header": "Zaloguj się do DSpace", + "login.form.new-user": "Nie masz konta? Zarejestruj się.", + "login.form.or-divider": "lub", + "login.form.orcid": "Zaloguj za pomocą ORCID", + "login.form.oidc": "Zaloguj za pomocą OIDC", + "login.form.password": "Hasło", + "login.form.shibboleth": "Zaloguj za pomocą Shibboleth", + "login.form.submit": "Zaloguj się", + "login.title": "Zaloguj", + "login.breadcrumbs": "Zaloguj", + "logout.form.header": "Wyloguj się z DSpace", + "logout.form.submit": "Wyloguj się", + "logout.title": "Wylogowywanie", + "menu.header.admin": "Panel administracyjny", + "menu.header.image.logo": "Logo repozytorium", + "menu.header.admin.description": "Menu administratora", + "menu.section.access_control": "Uprawnienia", + "menu.section.access_control_authorizations": "Dostępy", + "menu.section.access_control_groups": "Grupy", + "menu.section.access_control_people": "Użytkownicy", + "menu.section.admin_search": "Wyszukiwanie administracyjne", + "menu.section.browse_community": "Ten zbiór", + "menu.section.browse_community_by_author": "Wg autorów", + "menu.section.browse_community_by_issue_date": "Wg daty wydania", + "menu.section.browse_community_by_title": "Wg tytułów", + "menu.section.browse_global": "Wszystko na DSpace", + "menu.section.browse_global_by_author": "Wg autorów", + "menu.section.browse_global_by_dateissued": "Wg daty wydania", + "menu.section.browse_global_by_subject": "Wg tematu", + "menu.section.browse_global_by_title": "Wg tytułu", + "menu.section.browse_global_communities_and_collections": "Zbiory i kolekcje", + "menu.section.control_panel": "Panel sterowania", + "menu.section.curation_task": "Zadanie administracyjne", + "menu.section.edit": "Edytuj", + "menu.section.edit_collection": "Kolekcja", + "menu.section.edit_community": "Zbiór", + "menu.section.edit_item": "Pozycja", + "menu.section.export": "Eksport", + "menu.section.export_collection": "Kolekcja", + "menu.section.export_community": "Zbiór", + "menu.section.export_item": "Pozycja", + "menu.section.export_metadata": "Metadane", + "menu.section.icon.access_control": "Sekcja menu Uprawnienia", + "menu.section.icon.admin_search": "Sekcja menu Wyszukiwanie administracyjne", + "menu.section.icon.control_panel": "Sekcja menu Panel sterowania", + "menu.section.icon.curation_tasks": "Sekcja menu Zadanie administracyjne", + "menu.section.icon.edit": "Sekcja menu Edycja", + "menu.section.icon.export": "Sekcja menu Eksport", + "menu.section.icon.find": "Sekcja menu Wyszukiwanie", + "menu.section.icon.import": "Sekcja menu Import", + "menu.section.icon.new": "Sekcja menu Dodaj", + "menu.section.icon.pin": "Przypnij boczny pasek", + "menu.section.icon.processes": "Sekcja menu Procesy", + "menu.section.icon.registries": "Sekcja menu Rejestry", + "menu.section.icon.statistics_task": "Sekcja menu Zadanie statystyczne", + "menu.section.icon.workflow": "Sekcja menu Zarządzanie workflow", + "menu.section.icon.unpin": "Odepnij boczny pasek", + "menu.section.import": "Import", + "menu.section.import_batch": "Import masowy (ZIP)", + "menu.section.import_metadata": "Metadane", + "menu.section.new": "Dodaj", + "menu.section.new_collection": "Kolekcja", + "menu.section.new_community": "Zbiór", + "menu.section.new_item": "Pozycja", + "menu.section.new_item_version": "Wersja pozycji", + "menu.section.new_process": "Proces", + "menu.section.pin": "Przypnij pasek boczny", + "menu.section.unpin": "Odepnij pasek boczny", + "menu.section.processes": "Procesy", + "menu.section.registries": "Rejestry", + "menu.section.registries_format": "Formaty", + "menu.section.registries_metadata": "Metadane", + "menu.section.statistics": "Statystyki", + "menu.section.statistics_task": "Zadanie statystyczne", + "menu.section.toggle.access_control": "Przełącz sekcję Uprawnienia", + "menu.section.toggle.control_panel": "Przełącz sekcję Panel sterowania", + "menu.section.toggle.curation_task": "Przełącz sekcję Zadanie kuratora", + "menu.section.toggle.edit": "Przełącz sekcję Edytuj", + "menu.section.toggle.export": "Przełącz sekcję Eksport", + "menu.section.toggle.find": "Przełącz sekcję Wyszukiwanie", + "menu.section.toggle.import": "Przełącz sekcję Import", + "menu.section.toggle.new": "Przełącz nową sekcję", + "menu.section.toggle.registries": "Przełącz sekcję Rejestry", + "menu.section.toggle.statistics_task": "Przełącz sekcję Zadanie statystyczne", + "menu.section.workflow": "Zarządzaj Workflow", + "mydspace.breadcrumbs": "Mój DSpace", + "mydspace.description": "", + "mydspace.messages.controller-help": "Wybierz tę opcję, aby przesłać wiadomość do zgłaszającego.", + "mydspace.messages.description-placeholder": "Wpisz swoją wiadomość tutaj...", + "mydspace.messages.hide-msg": "Ukryj wiadomość", + "mydspace.messages.mark-as-read": "Oznacz jako przeczytane", + "mydspace.messages.mark-as-unread": "Oznacz jako nieprzeczytane", + "mydspace.messages.no-content": "Brak treści.", + "mydspace.messages.no-messages": "Brak wiadomości.", + "mydspace.messages.send-btn": "Wysłano", + "mydspace.messages.show-msg": "Pokaż wiadomość", + "mydspace.messages.subject-placeholder": "Temat...", + "mydspace.messages.submitter-help": "Wybierz tę opcję, aby przesłać wiadomość do osoby kontrolującej.", + "mydspace.messages.title": "Wiadomości", + "mydspace.messages.to": "Do", + "mydspace.new-submission": "Nowe zgłoszenie", + "mydspace.new-submission-external": "Import medatanych z zewnętrznego źródła", + "mydspace.new-submission-external-short": "Import metadanych", + "mydspace.results.head": "Twoje zadania", + "mydspace.results.no-abstract": "Brak abstraktu", + "mydspace.results.no-authors": "Brak autorów", + "mydspace.results.no-collections": "Brak kolekcji", + "mydspace.results.no-date": "Brak daty", + "mydspace.results.no-files": "Brak plików", + "mydspace.results.no-results": "Brak pozycji do wyświetlenia", + "mydspace.results.no-title": "Brak tytułu", + "mydspace.results.no-uri": "Brak Uri", + "mydspace.search-form.placeholder": "Wyszukaj w mydspace...", + "mydspace.show.workflow": "Wszystkie zadania", + "mydspace.show.workspace": "Twoje zadania", + "mydspace.status.mydspaceArchived": "Zarchiwizowano", + "mydspace.status.mydspaceValidation": "Walidacja", + "mydspace.status.mydspaceWaitingController": "Oczekiwanie na redaktora", + "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkspace": "Wersja robocza", + "mydspace.title": "Mój DSpace", + "mydspace.upload.upload-failed": "Bład podczas tworzenia nowej wersji roboczej. Sprawdź poprawność plików i spróbuj ponownie.", + "mydspace.upload.upload-failed-manyentries": "Plik jest niemożliwy do przetworzenia. Wykryto wiele wejść, a dopuszczalne jest tylko jedno dla jednego pliku.", + "mydspace.upload.upload-failed-moreonefile": "Zapytanie niemożliwe do przetworzenia. Tylko jeden plik jest dopuszczalny.", + "mydspace.upload.upload-multiple-successful": "Utworzono {{qty}} przestrzeni roboczych.", + "mydspace.view-btn": "Widok", + "nav.browse.header": "Cały DSpace", + "nav.community-browse.header": "Wg zbiorów", + "nav.language": "Zmień język", + "nav.login": "Zaloguj", + "nav.logout": "Menu profilu użytkownika i wylogowywanie", + "nav.main.description": "Główny pasek nawigacji", + "nav.mydspace": "Mój DSpace", + "nav.profile": "Profil", + "nav.search": "Wyszukiwanie", + "nav.statistics.header": "Statystyki", + "nav.stop-impersonating": "Przestań impersonifikować użytkownika", + "nav.toggle": "Przełącz nawigację", + "nav.user.description": "Pasek profilu użytkownika", + "none.listelement.badge": "Pozycja", + "person.listelement.badge": "Osoba", + "person.listelement.no-title": "Nie znaleziono imienia", + "person.page.birthdate": "Data urodzenia", + "person.page.edit": "Edytuj pozycję", + "person.page.email": "Adres e-mail", + "person.page.firstname": "Imię", + "person.page.jobtitle": "Stanowisko", + "person.page.lastname": "Nazwisko", + "person.page.link.full": "Pokaż wszystkie metadane", + "person.page.orcid": "ORCID", + "person.page.orcid.create": "Utwórz ORCID ID", + "person.page.orcid.granted-authorizations": "Udzielone dostępy", + "person.page.orcid.grant-authorizations": "Udziel dostępu", + "person.page.orcid.link": "Połącz z ORCID ID", + "person.page.orcid.orcid-not-linked-message": "ORCID iD tego profilu ({{ orcid }}) nie jest połączony z bazą ORCID lub połączenie wygasło.", + "person.page.orcid.unlink": "Odepnij z ORCID", + "person.page.orcid.unlink.processing": "Procesowanie...", + "person.page.orcid.missing-authorizations": "Brak dostępów", + "person.page.orcid.missing-authorizations-message": "Brakuj następujących dostępów:", + "person.page.orcid.no-missing-authorizations-message": "Świetnie! To miejsce jest puste, co oznacza, że masz dostęp do wszystkich uprawnień, które są dostępne w Twojej instytucji.", + "person.page.orcid.no-orcid-message": "Brak przypisanego ORCID iD. Poprez wybranie przycisku poniżej możesz powiązać ten profil wraz z kontem ORCID.", + "person.page.orcid.profile-preferences": "Preferencje profilu", + "person.page.orcid.funding-preferences": "Preferencje finansowania", + "person.page.orcid.publications-preferences": "Preferencje publikacji", + "person.page.orcid.remove-orcid-message": "Jeśli chcesz usunąć Twój ORCID, skontaktuj się z administratorem repozytorium", + "person.page.orcid.save.preference.changes": "Aktualizuj ustawienia", + "person.page.orcid.sync-profile.affiliation": "Afiliacja", + "person.page.orcid.sync-profile.biographical": "Biografia", + "person.page.orcid.sync-profile.education": "Edukacja", + "person.page.orcid.sync-profile.identifiers": "Identyfikatory", + "person.page.orcid.sync-fundings.all": "Wszystkie źrodła finansowania", + "person.page.orcid.sync-fundings.mine": "Moje źrodła finansowania", + "person.page.orcid.sync-fundings.my_selected": "Wybrane źródła finansowania", + "person.page.orcid.sync-fundings.disabled": "Nieaktywne", + "person.page.orcid.sync-publications.all": "Wszystkie publikacje", + "person.page.orcid.sync-publications.mine": "Moje publikacje", + "person.page.orcid.sync-publications.my_selected": "Wybrane publikacje", + "person.page.orcid.sync-publications.disabled": "Nieaktywne", + "person.page.orcid.sync-queue.discard": "Odrzuć zmianę i nie synchronizuj z ORCID", + "person.page.orcid.sync-queue.discard.error": "Rekord kolejki ORCID nie został odrzucony", + "person.page.orcid.sync-queue.discard.success": "Rekord kolejki ORCID został odrzucony", + "person.page.orcid.sync-queue.empty-message": "Rejestr kolejki w ORCID jest pusty", + "person.page.orcid.sync-queue.description.affiliation": "Afiliacje", + "person.page.orcid.sync-queue.description.country": "Kraj", + "person.page.orcid.sync-queue.description.education": "Edukacja", + "person.page.orcid.sync-queue.description.external_ids": "Zewnętrzne identyfikatory", + "person.page.orcid.sync-queue.description.other_names": "Inne imiona", + "person.page.orcid.sync-queue.description.qualification": "Kwalifikacje", + "person.page.orcid.sync-queue.description.researcher_urls": "URL naukowca", + "person.page.orcid.sync-queue.description.keywords": "Słowa kluczowe", + "person.page.orcid.sync-queue.tooltip.insert": "Dodaj nowy wpis w rejestrze ORCID", + "person.page.orcid.sync-queue.tooltip.update": "Aktualizuj ten wpis w rejestrze ORCID", + "person.page.orcid.sync-queue.tooltip.delete": "Usuń ten wpis z rejestru ORCID", + "person.page.orcid.sync-queue.tooltip.publication": "Publikacja", + "person.page.orcid.sync-queue.tooltip.affiliation": "Afiliacja", + "person.page.orcid.sync-queue.tooltip.education": "Edukacja", + "person.page.orcid.sync-queue.tooltip.qualification": "Kwalifikacje", + "person.page.orcid.sync-queue.tooltip.other_names": "Inna nazwa", + "person.page.orcid.sync-queue.tooltip.country": "Kraj", + "person.page.orcid.sync-queue.tooltip.keywords": "Słowa kluczowe", + "person.page.orcid.sync-queue.tooltip.external_ids": "Zewnętrzny identyfikator", + "person.page.orcid.sync-queue.tooltip.researcher_urls": "URL naukowca", + "person.page.orcid.sync-queue.send": "Synchronizuj z rejestrem ORCID", + "person.page.orcid.sync-queue.send.unauthorized-error.title": "Wysłanie zgłoszenia do ORCID nieudane z powodu braku uprawnień.", + "person.page.orcid.sync-queue.send.unauthorized-error.content": "Wybierz here, aby wystąpić o niezbędne uprawnienia. Jeśli problem wciąż występuje, skontaktuj się z administratorem", + "person.page.orcid.sync-queue.send.bad-request-error": "Wysłanie zgłoszenia do ORCID nie powiodło się ponieważ źródła wysłane do rejestru ORCID nie jest poprawne", + "person.page.orcid.sync-queue.send.error": "Wysłanie zgłoszenia do ORCID nie powiodło się", + "person.page.orcid.sync-queue.send.conflict-error": "Zgłoszenie do ORCID nie powiodło się, ponieważ ta pozycja jest już dodana do rejestru ORCID", + "person.page.orcid.sync-queue.send.not-found-warning": "Pozycja nie istnieje już w rejestrze ORCID.", + "person.page.orcid.sync-queue.send.success": "Zgłoszenie do ORCID zostało zakończone pomyślnie", + "person.page.orcid.sync-queue.send.validation-error": "Dane, które chcesz zsynchronizować z ORCID nie są poprawne", + "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "Waluta jest wymagana", + "person.page.orcid.sync-queue.send.validation-error.external-id.required": "Aby wysłać pozycję, należy podać przynajmniej jeden identyfikator", + "person.page.orcid.sync-queue.send.validation-error.title.required": "Tytuł jest wymagany", + "person.page.orcid.sync-queue.send.validation-error.type.required": "Typ jest wymagany", + "person.page.orcid.sync-queue.send.validation-error.start-date.required": "Data początkowa jest wymagana", + "person.page.orcid.sync-queue.send.validation-error.funder.required": "Instytucja finansująca jest wymagana", + "person.page.orcid.sync-queue.send.validation-error.organization.required": "Instytucja jest wymagana", + "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "Nazwa instytucji jest wymagana", + "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "Aby wysłać instytucję, należy podać adres", + "person.page.orcid.sync-queue.send.validation-error.organization.city-required": "Aby wysłać adres, należy podać miasto", + "person.page.orcid.sync-queue.send.validation-error.organization.country-required": "Aby wysłać adres, należy podać kraj", + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.required": "Wymagany jest identyfikator umożliwiający rozróżnienie instytucji. Obsługiwane identyfikatory to GRID, Ringgold, kod LEI oraz identyfikatory z rejestru instytucji finansujących Crossref.", + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.value-required": "Należy uzupełnić wartość w identyfikatorze instytucji", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "Należy uzupełnić źródło w identyfikatorze instytucji", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "Źródło jednego z identyfikatorów organizcji jest niepoprawne. Wspierane źródła to RINGGOLD, GRID, LEI and FUNDREF", + "person.page.orcid.synchronization-mode": "Tryb synchronizacji", + "person.page.orcid.synchronization-mode.batch": "Wsad", + "person.page.orcid.synchronization-mode.label": "Tryb synchronizacji", + "person.page.orcid.synchronization-mode-message": "Włącz tryb 'Manual' synchronizacja, aby wyłaczyć tryb synchronizacji wsadowej, wtedy dane do rejestru ORCID będą musiały zostać wysłane ręcznie", + "person.page.orcid.synchronization-settings-update.success": "Opcje synchronizacji zostały zaktualizowane", + "person.page.orcid.synchronization-settings-update.error": "Opcje synchronizacji nie zostały zaktualizowane", + "person.page.orcid.synchronization-mode.manual": "Ręczna", + "person.page.orcid.scope.authenticate": "Uzyskaj swój ORCID iD", + "person.page.orcid.scope.read-limited": "Przeczytaj informacje o ustawieniach widoczności z firmami trzeciami", + "person.page.orcid.scope.activities-update": "Dodaj/aktualizuj swoje aktywności naukowe", + "person.page.orcid.scope.person-update": "Dodaj/aktualizuj inne informacje o Tobie", + "person.page.orcid.unlink.success": "Odłączenie Twojego profilu od rejestru ORCID powiodło się", + "person.page.orcid.unlink.error": "Wystąpił błąd podczas odłączania Twojego profilu od rejestru ORCID. Spróbuj ponownie", + "person.page.staffid": "ID pracownika", + "person.page.titleprefix": "Osoba: ", + "person.search.results.head": "Wyniki wyszukiwania użytkowników", + "person.search.title": "Wyniki wyszukiwania użytkowników", + "process.new.select-parameters": "Parametry", + "process.new.cancel": "Anuluj", + "process.new.submit": "Zapisz", + "process.new.select-script": "Skrypt", + "process.new.select-script.placeholder": "Wybierz skrypt...", + "process.new.select-script.required": "Skrypt jest wymagany", + "process.new.parameter.file.upload-button": "Wybierz plik...", + "process.new.parameter.file.required": "Proszę wybrać plik", + "process.new.parameter.string.required": "Wartość parametru jest wymagana", + "process.new.parameter.type.value": "wartość", + "process.new.parameter.type.file": "plik", + "process.new.parameter.required.missing": "Te parametry są wymagane, ale nie zostały uzupełnione:", + "process.new.notification.success.title": "Udało się", + "process.new.notification.success.content": "Udało się stworzyć proces", + "process.new.notification.error.title": "Błąd", + "process.new.notification.error.content": "Wystąpił błąd podczas tworzenia procesu", + "process.new.header": "Utwórz nowy proces", + "process.new.title": "Utwórz nowy proces", + "process.new.breadcrumbs": "Utwórz nowy proces", + "process.detail.arguments": "Argumenty", + "process.detail.arguments.empty": "Do tego procesu nie zostały przypisane żadne argumenty", + "process.detail.back": "Cofnij", + "process.detail.output": "Dane wyjściowe procesu", + "process.detail.logs.button": "Odzyskaj dane wyjściowe procesu", + "process.detail.logs.loading": "Odzyskiwanie", + "process.detail.logs.none": "Ten proces nie ma danych wyjściowych", + "process.detail.output-files": "Pliki", + "process.detail.output-files.empty": "Ten proces nie ma żadnych plików danych wyjściowych", + "process.detail.script": "Skrypt", + "process.detail.title": "Proces: {{ id }} - {{ name }}", + "process.detail.start-time": "Czas rozpoczęcia procesu", + "process.detail.end-time": "Czas zakończenia procesu", + "process.detail.status": "Status", + "process.detail.create": "Stwórz podobny proces", + "process.overview.table.finish": "Czas zakończenia (UTC)", + "process.overview.table.id": "Identyfikator procesu", + "process.overview.table.name": "Nazwa", + "process.overview.table.start": "Czas rozpoczęcia (UTC)", + "process.overview.table.status": "Status", + "process.overview.table.user": "Użytkownik", + "process.overview.title": "Przegląd procesów", + "process.overview.breadcrumbs": "Przegląd procesów", + "process.overview.new": "Nowy", + "profile.breadcrumbs": "Zaktualizuj profil", + "profile.card.identify": "Dane", + "profile.card.security": "Bezpieczeństwo", + "profile.form.submit": "Zaktualizuj profil", + "profile.groups.head": "Posiadane uprawnienia do kolekcji", + "profile.head": "Zaktualizuj profil", + "profile.metadata.form.error.firstname.required": "Imię jest wymagane", + "profile.metadata.form.error.lastname.required": "Nazwisko jest wymagane", + "profile.metadata.form.label.email": "Adres e-mail", + "profile.metadata.form.label.firstname": "Imię", + "profile.metadata.form.label.language": "Język", + "profile.metadata.form.label.lastname": "Nazwisko", + "profile.metadata.form.label.phone": "Telefon kontaktowy", + "profile.metadata.form.notifications.success.content": "Zmiany w profilu zostały zapisane.", + "profile.metadata.form.notifications.success.title": "Profil zapisany", + "profile.notifications.warning.no-changes.content": "Nie dokonano żadnych zmian w profilu.", + "profile.notifications.warning.no-changes.title": "Brak zmian", + "profile.security.form.error.matching-passwords": "Hasła nie są identyczne.", + "profile.security.form.info": "Możesz wprowadzić nowe hasło w polu poniżej i zatwierdzić poprzez ponowne wpisanie. Hasło musi mieć przynajmniej 6 znaków.", + "profile.security.form.label.password": "Hasło", + "profile.security.form.label.passwordrepeat": "Potwierdź hasło", + "profile.security.form.notifications.success.content": "Twoje zmiany w haśle zostały zapisane.", + "profile.security.form.notifications.success.title": "Hasło zapisane", + "profile.security.form.notifications.error.title": "Błąd podczas próby zmiany hasła", + "profile.security.form.notifications.error.not-same": "Hasła nie są identyczne.", + "profile.title": "Zaktualizuj profil", + "profile.card.researcher": "Profil naukowca", + "project.listelement.badge": "Projekt badawczy", + "project.page.contributor": "Autorzy", + "project.page.description": "Opis", + "project.page.edit": "Edytuj pozycję", + "project.page.expectedcompletion": "Spodziewany termin zakończenia", + "project.page.funder": "Instytucje finansujące", + "project.page.id": "ID", + "project.page.keyword": "Słowa kluczowe", + "project.page.status": "Status", + "project.page.titleprefix": "Projekt badawczy: ", + "project.search.results.head": "Wyniki wyszukiwania projektów", + "publication.listelement.badge": "Publikacja", + "publication.page.description": "Opis", + "publication.page.edit": "Edytuj pozycję", + "publication.page.journal-issn": "ISSN czasopisma", + "publication.page.journal-title": "Tytuł czasopisma", + "publication.page.publisher": "Wydawca", + "publication.page.titleprefix": "Publikacja: ", + "publication.page.volume-title": "Tytuł tomu", + "publication.search.results.head": "Wyniki wyszukiwania publikacji", + "publication.search.title": "Wyszukiwanie publikacji", + "media-viewer.next": "Nowy", + "media-viewer.previous": "Poprzedni", + "media-viewer.playlist": "Playlista", + "register-email.title": "Rejestracja nowego użytkownika", + "register-page.create-profile.header": "Stwórz profil", + "register-page.create-profile.identification.header": "Dane", + "register-page.create-profile.identification.email": "Adres e-mail", + "register-page.create-profile.identification.first-name": "Imię *", + "register-page.create-profile.identification.first-name.error": "Wpisz imię", + "register-page.create-profile.identification.last-name": "Nazwisko *", + "register-page.create-profile.identification.last-name.error": "Wpisz nazwisko", + "register-page.create-profile.identification.contact": "Telefon kontaktowy", + "register-page.create-profile.identification.language": "Język", + "register-page.create-profile.security.header": "Bezpieczeństwo", + "register-page.create-profile.security.info": "Wprowadź nowe hasło w polu poniżej i zatwierdź poprzez ponowne wpisanie w drugim polu. Hasło musi mieć przynajmniej 6 znaków.", + "register-page.create-profile.security.label.password": "Hasło *", + "register-page.create-profile.security.label.passwordrepeat": "Potwierdź hasło *", + "register-page.create-profile.security.error.empty-password": "Wprowadź hasło w polu poniżej.", + "register-page.create-profile.security.error.matching-passwords": "Hasła nie są identyczne.", + "register-page.create-profile.submit": "Rejestracja zakończona", + "register-page.create-profile.submit.error.content": "Coś się nie udało podczas rejestracji nowego użytkownika.", + "register-page.create-profile.submit.error.head": "Rejestracja nie powiodła się", + "register-page.create-profile.submit.success.content": "Rejestracja powiodła się. Zalogowano jako stworzony użytkownik.", + "register-page.create-profile.submit.success.head": "Rejestracja zakończona", + "register-page.registration.header": "Rejestracja nowego użytkownika", + "register-page.registration.info": "Zarejestruj się, aby otrzymywać wiadomości o nowych pozycjach w obserowanych kolekcjach, a także przesyłać nowe pozycje do repozytorium.", + "register-page.registration.email": "Adres e-mail *", + "register-page.registration.email.error.required": "Wypełnij adres e-mail", + "register-page.registration.email.error.pattern": "Wypełnij poprawny adres e-mail", + "register-page.registration.email.hint": "Ten adres e-mail będzie zweryfikowany i będziesz go używać jako swój login.", + "register-page.registration.submit": "Zarejestruj się", + "register-page.registration.success.head": "Wiadomość weryfikacyjna zostałą wysłana", + "register-page.registration.success.content": "Wiadomość została wysłana na adres e-mail {{ email }}. Zawiera ona unikatowy link i dalsze instrukcje postępowania.", + "register-page.registration.error.head": "Błąd podczas próby rejestracji adresu e-mail", + "register-page.registration.error.content": "Błąd podczas próby rejestracji adresu e-mail: {{ email }}", + "relationships.add.error.relationship-type.content": "Nie znaleziono dopasowania dla typu relacji {{ type }} pomiędzy dwoma pozycjami", + "relationships.add.error.server.content": "Błąd serwera", + "relationships.add.error.title": "Nie można dodać relacji", + "relationships.isAuthorOf": "Autorzy", + "relationships.isAuthorOf.Person": "Autorzy (osoby)", + "relationships.isAuthorOf.OrgUnit": "Autorzy (jednostki organizacyjne)", + "relationships.isIssueOf": "Numery czasopisma", + "relationships.isJournalIssueOf": "Numer czasopisma", + "relationships.isJournalOf": "Czasopisma", + "relationships.isOrgUnitOf": "Jednostki organizacyjne", + "relationships.isPersonOf": "Autorzy", + "relationships.isProjectOf": "Projekty badawcze", + "relationships.isPublicationOf": "Publikacje", + "relationships.isPublicationOfJournalIssue": "Artykuły", + "relationships.isSingleJournalOf": "Czasopismo", + "relationships.isSingleVolumeOf": "Tom czasopisma", + "relationships.isVolumeOf": "Tomy czasopisma", + "relationships.isContributorOf": "Autorzy", + "relationships.isContributorOf.OrgUnit": "Autor (Jednostka organizacyjna)", + "relationships.isContributorOf.Person": "Autor", + "relationships.isFundingAgencyOf.OrgUnit": "Instytucja finansująca", + "repository.image.logo": "Logo repozytorium", + "repository.title.prefix": "DSpace Angular :: ", + "researcher.profile.action.processing": "Procesowanie...", + "researcher.profile.associated": "Przypisanie profilu badacza", + "researcher.profile.create.new": "Utwórz nowy", + "researcher.profile.create.success": "Profil badacza został utworzony", + "researcher.profile.create.fail": "Wystąpił błąd poczas tworzenia profilu badacza.", + "researcher.profile.delete": "Usuń", + "researcher.profile.expose": "Ujawnij", + "researcher.profile.hide": "Ukryj", + "researcher.profile.not.associated": "Profil badacza nie został jeszcze przypisany", + "researcher.profile.view": "Widok", + "researcher.profile.private.visibility": "PRYWATNY", + "researcher.profile.public.visibility": "PUBLICZNY", + "researcher.profile.status": "Status:", + "researcherprofile.claim.not-authorized": "Nie masz uprawnień, aby wystąpić o tę pozycję. Aby otrzymać więcej szczegółów, skontaktuj się z administratorami.", + "researcherprofile.error.claim.body": "Wystąpił błąd podczas wystąpienia z prośbą o przypisanie profilu. Spróbuj ponownie później.", + "researcherprofile.error.claim.title": "Błąd", + "researcherprofile.success.claim.body": "Wystąpienie z prośbą o przypisanie profilu udane", + "researcherprofile.success.claim.title": "Sukces", + "repository.title.prefixDSpace": "DSpace Angular ::", + "resource-policies.add.button": "Dodaj", + "resource-policies.add.for.": "Dodaj nową politykę", + "resource-policies.add.for.bitstream": "Dodaj nową politykę dla plików", + "resource-policies.add.for.bundle": "Dodaj nową politykę paczek", + "resource-policies.add.for.item": "Dodaj nową politykę pozycji", + "resource-policies.add.for.community": "Dodaj nową politykę zbioru", + "resource-policies.add.for.collection": "Dodaj nową politykę kolekcji", + "resource-policies.create.page.heading": "Utwórz nową politykę zasobu dla ", + "resource-policies.create.page.failure.content": "Wystąpił błąd podczas dodawania polityki zasobów.", + "resource-policies.create.page.success.content": "Działanie powiodło się", + "resource-policies.create.page.title": "Utwórz nową politykę zasobu", + "resource-policies.delete.btn": "Usuń zaznaczone", + "resource-policies.delete.btn.title": "Usuń zaznaczone polityki zasobów", + "resource-policies.delete.failure.content": "Wystąpił błąd podczas usuwania wybranych polityk zasobów.", + "resource-policies.delete.success.content": "Działanie powiodło się", + "resource-policies.edit.page.heading": "Edytuj politykę zasobu ", + "resource-policies.edit.page.failure.content": "Wystąpił błąd poczas edytowania polityki zasobu.", + "resource-policies.edit.page.success.content": "Działanie udało się", + "resource-policies.edit.page.title": "Edytuj politykę zasobu", + "resource-policies.form.action-type.label": "Wybierz ten typ akcji", + "resource-policies.form.action-type.required": "Musisz wybrać akcję polityki zasobu.", + "resource-policies.form.eperson-group-list.label": "Użytkownik lub grupa, która otrzyma uprawnienia.", + "resource-policies.form.eperson-group-list.select.btn": "Wybierz", + "resource-policies.form.eperson-group-list.tab.eperson": "Wyszukaj użytkownika", + "resource-policies.form.eperson-group-list.tab.group": "Wyszukaj grupę", + "resource-policies.form.eperson-group-list.table.headers.action": "Akcja", + "resource-policies.form.eperson-group-list.table.headers.id": "ID", + "resource-policies.form.eperson-group-list.table.headers.name": "Nazwa", + "resource-policies.form.date.end.label": "Data zakończenia", + "resource-policies.form.date.start.label": "Data rozpoczęcia", + "resource-policies.form.description.label": "Opis", + "resource-policies.form.name.label": "Nazwa", + "resource-policies.form.policy-type.label": "Wybierz typ polityki", + "resource-policies.form.policy-type.required": "Musisz wybrać typ polityki zasobu.", + "resource-policies.table.headers.action": "Akcja", + "resource-policies.table.headers.date.end": "Data zakończenia", + "resource-policies.table.headers.date.start": "Data rozpoczęcia", + "resource-policies.table.headers.edit": "Edytuj", + "resource-policies.table.headers.edit.group": "Edytuj grupę", + "resource-policies.table.headers.edit.policy": "Edytuj politykę", + "resource-policies.table.headers.eperson": "Użytkownik", + "resource-policies.table.headers.group": "Grupa", + "resource-policies.table.headers.id": "ID", + "resource-policies.table.headers.name": "Nazwa", + "resource-policies.table.headers.policyType": "typ", + "resource-policies.table.headers.title.for.bitstream": "Polityki dla plików", + "resource-policies.table.headers.title.for.bundle": "Polityki dla paczek", + "resource-policies.table.headers.title.for.item": "Polityki dla pozycji", + "resource-policies.table.headers.title.for.community": "Polityki dla zbioru", + "resource-policies.table.headers.title.for.collection": "Polityki dla kolekcji", + "search.description": "", + "search.switch-configuration.title": "Pokaż", + "search.title": "Szukaj", + "search.breadcrumbs": "Szukaj", + "search.search-form.placeholder": "Szukaj w repozytorium...", + "search.filters.applied.f.author": "Autor", + "search.filters.applied.f.dateIssued.max": "Data zakończenia", + "search.filters.applied.f.dateIssued.min": "Data rozpoczęcia", + "search.filters.applied.f.dateSubmitted": "Data zgłoszenia", + "search.filters.applied.f.discoverable": "Ukryty", + "search.filters.applied.f.entityType": "Typ pozycji", + "search.filters.applied.f.has_content_in_original_bundle": "Ma przypisane pliki", + "search.filters.applied.f.itemtype": "Typ", + "search.filters.applied.f.namedresourcetype": "Status", + "search.filters.applied.f.subject": "Temat", + "search.filters.applied.f.submitter": "Zgłaszający", + "search.filters.applied.f.jobTitle": "Stanowisko", + "search.filters.applied.f.birthDate.max": "Data zakończenia tworzenia", + "search.filters.applied.f.birthDate.min": "Data rozpoczęcia tworzenia", + "search.filters.applied.f.withdrawn": "Wycofane", + "search.filters.filter.author.head": "Autor", + "search.filters.filter.author.placeholder": "Autor", + "search.filters.filter.author.label": "Wyszukaj autora", + "search.filters.filter.birthDate.head": "Data urodzenia", + "search.filters.filter.birthDate.placeholder": "Data urodzenia", + "search.filters.filter.birthDate.label": "Wyszukaj datę urodzenia", + "search.filters.filter.collapse": "Ukryj filtr", + "search.filters.filter.creativeDatePublished.head": "Data opublikowania", + "search.filters.filter.creativeDatePublished.placeholder": "Data opublikowania", + "search.filters.filter.creativeDatePublished.label": "Wyszukaj datę opublikowania", + "search.filters.filter.creativeWorkEditor.head": "Redaktor", + "search.filters.filter.creativeWorkEditor.placeholder": "Redaktor", + "search.filters.filter.creativeWorkEditor.label": "Wyszukaj redaktora", + "search.filters.filter.creativeWorkKeywords.head": "Słowo kluczowe", + "search.filters.filter.creativeWorkKeywords.placeholder": "Słowo kluczowe", + "search.filters.filter.creativeWorkKeywords.label": "Wyszukaj temat", + "search.filters.filter.creativeWorkPublisher.head": "Wydawca", + "search.filters.filter.creativeWorkPublisher.placeholder": "Wydawca", + "search.filters.filter.creativeWorkPublisher.label": "Wyszukaj wydawcę", + "search.filters.filter.dateIssued.head": "Data", + "search.filters.filter.dateIssued.max.placeholder": "Data maksymalna", + "search.filters.filter.dateIssued.max.label": "Koniec", + "search.filters.filter.dateIssued.min.placeholder": "Data minimalna", + "search.filters.filter.dateIssued.min.label": "Start", + "search.filters.filter.dateSubmitted.head": "Data zgłoszenia", + "search.filters.filter.dateSubmitted.placeholder": "Data zgłoszenia", + "search.filters.filter.dateSubmitted.label": "Wyszukaj datę zgłoszenia", + "search.filters.filter.discoverable.head": "Ukryty", + "search.filters.filter.withdrawn.head": "Wycofane", + "search.filters.filter.entityType.head": "Typ pozycji", + "search.filters.filter.entityType.placeholder": "Typ pozycji", + "search.filters.filter.entityType.label": "Wyszukaj typ pozycji", + "search.filters.filter.expand": "Rozwiń filtr", + "search.filters.filter.has_content_in_original_bundle.head": "Ma przypisane pliki", + "search.filters.filter.itemtype.head": "Typ", + "search.filters.filter.itemtype.placeholder": "Typ", + "search.filters.filter.itemtype.label": "Wyszukaj typ", + "search.filters.filter.jobTitle.head": "Stanowisko", + "search.filters.filter.jobTitle.placeholder": "Stanowisko", + "search.filters.filter.jobTitle.label": "Wyszukaj stanowisko", + "search.filters.filter.knowsLanguage.head": "Znajomość języka", + "search.filters.filter.knowsLanguage.placeholder": "Znajomość języka", + "search.filters.filter.knowsLanguage.label": "Wyszukaj wg znajomości języka", + "search.filters.filter.namedresourcetype.head": "Status", + "search.filters.filter.namedresourcetype.placeholder": "Status", + "search.filters.filter.namedresourcetype.label": "Wyszukaj status", + "search.filters.filter.objectpeople.head": "Osoby", + "search.filters.filter.objectpeople.placeholder": "Osoby", + "search.filters.filter.objectpeople.label": "Wyszukaj użytkowników", + "search.filters.filter.organizationAddressCountry.head": "Kraj", + "search.filters.filter.organizationAddressCountry.placeholder": "Kraj", + "search.filters.filter.organizationAddressCountry.label": "Wyszukaj kraj", + "search.filters.filter.organizationAddressLocality.head": "Miasto", + "search.filters.filter.organizationAddressLocality.placeholder": "Miasto", + "search.filters.filter.organizationAddressLocality.label": "Wyszukaj miasto", + "search.filters.filter.organizationFoundingDate.head": "Data założenia", + "search.filters.filter.organizationFoundingDate.placeholder": "Data założenia", + "search.filters.filter.organizationFoundingDate.label": "Wyszukaj datę założenia", + "search.filters.filter.scope.head": "Zakres", + "search.filters.filter.scope.placeholder": "Filtr zakresu", + "search.filters.filter.scope.label": "Wyszukaj filtr zakresu", + "search.filters.filter.show-less": "Pokaż mniej", + "search.filters.filter.show-more": "Pokaż więcej", + "search.filters.filter.subject.head": "Temat", + "search.filters.filter.subject.placeholder": "Temat", + "search.filters.filter.subject.label": "Wyszukaj temat", + "search.filters.filter.submitter.head": "Zgłaszający", + "search.filters.filter.submitter.placeholder": "Zgłaszający", + "search.filters.filter.submitter.label": "Wyszukaj zgłaszającego", + "search.filters.entityType.JournalIssue": "Numer czasopisma", + "search.filters.entityType.JournalVolume": "Tom czasopisma", + "search.filters.entityType.OrgUnit": "Jednostka organizacyjna", + "search.filters.has_content_in_original_bundle.true": "Tak", + "search.filters.has_content_in_original_bundle.false": "Nie", + "search.filters.discoverable.true": "Nie", + "search.filters.discoverable.false": "Tak", + "search.filters.withdrawn.true": "Tak", + "search.filters.withdrawn.false": "Nie", + "search.filters.head": "Filtry", + "search.filters.reset": "Resetuj filtry", + "search.filters.search.submit": "Zastosuj", + "search.form.search": "Wyszukaj", + "search.form.search_dspace": "W repozytorium", + "search.form.scope.all": "W całym DSpace", + "search.results.head": "Wyniki wyszukiwania", + "default.search.results.head": "Wyniki wyszukiwania", + "search.results.no-results": "Twoj wyszukiwanie nie zwróciło żadnych rezultatów. Masz problem ze znalezieniem tego czego szukasz? Spróbuj użyć", + "search.results.no-results-link": "fraz podobnych do Twojego wyszukiwania", + "search.results.empty": "Twoje wyszukiwanie nie zwróciło żadnych rezultatów.", + "search.sidebar.close": "Wróć do wyników wyszukiwania", + "search.sidebar.filters.title": "Filtry", + "search.sidebar.open": "Narzędzia wyszukiwania", + "search.sidebar.results": "wyniki", + "search.sidebar.settings.rpp": "Wyników na stronie", + "search.sidebar.settings.sort-by": "Sortuj według", + "search.sidebar.settings.title": "Ustawienia", + "search.view-switch.show-detail": "Wyświetl widok szczegółowy", + "search.view-switch.show-grid": "Wyświetl jako siatkę", + "search.view-switch.show-list": "Wyświetl jako listę", + "sorting.ASC": "Rosnąco", + "sorting.DESC": "Malejąco", + "sorting.dc.title.ASC": "Tytułami rosnąco", + "sorting.dc.title.DESC": "Tytułami malejąco", + "sorting.score.ASC": "Najmniej trafne", + "sorting.score.DESC": "Najbardziej trafne", + "sorting.dc.date.issued.ASC": "Data wydania rosnąco", + "sorting.dc.date.issued.DESC": "Data wydania malejąco", + "sorting.dc.date.accessioned.ASC": "Data dostępu rosnąco", + "sorting.dc.date.accessioned.DESC": "Data dostępu malejąco", + "sorting.lastModified.ASC": "Ostatnia modyfikacja rosnąco", + "sorting.lastModified.DESC": "Ostatnia modyfikacja malejąco", + "statistics.title": "Statystyki", + "statistics.header": "Statystyki dla {{ scope }}", + "statistics.breadcrumbs": "Statystyki", + "statistics.page.no-data": "Brak dostępnych danych", + "statistics.table.no-data": "Brak dostępnych danych", + "statistics.table.header.views": "Wyświetlenia", + "submission.edit.breadcrumbs": "Edytuj zgłoszenie", + "submission.edit.title": "Edytuj zgłoszenie", + "submission.general.cancel": "Anuluj", + "submission.general.cannot_submit": "Nie masz uprawnień, aby utworzyć nowe zgłoszenie.", + "submission.general.deposit": "Deponuj", + "submission.general.discard.confirm.cancel": "Anuluj", + "submission.general.discard.confirm.info": "Czy na pewno? To działanie nie może zostać cofnięte.", + "submission.general.discard.confirm.submit": "Tak, na pewno", + "submission.general.discard.confirm.title": "Odrzuć zgłoszenie", + "submission.general.discard.submit": "Odrzuć", + "submission.general.info.saved": "Zapisane", + "submission.general.info.pending-changes": "Niezapisane zmiany", + "submission.general.save": "Zapisz", + "submission.general.save-later": "Zapisz wersję roboczą", + "submission.import-external.page.title": "Importuj metdane z zewnętrznego źródła", + "submission.import-external.title": "Importuj metadane z zewnętrznego źródła", + "submission.import-external.title.Journal": "Importuj czasopismo z zewnętrznego źródła", + "submission.import-external.title.JournalIssue": "Importuj numer czasopisma z zewnętrznego źródła", + "submission.import-external.title.JournalVolume": "Importuj tom czasopisma z zewnętrznego źródła", + "submission.import-external.title.OrgUnit": "Importuj wydawcę z zewnętrznego źródła", + "submission.import-external.title.Person": "Importuj osobę z zewnętrznego źródła", + "submission.import-external.title.Project": "Importuj projekt z zewnętrznego źródła", + "submission.import-external.title.Publication": "Importuj publikację z zewnętrznego źródła", + "submission.import-external.title.none": "Importuj metadane z zewnętrznego źródła", + "submission.import-external.page.hint": "Enter a query above to find items from the web to import in to DSpace.", + "submission.import-external.back-to-my-dspace": "Powrót do MyDSpace", + "submission.import-external.search.placeholder": "Wyszukaj zewnętrzne źródła danych", + "submission.import-external.search.button": "Szukaj", + "submission.import-external.search.button.hint": "Zacznij wpisywać frazę, aby wyszukać", + "submission.import-external.search.source.hint": "Wybierz zewnętrzne źródło", + "submission.import-external.source.ads": "NASA/ADS", + "submission.import-external.source.arxiv": "arXiv", + "submission.import-external.source.cinii": "CiNii", + "submission.import-external.source.crossref": "CrossRef", + "submission.import-external.source.loading": "ładowanie...", + "submission.import-external.source.sherpaJournal": "Czasopisma w SHERPA", + "submission.import-external.source.sherpaJournalIssn": "Czasopisma w SHERPA wg ISSN", + "submission.import-external.source.sherpaPublisher": "Wydawcy w SHERPA", + "submission.import-external.source.openAIREFunding": "Finansowanie OpenAIRE API", + "submission.import-external.source.orcid": "ORCID", + "submission.import-external.source.orcidWorks": "ORCID", + "submission.import-external.source.pubmed": "Pubmed", + "submission.import-external.source.pubmedeu": "Pubmed Europe", + "submission.import-external.source.lcname": "Nazwy Biblioteki Kongresu", + "submission.import-external.source.scielo": "SciELO", + "submission.import-external.source.scopus": "Scopus", + "submission.import-external.source.vufind": "VuFind", + "submission.import-external.source.wos": "Web Of Science", + "submission.import-external.source.epo": "Europejski Urząd Patentowy (EPO)", + "submission.import-external.preview.title.Journal": "Podgląd czasopisma", + "submission.import-external.preview.title.OrgUnit": "Podgląd organizacji", + "submission.import-external.preview.title.Person": "Podgląd osoby", + "submission.import-external.preview.title.Project": "Podgląd projektu", + "submission.import-external.preview.title.Publication": "Podgląd publikacji", + "submission.import-external.preview.subtitle": "Metadane poniżej zostały zaimportowane z zewnętrznego źródła. Niektóre pola zostaną uzupełnione automatycznie, kiedy rozpoczniesz zgłaszanie pozycji.", + "submission.import-external.preview.button.import": "Rozpocznij zgłoszenie", + "submission.import-external.preview.error.import.title": "Błąd zgłoszenia", + "submission.import-external.preview.error.import.body": "Wystąpił błąd podczas procesu importowania pozycji z zewnętrznego źródła.", + "submission.sections.describe.relationship-lookup.close": "Zamknij", + "submission.sections.describe.relationship-lookup.external-source.added": "Udało się dodać wpis do selekcji", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Importuj zdalnego autora", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Importuj zdalne czasopismo", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Importuj zdalny numer czasopisma", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Importuj zdalny tom czasopisma", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Projekt", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "Nowy typ danych dodany!", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Projekt", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Finansowanie OpenAIRE API", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Importuj zdalnego autora", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Person": "Importuj zdalną osobę", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Product": "Importuj zdalny produkt", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Equipment": "Importuj zdalną aparaturę badawczą", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Event": "Importuj zdalne wydarzenie", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Funding": "Importuj zdalną instytucję finansującą", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.OrgUnit": "Importuj zdalnego wydawcę", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Patent": "Importuj zdalnie patent", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Project": "Importuj zdalnie projekt", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Importuj zdalnie publikację", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Udało się dodać autora do selekcji", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.new-entity": "Udało się zaimportować i dodać zewnętrznego autora do selekcji", + "submission.sections.describe.relationship-lookup.external-source.import-modal.authority": "Nadrzędność", + "submission.sections.describe.relationship-lookup.external-source.import-modal.authority.new": "Importuj jako nową, lokalną, nadrzędną pozycję", + "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel": "Anuluj", + "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Wybierz kolekcję do zaimportowania nowych pozycji", + "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Typ danych", + "submission.sections.describe.relationship-lookup.external-source.import-modal.entities.new": "Importuj jako nowy lokalny typ danych", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "Importuj z LC Name", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "Importuj z ORCID", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "Importuj z Sherpa Journal", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "Importuj z Sherpa Publisher", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "Importuj z PubMed", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "Importuj z arXiv", + "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Import", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Importuj zdalne czasopismo", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Successfully added local journal to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Successfully imported and added external journal to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title": "Importuj zdalny numer czasopisma", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Udało się dodać lokalne czasopismo do zaznaczenia", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity": "Udało się zaimportować i dodać czasopismo zewnętrzne do zaznaczenia", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.title": "Importuj zdalny numer czasopisma", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Udało się dodać lokalny numer czasopismo do zaznaczenia", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Udało się zaimportować i dodać zewnętrzny numer czasopisma do zaznaczenia", + "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Wybierz lokalne powiązanie:", + "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Odznacz wszystko", + "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Odznacz stronę", + "submission.sections.describe.relationship-lookup.search-tab.loading": "Ładowanie...", + "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Wyszukaj zapytanie", + "submission.sections.describe.relationship-lookup.search-tab.search": "Zastosuj", + "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Wyszukaj...", + "submission.sections.describe.relationship-lookup.search-tab.select-all": "Zaznacz wszystko", + "submission.sections.describe.relationship-lookup.search-tab.select-page": "Zaznacz stronę", + "submission.sections.describe.relationship-lookup.selected": "Zaznacz {{ size }} pozycji", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Autorzy lokalni ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Czasopisma lokalne ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Projekty lokalne ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Publikacje lokalne ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Autorzy lokalni ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Lokalne jednostki organizacyjne ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Lokalne paczki danych ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Lokalne pliki danych ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Lokalne czasopisma ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Lokalne numery czasopism ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Lokalne numery czasopism ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Lokalne tomy czasopism ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Lokalne tomy czasopism ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Sherpa Journals ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaPublisher": "Sherpa Publishers ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid": "ORCID ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "LC Names ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.arxiv": "arXiv ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Wyszukaj instytucje finansujące", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Wyszukaj finansowanie", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Wyszukaj jednostki organizacyjne", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Finansowanie OpenAIRE API", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projekty", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Instytucja finansująca projekt", + "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Finansowanie OpenAIRE API", + "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Projekt", + "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projekty", + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Instytucja finansująca projekt", + "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Wyszukaj...", + "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Aktualne zaznaczenie ({{ count }})", + "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Numery czasopisma", + "submission.sections.describe.relationship-lookup.title.JournalIssue": "Numery czasopisma", + "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Tomy czasopisma", + "submission.sections.describe.relationship-lookup.title.JournalVolume": "Tomy czasopisma", + "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Czasopisma", + "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication": "Autorzy", + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Instytucja finansująca", + "submission.sections.describe.relationship-lookup.title.Project": "Projekty", + "submission.sections.describe.relationship-lookup.title.Publication": "Publikacje", + "submission.sections.describe.relationship-lookup.title.Person": "Autorzy", + "submission.sections.describe.relationship-lookup.title.OrgUnit": "Jednostki organizacyjne", + "submission.sections.describe.relationship-lookup.title.DataPackage": "Paczki danych", + "submission.sections.describe.relationship-lookup.title.DataFile": "Pliki danych", + "submission.sections.describe.relationship-lookup.title.Funding Agency": "Instytucja finansująca", + "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Finansowanie", + "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Nadrzędna jednostka organizacyjna", + "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Przełącz na listę rozwijaną", + "submission.sections.describe.relationship-lookup.selection-tab.settings": "Ustawienia", + "submission.sections.describe.relationship-lookup.selection-tab.no-selection": "Twoje zaznaczenie jest puste.", + "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Wybrani autorzy", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Wybrane czasopisma", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Wybrane tomy czasopisma", + "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Wybrane projekty", + "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Wybrane publikacje", + "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Wybrani autorzy", + "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Wybrane jednostki organizacyjne", + "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Wybrane pakiety danych", + "submission.sections.describe.relationship-lookup.selection-tab.title.DataFile": "Wybrane pliki danych", + "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Wybrane czasopisma", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Wybrany numer wydania", + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Wybrany tom czasopisma", + "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Wybrane instytucje finansujące", + "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Wybrane finansowanie", + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Wybrany numer wydania", + "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Wybrana jednostka organizacyjna", + "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.epo": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.scopus": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.scielo": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.selection-tab.title": "Wyniki wyszukiwania", + "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Czy chcesz zapisać \"{{ value }}\" jako wariant imienia dla tego użytkownika, aby Ty lub inni użytkownicy mogli używać tego wariantu w przyszłych zgłoszeniach?. Jeśli nie, nadal możesz użyć tego wariantu w tym zgłoszeniu.", + "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Zapisz nowy wariant imienia", + "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Użyj tylko w tym zgłoszeniu", + "submission.sections.ccLicense.type": "Typ licencji", + "submission.sections.ccLicense.select": "Wybierz typ licencji…", + "submission.sections.ccLicense.change": "Zmień typ licencji…", + "submission.sections.ccLicense.none": "Brak dostępnych licencji", + "submission.sections.ccLicense.option.select": "Wybierz opcję…", + "submission.sections.ccLicense.link": "Wybrano licencję:", + "submission.sections.ccLicense.confirmation": "Udzielam powyższej licencji", + "submission.sections.general.add-more": "Dodaj więcej", + "submission.sections.general.collection": "Kolekcja", + "submission.sections.general.deposit_error_notice": "Wystąpił błąd podczas zgłaszania pozycji. Spróbuj ponownie później.", + "submission.sections.general.deposit_success_notice": "Udało się wprowadzić pozycję.", + "submission.sections.general.discard_error_notice": "Wystąpił błąd podczas odrzucania pozycji. Spróbuj ponownie później.", + "submission.sections.general.discard_success_notice": "Udało się odrzucić pozycję.", + "submission.sections.general.metadata-extracted": "Nowe metadane zostany rozpakowane i dodane do sekcji {{sectionId}}.", + "submission.sections.general.metadata-extracted-new-section": "Nowa sekcja {{sectionId}} została dodana do zgłoszenia.", + "submission.sections.general.no-collection": "Nie znaleziono kolekcji", + "submission.sections.general.no-sections": "Opcje niedostępne", + "submission.sections.general.save_error_notice": "Wystąpił błąd podczas zapisywania numeru. Spróbuj ponownie później. Po odświeżeniu strony niezapisane zmiany mogą zostać utracone.", + "submission.sections.general.save_success_notice": "Udało się zapisać zgłoszenie.", + "submission.sections.general.search-collection": "Szukaj kolekcji", + "submission.sections.general.sections_not_valid": "Niektóre sekcje są niekompletne.", + "submission.sections.submit.progressbar.CClicense": "Licencja Creative Commons", + "submission.sections.submit.progressbar.describe.recycle": "Odzyskaj", + "submission.sections.submit.progressbar.describe.stepcustom": "Opisz", + "submission.sections.submit.progressbar.describe.stepone": "Opisz", + "submission.sections.submit.progressbar.describe.steptwo": "Opisz", + "submission.sections.submit.progressbar.detect-duplicate": "Potencjalne duplikaty", + "submission.sections.submit.progressbar.license": "Zdeponuj licencję", + "submission.sections.submit.progressbar.upload": "Prześlij pliki", + "submission.sections.status.errors.title": "Błędy", + "submission.sections.status.valid.title": "Poprawność", + "submission.sections.status.warnings.title": "Ostrzeżenia", + "submission.sections.status.errors.aria": "ma błędy", + "submission.sections.status.valid.aria": "jest poprawne", + "submission.sections.status.warnings.aria": "ma ostrzeżenia", + "submission.sections.toggle.open": "Otwórz sekcję", + "submission.sections.toggle.close": "Zamknij sekcję", + "submission.sections.toggle.aria.open": "Rozwiń sekcję {{sectionHeader}}", + "submission.sections.toggle.aria.close": "Zwiń sekcję {{sectionHeader}}", + "submission.sections.upload.delete.confirm.cancel": "Anuluj", + "submission.sections.upload.delete.confirm.info": "Czy na pewno? To działanie nie może zostać cofnięte.", + "submission.sections.upload.delete.confirm.submit": "Tak, na pewno", + "submission.sections.upload.delete.confirm.title": "Usuń plik", + "submission.sections.upload.delete.submit": "Usuń", + "submission.sections.upload.download.title": "Pobierz plik", + "submission.sections.upload.drop-message": "Upuść pliki, aby załączyć je do tej pozycji", + "submission.sections.upload.edit.title": "Edytuj plik", + "submission.sections.upload.form.access-condition-label": "Typ dostępu", + "submission.sections.upload.form.date-required": "Data jest wymagana.", + "submission.sections.upload.form.date-required-from": "Data przyznania dostępu od jest wymagana.", + "submission.sections.upload.form.date-required-until": "Data przyznania dostępu do jest wymagana.", + "submission.sections.upload.form.from-label": "Pozwól na dostęp od", + "submission.sections.upload.form.from-placeholder": "Od", + "submission.sections.upload.form.group-label": "Grupa", + "submission.sections.upload.form.group-required": "Grupa jest wymagana", + "submission.sections.upload.form.until-label": "Pozwól na dostęp do", + "submission.sections.upload.form.until-placeholder": "Do", + "submission.sections.upload.header.policy.default.nolist": "Pliki wgrane do kolekcji {{collectionName}} będą dostępne dla poniższych grup:", + "submission.sections.upload.header.policy.default.withlist": "Zwróć uwagę na to, że pliki w kolekcji {{collectionName}} będą dostępne dla poniższych grup, z wyjątkiem tych, które zostały wyłączone z dostępu:", + "submission.sections.upload.info": "Tutaj znajdują się wszystkie pliki dodane w tym momencie do pozycji. Możesz zaktualizować metadane pliku i warunki dostępu lub przesłać dodatkowe pliki, przeciągając i opuszczając je gdziekolwiek na tej stronie", + "submission.sections.upload.no-entry": "Nie", + "submission.sections.upload.no-file-uploaded": "Pliki nie zostały jeszcze wgrane.", + "submission.sections.upload.save-metadata": "Zapisz metadane", + "submission.sections.upload.undo": "Anuluj", + "submission.sections.upload.upload-failed": "Przesyłanie nieudane", + "submission.sections.upload.upload-successful": "Przesyłanie udane", + "submission.submit.breadcrumbs": "Nowe zgłoszenie", + "submission.submit.title": "Nowe zgłoszenie", + "submission.workflow.generic.delete": "Usuń", + "submission.workflow.generic.delete-help": "Jeśli chcesz odrzucić tę pozycję, wybierz \"Delete\". Będzie wymagane potwierdzenie tej decyzji.", + "submission.workflow.generic.edit": "Edytuj", + "submission.workflow.generic.edit-help": "Wybierz tę opcję, aby zmienić metadane pozycji.", + "submission.workflow.generic.view": "Podgląd", + "submission.workflow.generic.view-help": "Wybierz tę opcję, aby wyświetlić metadane pozycji.", + "submission.workflow.tasks.claimed.approve": "Zatwierdź", + "submission.workflow.tasks.claimed.approve_help": "Jeśli ta pozycja ma zostać zatwierdzona i wprowadzona do kolekcji, wybierz \"Approve\".", + "submission.workflow.tasks.claimed.edit": "Edytuj", + "submission.workflow.tasks.claimed.edit_help": "Wybierz tę opcję, aby zmienić metadane pozycji.", + "submission.workflow.tasks.claimed.reject.reason.info": "Proszę wpisać powód odrzucenia zgłoszenia w poniższe pole, wskazując, czy zgłaszający może poprawić problem i ponownie przesłać zgłoszenie.", + "submission.workflow.tasks.claimed.reject.reason.placeholder": "Opisz powód odrzucenia zgłoszenia", + "submission.workflow.tasks.claimed.reject.reason.submit": "Odrzuć pozycję", + "submission.workflow.tasks.claimed.reject.reason.title": "Powód", + "submission.workflow.tasks.claimed.reject.submit": "Odrzuć", + "submission.workflow.tasks.claimed.reject_help": "Jeśli po przejrzeniu pozycji stwierdzono, że nie nadaje się ona do włączenia do kolekcji, wybierz opcję \"Reject\". Zostaniesz wtedy poproszony o określenie powodu odrzucenia, i wskazanie czy zgłaszający powinien wprowadzić zmiany i przesłać ponownie pozycję.", + "submission.workflow.tasks.claimed.return": "Cofnij do puli zadań", + "submission.workflow.tasks.claimed.return_help": "Cofnij zadanie do puli, aby inny użytkownik mógł się go podjąć.", + "submission.workflow.tasks.generic.error": "Podczas działania wystąpił błąd...", + "submission.workflow.tasks.generic.processing": "Procesowanie...", + "submission.workflow.tasks.generic.submitter": "Zgłaszający", + "submission.workflow.tasks.generic.success": "Udało się", + "submission.workflow.tasks.pool.claim": "Podejmij pracę", + "submission.workflow.tasks.pool.claim_help": "Przypisz to zadanie do siebie.", + "submission.workflow.tasks.pool.hide-detail": "Ukryj szczegóły", + "submission.workflow.tasks.pool.show-detail": "Pokaż szczegóły", + "thumbnail.default.alt": "Miniatura", + "thumbnail.default.placeholder": "Brak miniatury", + "thumbnail.project.alt": "Logo projektu", + "thumbnail.project.placeholder": "Obraz zastępczy projketu", + "thumbnail.orgunit.alt": "Logo jednostki organizacyjnej", + "thumbnail.orgunit.placeholder": "Obraz zastępczy jednostki organizacyjnej", + "thumbnail.person.alt": "Zdjęcie profilowe", + "thumbnail.person.placeholder": "Brak zdjęcia profilowego", + "title": "DSpace", + "vocabulary-treeview.header": "Widok drzewka", + "vocabulary-treeview.load-more": "Pokaż więcej", + "vocabulary-treeview.search.form.reset": "Resetuj", + "vocabulary-treeview.search.form.search": "Szukaj", + "vocabulary-treeview.search.no-result": "Brak pozycji do wyświetlenia", + "vocabulary-treeview.tree.description.nsi": "The Norwegian Science Index", + "vocabulary-treeview.tree.description.srsc": "Kategorie tematów badań", + "uploader.browse": "wyszukaj na swoim urządzeniu", + "uploader.drag-message": "Przeciągnij i upuść pliki tutaj", + "uploader.delete.btn-title": "Usuń", + "uploader.or": ", lub ", + "uploader.processing": "Procesowanie", + "uploader.queue-length": "Długość kolejki", + "virtual-metadata.delete-item.info": "Wybierz typy, dla których chcesz zapisać wirtualne metadane jako rzeczywiste metadane", + "virtual-metadata.delete-item.modal-head": "Wirtualne metadane tego powiązania", + "virtual-metadata.delete-relationship.modal-head": "Wybierz pozycje, dla których chcesz zapisać wirtualne metadane jako rzeczywiste metadane", + "workflowAdmin.search.results.head": "Zarządzaj procesami", + "workflow-item.edit.breadcrumbs": "Edytuj pozycję procesu", + "workflow-item.edit.title": "Edytuj pozycję procesu", + "workflow-item.delete.notification.success.title": "Usunięte", + "workflow-item.delete.notification.success.content": "Ten element procesu został usunięty", + "workflow-item.delete.notification.error.title": "Coś poszło nie tak", + "workflow-item.delete.notification.error.content": "Ten element procesu nie mógł zostać usunięty", + "workflow-item.delete.title": "Usuń element procesu", + "workflow-item.delete.header": "Usuń element procesu", + "workflow-item.delete.button.cancel": "Anuluj", + "workflow-item.delete.button.confirm": "Usuń", + "workflow-item.send-back.notification.success.title": "SOdeślij do zgłaszającego", + "workflow-item.send-back.notification.success.content": "Ten element procesu został odesłany do zgłaszającego", + "workflow-item.send-back.notification.error.title": "Coś poszło nie tak", + "workflow-item.send-back.notification.error.content": "Ten element procesu nie mógł zostać odesłany do zgłaszającego", + "workflow-item.send-back.title": "Odeślij element procesu do zgłaszającego", + "workflow-item.send-back.header": "Odeślij element procesu do zgłaszającego", + "workflow-item.send-back.button.cancel": "Anuluj", + "workflow-item.send-back.button.confirm": "Odeślij", + "workflow-item.view.breadcrumbs": "Widok procesu", + "idle-modal.header": "Sesja wkrótce wygaśnie", + "idle-modal.info": "Ze względów bezpieczeństwa sesja wygaśnie po {{ timeToExpire }} minutach nieaktywności. Twoja sesja wkrótce wygaśnie. Czy chcesz ją przedłużyć albo wylogować się?", + "idle-modal.log-out": "Wyloguj", + "idle-modal.extend-session": "Wydłuż sesję", + "workspace.search.results.head": "Twoje zadania", + "orgunit.listelement.badge": "Jednostka organizacyjna", + "orgunit.page.city": "Miasto", + "orgunit.page.country": "Kraj", + "orgunit.page.dateestablished": "Data założenia", + "orgunit.page.description": "Opis", + "orgunit.page.edit": "Edytuj pozycję", + "orgunit.page.id": "ID", + "orgunit.page.titleprefix": "Jednostka organizacyjna: ", + "pagination.options.description": "Opcje strony", + "pagination.results-per-page": "Wyników na stronę", + "pagination.showing.detail": "{{ range }} z {{ total }}", + "pagination.showing.label": "Teraz wyświetlane ", + "pagination.sort-direction": "Opcje sortowania", + "cookies.consent.purpose.sharing": "Udostępnianie", + "item.preview.dc.identifier.issn": "ISSN", + "500.page-internal-server-error": "Usługa niedostępna", + "500.help": "Serwer jest tymczasowo niezdolny do obsługi Twojego żądania z powodu przestoju konserwacyjnego lub problemów z przepustowością. Prosimy spróbować ponownie później.", + "500.link.home-page": "Zabierz mnie na stronę główną", + "error-page.description.401": "brak autoryzacji", + "error-page.description.403": "brak dostępu", + "error-page.description.500": "usługa niedostępna", + "error-page.description.404": "nie znaleziono strony", + "error-page.orcid.generic-error": "Podczas logowania za pomocą ORCID wystąpił błąd. Upewnij się, że udostępniłeś DSpace adres e-mail swojego konta ORCID. Jeśli błąd nadal występuje, skontaktuj się z administratorem", + "access-status.embargo.listelement.badge": "Embargo", + "access-status.metadata.only.listelement.badge": "Tylko metadane", + "access-status.open.access.listelement.badge": "Open Access", + "access-status.restricted.listelement.badge": "Brak dostępu", + "access-status.unknown.listelement.badge": "Nieznane", + "admin.access-control.groups.table.edit.buttons.remove": "Usuń \"{{name}}\"", + "admin.metadata-import.page.validateOnly": "Tylko waliduj", + "admin.metadata-import.page.validateOnly.hint": "Po wybraniu tej opcji przesłany plik CSV zostanie poddany walidacji. Otrzymasz raport o wykrytych zmianach, ale żadne zmiany nie zostaną zapisane.", + "bitstream.edit.form.iiifLabel.label": "Etykieta canvyIIIF", + "bitstream.edit.form.iiifLabel.hint": "Etykieta dla tego obrazu. Jeśli nie została dostarczona, zostanie użyta domyślna etykieta.", + "bitstream.edit.form.iiifToc.label": "Spis treści IIIF", + "bitstream.edit.form.iiifToc.hint": "Dodanie tekstu tutaj zapoczątkuje nowy zakres spisu treści.", + "bitstream.edit.form.iiifWidth.label": "Szerokość canvy IIIF", + "bitstream.edit.form.iiifWidth.hint": "Szerokość canvy jest zwykle równa szerokości obrazu.", + "bitstream.edit.form.iiifHeight.label": "Wysokość canvy IIIF", + "bitstream.edit.form.iiifHeight.hint": "Wysokość canvy jest zwykle równa szerokości obrazu.", + "browse.back.all-results": "Wszystkie wyniki wyszukiwania", + "pagination.next.button": "Następny", + "pagination.previous.button": "Poprzedni", + "pagination.next.button.disabled.tooltip": "Brak więcej stron z wynikami wyszukiwania", + "browse.startsWith": ", zaczyna się od {{ startsWith }}", + "browse.title.page": "Przeszukiwanie {{ collection }} wg {{ field }} {{ value }}", + "collection.edit.item.authorizations.load-bundle-button": "Załaduj więcej paczek", + "collection.edit.item.authorizations.load-more-button": "Załaduj więcej", + "collection.edit.item.authorizations.show-bitstreams-button": "Pokaż polityki plików dla paczek", + "comcol-role.edit.create.error.title": "Nie udało się utworzyć grupy dla roli '{{ role }}'", + "curation.form.submit.error.invalid-handle": "Nie ustalono identyfikatora dla tego obiektu", + "confirmation-modal.delete-profile.header": "Usuń profil", + "confirmation-modal.delete-profile.info": "Czy na pewno chcesz usunąć profil", + "confirmation-modal.delete-profile.cancel": "Anuluj", + "confirmation-modal.delete-profile.confirm": "Usuń", + "error.invalid-search-query": "Zapytanie nie jest poprawne. Wejdź na Solr query syntax, aby dowiedzieć się o najlepszych praktykach i dodatkowych informacjach o tym błędzie.", + "feed.description": "Aktualności", + "footer.link.feedback": "Prześlij uwagi", + "form.group-collapse": "Zwiń", + "form.group-collapse-help": "Kliknij tutaj, aby zwinąć", + "form.group-expand": "Rozwiń", + "form.group-expand-help": "Kliknij tutaj, aby rozwinąć", + "health.breadcrumbs": "Stan systemu", + "health-page.heading": "Stan systemu", + "health-page.info-tab": "Informacje", + "health-page.status-tab": "Status", + "health-page.error.msg": "Serwis stanu systemu jest tymczasowo niedostępny", + "health-page.property.status": "Kod statusu", + "health-page.section.db.title": "Baza danych", + "health-page.section.geoIp.title": "GeoIp", + "health-page.section.solrAuthorityCore.title": "Autentykacja", + "health-page.section.solrOaiCore.title": "OAI", + "health-page.section.solrSearchCore.title": "Wyszukiwarka", + "health-page.section.solrStatisticsCore.title": "Statystyki", + "health-page.section-info.app.title": "Backend aplikacji", + "health-page.section-info.java.title": "Java", + "health-page.status": "Status", + "health-page.status.ok.info": "operacyjny", + "health-page.status.error.info": "Wykryte problemy", + "health-page.status.warning.info": "Wykryte potencjalne problemy", + "health-page.title": "Stan systemu", + "health-page.section.no-issues": "Nie wykryto żadnych problemów", + "info.feedback.breadcrumbs": "Uwagi", + "info.feedback.head": "Uwagi", + "info.feedback.title": "Uwagi", + "info.feedback.info": "Dziękujemy za podzielenie się opinią na temat systemu DSpace. Doceniamy Twój wkład w lepsze działanie systemu!", + "info.feedback.email_help": "Ten adres zostanie użyty, aby przesłać odpowiedź na uwagi.", + "info.feedback.send": "Prześlij uwagi", + "info.feedback.comments": "Komentarz", + "info.feedback.email-label": "Twoj adres e-mail", + "info.feedback.create.success": "Uwagi przesłane!", + "info.feedback.error.email.required": "Poprawny adres e-mail jest wymagany", + "info.feedback.error.message.required": "Treść komentarza jest wymagana", + "info.feedback.page-label": "Strona", + "info.feedback.page_help": "Ta strona odnosi się do uwag.", + "item.orcid.return": "Powrót", + "item.truncatable-part.show-more": "Pokaż więcej", + "item.truncatable-part.show-less": "Pokaż mniej", + "item.page.orcid.title": "ORCID", + "item.page.orcid.tooltip": "Otwórz ustawienia ORCID", + "item.page.claim.button": "Podejmij pracę", + "item.page.claim.tooltip": "Podejmij pracę jako profil", + "item.version.create.modal.submitted.header": "Tworzenie nowej wersji...", + "item.version.create.modal.submitted.text": "Nowa wersja została utworzona. Mogło to trwać chwilę, jeśli pozycja ma wiele powiązań.", + "journal-relationships.search.results.head": "Wyniki wyszukiwania czasopism", + "menu.section.icon.health": "Sekcja menu Stan systemu", + "menu.section.health": "Stan systemu", + "metadata-export-search.tooltip": "Eksportuj wyniki wyszukiwania w formacie CSV", + "metadata-export-search.submit.success": "Eksport rozpoczął się", + "metadata-export-search.submit.error": "Eksport nie rozpoczął się", + "person.page.name": "Nazwa", + "person-relationships.search.results.head": "Wyniki wyszukiwania osób", + "profile.special.groups.head": "Autoryzacja do specjalnych grup, do których należysz", + "project-relationships.search.results.head": "Wyniki wyszukiwania projektów", + "publication-relationships.search.results.head": "Wyniki wyszukiwania publikacji", + "resource-policies.edit.page.target-failure.content": "Wystąpił błąd podczas edycji (użytkownika lub grupy) związany z polityką zasobu.", + "resource-policies.edit.page.other-failure.content": "Wystąpił błąd podczas edycji polityki zasobu. Użytkownik lub grupa zostały zaktualizowane pomyślnie.", + "resource-policies.form.eperson-group-list.modal.header": "Nie można zmienić typu", + "resource-policies.form.eperson-group-list.modal.text1.toGroup": "Nie można zastąpić użytkownika grupą.", + "resource-policies.form.eperson-group-list.modal.text1.toEPerson": "Nie można zastąpić grupy użytkownikiem.", + "resource-policies.form.eperson-group-list.modal.text2": "Usuń obecną polityke zasobu i stwórz nową o określonym typie.", + "resource-policies.form.eperson-group-list.modal.close": "Ok", + "search.results.view-result": "Widok", + "default-relationships.search.results.head": "Wyniki wyszukiwania", + "statistics.table.title.TotalVisits": "Wyświetlnia ogółem", + "statistics.table.title.TotalVisitsPerMonth": "Wyświetlenia w miesiącu", + "statistics.table.title.TotalDownloads": "Pobrania", + "statistics.table.title.TopCountries": "Wyświetlenia wg krajów", + "statistics.table.title.TopCities": "Wyświetlenia wg miast", + "submission.import-external.preview.title": "Podgląd pozycji", + "submission.import-external.preview.title.none": "Podgląd pozycji", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.none": "Import pozycji zdalnie", + "submission.sections.general.cannot_deposit": "Nie można zakończyć deponowania, ponieważ w formularzu wystąpiły błędy.
    Aby zakończyć deponowanie, wypełnij wszystkie obowiązkowe pola.", + "submission.sections.submit.progressbar.accessCondition": "Warunki dostępu do pozycji", + "submission.sections.submit.progressbar.sherpapolicy": "Polityki Sherpa", + "submission.sections.submit.progressbar.sherpaPolicies": "Informacje o polityce open access wydawcy.", + "submission.sections.status.info.title": "Dodatkowe informacje", + "submission.sections.status.info.aria": "Dodatkowe informacje", + "submission.sections.upload.form.access-condition-hint": "Wybierz w jaki sposób pliki dla tej pozycji po jest zdeponowaniu będą mogły być udostępnione", + "submission.sections.upload.form.from-hint": "Wybierz datę, od której ma zostać zastosowany warunek dostępu", + "submission.sections.upload.form.until-hint": "Wybierz datę, do której ma zostać zastosowany warunek dostępu", + "submission.sections.accesses.form.discoverable-description": "Jeśli checkbox jest zaznaczony, pozycja będzie wyświetlana w wynikach wyszukiwania. Jeśli checkbox jest odznaczony, dostęp do pozycji będzie dostępny tylko przez bezpośredni link, pozycja nie będzie wyświetlana w wynikach wyszukiwania.", + "submission.sections.accesses.form.discoverable-label": "Niemożliwe do wyszukania", + "submission.sections.accesses.form.access-condition-label": "Typ warunku dostępu", + "submission.sections.accesses.form.access-condition-hint": "Wybierz warunek dostępu, aby przypisać go do pozycji, kiedy zostanie zdeponowany.", + "submission.sections.accesses.form.date-required": "Data jest wymagana.", + "submission.sections.accesses.form.date-required-from": "Początkowa data przyznania dostępu jest wymagana.", + "submission.sections.accesses.form.date-required-until": "Końcowa data przyznania dostępu jest wymagana.", + "submission.sections.accesses.form.from-label": "Udziel dostępu od", + "submission.sections.accesses.form.from-hint": "Wybierz datę, od kiedy zostanie przyznany dostęp do tej pozycji", + "submission.sections.accesses.form.from-placeholder": "Od", + "submission.sections.accesses.form.group-label": "Grupa", + "submission.sections.accesses.form.group-required": "Grupa jest wymagana.", + "submission.sections.accesses.form.until-label": "Udziel dostępu do", + "submission.sections.accesses.form.until-hint": "Wybierz datę, do kiedy zostanie przyznany dostęp do tej pozycji", + "submission.sections.accesses.form.until-placeholder": "Do", + "submission.sections.sherpa.publication.information": "Informacje o publikacji", + "submission.sections.sherpa.publication.information.title": "Tytuł", + "submission.sections.sherpa.publication.information.issns": "Numery ISSN", + "submission.sections.sherpa.publication.information.url": "URL", + "submission.sections.sherpa.publication.information.publishers": "Wydawca", + "submission.sections.sherpa.publication.information.romeoPub": "Wydawca Romeo", + "submission.sections.sherpa.publication.information.zetoPub": "Wydawca Zeto", + "submission.sections.sherpa.publisher.policy": "Polityka wydawnicza", + "submission.sections.sherpa.publisher.policy.description": "Poniższe informacje zostały znalezione za pośrednictwem Sherpa Romeo. W oparciu o politykę Twojego wydawcy, zawiera ona porady dotyczące tego, czy embargo może być konieczne i/lub jakie pliki możesz przesłać. Jeśli masz pytania, skontaktuj się z administratorem strony poprzez formularz.", + "submission.sections.sherpa.publisher.policy.openaccess": "Rodzaje Open Access dozwolone przez politykę wydawniczą tego czasopisma są wymienione poniżej. Kliknij na wybrany rodzaj, aby przejść do szczegółowego widoku", + "submission.sections.sherpa.publisher.policy.more.information": "Aby uzuyskać więcej informacji, kliknij tutaj:", + "submission.sections.sherpa.publisher.policy.version": "Wersja", + "submission.sections.sherpa.publisher.policy.embargo": "Embargo", + "submission.sections.sherpa.publisher.policy.noembargo": "Brak embargo", + "submission.sections.sherpa.publisher.policy.nolocation": "Brak", + "submission.sections.sherpa.publisher.policy.license": "Licencja", + "submission.sections.sherpa.publisher.policy.prerequisites": "Wymagania wstępne", + "submission.sections.sherpa.publisher.policy.location": "Lokalizacja", + "submission.sections.sherpa.publisher.policy.conditions": "Wymagania", + "submission.sections.sherpa.publisher.policy.refresh": "Odśwież", + "submission.sections.sherpa.record.information": "Informacje o rekordzie", + "submission.sections.sherpa.record.information.id": "ID", + "submission.sections.sherpa.record.information.date.created": "Data utworzenia", + "submission.sections.sherpa.record.information.date.modified": "Ostatnia modyfikacja", + "submission.sections.sherpa.record.information.uri": "URI", + "submission.sections.sherpa.error.message": "Wystąpił błąd podczas pobierania informacji z Sherpa", + "submission.workspace.generic.view": "Podgląd", + "submission.workspace.generic.view-help": "Wybierz tę opcje, aby zobaczyć metadane.", + "workflow.search.results.head": "Zadania na workflow", + "workspace-item.view.breadcrumbs": "Widok wersji roboczej", + "workspace-item.view.title": "Widok wersji roboczej", + "researcher.profile.change-visibility.fail": "Wystąpił niespodziewany błąd podczas zmiany widoczności profilu", + "person.page.orcid.link.processing": "Łączenie profilu z ORCID...", + "person.page.orcid.link.error.message": "Coś poszło nie tak podczas łączenia z ORCID. Jeśli problem będzie się powtarzał, skontaktuj się z administratorem.", + "person.page.orcid.sync-queue.table.header.type": "Typ", + "person.page.orcid.sync-queue.table.header.description": "Opis", + "person.page.orcid.sync-queue.table.header.action": "Akcja", + "person.page.orcid.sync-queue.tooltip.project": "Projekt", + "person.page.orcid.sync-queue.send.validation-error.country.invalid": "Niewłaściwy dwuznakowy kod kraju ISO 3166", + "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "Wymagana data publikacji to co najmniej rok po 1900", + "person.page.orcid.synchronization-mode-funding-message": "Wybierz, czy chcesz wysłać swoje projekty na swoją listę informacji o projektach w profilu ORCID.", + "person.page.orcid.synchronization-mode-publication-message": "Wybierz, czy chcesz wysłać swoje publikacje na swoją listę informacji o publikacjach w profilu ORCID.", + "person.page.orcid.synchronization-mode-profile-message": "Wybierz, czy chcesz wysłać swoje dane bibliograficzne lub osobiste identyfikatory do swojego profilu ORCID.", + "person.orcid.sync.setting": "Ustawienia synchronizacji z ORCID", + "person.orcid.registry.queue": "Kolejka rejestru z ORCID", + "person.orcid.registry.auth": "Autoryzacje z ORCID", + "home.recent-submissions.head": "Najnowsze publikacje", + "submission.sections.sherpa-policy.title-empty": "Nie wybrano ISSN i informacje o polityce wydawniczej czasopisma są niedostępne", + "admin.batch-import.breadcrumbs": "Import zbiorczy", + "admin.batch-import.page.dropMsg": "Drop a batch ZIP to import", + "admin.batch-import.page.dropMsgReplace": "Drop to replace the batch ZIP to import", + "admin.batch-import.page.error.addFile": "Najpierw wybierz plik (ZIP)", + "admin.batch-import.page.header": "Import masowy", + "admin.batch-import.page.help": "Wybierz kolekcję do zaimportowania kolekcji. Potem, upuść lub przeszukaj plik SAF, który zawiera pozycje do importu", + "admin.batch-import.page.remove": "usuń", + "admin.batch-import.page.validateOnly.hint": "Jeśli wybrano, importowany plik ZIP będzie walidowany. Otrzymasz raport ze zmianami, ale żadne zmiany nie zostaną wykonane zapisane.", + "collection.form.correctionSubmissionDefinition": "Wzór zgłoszenia do prośby o korektę", + "comcol-role.edit.delete.error.title": "Nie udało się usunąć roli '{{ role }}' dla grup", + "confirmation-modal.export-batch.header": "Eksport maasowy (ZIP) {{ dsoName }}", + "confirmation-modal.export-batch.info": "Czy na pewno chcesz wyeksportować plik ZIP z {{ dsoName }}", + "dso-selector.export-batch.dspaceobject.head": "Eksport masowy (ZIP) z", + "menu.section.export_batch": "Eksport masowy (ZIP)", + "nav.user-profile-menu-and-logout": "Profil użytkownika i wylogowywanie", + "process.detail.actions": "Akcje", + "process.detail.delete.body": "Czy na pewno chcesz usunąć bieżący proces?", + "process.detail.delete.button": "Usuń proces", + "process.detail.delete.cancel": "Anuluj", + "process.detail.delete.confirm": "Usuń proces", + "process.detail.delete.error": "Nie udało się usunąć procesu", + "process.detail.delete.header": "Usuń proces", + "process.detail.delete.success": "Proces został usunięty.", + "admin.batch-import.title": "Masowy import", + "admin.metadata-import.page.button.select-collection": "Wybierz kolekcję", + "admin.registries.bitstream-formats.table.id": "ID", + "admin.registries.schema.fields.table.id": "ID", + "cookies.consent.app.description.google-recaptcha": "Podczas rejestracji i odzyskiwania hasła używamy narzędzia google reCAPTCHA", + "cookies.consent.app.disable-all.description": "Przełącz, aby zaakceptować lub odrzucić wszystkie", + "cookies.consent.app.disable-all.title": "Akceptowacja lub odrzucenie wszystkich", + "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", + "cookies.consent.content-modal.service": "usługa", + "cookies.consent.content-modal.services": "usługi", + "cookies.consent.content-notice.description.no-privacy": "Zbieramy i przetwarzamy Twoje dane w celu: autentykacji, ustawień preferencji i zgód oraz do celów statystycznych.", + "cookies.consent.content-notice.title": "Zgoda na ciasteczka", + "cookies.consent.ok": "Zgadzam się", + "cookies.consent.purpose.registration-password-recovery": "Rejestracja i odzyskiwanie hasła", + "cookies.consent.save": "Zapisz", + "curation-task.task.citationpage.label": "Generuj stronę z cytowaniem", + "dso-selector.import-batch.dspaceobject.head": "Import masowy z", + "orgunit.listelement.no-title": "Brak tytyłu", + "process.bulk.delete.error.body": "Proces z ID {{processId}} nie może być usunięty. Pozostałe procesy zostaną usunięte.", + "process.bulk.delete.error.head": "Błąd podczas usuwania procesu", + "process.bulk.delete.success": "{{count}} proces/y został/y usunięte", + "process.overview.delete": "Usuń {{count}} proces/y", + "process.overview.delete.body": "Czy na pewno usunąć {{count}} proces/y?", + "process.overview.delete.clear": "Wyczyść selekcję procesów do usunięcia", + "process.overview.delete.header": "Usuń procesy", + "process.overview.delete.processing": "{{count}} procesów zostanie usuniętych. Poczekaj, gdy usuwanie się zakończy. Może to zająć chwilę.", + "process.overview.table.actions": "Akcje", + "profile.security.form.label.current-password": "Aktualne hasło", + "profile.security.form.notifications.error.change-failed": "Wystąpił błąd podczas próby zmiany hasła. Sprawdź czy aktualne hasło jest prawidłowe.", + "profile.security.form.notifications.error.general": "Uzupełnij wymagane pola dla bezpieczeństwa na formularzu", + "register-page.registration.error.recaptcha": "Wystąpił błąd podczas próby autentykacji przez reCAPTCHA", + "register-page.registration.google-recaptcha.must-accept-cookies": "Aby się zarejestrować, musisz zaakceptować ciasteczka dla rejestracji i odzyskiwania hasła (Google reCaptcha).", + "register-page.registration.google-recaptcha.notification.message.error": "Wystąpił błąd podczas weryfikacji reCaptcha", + "register-page.registration.google-recaptcha.notification.message.expired": "Weryfikacja wygasła. Zweryfikuj ponownie.", + "register-page.registration.google-recaptcha.notification.title": "Google reCaptcha", + "register-page.registration.google-recaptcha.open-cookie-settings": "Otwórz ustawienia plików cookies", + "search.results.response.500": "Wystąpił błąd podczas wysyłania zapytania. Spróbuj ponownie później", + "submission.sections.license.granted-label": "Potwierdzam akceptację powyższej licencji", + "submission.sections.license.notgranted": "Najpierw musisz zaakceptować licencję", + "submission.sections.license.required": "Najpierw musisz zaakceptować licencję", + "confirmation-modal.export-batch.confirm": "Eksportuj", + "confirmation-modal.export-batch.cancel": "Anuluj", + "admin.access-control.bulk-access.breadcrumbs": "Zbiorcza edycja dostępu do osiągnięć", + "administrativeBulkAccess.search.results.head": "Wyniki wyszukiwania", + "admin.access-control.bulk-access": "Zbiorcza edycja dostępu do osiągnięć", + "admin.access-control.bulk-access.title": "Zbiorcza edycja dostępu do osiągnięć", + "admin.access-control.bulk-access-browse.header": "Krok 1: Wybierz pozycje", + "admin.access-control.bulk-access-browse.search.header": "Wyszukaj", + "admin.access-control.bulk-access-browse.selected.header": "Obecny wybór({{number}})", + "admin.access-control.bulk-access-settings.header": "Krok 2: Działanie do wykonania", + "admin.access-control.groups.form.tooltip.editGroupPage": "Na tej stronie można edytować opcje grupy i przypisane do niej osoby. W górnej sekcji można edytować nazwę i opis grupy, chyba że jest to grupa administratorów dla zbioru i kolekcji. W tym przypadku nazwa i opis grupy są generowane automatycznie i nie można ich edytować. W kolejnych sekcjach można edytować przypisanie użytkowników do grupy. Szczegóły na [stronie](https://wiki.lyrasis.org/display/DSDOC7x/Create+or+manage+a+user+group).", + "admin.access-control.groups.form.tooltip.editGroup.addEpeople": "Aby dodać lub usunąć użytkownika do/z tej grupy, kliknij przycisk 'Przeglądaj wszystko' lub użyj paska wyszukiwania poniżej, aby wyszukać użytkowników (użyj listy rozwijanej po lewej stronie paska wyszukiwania, aby wybrać, czy chcesz wyszukiwać według imienia i nazwiska, czy według adresu e-mail). Następnie kliknij ikonę plusa przy każdym użytkowniku, którego chcesz dodać do poniższej listy, lub ikonę kosza przy każdym użytkowniku, którego chcesz usunąć. Poniższa lista może mieć kilka stron: użyj strzałek pod listą, aby przejść do kolejnych stron. Gdy wszystkie zmiany zostaną wprowadzone, zapisz je, klikając przycisk 'Zapisz' w górnej sekcji.", + "admin.access-control.groups.form.tooltip.editGroup.addSubgroups": "Aby dodać lub usunąć podgrupę do/z tej grupy, kliknij przycisk 'Przeglądaj wszystko' lub użyj wyszukiwarki poniżej, aby wyszukać użytkowników. Następnie kliknij ikonę plusa przy każdym użytkowniku, którego chcesz dodać do poniższej listy, lub ikonę kosza przy każdym użytkowniku, którego chcesz usunąć. Poniższa lista może składać się z kilku stron: użyj przycisków pod listą, aby przejść do kolejnych stron. Gdy wszystkie zmiany zostaną wprowadzone, zapisz je, klikając przycisk 'Zapisz' w górnej sekcji.", + "admin.workflow.item.workspace": "Przestrzeń robocza", + "admin.workflow.item.policies": "Polityki", + "admin.workflow.item.supervision": "Recenzja", + "admin.batch-import.page.toggle.help": "It is possible to perform import either with file upload or via URL, use above toggle to set the input source", + "admin.metadata-import.page.error.addFileUrl": "Najpierw wpisz URL pliku!", + "admin.metadata-import.page.toggle.upload": "Prześlij", + "admin.metadata-import.page.toggle.url": "URL", + "admin.metadata-import.page.urlMsg": "Wpisz URL pliku ZIP, aby wykonać import masowy", + "advanced-workflow-action.rating.form.rating.label": "Ocena", + "advanced-workflow-action.rating.form.rating.error": "Ta pozycja musi zostać oceniona", + "advanced-workflow-action.rating.form.review.label": "Recenzja", + "advanced-workflow-action.rating.form.review.error": "Musisz wpisać tekst recenzji", + "advanced-workflow-action.rating.description": "Wybierz ocenę poniżej", + "advanced-workflow-action.rating.description-requiredDescription": "Wybierz ocenę poniżej i wpisz uzasadnienie", + "advanced-workflow-action.select-reviewer.description-single": "Wybierz recenzenta przed zdeponowaniem pozycji", + "advanced-workflow-action.select-reviewer.description-multiple": "Wybierz jednego lub więcej recenzentów przed zdeponowaniem pozycji", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.head": "Użytkownicy", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.head": "Dodaj użytkownika", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.button.see-all": "Przeglądaj wszystko", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.headMembers": "Aktualni użytkownicy", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.metadata": "Metadane", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.email": "Adres e-mail (dokładny)", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.button": "Wyszukaj", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.id": "ID", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.name": "Nazwa", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity": "Tożsamość", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "Adres e-mail", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.netid": "NetID", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit": "Usuń / Dodaj", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove": "Usuń użytkownika z nazwę \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember": "Dodano użytkownika o nazwie: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.addMember": "Nie dodano użytkownika: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.deleteMember": "Usunięto użytkownika: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.deleteMember": "Nie usunięto użytkownika: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Dodano użytkownika \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "Brak aktywnej grupy, najpierw wpisz nazwę.", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-members-yet": "W tej grupie nie ma użytkowników, wyszukaj ich i dodaj.", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-items": "Nie znaleziono żadnych użytkowników", + "advanced-workflow-action.select-reviewer.no-reviewer-selected.error": "Recenzent nie jest wybrany.", + "bitstream.edit.notifications.error.primaryBitstream.title": "Wystąpił błąd podczas zapisu pliku.", + "browse.comcol.by.srsc": "Wg słów kluczowych", + "browse.metadata.srsc.breadcrumbs": "Przeglądaj wg słów kluczowych", + "browse.startsWith.input": "Filtr", + "browse.taxonomy.button": "Przeglądaj", + "search.browse.item-back": "Powrót do wyników wyszukiwania", + "claimed-approved-search-result-list-element.title": "Zaakceptowano", + "claimed-declined-search-result-list-element.title": "Odrzucono i przesłano do deponującego", + "claimed-declined-task-search-result-list-element.title": "Odrzucono i przesłano do recenzenta", + "collection.edit.tabs.access-control.head": "Dostępy", + "collection.edit.tabs.access-control.title": "Edycja kolekcji - dostępy", + "collection.listelement.badge": "Kolekcja", + "community.edit.tabs.access-control.head": "Dostępy", + "community.edit.tabs.access-control.title": "Edycja zbioru - dostępy", + "comcol-role.edit.scorereviewers.name": "Ocena recenzenta", + "comcol-role.edit.scorereviewers.description": "Recenzenci mogą oceniać zdeponowane pozycje, co określi, czy pozycja zostanie przyjęta lub odrzucona.", + "curation-task.task.register-doi.label": "Rejestracja DOI", + "dso.name.unnamed": "Bez nazwy", + "dso-selector.create.community.or-divider": "lub", + "dso-selector.set-scope.community.or-divider": "lub", + "dso-selector.results-could-not-be-retrieved": "Wystąpił błąd, proszę odświeżyć stronę", + "supervision-group-selector.header": "Wybór grupy recenzenckiej", + "supervision-group-selector.select.type-of-order.label": "Wybierz typ funkcji", + "supervision-group-selector.select.type-of-order.option.none": "BRAK", + "supervision-group-selector.select.type-of-order.option.editor": "REDAKTOR", + "supervision-group-selector.select.type-of-order.option.observer": "OBSERWATOR", + "supervision-group-selector.select.group.label": "Wybierz grupę", + "supervision-group-selector.button.cancel": "Anuluj", + "supervision-group-selector.button.save": "Zapisz", + "supervision-group-selector.select.type-of-order.error": "Wybierz typ funkcji", + "supervision-group-selector.select.group.error": "Wybierz grupę", + "supervision-group-selector.notification.create.success.title": "Grupa recenzencka został dodana dla grupy {{ name }}", + "supervision-group-selector.notification.create.failure.title": "Błąd", + "supervision-group-selector.notification.create.already-existing": "Funkcja recenzenta już jest przypisana do tej grupy", + "confirmation-modal.delete-subscription.header": "Usuń subksrypcje", + "confirmation-modal.delete-subscription.info": "Czy na pewno chcesz usunąć subskrypcję: \"{{ dsoName }}\"", + "confirmation-modal.delete-subscription.cancel": "Anuluj", + "confirmation-modal.delete-subscription.confirm": "Usuń", + "error.validation.metadata.name.invalid-pattern": "To pole nie może zawierać kropek, przecinków i spacji. Zamiast tego This field cannot contain dots, commas or spaces. Zamiast tego może użyć pól z notacji SNEQ", + "error.validation.metadata.name.max-length": "To pole nie może zawierać więcej niż 32 znaki", + "error.validation.metadata.namespace.max-length": "To pole nie może zawierać więcej niż 256 znaków", + "error.validation.metadata.element.invalid-pattern": "To pole nie może zawierać kropek, przecinków i spacji. Zamiast tego This field cannot contain dots, commas or spaces. Zamiast tego może użyć pól z notacji SNEQ", + "error.validation.metadata.element.max-length": "To pole nie może zawierać więcej niż 64 znaki", + "error.validation.metadata.qualifier.invalid-pattern": "To pole nie może zawierać kropek, przecinków i spacji", + "error.validation.metadata.qualifier.max-length": "To pole nie może zawierać więcej niż 64 znaki", + "forgot-email.form.email.error.not-email-form": "Wpisz prawidłowy adres e-mail", + "form.other-information.email": "Adres e-mail", + "form.other-information.first-name": "Imię", + "form.other-information.insolr": "Solr Index", + "form.other-information.institution": "Instytucja", + "form.other-information.last-name": "Nazwisko", + "form.other-information.orcid": "ORCID", + "form.create": "Utwórz", + "info.end-user-agreement.hosting-country": "Stany Zjednoczone", + "item.edit.identifiers.doi.status.UNKNOWN": "Nieznane", + "item.edit.identifiers.doi.status.TO_BE_REGISTERED": "W kolejce do rejestracji", + "item.edit.identifiers.doi.status.TO_BE_RESERVED": "W kolejce do rezerwacji", + "item.edit.identifiers.doi.status.IS_REGISTERED": "Zarejestrowane", + "item.edit.identifiers.doi.status.IS_RESERVED": "Zarezerwowane", + "item.edit.identifiers.doi.status.UPDATE_RESERVED": "Zarezerwowane (aktualizacja w kolejce)", + "item.edit.identifiers.doi.status.UPDATE_REGISTERED": "Zarejestrowane (aktualizacja w kolejce)", + "item.edit.identifiers.doi.status.UPDATE_BEFORE_REGISTRATION": "W kolejce do aktualizacji i rejestracji", + "item.edit.identifiers.doi.status.TO_BE_DELETED": "Zakolejkowane do usunięcia", + "item.edit.identifiers.doi.status.DELETED": "Usunięte", + "item.edit.identifiers.doi.status.PENDING": "Oczekujące (niezarejestrowane)", + "item.edit.identifiers.doi.status.MINTED": "Rezerwowanie nazwy (niezarejestrowane)", + "item.edit.tabs.status.buttons.register-doi.label": "Zarejestruj nowe lub oczekujące DOI", + "item.edit.tabs.status.buttons.register-doi.button": "Rejestruj DOI...", + "item.edit.register-doi.header": "Zarejestruj nowe lub oczekujące DOI", + "item.edit.register-doi.description": "Zweryfikuj poniższe identyfikatory i metadane pozycji i rozpocznij rejestrację DOI lub anuluj", + "item.edit.register-doi.confirm": "Zatwierdź", + "item.edit.register-doi.cancel": "Anuluj", + "item.edit.register-doi.success": "DOI jest w kolejce do rejestracji.", + "item.edit.register-doi.error": "Wystąpił błąd poczas rejestracji DOI", + "item.edit.register-doi.to-update": "To DOI zostało zarezerwowane i będzie znajdować się w kolejce do rejestracji", + "item.edit.metadata.edit.buttons.confirm": "Zatwierdź", + "item.edit.metadata.edit.buttons.drag": "Przeciągnij, aby zmienić kolejność", + "item.edit.metadata.edit.buttons.virtual": "To pole przechowuje wirutalne wartości metadanych, np. wartość pobraną z encji, z którą jest połączona ta pozycja. Dodaj lub usuń relację w zakładce 'Relacje' ", + "item.edit.metadata.metadatafield.error": "Wystąpił błąd podczas walidcji pól metadanych", + "item.edit.metadata.reset-order-button": "Cofnij zamianę kolejności", + "item.edit.curate.title": "Zarządzaj pozycją: {{item}}", + "item.edit.tabs.access-control.head": "Dostęp", + "item.edit.tabs.access-control.title": "Edycja pozycji - dostęp", + "workflow-item.search.result.delete-supervision.modal.header": "Usuń zadanie dla recenzenta", + "workflow-item.search.result.delete-supervision.modal.info": "Czy na pewno usunąć zadanie dla recenzenta", + "workflow-item.search.result.delete-supervision.modal.cancel": "Anuluj", + "workflow-item.search.result.delete-supervision.modal.confirm": "Usuń", + "workflow-item.search.result.notification.deleted.success": "Usunięto zadanie dla recenzenta \"{{name}}\"", + "workflow-item.search.result.notification.deleted.failure": "Nie usunięto zadania dla recenzenta \"{{name}}\"", + "workflow-item.search.result.list.element.supervised-by": "Recenzja:", + "workflow-item.search.result.list.element.supervised.remove-tooltip": "Usuń grupę recenzencką", + "item.preview.dc.subject": "Słowo kluczowe:", + "item.preview.dc.publisher": "Wydawca:", + "itemtemplate.edit.metadata.add-button": "Dodaj", + "itemtemplate.edit.metadata.discard-button": "Cofnij", + "itemtemplate.edit.metadata.edit.buttons.confirm": "Zatwierdź", + "itemtemplate.edit.metadata.edit.buttons.drag": "Przeciągnij, aby zmienić kolejność", + "itemtemplate.edit.metadata.edit.buttons.edit": "Edytuj", + "itemtemplate.edit.metadata.edit.buttons.remove": "Usuń", + "itemtemplate.edit.metadata.edit.buttons.undo": "Cofnij zmiany", + "itemtemplate.edit.metadata.edit.buttons.unedit": "Nie edytuj", + "itemtemplate.edit.metadata.empty": "To pozycja nie zawiera żadnych metadanych. Wybierz Dodaj, aby je wprowadzić.", + "itemtemplate.edit.metadata.headers.edit": "Edytuj", + "itemtemplate.edit.metadata.headers.field": "Pole", + "itemtemplate.edit.metadata.headers.language": "Język", + "itemtemplate.edit.metadata.headers.value": "Wartość", + "itemtemplate.edit.metadata.metadatafield.error": "Wystąpił błąd podczas walidowania pola metadanych", + "itemtemplate.edit.metadata.metadatafield.invalid": "Wybierz odpowiednie pole metadanych", + "itemtemplate.edit.metadata.notifications.discarded.content": "Twoje zmiany nie zostały zachowane. Aby spróbować wprowadzić je ponownie wybierz Cofnij", + "itemtemplate.edit.metadata.notifications.discarded.title": "Zmiany nie zostały zachowane", + "itemtemplate.edit.metadata.notifications.error.title": "Wystąpił błąd", + "itemtemplate.edit.metadata.notifications.invalid.content": "Twoje zmiany nie zostały zapisane. Upewnij się, że wszystkie pola zostały wypełnione prawidłowo.", + "itemtemplate.edit.metadata.notifications.invalid.title": "Nieprawidłowe metadan", + "itemtemplate.edit.metadata.notifications.outdated.content": "Wzór dla pozycji, na którą w tym momencie pracujesz, został zmodyfikowany przez innego użytkownika. Twoje zmiany zostały odrzucone, aby uniknąć konfliktów pomiędzy wersjami.", + "itemtemplate.edit.metadata.notifications.outdated.title": "Zmiany zostały odrzucone", + "itemtemplate.edit.metadata.notifications.saved.content": "Zmiany w metadanych wzoru pozycji zostały zapisane.", + "itemtemplate.edit.metadata.notifications.saved.title": "Metadane zostały zapisane", + "itemtemplate.edit.metadata.reinstate-button": "Cofnij", + "itemtemplate.edit.metadata.reset-order-button": "Cofnij zmianę kolejności", + "itemtemplate.edit.metadata.save-button": "Zapisz", + "menu.section.access_control_bulk": "Zbiorowe zarządzanie dostępem", + "menu.section.browse_global_by_srsc": "Wg słów kluczowych", + "mydspace.show.supervisedWorkspace": "Pozycje recenzowane", + "mydspace.status.mydspaceArchived": "Opublikowano", + "mydspace.status.mydspaceValidation": "Walidacja", + "mydspace.status.mydspaceWaitingController": "Oczekiwanie na redakctora", + "mydspace.status.mydspaceWorkflow": "Redakcja", + "mydspace.status.mydspaceWorkspace": "Przestrzeń robocza", + "nav.context-help-toggle": "Przełącz pomoc kontekstową", + "nav.search.button": "Wpisz wyszukiwaną frazę", + "nav.subscriptions": "Subksrypcje", + "process.new.notification.error.max-upload.content": "Plik jest większy niż maksymalny dozwolony rozmiar pliku", + "register-page.registration.email.error.not-email-form": "Wprowadź poprawny adres e-mail", + "register-page.registration.email.error.not-valid-domain": "Użyj adresu e-mail z domeny: {{ domains }}", + "register-page.registration.error.maildomain": "Tego adresu e-mail nie możesz zarejestrować, ponieważ nie ma go na liście domen. Dozwolone domeny to: {{ domains }}", + "register-page.registration.info.maildomain": "Konta mogą być założone dla adresów e-mail z domeną", + "repository.title": "Repozytorium DSpace", + "search.filters.applied.f.supervisedBy": "Recenzent", + "search.filters.filter.show-tree": "Przeglądaj {{ name }} strukturę recenzentów", + "search.filters.filter.supervisedBy.head": "Recenzent", + "search.filters.filter.supervisedBy.placeholder": "Recenzent", + "search.filters.filter.supervisedBy.label": "Wyszukaj recenzenta", + "statistics.table.no-name": "(nazwa obiektu nie może zostać załadowana)", + "submission.import-external.source.datacite": "DataCite", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor": "Publikacje autora", + "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor": "Publikacje", + "submission.sections.identifiers.info": "Te identyfikatory zostaną utworzone dla pozycji:", + "submission.sections.identifiers.no_handle": "Do tej pozycji nie zostały przypisane żadne Handle", + "submission.sections.identifiers.no_doi": "Do tej pozycji nie zostały przypisane żadne DOI", + "submission.sections.identifiers.handle_label": "Handle: ", + "submission.sections.identifiers.doi_label": "DOI: ", + "submission.sections.identifiers.otherIdentifiers_label": "Inne identyfikatory: ", + "submission.sections.submit.progressbar.identifiers": "Identyfikatory", + "submission.workflow.generic.submit_select_reviewer": "Wybierz recenzenta", + "submission.workflow.generic.submit_select_reviewer-help": "", + "submission.workflow.generic.submit_score": "Wynik", + "submission.workflow.generic.submit_score-help": "", + "submission.workflow.tasks.claimed.decline": "Odrzuć", + "submission.workflow.tasks.claimed.decline_help": "", + "submitter.empty": "n.d.", + "subscriptions.title": "Subskrypcje", + "subscriptions.item": "Subskrypcje pozycji", + "subscriptions.collection": "Subskrypcje kolekcji", + "subscriptions.community": "Subskrypcje zbiorów", + "subscriptions.subscription_type": "Typ subksrypcji", + "subscriptions.frequency": "Częstotliwość subskrypcji", + "subscriptions.frequency.D": "Codziennie", + "subscriptions.frequency.M": "Co miesiąc", + "subscriptions.frequency.W": "Co tydzień", + "subscriptions.tooltip": "Subskrybuj", + "subscriptions.modal.title": "Subksrypcje", + "subscriptions.modal.type-frequency": "Rodzaj i częstotliwość subksrypcji", + "subscriptions.modal.close": "Zamknij", + "subscriptions.modal.delete-info": "Aby usunąć tę subksrypcję przejdź do strony 'Subskrypcje', która znajduje się w profilu użytkownika", + "subscriptions.modal.new-subscription-form.type.content": "Zawartość", + "subscriptions.modal.new-subscription-form.frequency.D": "Codziennie", + "subscriptions.modal.new-subscription-form.frequency.W": "Co tydzień", + "subscriptions.modal.new-subscription-form.frequency.M": "Co miesiąc", + "subscriptions.modal.new-subscription-form.submit": "Zapisz", + "subscriptions.modal.new-subscription-form.processing": "Ładowanie...", + "subscriptions.modal.create.success": "Zasubskrybowano {{ type }}", + "subscriptions.modal.delete.success": "Subskrypcja została anulowana", + "subscriptions.modal.update.success": "Twoja subskrypcja {{ type }} została zaktualizowana", + "subscriptions.modal.create.error": "Wystąpił bład podczas tworzenia subskrypcji", + "subscriptions.modal.delete.error": "Wystąpił bład podczas usuwania subskrypcji", + "subscriptions.modal.update.error": "Wystąpił bład podczas aktualizacji subskrypcji", + "subscriptions.table.dso": "Słowo kluczowe", + "subscriptions.table.subscription_type": "Typ subskrypcji", + "subscriptions.table.subscription_frequency": "Częstotliwość subskrypcji", + "subscriptions.table.action": "Akcja", + "subscriptions.table.edit": "Edytuj", + "subscriptions.table.delete": "Usuń", + "subscriptions.table.not-available": "Niedostępne", + "subscriptions.table.not-available-message": "Ta pozycja została usunięta lun nie masz do niej dostępu, aby ją wyswietlić", + "subscriptions.table.empty.message": "Ta pozycja nie ma w tym momencie żadnych subksrypcji. Aby zasubkrybować i otrzymywać aktualizacje o tym zbiorze lub kolekcji, wybierz przycisk subskrypcji na stronie pozycji.", + "vocabulary-treeview.info": "Wybierz słowo kluczowe, aby dodać je do filtra", + "supervisedWorkspace.search.results.head": "Pozycje recenzowane", + "supervision.search.results.head": "Status zadań: Szkic i redakcja", + "workspace-item.delete.breadcrumbs": "Usunięto wersję roboczą", + "workspace-item.delete.header": "Usuń wersję roboczą", + "workspace-item.delete.button.confirm": "Usuń", + "workspace-item.delete.button.cancel": "Anuluj", + "workspace-item.delete.notification.success.title": "Usunięto", + "workspace-item.delete.title": "Wersja robocza została usunieta", + "workspace-item.delete.notification.error.title": "Coś poszło nie tak", + "workspace-item.delete.notification.error.content": "Wersja robocza nie może zostać usunieta", + "workflow-item.advanced.title": "Zaawansowane workflow", + "workflow-item.selectrevieweraction.notification.success.title": "Wybrany recenzent", + "workflow-item.selectrevieweraction.notification.success.content": "Recenzent został przypisany", + "workflow-item.selectrevieweraction.notification.error.title": "Coś poszło nie tak", + "workflow-item.selectrevieweraction.notification.error.content": "Nie udało się wybrać recenzenta dla pozycji", + "workflow-item.selectrevieweraction.title": "Wybierz recenzenta", + "workflow-item.selectrevieweraction.header": "Wybierz recenzenta", + "workflow-item.selectrevieweraction.button.cancel": "Anuluj", + "workflow-item.selectrevieweraction.button.confirm": "Zatwierdź", + "workflow-item.scorereviewaction.notification.success.title": "Ocena recenzji", + "workflow-item.scorereviewaction.notification.success.content": "Ocena tej pozycji została zapisana", + "workflow-item.scorereviewaction.notification.error.title": "Coś poszło nie tak", + "workflow-item.scorereviewaction.notification.error.content": "Nie można ocenić tej pozycji", + "workflow-item.scorereviewaction.title": "Oceń pozycję", + "workflow-item.scorereviewaction.header": "Oceń pozycję", + "workflow-item.scorereviewaction.button.cancel": "Anuluj", + "workflow-item.scorereviewaction.button.confirm": "Potwierdź", + "listable-notification-object.default-message": "Ta pozycja nie może być odzyskana", + "system-wide-alert-banner.retrieval.error": "Coś poszło nie tak podczas odzyskiwania alertu systemowego", + "system-wide-alert-banner.countdown.prefix": "W", + "system-wide-alert-banner.countdown.days": "{{days}} dni,", + "system-wide-alert-banner.countdown.hours": "{{hours}} godziny", + "system-wide-alert-banner.countdown.minutes": "{{minutes}} minut:", + "menu.section.system-wide-alert": "Alert systemowy", + "system-wide-alert.form.header": "Alert systemowy", + "system-wide-alert-form.retrieval.error": "Coś poszło nie tak podczas odzyskiwania alertu systemowego", + "system-wide-alert.form.cancel": "Anuluj", + "system-wide-alert.form.save": "Zapisz", + "system-wide-alert.form.label.active": "AKTYWNE", + "system-wide-alert.form.label.inactive": "NIEAKTYWNE", + "system-wide-alert.form.error.message": "Alert systemowy musi zawierać wiadomość", + "system-wide-alert.form.label.message": "Alert systemowy", + "system-wide-alert.form.label.countdownTo.enable": "Wprowadź licznik czasowy", + "system-wide-alert.form.label.countdownTo.hint": "Wskazówka: Wpisz wartość licznika czasu. Kiedy licznik jest włączony, alert systemowy zostanie wyświetlony o wybranym czasie. Kiedy odliczanie zostanie zakończone, alert systemowy zostanie wyłączony. Serwer NIE zostanie zatrzymany automatycznie.", + "system-wide-alert.form.label.preview": "Podgląd alertu systemowego", + "system-wide-alert.form.update.success": "Alert systemowy został zaktualizowany", + "system-wide-alert.form.update.error": "Coś poszło nie tak podczas aktualizacji alertu systemowego", + "system-wide-alert.form.create.success": "Alert systemowy został utworzony", + "system-wide-alert.form.create.error": "Coś poszło nie tak podczas tworzenia alertu systemowego", + "admin.system-wide-alert.breadcrumbs": "Alerty systemowe", + "admin.system-wide-alert.title": "Alerty systemowe", + "item-access-control-title": "Ta strona pozwala na zmianę dostępów metadanych pozycji i plików do nich dołączonych.", + "collection-access-control-title": "Ta strona pozwala na zmianę warunków dostępu dla wszystkich pozycji w tej kolekcji. Zmiany mogą być wykonywane zarówno na metadanych pozycji jak i plikach do nich dołączonych.", + "community-access-control-title": "Ta strona pozwala na zmianę warunków dostępu dla wszystkich pozycji w każdej kolekcji w tym zbiorze. Zmiany mogą być wykonywane zarówno na metadanych pozycji jak i plikach do nich dołączonych.", + "access-control-item-header-toggle": "Metadane pozycji", + "access-control-bitstream-header-toggle": "Pliki", + "access-control-mode": "Tryb", + "access-control-access-conditions": "Warunki dostępu", + "access-control-no-access-conditions-warning-message": "W tym momencie żadne warunki dostępu nie zostały określone. Jeśli zadanie zostanie rozpoczęte, obecne warunki dostępu zostaną zastąpione domyślnymi warunkami dostępu z nadrzędnej kolekcji.", + "access-control-replace-all": "Zastąp warunki dostępu", + "access-control-add-to-existing": "Dodaj do już istniejących", + "access-control-limit-to-specific": "Ogranicz zmiany do wybranych plików", + "access-control-process-all-bitstreams": "Zaktualizuj wszystkie pliki dla tej pozycji", + "access-control-bitstreams-selected": "wybrane pliki", + "access-control-cancel": "Anuluj", + "access-control-execute": "Wykonaj", + "access-control-add-more": "Dodaj więcej", + "access-control-select-bitstreams-modal.title": "Wybierz pliki", + "access-control-select-bitstreams-modal.no-items": "Brak pozycji do wyświetlenia.", + "access-control-select-bitstreams-modal.close": "Zamknij", + "access-control-option-label": "Typ warunków dostępu", + "access-control-option-note": "Wybierz warunki dostępu, które chcesz przypisać do zaznaczonych pozycji.", + "access-control-option-start-date": "Dostęp od", + "access-control-option-start-date-note": "Wybierz datę, kiedy wybrane warunki dostępu mają obowiązywać", + "access-control-option-end-date": "Dostęp do", + "access-control-option-end-date-note": "Wybierz datę, kiedy wybrane warunki dostępu mają obowiązywać", } From 6709c3bb5ffe4f4c056debb1295ce499a6ea6932 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Tue, 22 Aug 2023 14:38:04 -0400 Subject: [PATCH 312/425] Graceful shutdown on SIGINT (e.g. from 'pm2 stop'). --- package.json | 1 + server.ts | 23 +++++++++-- yarn.lock | 107 ++++++++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 122 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 977a4bdc5e..beb40f0991 100644 --- a/package.json +++ b/package.json @@ -99,6 +99,7 @@ "fast-json-patch": "^3.1.1", "filesize": "^6.1.0", "http-proxy-middleware": "^1.0.5", + "http-terminator": "^3.2.0", "isbot": "^3.6.10", "js-cookie": "2.2.1", "js-yaml": "^4.1.0", diff --git a/server.ts b/server.ts index 23327c2058..fbe2e4ea6d 100644 --- a/server.ts +++ b/server.ts @@ -32,6 +32,7 @@ import isbot from 'isbot'; import { createCertificate } from 'pem'; import { createServer } from 'https'; import { json } from 'body-parser'; +import { createHttpTerminator } from 'http-terminator'; import { readFileSync } from 'fs'; import { join } from 'path'; @@ -487,7 +488,7 @@ function saveToCache(req, page: any) { */ function hasNotSucceeded(statusCode) { const rgx = new RegExp(/^20+/); - return !rgx.test(statusCode) + return !rgx.test(statusCode); } function retrieveHeaders(response) { @@ -525,12 +526,20 @@ function serverStarted() { * @param keys SSL credentials */ function createHttpsServer(keys) { - createServer({ + const listener = createServer({ key: keys.serviceKey, cert: keys.certificate }, app).listen(environment.ui.port, environment.ui.host, () => { serverStarted(); }); + + // Graceful shutdown when signalled + const terminator = createHttpTerminator({server: listener}); + process.on('SIGINT', ()=> { + console.debug('Closing HTTPS server on signal'); + terminator.terminate().catch(e => { console.error(e); }); + console.debug('HTTPS server closed'); + }); } function run() { @@ -539,9 +548,17 @@ function run() { // Start up the Node server const server = app(); - server.listen(port, host, () => { + const listener = server.listen(port, host, () => { serverStarted(); }); + + // Graceful shutdown when signalled + const terminator = createHttpTerminator({server: listener}); + process.on('SIGINT', ()=> { + console.debug('Closing HTTP server on signal'); + terminator.terminate().catch(e => { console.error(e); }); + console.debug('HTTP server closed.'); + }); } function start() { diff --git a/yarn.lock b/yarn.lock index e53a070d16..7d888f015a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1761,6 +1761,11 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.39.0.tgz#58b536bcc843f4cd1e02a7e6171da5c040f4d44b" integrity sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng== +"@fastify/deepmerge@^1.0.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@fastify/deepmerge/-/deepmerge-1.3.0.tgz#8116858108f0c7d9fd460d05a7d637a13fe3239a" + integrity sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A== + "@fortawesome/fontawesome-free@^6.4.0": version "6.4.0" resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.0.tgz#1ee0c174e472c84b23cb46c995154dc383e3b4fe" @@ -3061,9 +3066,9 @@ ajv-keywords@^5.0.0: dependencies: fast-deep-equal "^3.1.3" -ajv@8.12.0, ajv@^8.8.0: +ajv@8.12.0, ajv@^8.10.0, ajv@^8.8.0: version "8.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" @@ -3538,6 +3543,11 @@ boolbase@^1.0.0: resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== +boolean@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" + integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== + bootstrap@^4.6.1: version "4.6.2" resolved "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz" @@ -4641,6 +4651,11 @@ del@^2.2.0: pinkie-promise "^2.0.0" rimraf "^2.2.8" +delay@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" + integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" @@ -5579,6 +5594,18 @@ fast-json-stable-stringify@2.1.0, fast-json-stable-stringify@^2.0.0: resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== +fast-json-stringify@^5.8.0: + version "5.8.0" + resolved "https://registry.yarnpkg.com/fast-json-stringify/-/fast-json-stringify-5.8.0.tgz#b229ed01ac5f92f3b82001a916c31324652f46d7" + integrity sha512-VVwK8CFMSALIvt14U8AvrSzQAwN/0vaVRiFFUVlpnXSnDGrSkOAO5MtzyN8oQNjLd5AqTW5OZRgyjoNuAuR3jQ== + dependencies: + "@fastify/deepmerge" "^1.0.0" + ajv "^8.10.0" + ajv-formats "^2.1.1" + fast-deep-equal "^3.1.3" + fast-uri "^2.1.0" + rfdc "^1.2.0" + fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" @@ -5589,6 +5616,18 @@ fast-memoize@^2.5.1: resolved "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz" integrity sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw== +fast-printf@^1.6.9: + version "1.6.9" + resolved "https://registry.yarnpkg.com/fast-printf/-/fast-printf-1.6.9.tgz#212f56570d2dc8ccdd057ee93d50dd414d07d676" + integrity sha512-FChq8hbz65WMj4rstcQsFB0O7Cy++nmbNfLYnD9cYv2cRn8EG6k/MGn9kO/tjO66t09DLDugj3yL+V2o6Qftrg== + dependencies: + boolean "^3.1.4" + +fast-uri@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-2.2.0.tgz#519a0f849bef714aad10e9753d69d8f758f7445a" + integrity sha512-cIusKBIt/R/oI6z/1nyfe2FvGKVTohVRfvkOhvx0nCEW+xf5NoCXjAHcWp93uOUBchzYcsvPlrapAdX1uW+YGg== + fastest-levenshtein@^1.0.12: version "1.0.16" resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz" @@ -6021,9 +6060,9 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" -globalthis@^1.0.3: +globalthis@^1.0.2, globalthis@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== dependencies: define-properties "^1.1.3" @@ -6372,6 +6411,16 @@ http-signature@~1.3.6: jsprim "^2.0.2" sshpk "^1.14.1" +http-terminator@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/http-terminator/-/http-terminator-3.2.0.tgz#bc158d2694b733ca4fbf22a35065a81a609fb3e9" + integrity sha512-JLjck1EzPaWjsmIf8bziM3p9fgR1Y3JoUKAkyYEbZmFrIvJM6I8vVJfBGWlEtV9IWOvzNnaTtjuwZeBY2kwB4g== + dependencies: + delay "^5.0.0" + p-wait-for "^3.2.0" + roarr "^7.0.4" + type-fest "^2.3.3" + https-proxy-agent@5.0.1, https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" @@ -8609,6 +8658,11 @@ ospath@^1.2.2: resolved "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz" integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + p-limit@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" @@ -8652,11 +8706,25 @@ p-retry@^4.5.0: "@types/retry" "0.12.0" retry "^0.13.1" +p-timeout@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" + p-try@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +p-wait-for@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-wait-for/-/p-wait-for-3.2.0.tgz#640429bcabf3b0dd9f492c31539c5718cb6a3f1f" + integrity sha512-wpgERjNkLrBiFmkMEjuZJEWKKDrNfHCKA1OhyN1wg1FrLkULbviEy6py1AyJUgZ72YWFbZ38FIpnqvVqAlDUwA== + dependencies: + p-timeout "^3.0.0" + pacote@15.1.0: version "15.1.0" resolved "https://registry.npmjs.org/pacote/-/pacote-15.1.0.tgz" @@ -9894,9 +9962,9 @@ reusify@^1.0.4: resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rfdc@^1.3.0: +rfdc@^1.2.0, rfdc@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.6.3: @@ -9913,6 +9981,18 @@ rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" +roarr@^7.0.4: + version "7.15.1" + resolved "https://registry.yarnpkg.com/roarr/-/roarr-7.15.1.tgz#e4d93105c37b5ea7dd1200d96a3500f757ddc39f" + integrity sha512-0ExL9rjOXeQPvQvQo8IcV8SR2GTXmDr1FQFlY2HiAV+gdVQjaVZNOx9d4FI2RqFFsd0sNsiw2TRS/8RU9g0ZfA== + dependencies: + boolean "^3.1.4" + fast-json-stringify "^5.8.0" + fast-printf "^1.6.9" + globalthis "^1.0.2" + safe-stable-stringify "^2.4.3" + semver-compare "^1.0.0" + rtl-css-js@^1.13.1: version "1.16.1" resolved "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.16.1.tgz" @@ -9995,6 +10075,11 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" +safe-stable-stringify@^2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" + integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== + "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" @@ -10114,6 +10199,11 @@ selfsigned@^2.1.1: dependencies: node-forge "^1" +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== + semver@7.3.8: version "7.3.8" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" @@ -11058,6 +11148,11 @@ type-fest@^0.21.3: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== +type-fest@^2.3.3: + version "2.19.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== + type-is@~1.6.18: version "1.6.18" resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" From 4449737aed9b96c13ba6a34e2ff72feb1aaebe92 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Tue, 22 Aug 2023 15:46:55 -0400 Subject: [PATCH 313/425] Properly await termination. --- server.ts | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/server.ts b/server.ts index fbe2e4ea6d..47284175a4 100644 --- a/server.ts +++ b/server.ts @@ -535,10 +535,12 @@ function createHttpsServer(keys) { // Graceful shutdown when signalled const terminator = createHttpTerminator({server: listener}); - process.on('SIGINT', ()=> { - console.debug('Closing HTTPS server on signal'); - terminator.terminate().catch(e => { console.error(e); }); - console.debug('HTTPS server closed'); + process.on('SIGINT', () => { + void (async ()=> { + console.debug('Closing HTTPS server on signal'); + await terminator.terminate().catch(e => { console.error(e); }); + console.debug('HTTPS server closed'); + })(); }); } @@ -554,10 +556,12 @@ function run() { // Graceful shutdown when signalled const terminator = createHttpTerminator({server: listener}); - process.on('SIGINT', ()=> { - console.debug('Closing HTTP server on signal'); - terminator.terminate().catch(e => { console.error(e); }); - console.debug('HTTP server closed.'); + process.on('SIGINT', () => { + void (async () => { + console.debug('Closing HTTP server on signal'); + await terminator.terminate().catch(e => { console.error(e); }); + console.debug('HTTP server closed.');return undefined; + })(); }); } From bf9b2b82e1d1d6cd7a901b674d8df92af073794c Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Tue, 22 Aug 2023 17:07:20 -0400 Subject: [PATCH 314/425] Document a modified method as required by PR guidelines. --- server.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server.ts b/server.ts index 47284175a4..4d2ee500be 100644 --- a/server.ts +++ b/server.ts @@ -544,6 +544,9 @@ function createHttpsServer(keys) { }); } +/** + * Create an HTTP server with the configured port and host. + */ function run() { const port = environment.ui.port || 4000; const host = environment.ui.host || '/'; From b51fd465361c4317fc97990aff7a6b34bd79bf61 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Tue, 22 Aug 2023 16:32:55 -0500 Subject: [PATCH 315/425] Replace mentions of demo7.dspace.org and api7.dspace.org with demo or sandbox --- README.md | 6 +++--- config/config.example.yml | 2 +- config/config.yml | 2 +- docker/README.md | 4 ++-- docker/docker-compose-dist.yml | 2 +- docs/Configuration.md | 4 ++-- src/app/core/services/browser-hard-redirect.service.ts | 4 ++-- src/app/core/services/hard-redirect.service.ts | 4 ++-- src/app/core/services/server-hard-redirect.service.ts | 4 ++-- 9 files changed, 16 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 689c64a292..ebc24f8b91 100644 --- a/README.md +++ b/README.md @@ -157,8 +157,8 @@ DSPACE_UI_SSL => DSPACE_SSL The same settings can also be overwritten by setting system environment variables instead, E.g.: ```bash -export DSPACE_HOST=api7.dspace.org -export DSPACE_UI_PORT=4200 +export DSPACE_HOST=demo.dspace.org +export DSPACE_UI_PORT=4000 ``` The priority works as follows: **environment variable** overrides **variable in `.env` file** overrides external config set by `DSPACE_APP_CONFIG_PATH` overrides **`config.(prod or dev).yml`** @@ -288,7 +288,7 @@ E2E tests (aka integration tests) use [Cypress.io](https://www.cypress.io/). Con The test files can be found in the `./cypress/integration/` folder. Before you can run e2e tests, two things are REQUIRED: -1. You MUST be running the DSpace backend (i.e. REST API) locally. The e2e tests will *NOT* succeed if run against our demo REST API (https://api7.dspace.org/server/), as that server is uncontrolled and may have content added/removed at any time. +1. You MUST be running the DSpace backend (i.e. REST API) locally. The e2e tests will *NOT* succeed if run against our demo/sandbox REST API (https://demo.dspace.org/server/ or https://sandbox.dspace.org/server/), as those sites may have content added/removed at any time. * After starting up your backend on localhost, make sure either your `config.prod.yml` or `config.dev.yml` has its `rest` settings defined to use that localhost backend. * If you'd prefer, you may instead use environment variables as described at [Configuring](#configuring). For example: ``` diff --git a/config/config.example.yml b/config/config.example.yml index ea38303fa3..b7ea190c55 100644 --- a/config/config.example.yml +++ b/config/config.example.yml @@ -22,7 +22,7 @@ ui: # 'synced' with the 'dspace.server.url' setting in your backend's local.cfg. rest: ssl: true - host: api7.dspace.org + host: sandbox.dspace.org port: 443 # NOTE: Space is capitalized because 'namespace' is a reserved string in TypeScript nameSpace: /server diff --git a/config/config.yml b/config/config.yml index b5eecd112f..109db60ca9 100644 --- a/config/config.yml +++ b/config/config.yml @@ -1,5 +1,5 @@ rest: ssl: true - host: api7.dspace.org + host: sandbox.dspace.org port: 443 nameSpace: /server diff --git a/docker/README.md b/docker/README.md index 08801137b0..d0cee3f52a 100644 --- a/docker/README.md +++ b/docker/README.md @@ -101,8 +101,8 @@ and the backend at http://localhost:8080/server/ ## Run DSpace Angular dist build with DSpace Demo site backend -This allows you to run the Angular UI in *production* mode, pointing it at the demo backend -(https://api7.dspace.org/server/). +This allows you to run the Angular UI in *production* mode, pointing it at the demo or sandbox backend +(https://demo.dspace.org/server/ or https://sandbox.dspace.org/server/). ``` docker-compose -f docker/docker-compose-dist.yml pull diff --git a/docker/docker-compose-dist.yml b/docker/docker-compose-dist.yml index a9ee4a2656..38278085cd 100644 --- a/docker/docker-compose-dist.yml +++ b/docker/docker-compose-dist.yml @@ -24,7 +24,7 @@ services: # This is because Server Side Rendering (SSR) currently requires a public URL, # see this bug: https://github.com/DSpace/dspace-angular/issues/1485 DSPACE_REST_SSL: 'true' - DSPACE_REST_HOST: api7.dspace.org + DSPACE_REST_HOST: sandbox.dspace.org DSPACE_REST_PORT: 443 DSPACE_REST_NAMESPACE: /server image: dspace/dspace-angular:${DSPACE_VER:-latest}-dist diff --git a/docs/Configuration.md b/docs/Configuration.md index 62fa444cc0..01fd83c94d 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -48,7 +48,7 @@ dspace-angular connects to your DSpace installation by using its REST endpoint. ```yaml rest: ssl: true - host: api7.dspace.org + host: demo.dspace.org port: 443 nameSpace: /server } @@ -57,7 +57,7 @@ rest: Alternately you can set the following environment variables. If any of these are set, it will override all configuration files: ``` DSPACE_REST_SSL=true - DSPACE_REST_HOST=api7.dspace.org + DSPACE_REST_HOST=demo.dspace.org DSPACE_REST_PORT=443 DSPACE_REST_NAMESPACE=/server ``` diff --git a/src/app/core/services/browser-hard-redirect.service.ts b/src/app/core/services/browser-hard-redirect.service.ts index 4ef9548899..827e83f0b7 100644 --- a/src/app/core/services/browser-hard-redirect.service.ts +++ b/src/app/core/services/browser-hard-redirect.service.ts @@ -38,8 +38,8 @@ export class BrowserHardRedirectService extends HardRedirectService { /** * Get the origin of the current URL * i.e. "://" [ ":" ] - * e.g. if the URL is https://demo7.dspace.org/search?query=test, - * the origin would be https://demo7.dspace.org + * e.g. if the URL is https://demo.dspace.org/search?query=test, + * the origin would be https://demo.dspace.org */ getCurrentOrigin(): string { return this.location.origin; diff --git a/src/app/core/services/hard-redirect.service.ts b/src/app/core/services/hard-redirect.service.ts index 826c7e4fa9..e6104cefb9 100644 --- a/src/app/core/services/hard-redirect.service.ts +++ b/src/app/core/services/hard-redirect.service.ts @@ -25,8 +25,8 @@ export abstract class HardRedirectService { /** * Get the origin of the current URL * i.e. "://" [ ":" ] - * e.g. if the URL is https://demo7.dspace.org/search?query=test, - * the origin would be https://demo7.dspace.org + * e.g. if the URL is https://demo.dspace.org/search?query=test, + * the origin would be https://demo.dspace.org */ abstract getCurrentOrigin(): string; } diff --git a/src/app/core/services/server-hard-redirect.service.ts b/src/app/core/services/server-hard-redirect.service.ts index 8c45cc864b..d71318d7b8 100644 --- a/src/app/core/services/server-hard-redirect.service.ts +++ b/src/app/core/services/server-hard-redirect.service.ts @@ -69,8 +69,8 @@ export class ServerHardRedirectService extends HardRedirectService { /** * Get the origin of the current URL * i.e. "://" [ ":" ] - * e.g. if the URL is https://demo7.dspace.org/search?query=test, - * the origin would be https://demo7.dspace.org + * e.g. if the URL is https://demo.dspace.org/search?query=test, + * the origin would be https://demo.dspace.org */ getCurrentOrigin(): string { return this.req.protocol + '://' + this.req.headers.host; From 596006de82b3918f2aa8e56e8fb18b250a06d0cd Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Wed, 23 Aug 2023 17:05:42 -0500 Subject: [PATCH 316/425] Enable new skip merge commit feature --- .github/workflows/port_merged_pull_request.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/port_merged_pull_request.yml b/.github/workflows/port_merged_pull_request.yml index 50faf3f886..109835d14d 100644 --- a/.github/workflows/port_merged_pull_request.yml +++ b/.github/workflows/port_merged_pull_request.yml @@ -39,6 +39,8 @@ jobs: # Copy all labels from original PR to (newly created) port PR # NOTE: The labels matching 'label_pattern' are automatically excluded copy_labels_pattern: '.*' + # Skip any merge commits in the ported PR. This means only non-merge commits are cherry-picked to the new PR + merge_commits: 'skip' # Use a personal access token (PAT) to create PR as 'dspace-bot' user. # A PAT is required in order for the new PR to trigger its own actions (for CI checks) github_token: ${{ secrets.PR_PORT_TOKEN }} \ No newline at end of file From 9e46b5310b5038fb3433db2bdd829d48c8107a70 Mon Sep 17 00:00:00 2001 From: Alan Orth Date: Thu, 24 Aug 2023 15:01:37 +0300 Subject: [PATCH 317/425] config/config.example.yml: fix example syntax As of DSpace Angular 7.2 the syntax has changed from TypeScript to YAML. --- config/config.example.yml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/config/config.example.yml b/config/config.example.yml index b7ea190c55..d2734bd28e 100644 --- a/config/config.example.yml +++ b/config/config.example.yml @@ -292,33 +292,33 @@ themes: # # # A theme with a handle property will match the community, collection or item with the given # # handle, and all collections and/or items within it - # - name: 'custom', - # handle: '10673/1233' + # - name: custom + # handle: 10673/1233 # # # A theme with a regex property will match the route using a regular expression. If it # # matches the route for a community or collection it will also apply to all collections # # and/or items within it - # - name: 'custom', - # regex: 'collections\/e8043bc2.*' + # - name: custom + # regex: collections\/e8043bc2.* # # # A theme with a uuid property will match the community, collection or item with the given # # ID, and all collections and/or items within it - # - name: 'custom', - # uuid: '0958c910-2037-42a9-81c7-dca80e3892b4' + # - name: custom + # uuid: 0958c910-2037-42a9-81c7-dca80e3892b4 # # # The extends property specifies an ancestor theme (by name). Whenever a themed component is not found # # in the current theme, its ancestor theme(s) will be checked recursively before falling back to default. - # - name: 'custom-A', - # extends: 'custom-B', + # - name: custom-A + # extends: custom-B # # Any of the matching properties above can be used - # handle: '10673/34' + # handle: 10673/34 # - # - name: 'custom-B', - # extends: 'custom', - # handle: '10673/12' + # - name: custom-B + # extends: custom + # handle: 10673/12 # # # A theme with only a name will match every route - # name: 'custom' + # name: custom # # # This theme will use the default bootstrap styling for DSpace components # - name: BASE_THEME_NAME From 88a7088b47a09c9927a869ebf67e9c174dd1f713 Mon Sep 17 00:00:00 2001 From: Hugo Dominguez Date: Fri, 25 Aug 2023 13:18:10 -0600 Subject: [PATCH 318/425] =?UTF-8?q?=F0=9F=90=9B=20go=20to=20first=20page?= =?UTF-8?q?=20after=20submit=20search?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/shared/search-form/search-form.component.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/app/shared/search-form/search-form.component.ts b/src/app/shared/search-form/search-form.component.ts index 151ded6f9e..95a063bdd6 100644 --- a/src/app/shared/search-form/search-form.component.ts +++ b/src/app/shared/search-form/search-form.component.ts @@ -114,7 +114,14 @@ export class SearchFormComponent implements OnChanges { * @param data Updated parameters */ updateSearch(data: any) { - const queryParams = Object.assign({}, data); + const goToFirstPage = { 'spc.page': 1 }; + + const queryParams = Object.assign( + { + ...goToFirstPage + }, + data + ); void this.router.navigate(this.getSearchLinkParts(), { queryParams: queryParams, From 044230209c3c0d817da9628802b8ef6d0b6aab86 Mon Sep 17 00:00:00 2001 From: Hugo Dominguez Date: Fri, 25 Aug 2023 13:20:37 -0600 Subject: [PATCH 319/425] =?UTF-8?q?=E2=9C=85=20add=20first=20page=20condit?= =?UTF-8?q?ion=20when=20search=20submit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../search-form/search-form.component.spec.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/app/shared/search-form/search-form.component.spec.ts b/src/app/shared/search-form/search-form.component.spec.ts index 584b7c5584..1fe1ea8316 100644 --- a/src/app/shared/search-form/search-form.component.spec.ts +++ b/src/app/shared/search-form/search-form.component.spec.ts @@ -28,6 +28,7 @@ describe('SearchFormComponent', () => { const searchService = new SearchServiceStub(); const paginationService = new PaginationServiceStub(); const searchConfigService = { paginationID: 'test-id' }; + const firstPage = { 'spc.page': 1 }; const dspaceObjectService = { findById: () => createSuccessfulRemoteDataObject$(undefined), }; @@ -104,16 +105,16 @@ describe('SearchFormComponent', () => { const scope = 'MCU'; let searchQuery = {}; - it('should navigate to the search page even when no parameters are provided', () => { + it('should navigate to the search first page even when no parameters are provided', () => { comp.updateSearch(searchQuery); expect(router.navigate).toHaveBeenCalledWith(comp.getSearchLinkParts(), { - queryParams: searchQuery, + queryParams: { ...searchQuery, ...firstPage }, queryParamsHandling: 'merge' }); }); - it('should navigate to the search page with parameters only query if only query is provided', () => { + it('should navigate to the search first page with parameters only query if only query is provided', () => { searchQuery = { query: query }; @@ -121,12 +122,12 @@ describe('SearchFormComponent', () => { comp.updateSearch(searchQuery); expect(router.navigate).toHaveBeenCalledWith(comp.getSearchLinkParts(), { - queryParams: searchQuery, + queryParams: { ...searchQuery, ...firstPage }, queryParamsHandling: 'merge' }); }); - it('should navigate to the search page with parameters only query if only scope is provided', () => { + it('should navigate to the search first page with parameters only query if only scope is provided', () => { searchQuery = { scope: scope }; @@ -134,7 +135,7 @@ describe('SearchFormComponent', () => { comp.updateSearch(searchQuery); expect(router.navigate).toHaveBeenCalledWith(comp.getSearchLinkParts(), { - queryParams: searchQuery, + queryParams: {...searchQuery, ...firstPage}, queryParamsHandling: 'merge' }); }); From 68a3323fcaf9b97d260f5032c9eb2fa5f6096bc2 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Mon, 28 Aug 2023 13:53:19 -0500 Subject: [PATCH 320/425] Update to latest cypress --- package.json | 2 +- yarn.lock | 49 +++++++++++++++++++++++++++++++++++-------------- 2 files changed, 36 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 977a4bdc5e..f5335d7e23 100644 --- a/package.json +++ b/package.json @@ -163,7 +163,7 @@ "compression-webpack-plugin": "^9.2.0", "copy-webpack-plugin": "^6.4.1", "cross-env": "^7.0.3", - "cypress": "12.10.0", + "cypress": "12.17.4", "cypress-axe": "^1.4.0", "deep-freeze": "0.0.1", "eslint": "^8.39.0", diff --git a/yarn.lock b/yarn.lock index e53a070d16..a7c8af6c04 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1551,10 +1551,10 @@ resolved "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz" integrity sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw== -"@cypress/request@^2.88.10": - version "2.88.11" - resolved "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz" - integrity sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w== +"@cypress/request@2.88.12": + version "2.88.12" + resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.12.tgz#ba4911431738494a85e93fb04498cb38bc55d590" + integrity sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA== dependencies: aws-sign2 "~0.7.0" aws4 "^1.8.0" @@ -1571,7 +1571,7 @@ performance-now "^2.1.0" qs "~6.10.3" safe-buffer "^5.1.2" - tough-cookie "~2.5.0" + tough-cookie "^4.1.3" tunnel-agent "^0.6.0" uuid "^8.3.2" @@ -2457,11 +2457,16 @@ resolved "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz" integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== -"@types/node@*", "@types/node@>=10.0.0", "@types/node@^14.14.31", "@types/node@^14.14.9": +"@types/node@*", "@types/node@>=10.0.0", "@types/node@^14.14.9": version "14.18.42" resolved "https://registry.npmjs.org/@types/node/-/node-14.18.42.tgz" integrity sha512-xefu+RBie4xWlK8hwAzGh3npDz/4VhF6icY/shU+zv/1fNn+ZVG7T7CRwe9LId9sAYRPxI+59QBPuKL3WpyGRg== +"@types/node@^16.18.39": + version "16.18.46" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.46.tgz#9f2102d0ba74a318fcbe170cbff5463f119eab59" + integrity sha512-Mnq3O9Xz52exs3mlxMcQuA7/9VFe/dXcrgAyfjLkABIqxXKOgBRjyazTxUbjsxDa4BP7hhPliyjVTP9RDP14xg== + "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" @@ -4437,14 +4442,14 @@ cypress-axe@^1.4.0: resolved "https://registry.yarnpkg.com/cypress-axe/-/cypress-axe-1.4.0.tgz#e67482bfe9e740796bf77c7823f19781a8a2faff" integrity sha512-Ut7NKfzjyKm0BEbt2WxuKtLkIXmx6FD2j0RwdvO/Ykl7GmB/qRQkwbKLk3VP35+83hiIr8GKD04PDdrTK5BnyA== -cypress@12.10.0: - version "12.10.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.10.0.tgz#b6264f77c214d63530ebac2b33c4d099bd40b715" - integrity sha512-Y0wPc221xKKW1/4iAFCphkrG2jNR4MjOne3iGn4mcuCaE7Y5EtXL83N8BzRsAht7GYfWVjJ/UeTqEdDKHz39HQ== +cypress@12.17.4: + version "12.17.4" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.17.4.tgz#b4dadf41673058493fa0d2362faa3da1f6ae2e6c" + integrity sha512-gAN8Pmns9MA5eCDFSDJXWKUpaL3IDd89N9TtIupjYnzLSmlpVr+ZR+vb4U/qaMp+lB6tBvAmt7504c3Z4RU5KQ== dependencies: - "@cypress/request" "^2.88.10" + "@cypress/request" "2.88.12" "@cypress/xvfb" "^1.2.4" - "@types/node" "^14.14.31" + "@types/node" "^16.18.39" "@types/sinonjs__fake-timers" "8.1.1" "@types/sizzle" "^2.3.2" arch "^2.2.0" @@ -4477,9 +4482,10 @@ cypress@12.10.0: minimist "^1.2.8" ospath "^1.2.2" pretty-bytes "^5.6.0" + process "^0.11.10" proxy-from-env "1.0.0" request-progress "^3.0.0" - semver "^7.3.2" + semver "^7.5.3" supports-color "^8.1.1" tmp "~0.2.1" untildify "^4.0.0" @@ -9267,6 +9273,11 @@ process-nextick-args@~2.0.0: resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" @@ -10131,7 +10142,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: +semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -10912,6 +10923,16 @@ tough-cookie@^4.0.0, tough-cookie@^4.1.2: universalify "^0.2.0" url-parse "^1.5.3" +tough-cookie@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" + integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" From 50899f1d1b16e322e323507ad7dd42e5173cfbe5 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Mon, 28 Aug 2023 13:55:05 -0500 Subject: [PATCH 321/425] Update to latest axe-core --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index f5335d7e23..707e9f0edf 100644 --- a/package.json +++ b/package.json @@ -159,7 +159,7 @@ "@types/sanitize-html": "^2.9.0", "@typescript-eslint/eslint-plugin": "^5.59.1", "@typescript-eslint/parser": "^5.59.1", - "axe-core": "^4.7.0", + "axe-core": "^4.7.2", "compression-webpack-plugin": "^9.2.0", "copy-webpack-plugin": "^6.4.1", "cross-env": "^7.0.3", diff --git a/yarn.lock b/yarn.lock index a7c8af6c04..58ddfaca4b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3363,10 +3363,10 @@ aws4@^1.8.0: resolved "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz" integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== -axe-core@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf" - integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ== +axe-core@^4.7.2: + version "4.7.2" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" + integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== axios@0.21.4: version "0.21.4" From 158ebb0e3268a314e18bc4855457166d8b57f2e8 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Tue, 29 Aug 2023 11:41:03 -0500 Subject: [PATCH 322/425] Reenable accessibility check fixed in #2251 --- cypress/e2e/community-list.cy.ts | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/cypress/e2e/community-list.cy.ts b/cypress/e2e/community-list.cy.ts index 7b60b59dbc..d91260eca1 100644 --- a/cypress/e2e/community-list.cy.ts +++ b/cypress/e2e/community-list.cy.ts @@ -13,13 +13,6 @@ describe('Community List Page', () => { cy.get('[data-test="expand-button"]').click({ multiple: true }); // Analyze for accessibility issues - // Disable heading-order checks until it is fixed - testA11y('ds-community-list-page', - { - rules: { - 'heading-order': { enabled: false } - } - } as Options - ); + testA11y('ds-community-list-page'); }); }); From 339ed63734d4192fb37a12e67b0395aa1669acdb Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Tue, 29 Aug 2023 11:43:36 -0500 Subject: [PATCH 323/425] Enable excessibility checking of login menu, and remove unnecessary exclusion from header --- cypress/e2e/header.cy.ts | 3 +-- cypress/e2e/login-modal.cy.ts | 12 ++++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/cypress/e2e/header.cy.ts b/cypress/e2e/header.cy.ts index 236208db68..1a9b841eb7 100644 --- a/cypress/e2e/header.cy.ts +++ b/cypress/e2e/header.cy.ts @@ -11,8 +11,7 @@ describe('Header', () => { testA11y({ include: ['ds-header'], exclude: [ - ['#search-navbar-container'], // search in navbar has duplicative ID. Will be fixed in #1174 - ['.dropdownLogin'] // "Log in" link has color contrast issues. Will be fixed in #1149 + ['#search-navbar-container'] // search in navbar has duplicative ID. Will be fixed in #1174 ], }); }); diff --git a/cypress/e2e/login-modal.cy.ts b/cypress/e2e/login-modal.cy.ts index b169634cfa..d29c13c2f9 100644 --- a/cypress/e2e/login-modal.cy.ts +++ b/cypress/e2e/login-modal.cy.ts @@ -1,4 +1,5 @@ import { TEST_ADMIN_PASSWORD, TEST_ADMIN_USER, TEST_ENTITY_PUBLICATION } from 'cypress/support/e2e'; +import { testA11y } from 'cypress/support/utils'; const page = { openLoginMenu() { @@ -123,4 +124,15 @@ describe('Login Modal', () => { cy.location('pathname').should('eq', '/forgot'); cy.get('ds-forgot-email').should('exist'); }); + + it('should pass accessibility tests', () => { + cy.visit('/'); + + page.openLoginMenu(); + + cy.get('ds-log-in').should('exist'); + + // Analyze for accessibility issues + testA11y('ds-log-in'); + }); }); From ba244bf6b14bfed06f1b1052cc6407f2537a175b Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Tue, 29 Aug 2023 11:44:03 -0500 Subject: [PATCH 324/425] Fix heading order issue with item page & update accessibility tests to prove it now passes --- cypress/e2e/item-page.cy.ts | 20 ++++++++++--------- .../item-page-title-field.component.html | 4 ++-- .../metadata-field-wrapper.component.html | 2 +- .../metadata-field-wrapper.component.scss | 3 +++ 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/cypress/e2e/item-page.cy.ts b/cypress/e2e/item-page.cy.ts index 9eed711776..9dba6eb8ce 100644 --- a/cypress/e2e/item-page.cy.ts +++ b/cypress/e2e/item-page.cy.ts @@ -1,4 +1,3 @@ -import { Options } from 'cypress-axe'; import { TEST_ENTITY_PUBLICATION } from 'cypress/support/e2e'; import { testA11y } from 'cypress/support/utils'; @@ -19,13 +18,16 @@ describe('Item Page', () => { cy.get('ds-item-page').should('be.visible'); // Analyze for accessibility issues - // Disable heading-order checks until it is fixed - testA11y('ds-item-page', - { - rules: { - 'heading-order': { enabled: false } - } - } as Options - ); + testA11y('ds-item-page'); + }); + + it('should pass accessibility tests on full item page', () => { + cy.visit(ENTITYPAGE + '/full'); + + // tag must be loaded + cy.get('ds-full-item-page').should('be.visible'); + + // Analyze for accessibility issues + testA11y('ds-full-item-page'); }); }); diff --git a/src/app/item-page/simple/field-components/specific-field/title/item-page-title-field.component.html b/src/app/item-page/simple/field-components/specific-field/title/item-page-title-field.component.html index 15960bdc9d..85975d4533 100644 --- a/src/app/item-page/simple/field-components/specific-field/title/item-page-title-field.component.html +++ b/src/app/item-page/simple/field-components/specific-field/title/item-page-title-field.component.html @@ -1,6 +1,6 @@ -

    +

    {{ type.toLowerCase() + '.page.titleprefix' | translate }}
    {{ dsoNameService.getName(item) }} -

    + diff --git a/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.html b/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.html index d69f87883b..7748e385ca 100644 --- a/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.html +++ b/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.html @@ -1,5 +1,5 @@
    -
    {{ label }}
    +

    {{ label }}

    diff --git a/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.scss b/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.scss index 75dfd09d0d..bf17d63d6c 100644 --- a/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.scss +++ b/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.scss @@ -2,4 +2,7 @@ .simple-view-element { margin-bottom: 15px; } + .simple-view-element-header { + font-size: 1.25rem; + } } From 91d8b7e4f7187b68f70c1cf2906f4e6e8d8af2b9 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Tue, 29 Aug 2023 14:58:49 -0500 Subject: [PATCH 325/425] Update ng2-nouislider and nouislider to latest versions --- package.json | 4 ++-- src/styles/_vendor.scss | 2 +- yarn.lock | 18 ++++++++++-------- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 707e9f0edf..31d1b7cf28 100644 --- a/package.json +++ b/package.json @@ -116,12 +116,12 @@ "morgan": "^1.10.0", "ng-mocks": "^14.10.0", "ng2-file-upload": "1.4.0", - "ng2-nouislider": "^1.8.3", + "ng2-nouislider": "^2.0.0", "ngx-infinite-scroll": "^15.0.0", "ngx-pagination": "6.0.3", "ngx-sortablejs": "^11.1.0", "ngx-ui-switch": "^14.0.3", - "nouislider": "^14.6.3", + "nouislider": "^15.7.1", "pem": "1.14.7", "prop-types": "^15.8.1", "react-copy-to-clipboard": "^5.1.0", diff --git a/src/styles/_vendor.scss b/src/styles/_vendor.scss index 9d9842b9b3..b2b94c2826 100644 --- a/src/styles/_vendor.scss +++ b/src/styles/_vendor.scss @@ -1,5 +1,5 @@ // node_modules imports meant for all the themes @import '~node_modules/bootstrap/scss/bootstrap.scss'; -@import '~node_modules/nouislider/distribute/nouislider.min'; +@import '~node_modules/nouislider/dist/nouislider.min'; @import '~node_modules/ngx-ui-switch/ui-switch.component.scss'; diff --git a/yarn.lock b/yarn.lock index 58ddfaca4b..44625c4bd0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8197,10 +8197,12 @@ ng2-file-upload@1.4.0: dependencies: tslib "^1.9.0" -ng2-nouislider@^1.8.3: - version "1.8.3" - resolved "https://registry.npmjs.org/ng2-nouislider/-/ng2-nouislider-1.8.3.tgz" - integrity sha512-Vl8tHCcJ/ioJLAs2t6FBC35sZq1P/O5ZdqdFwYxOCOMVbILGWNg+2gWZIjFstvv9pqb/mVvVUYe6qGG/mA/RBQ== +ng2-nouislider@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ng2-nouislider/-/ng2-nouislider-2.0.0.tgz#a62fd6cf3f1561be19a2691c2f68d21a46dc6006" + integrity sha512-NGbF/0w0+bZqclpSPFOlWIeVJaVwRRYFJzD1x8PClbw9GIeo7fCHoBzZ81y7K7FTJg6to+cgjSTFETPZG/Dizg== + dependencies: + tslib "^2.3.0" ngx-infinite-scroll@^15.0.0: version "15.0.0" @@ -8343,10 +8345,10 @@ normalize-url@^4.5.0: resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== -nouislider@^14.6.3: - version "14.7.0" - resolved "https://registry.npmjs.org/nouislider/-/nouislider-14.7.0.tgz" - integrity sha512-4RtQ1+LHJKesDCNJrXkQcwXAWCrC2aggdLYMstS/G5fEWL+fXZbUA9pwVNHFghMGuFGRATlDLNInRaPeRKzpFQ== +nouislider@^15.7.1: + version "15.7.1" + resolved "https://registry.yarnpkg.com/nouislider/-/nouislider-15.7.1.tgz#77d55e47d9b4cd771728515713df43b489db9705" + integrity sha512-5N7C1ru/i8y3dg9+Z6ilj6+m1EfabvOoaRa7ztpxBSKKRZso4vA52DGSbBJjw5XLtFr/LZ9SgGAXqyVtlVHO5w== npm-bundled@^3.0.0: version "3.0.0" From 2a881791ba76091d2f85d0b068f926043ef33bc9 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Tue, 29 Aug 2023 15:01:21 -0500 Subject: [PATCH 326/425] Fix accessibility of date sliders by adding aria-labels --- cypress/e2e/my-dspace.cy.ts | 6 +--- cypress/e2e/search-page.cy.ts | 6 +--- .../search-range-filter.component.html | 10 +++---- .../search-range-filter.component.ts | 29 +++++++++++++++++++ 4 files changed, 36 insertions(+), 15 deletions(-) diff --git a/cypress/e2e/my-dspace.cy.ts b/cypress/e2e/my-dspace.cy.ts index 79786c298a..af4aab41f3 100644 --- a/cypress/e2e/my-dspace.cy.ts +++ b/cypress/e2e/my-dspace.cy.ts @@ -22,15 +22,11 @@ describe('My DSpace page', () => { testA11y( { include: ['ds-my-dspace-page'], - exclude: [ - ['nouislider'] // Date filter slider is missing ARIA labels. Will be fixed by #1175 - ], }, { rules: { - // Search filters fail these two "moderate" impact rules + // Search filters fail this "moderate" impact rules 'heading-order': { enabled: false }, - 'landmark-unique': { enabled: false } } } as Options ); diff --git a/cypress/e2e/search-page.cy.ts b/cypress/e2e/search-page.cy.ts index 24519cc236..0d4f70ef03 100644 --- a/cypress/e2e/search-page.cy.ts +++ b/cypress/e2e/search-page.cy.ts @@ -30,15 +30,11 @@ describe('Search Page', () => { testA11y( { include: ['ds-search-page'], - exclude: [ - ['nouislider'] // Date filter slider is missing ARIA labels. Will be fixed by #1175 - ], }, { rules: { - // Search filters fail these two "moderate" impact rules + // Search filters fail this "moderate" impact rule 'heading-order': { enabled: false }, - 'landmark-unique': { enabled: false } } } as Options ); diff --git a/src/app/shared/search/search-filters/search-filter/search-range-filter/search-range-filter.component.html b/src/app/shared/search/search-filters/search-filter/search-range-filter/search-range-filter.component.html index 7834c4c557..251e5ac420 100644 --- a/src/app/shared/search/search-filters/search-filter/search-range-filter/search-range-filter.component.html +++ b/src/app/shared/search/search-filters/search-filter/search-range-filter/search-range-filter.component.html @@ -9,8 +9,8 @@
    @@ -21,8 +21,8 @@
    @@ -33,7 +33,7 @@ - diff --git a/src/app/shared/search/search-filters/search-filter/search-range-filter/search-range-filter.component.ts b/src/app/shared/search/search-filters/search-filter/search-range-filter/search-range-filter.component.ts index 938f67412e..ed20e63c52 100644 --- a/src/app/shared/search/search-filters/search-filter/search-range-filter/search-range-filter.component.ts +++ b/src/app/shared/search/search-filters/search-filter/search-range-filter/search-range-filter.component.ts @@ -2,6 +2,7 @@ import { BehaviorSubject, combineLatest as observableCombineLatest, Subscription import { map, startWith } from 'rxjs/operators'; import { isPlatformBrowser } from '@angular/common'; import { Component, Inject, OnDestroy, OnInit, PLATFORM_ID } from '@angular/core'; +import { TranslateService } from '@ngx-translate/core'; import { RemoteDataBuildService } from '../../../../../core/cache/builders/remote-data-build.service'; import { FilterType } from '../../../models/filter-type.model'; import { renderFacetFor } from '../search-filter-type-decorator'; @@ -53,11 +54,27 @@ export class SearchRangeFilterComponent extends SearchFacetFilterComponent imple */ min = 1950; + /** + * i18n Label to use for minimum field + */ + minLabel: string; + /** * Fallback maximum for the range */ max = new Date().getUTCFullYear(); + /** + * i18n Label to use for maximum field + */ + maxLabel: string; + + /** + * Base configuration for nouislider + * https://refreshless.com/nouislider/slider-options/ + */ + config = {}; + /** * The current range of the filter */ @@ -78,6 +95,7 @@ export class SearchRangeFilterComponent extends SearchFacetFilterComponent imple protected filterService: SearchFilterService, protected router: Router, protected rdbs: RemoteDataBuildService, + private translateService: TranslateService, @Inject(SEARCH_CONFIG_SERVICE) public searchConfigService: SearchConfigurationService, @Inject(IN_PLACE_SEARCH) public inPlaceSearch: boolean, @Inject(FILTER_CONFIG) public filterConfig: SearchFilterConfig, @@ -96,6 +114,8 @@ export class SearchRangeFilterComponent extends SearchFacetFilterComponent imple super.ngOnInit(); this.min = yearFromString(this.filterConfig.minValue) || this.min; this.max = yearFromString(this.filterConfig.maxValue) || this.max; + this.minLabel = this.translateService.instant('search.filters.filter.' + this.filterConfig.name + '.min.placeholder'); + this.maxLabel = this.translateService.instant('search.filters.filter.' + this.filterConfig.name + '.max.placeholder'); const iniMin = this.route.getQueryParameterValue(this.filterConfig.paramName + RANGE_FILTER_MIN_SUFFIX).pipe(startWith(undefined)); const iniMax = this.route.getQueryParameterValue(this.filterConfig.paramName + RANGE_FILTER_MAX_SUFFIX).pipe(startWith(undefined)); this.sub = observableCombineLatest(iniMin, iniMax).pipe( @@ -105,6 +125,15 @@ export class SearchRangeFilterComponent extends SearchFacetFilterComponent imple return [minimum, maximum]; }) ).subscribe((minmax) => this.range = minmax); + + // Default/base config for nouislider + this.config = { + // Ensure draggable handles have labels + handleAttributes: [ + { 'aria-label': this.minLabel }, + { 'aria-label': this.maxLabel }, + ], + }; } /** From 70a7bbe3cbdd24abaf7f6f791ef60e88a3ae8922 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Tue, 29 Aug 2023 15:01:51 -0500 Subject: [PATCH 327/425] Minor fixes to cypress tests --- cypress/e2e/community-list.cy.ts | 1 - cypress/e2e/pagenotfound.cy.ts | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/cypress/e2e/community-list.cy.ts b/cypress/e2e/community-list.cy.ts index d91260eca1..c371f6ceae 100644 --- a/cypress/e2e/community-list.cy.ts +++ b/cypress/e2e/community-list.cy.ts @@ -1,4 +1,3 @@ -import { Options } from 'cypress-axe'; import { testA11y } from 'cypress/support/utils'; describe('Community List Page', () => { diff --git a/cypress/e2e/pagenotfound.cy.ts b/cypress/e2e/pagenotfound.cy.ts index 43e3c3af24..d02aa8541c 100644 --- a/cypress/e2e/pagenotfound.cy.ts +++ b/cypress/e2e/pagenotfound.cy.ts @@ -1,8 +1,13 @@ +import { testA11y } from 'cypress/support/utils'; + describe('PageNotFound', () => { it('should contain element ds-pagenotfound when navigating to page that doesnt exist', () => { // request an invalid page (UUIDs at root path aren't valid) cy.visit('/e9019a69-d4f1-4773-b6a3-bd362caa46f2', { failOnStatusCode: false }); cy.get('ds-pagenotfound').should('be.visible'); + + // Analyze for accessibility issues + testA11y('ds-pagenotfound'); }); it('should not contain element ds-pagenotfound when navigating to existing page', () => { From 276d80895e38225fcbde38cab01d79cd31a34e9b Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Tue, 29 Aug 2023 15:10:12 -0500 Subject: [PATCH 328/425] Fix heading order accessibility issue in search filters/facets --- cypress/e2e/my-dspace.cy.ts | 12 +----------- cypress/e2e/search-page.cy.ts | 12 +----------- .../search-filter/search-filter.component.html | 4 ++-- .../shared/sidebar/sidebar-dropdown.component.html | 2 +- src/themes/dspace/styles/_global-styles.scss | 2 +- 5 files changed, 6 insertions(+), 26 deletions(-) diff --git a/cypress/e2e/my-dspace.cy.ts b/cypress/e2e/my-dspace.cy.ts index af4aab41f3..13f4a1b547 100644 --- a/cypress/e2e/my-dspace.cy.ts +++ b/cypress/e2e/my-dspace.cy.ts @@ -19,17 +19,7 @@ describe('My DSpace page', () => { cy.get('.filter-toggle').click({ multiple: true }); // Analyze for accessibility issues - testA11y( - { - include: ['ds-my-dspace-page'], - }, - { - rules: { - // Search filters fail this "moderate" impact rules - 'heading-order': { enabled: false }, - } - } as Options - ); + testA11y('ds-my-dspace-page'); }); it('should have a working detailed view that passes accessibility tests', () => { diff --git a/cypress/e2e/search-page.cy.ts b/cypress/e2e/search-page.cy.ts index 0d4f70ef03..755f8eaac6 100644 --- a/cypress/e2e/search-page.cy.ts +++ b/cypress/e2e/search-page.cy.ts @@ -27,17 +27,7 @@ describe('Search Page', () => { cy.get('[data-test="filter-toggle"]').click({ multiple: true }); // Analyze for accessibility issues - testA11y( - { - include: ['ds-search-page'], - }, - { - rules: { - // Search filters fail this "moderate" impact rule - 'heading-order': { enabled: false }, - } - } as Options - ); + testA11y('ds-search-page'); }); it('should have a working grid view that passes accessibility tests', () => { diff --git a/src/app/shared/search/search-filters/search-filter/search-filter.component.html b/src/app/shared/search/search-filters/search-filter/search-filter.component.html index a6fb0021b7..421d1ede2c 100644 --- a/src/app/shared/search/search-filters/search-filter/search-filter.component.html +++ b/src/app/shared/search/search-filters/search-filter/search-filter.component.html @@ -6,9 +6,9 @@ [attr.aria-label]="(((collapsed$ | async) ? 'search.filters.filter.expand' : 'search.filters.filter.collapse') | translate) + ' ' + (('search.filters.filter.' + filter.name + '.head') | translate | lowercase)" [attr.data-test]="'filter-toggle' | dsBrowserOnly" > -
    +

    {{'search.filters.filter.' + filter.name + '.head'| translate}} -

    + diff --git a/src/app/shared/sidebar/sidebar-dropdown.component.html b/src/app/shared/sidebar/sidebar-dropdown.component.html index 0c2a1c05d2..2eadac09f7 100644 --- a/src/app/shared/sidebar/sidebar-dropdown.component.html +++ b/src/app/shared/sidebar/sidebar-dropdown.component.html @@ -1,5 +1,5 @@
    -
    +

    diff --git a/src/themes/dspace/styles/_global-styles.scss b/src/themes/dspace/styles/_global-styles.scss index e41dae0e3f..5bd4c19bc0 100644 --- a/src/themes/dspace/styles/_global-styles.scss +++ b/src/themes/dspace/styles/_global-styles.scss @@ -17,7 +17,7 @@ background-color: var(--bs-primary); } - h5 { + h4 { font-size: 1.1rem } } From a6c1120700398fb0cf99ffd6e1a7ff52e5858a40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Carvalho?= Date: Wed, 30 Aug 2023 15:52:34 +0100 Subject: [PATCH 329/425] Minor pt-PT translation fixes --- src/assets/i18n/pt-PT.json5 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index 5aa4817e88..faa027705e 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -2259,7 +2259,7 @@ "confirmation-modal.delete-eperson.header": "Apagar Utilizador \"{{ dsoName }}\"", // "confirmation-modal.delete-eperson.info": "Are you sure you want to delete EPerson \"{{ dsoName }}\"", - "confirmation-modal.delete-eperson.info": "Pretende apagar o utilizar \"{{ dsoName }}\"", + "confirmation-modal.delete-eperson.info": "Pretende apagar o utilizador \"{{ dsoName }}\"", // "confirmation-modal.delete-eperson.cancel": "Cancel", "confirmation-modal.delete-eperson.cancel": "Cancelar", @@ -2666,7 +2666,7 @@ "health-page.property.status": "Código Estado", // "health-page.section.db.title": "Database", - "health-page.section.db.title": "Base Dados", + "health-page.section.db.title": "Base de Dados", // "health-page.section.geoIp.title": "GeoIp", "health-page.section.geoIp.title": "GeoIp", From 18febff7a6c8e92d3d30016e6a4d93f7fe521dd0 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 1 Sep 2023 21:09:40 +0200 Subject: [PATCH 330/425] Fix routes not working with baseHref --- .../item-edit-bitstream/item-edit-bitstream.component.html | 2 +- .../item-edit-bitstream.component.spec.ts | 6 +++++- src/app/shared/cookies/klaro-configuration.ts | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/app/item-page/edit-item-page/item-bitstreams/item-edit-bitstream/item-edit-bitstream.component.html b/src/app/item-page/edit-item-page/item-bitstreams/item-edit-bitstream/item-edit-bitstream.component.html index 0f0fad2199..a3e29ac10c 100644 --- a/src/app/item-page/edit-item-page/item-bitstreams/item-edit-bitstream/item-edit-bitstream.component.html +++ b/src/app/item-page/edit-item-page/item-bitstreams/item-edit-bitstream/item-edit-bitstream.component.html @@ -25,7 +25,7 @@
    - diff --git a/src/app/item-page/edit-item-page/item-bitstreams/item-edit-bitstream/item-edit-bitstream.component.spec.ts b/src/app/item-page/edit-item-page/item-bitstreams/item-edit-bitstream/item-edit-bitstream.component.spec.ts index aafa5a4fe4..f3c897aa73 100644 --- a/src/app/item-page/edit-item-page/item-bitstreams/item-edit-bitstream/item-edit-bitstream.component.spec.ts +++ b/src/app/item-page/edit-item-page/item-bitstreams/item-edit-bitstream/item-edit-bitstream.component.spec.ts @@ -13,6 +13,7 @@ import { createSuccessfulRemoteDataObject$ } from '../../../../shared/remote-dat import { getBitstreamDownloadRoute } from '../../../../app-routing-paths'; import { By } from '@angular/platform-browser'; import { BrowserOnlyMockPipe } from '../../../../shared/testing/browser-only-mock.pipe'; +import { RouterTestingModule } from '@angular/router/testing'; let comp: ItemEditBitstreamComponent; let fixture: ComponentFixture; @@ -72,7 +73,10 @@ describe('ItemEditBitstreamComponent', () => { ); TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot()], + imports: [ + RouterTestingModule.withRoutes([]), + TranslateModule.forRoot(), + ], declarations: [ ItemEditBitstreamComponent, VarDirective, diff --git a/src/app/shared/cookies/klaro-configuration.ts b/src/app/shared/cookies/klaro-configuration.ts index a41b641dec..c818ddc19c 100644 --- a/src/app/shared/cookies/klaro-configuration.ts +++ b/src/app/shared/cookies/klaro-configuration.ts @@ -22,7 +22,7 @@ export const GOOGLE_ANALYTICS_KLARO_KEY = 'google-analytics'; export const klaroConfiguration: any = { storageName: ANONYMOUS_STORAGE_NAME_KLARO, - privacyPolicy: '/info/privacy', + privacyPolicy: './info/privacy', /* Setting 'hideLearnMore' to 'true' will hide the "learn more / customize" link in From 3e5524de69fa09808e3a7d0ab4042e5e3ffc98e0 Mon Sep 17 00:00:00 2001 From: Hugo Dominguez Date: Fri, 8 Sep 2023 11:31:26 -0600 Subject: [PATCH 331/425] =?UTF-8?q?=F0=9F=8E=A8=20revert=20format?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../metadata-schema-form.component.ts | 119 ++++++++---------- 1 file changed, 55 insertions(+), 64 deletions(-) diff --git a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts index 61766a4a10..24bf430661 100644 --- a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts +++ b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts @@ -1,10 +1,4 @@ -import { - Component, - EventEmitter, - OnDestroy, - OnInit, - Output, -} from '@angular/core'; +import { Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core'; import { DynamicFormControlModel, DynamicFormGroupModel, @@ -21,12 +15,13 @@ import { MetadataSchema } from '../../../../core/metadata/metadata-schema.model' @Component({ selector: 'ds-metadata-schema-form', - templateUrl: './metadata-schema-form.component.html', + templateUrl: './metadata-schema-form.component.html' }) /** * A form used for creating and editing metadata schemas */ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { + /** * A unique id used for ds-form */ @@ -58,14 +53,14 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { formLayout: DynamicFormLayout = { name: { grid: { - host: 'col col-sm-6 d-inline-block', - }, + host: 'col col-sm-6 d-inline-block' + } }, namespace: { grid: { - host: 'col col-sm-6 d-inline-block', - }, - }, + host: 'col col-sm-6 d-inline-block' + } + } }; /** @@ -78,67 +73,63 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { */ @Output() submitForm: EventEmitter = new EventEmitter(); - constructor( - public registryService: RegistryService, - private formBuilderService: FormBuilderService, - private translateService: TranslateService - ) {} + constructor(public registryService: RegistryService, private formBuilderService: FormBuilderService, private translateService: TranslateService) { + } ngOnInit() { combineLatest([ this.translateService.get(`${this.messagePrefix}.name`), - this.translateService.get(`${this.messagePrefix}.namespace`), + this.translateService.get(`${this.messagePrefix}.namespace`) ]).subscribe(([name, namespace]) => { this.name = new DynamicInputModel({ - id: 'name', - label: name, - name: 'name', - validators: { - required: null, - pattern: '^[^. ,]*$', - maxLength: 32, - }, - required: true, - errorMessages: { - pattern: 'error.validation.metadata.name.invalid-pattern', - maxLength: 'error.validation.metadata.name.max-length', - }, - }); + id: 'name', + label: name, + name: 'name', + validators: { + required: null, + pattern: '^[^. ,]*$', + maxLength: 32, + }, + required: true, + errorMessages: { + pattern: 'error.validation.metadata.name.invalid-pattern', + maxLength: 'error.validation.metadata.name.max-length', + }, + }); this.namespace = new DynamicInputModel({ - id: 'namespace', - label: namespace, - name: 'namespace', - validators: { - required: null, - maxLength: 256, - }, - required: true, - errorMessages: { - maxLength: 'error.validation.metadata.namespace.max-length', - }, - }); + id: 'namespace', + label: namespace, + name: 'namespace', + validators: { + required: null, + maxLength: 256, + }, + required: true, + errorMessages: { + maxLength: 'error.validation.metadata.namespace.max-length', + }, + }); this.formModel = [ - new DynamicFormGroupModel({ - id: 'metadatadataschemagroup', - group: [this.namespace, this.name], - }), + new DynamicFormGroupModel( + { + id: 'metadatadataschemagroup', + group:[this.namespace, this.name] + }) ]; this.formGroup = this.formBuilderService.createFormGroup(this.formModel); - this.registryService - .getActiveMetadataSchema() - .subscribe((schema: MetadataSchema) => { - if (schema == null) { - this.clearFields(); - } else { - this.formGroup.patchValue({ - metadatadataschemagroup: { - name: schema.prefix, - namespace: schema.namespace, - }, - }); - this.name.disabled = true; - } - }); + this.registryService.getActiveMetadataSchema().subscribe((schema: MetadataSchema) => { + if (schema == null) { + this.clearFields(); + } else { + this.formGroup.patchValue({ + metadatadataschemagroup: { + name: schema.prefix, + namespace: schema.namespace, + }, + }); + this.name.disabled = true; + } + }); }); } From 13e4052c4da07014a1c01087bfc6d293a8bb71c5 Mon Sep 17 00:00:00 2001 From: Hugo Dominguez Date: Fri, 8 Sep 2023 11:51:42 -0600 Subject: [PATCH 332/425] =?UTF-8?q?=F0=9F=8E=A8revert=20unnecessary=20form?= =?UTF-8?q?at?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workspaceitem-section-upload-file.model.ts | 4 ++-- .../file/view/section-upload-file-view.component.ts | 12 +++++------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/app/core/submission/models/workspaceitem-section-upload-file.model.ts b/src/app/core/submission/models/workspaceitem-section-upload-file.model.ts index 59a8faf634..785d7c402f 100644 --- a/src/app/core/submission/models/workspaceitem-section-upload-file.model.ts +++ b/src/app/core/submission/models/workspaceitem-section-upload-file.model.ts @@ -1,5 +1,5 @@ -import {SubmissionUploadFileAccessConditionObject} from './submission-upload-file-access-condition.model'; -import {WorkspaceitemSectionFormObject} from './workspaceitem-section-form.model'; +import { SubmissionUploadFileAccessConditionObject } from './submission-upload-file-access-condition.model'; +import { WorkspaceitemSectionFormObject } from './workspaceitem-section-form.model'; /** * An interface to represent submission's upload section file entry. diff --git a/src/app/submission/sections/upload/file/view/section-upload-file-view.component.ts b/src/app/submission/sections/upload/file/view/section-upload-file-view.component.ts index b0ea2487e1..b15b0ab321 100644 --- a/src/app/submission/sections/upload/file/view/section-upload-file-view.component.ts +++ b/src/app/submission/sections/upload/file/view/section-upload-file-view.component.ts @@ -1,11 +1,9 @@ -import {Component, Input, OnInit} from '@angular/core'; +import { Component, Input, OnInit } from '@angular/core'; -import { - WorkspaceitemSectionUploadFileObject -} from '../../../../../core/submission/models/workspaceitem-section-upload-file.model'; -import {isNotEmpty} from '../../../../../shared/empty.util'; -import {Metadata} from '../../../../../core/shared/metadata.utils'; -import {MetadataMap, MetadataValue} from '../../../../../core/shared/metadata.models'; +import { WorkspaceitemSectionUploadFileObject } from '../../../../../core/submission/models/workspaceitem-section-upload-file.model'; +import { isNotEmpty } from '../../../../../shared/empty.util'; +import { Metadata } from '../../../../../core/shared/metadata.utils'; +import { MetadataMap, MetadataValue } from '../../../../../core/shared/metadata.models'; /** * This component allow to show bitstream's metadata From 01c8a4d9c3347cb5b30d4d912a3f7e18b81f989a Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Fri, 8 Sep 2023 14:28:23 -0500 Subject: [PATCH 333/425] Update workspaceitem-section-upload-file.model.ts Fix code comment --- .../models/workspaceitem-section-upload-file.model.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/core/submission/models/workspaceitem-section-upload-file.model.ts b/src/app/core/submission/models/workspaceitem-section-upload-file.model.ts index 785d7c402f..725e646d76 100644 --- a/src/app/core/submission/models/workspaceitem-section-upload-file.model.ts +++ b/src/app/core/submission/models/workspaceitem-section-upload-file.model.ts @@ -30,7 +30,7 @@ export class WorkspaceitemSectionUploadFileObject { }; /** - * The file check sum + * The file format information */ format: { shortDescription: string, From 0905a53db5eca45220809831663ba8d6761e55c5 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 8 Sep 2023 22:35:27 +0200 Subject: [PATCH 334/425] Fix innerText still being undefined in ssr mode --- src/app/shared/log-in/log-in.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/shared/log-in/log-in.component.html b/src/app/shared/log-in/log-in.component.html index 05d8d4370f..857b977360 100644 --- a/src/app/shared/log-in/log-in.component.html +++ b/src/app/shared/log-in/log-in.component.html @@ -1,7 +1,7 @@ diff --git a/src/app/navbar/expandable-navbar-section/expandable-navbar-section.component.ts b/src/app/navbar/expandable-navbar-section/expandable-navbar-section.component.ts index 5bc69bcbb4..d32fa46a32 100644 --- a/src/app/navbar/expandable-navbar-section/expandable-navbar-section.component.ts +++ b/src/app/navbar/expandable-navbar-section/expandable-navbar-section.component.ts @@ -4,7 +4,6 @@ import { MenuService } from '../../shared/menu/menu.service'; import { slide } from '../../shared/animations/slide'; import { first } from 'rxjs/operators'; import { HostWindowService } from '../../shared/host-window.service'; -import { rendersSectionForMenu } from '../../shared/menu/menu-section.decorator'; import { MenuID } from '../../shared/menu/menu-id.model'; /** @@ -16,7 +15,6 @@ import { MenuID } from '../../shared/menu/menu-id.model'; styleUrls: ['./expandable-navbar-section.component.scss'], animations: [slide] }) -@rendersSectionForMenu(MenuID.PUBLIC, true) export class ExpandableNavbarSectionComponent extends NavbarSectionComponent implements OnInit { /** * This section resides in the Public Navbar diff --git a/src/app/navbar/expandable-navbar-section/themed-expandable-navbar-section.component.ts b/src/app/navbar/expandable-navbar-section/themed-expandable-navbar-section.component.ts index e33dca4104..8f474e9949 100644 --- a/src/app/navbar/expandable-navbar-section/themed-expandable-navbar-section.component.ts +++ b/src/app/navbar/expandable-navbar-section/themed-expandable-navbar-section.component.ts @@ -8,8 +8,7 @@ import { MenuID } from '../../shared/menu/menu-id.model'; * Themed wrapper for ExpandableNavbarSectionComponent */ @Component({ - /* eslint-disable @angular-eslint/component-selector */ - selector: 'li[ds-themed-expandable-navbar-section]', + selector: 'ds-themed-expandable-navbar-section', styleUrls: [], templateUrl: '../../shared/theme-support/themed.component.html', }) diff --git a/src/app/navbar/navbar-section/navbar-section.component.ts b/src/app/navbar/navbar-section/navbar-section.component.ts index 9f75a96f6e..9b86aa10f2 100644 --- a/src/app/navbar/navbar-section/navbar-section.component.ts +++ b/src/app/navbar/navbar-section/navbar-section.component.ts @@ -8,8 +8,7 @@ import { MenuID } from '../../shared/menu/menu-id.model'; * Represents a non-expandable section in the navbar */ @Component({ - /* eslint-disable @angular-eslint/component-selector */ - selector: 'li[ds-navbar-section]', + selector: 'ds-navbar-section', templateUrl: './navbar-section.component.html', styleUrls: ['./navbar-section.component.scss'] }) diff --git a/src/app/navbar/navbar.component.html b/src/app/navbar/navbar.component.html index bc1e04f513..edfc4bb8ee 100644 --- a/src/app/navbar/navbar.component.html +++ b/src/app/navbar/navbar.component.html @@ -8,9 +8,9 @@
  • - +
  • - +
  • diff --git a/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.ts b/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.ts index 8e4a7008af..1925099418 100644 --- a/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.ts +++ b/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.ts @@ -13,7 +13,6 @@ import { hasValue } from '../../../empty.util'; * Represents an expandable section in the dso edit menus */ @Component({ - /* tslint:disable:component-selector */ selector: 'ds-dso-edit-menu-expandable-section', templateUrl: './dso-edit-menu-expandable-section.component.html', styleUrls: ['./dso-edit-menu-expandable-section.component.scss'], diff --git a/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.ts b/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.ts index af3381ef71..060049ef5f 100644 --- a/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.ts +++ b/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.ts @@ -10,7 +10,6 @@ import { MenuSection } from '../../../menu/menu-section.model'; * Represents a non-expandable section in the dso edit menus */ @Component({ - /* tslint:disable:component-selector */ selector: 'ds-dso-edit-menu-section', templateUrl: './dso-edit-menu-section.component.html', styleUrls: ['./dso-edit-menu-section.component.scss'] diff --git a/src/themes/dspace/app/navbar/navbar.component.html b/src/themes/dspace/app/navbar/navbar.component.html index d9631aad18..c14671cf68 100644 --- a/src/themes/dspace/app/navbar/navbar.component.html +++ b/src/themes/dspace/app/navbar/navbar.component.html @@ -10,9 +10,9 @@
  • - +
  • - +