diff --git a/.eslintrc.json b/.eslintrc.json index 888c968b5c..1151e6831b 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -12,7 +12,6 @@ "eslint-plugin-rxjs", "eslint-plugin-simple-import-sort", "eslint-plugin-import-newlines", - "eslint-plugin-jsonc", "dspace-angular-ts", "dspace-angular-html" ], @@ -302,10 +301,13 @@ "*.json5" ], "extends": [ - "plugin:jsonc/recommended-with-jsonc" + "plugin:jsonc/recommended-with-json5" ], "rules": { - "no-irregular-whitespace": "error", + // The ESLint core no-irregular-whitespace rule doesn't work well in JSON + // See: https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-irregular-whitespace.html + "no-irregular-whitespace": "off", + "jsonc/no-irregular-whitespace": "error", "no-trailing-spaces": "error", "jsonc/comma-dangle": [ "error", diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 20791be6f2..80602adcd1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -190,12 +190,115 @@ jobs: # Get homepage and verify that the tag includes "DSpace". # If it does, then SSR is working, as this tag is created by our MetadataService. # This step also prints entire HTML of homepage for easier debugging if grep fails. - - name: Verify SSR (server-side rendering) + - name: Verify SSR (server-side rendering) on Homepage run: | result=$(wget -O- -q http://127.0.0.1:4000/home) echo "$result" echo "$result" | grep -oE "]*>" | grep DSpace + # Get a specific community in our test data and verify that the "

" tag includes "Publications" (the community name). + # If it does, then SSR is working. + - name: Verify SSR on a Community page + run: | + result=$(wget -O- -q http://127.0.0.1:4000/communities/0958c910-2037-42a9-81c7-dca80e3892b4) + echo "$result" + echo "$result" | grep -oE "

]*>[^><]*

" | grep Publications + + # Get a specific collection in our test data and verify that the "

" tag includes "Articles" (the collection name). + # If it does, then SSR is working. + - name: Verify SSR on a Collection page + run: | + result=$(wget -O- -q http://127.0.0.1:4000/collections/282164f5-d325-4740-8dd1-fa4d6d3e7200) + echo "$result" + echo "$result" | grep -oE "

]*>[^><]*

" | grep Articles + + # Get a specific publication in our test data and verify that the tag includes + # the title of this publication. If it does, then SSR is working. + - name: Verify SSR on a Publication page + run: | + result=$(wget -O- -q http://127.0.0.1:4000/entities/publication/6160810f-1e53-40db-81ef-f6621a727398) + echo "$result" + echo "$result" | grep -oE "]*>" | grep "An Economic Model of Mortality Salience" + + # Get a specific person in our test data and verify that the tag includes + # the name of the person. If it does, then SSR is working. + - name: Verify SSR on a Person page + run: | + result=$(wget -O- -q http://127.0.0.1:4000/entities/person/b1b2c768-bda1-448a-a073-fc541e8b24d9) + echo "$result" + echo "$result" | grep -oE "]*>" | grep "Simmons, Cameron" + + # Get a specific project in our test data and verify that the tag includes + # the name of the project. If it does, then SSR is working. + - name: Verify SSR on a Project page + run: | + result=$(wget -O- -q http://127.0.0.1:4000/entities/project/46ccb608-a74c-4bf6-bc7a-e29cc7defea9) + echo "$result" + echo "$result" | grep -oE "]*>" | grep "University Research Fellowship" + + # Get a specific orgunit in our test data and verify that the tag includes + # the name of the orgunit. If it does, then SSR is working. + - name: Verify SSR on an OrgUnit page + run: | + result=$(wget -O- -q http://127.0.0.1:4000/entities/orgunit/9851674d-bd9a-467b-8d84-068deb568ccf) + echo "$result" + echo "$result" | grep -oE "]*>" | grep "Law and Development" + + # Get a specific journal in our test data and verify that the tag includes + # the name of the journal. If it does, then SSR is working. + - name: Verify SSR on a Journal page + run: | + result=$(wget -O- -q http://127.0.0.1:4000/entities/journal/d4af6c3e-53d0-4757-81eb-566f3b45d63a) + echo "$result" + echo "$result" | grep -oE "]*>" | grep "Environmental & Architectural Phenomenology" + + # Get a specific journal volume in our test data and verify that the tag includes + # the name of the volume. If it does, then SSR is working. + - name: Verify SSR on a Journal Volume page + run: | + result=$(wget -O- -q http://127.0.0.1:4000/entities/journalvolume/07c6249f-4bf7-494d-9ce3-6ffdb2aed538) + echo "$result" + echo "$result" | grep -oE "]*>" | grep "Environmental & Architectural Phenomenology Volume 28 (2017)" + + # Get a specific journal issue in our test data and verify that the tag includes + # the name of the issue. If it does, then SSR is working. + - name: Verify SSR on a Journal Issue page + run: | + result=$(wget -O- -q http://127.0.0.1:4000/entities/journalissue/44c29473-5de2-48fa-b005-e5029aa1a50b) + echo "$result" + echo "$result" | grep -oE "]*>" | grep "Environmental & Architectural Phenomenology Vol. 28, No. 1" + + # Verify 301 Handle redirect behavior + # Note: /handle/123456789/260 is the same test Publication used by our e2e tests + - name: Verify 301 redirect from '/handle' URLs + run: | + result=$(wget --server-response --quiet http://127.0.0.1:4000/handle/123456789/260 2>&1 | head -1 | awk '{print $2}') + echo "$result" + [[ "$result" -eq "301" ]] + + # Verify 403 error code behavior + - name: Verify 403 error code from '/403' + run: | + result=$(wget --server-response --quiet http://127.0.0.1:4000/403 2>&1 | head -1 | awk '{print $2}') + echo "$result" + [[ "$result" -eq "403" ]] + + # Verify 404 error code behavior + - name: Verify 404 error code from '/404' and on invalid pages + run: | + result=$(wget --server-response --quiet http://127.0.0.1:4000/404 2>&1 | head -1 | awk '{print $2}') + echo "$result" + result2=$(wget --server-response --quiet http://127.0.0.1:4000/invalidurl 2>&1 | head -1 | awk '{print $2}') + echo "$result2" + [[ "$result" -eq "404" && "$result2" -eq "404" ]] + + # Verify 500 error code behavior + - name: Verify 500 error code from '/500' + run: | + result=$(wget --server-response --quiet http://127.0.0.1:4000/500 2>&1 | head -1 | awk '{print $2}') + echo "$result" + [[ "$result" -eq "500" ]] + - name: Stop running app run: kill -9 $(lsof -t -i:4000) diff --git a/config/config.example.yml b/config/config.example.yml index 8639dc0010..140afd7616 100644 --- a/config/config.example.yml +++ b/config/config.example.yml @@ -23,10 +23,24 @@ ssr: # Determining which styles are critical is a relatively expensive operation; this option is # disabled (false) by default to boost server performance at the expense of loading smoothness. inlineCriticalCss: false - # Path prefixes to enable SSR for. By default these are limited to paths of primary DSpace objects. - # NOTE: The "/handle/" path ensures Handle redirects work via SSR. The "/reload/" path ensures - # hard refreshes (e.g. after login) trigger SSR while fully reloading the page. - paths: [ '/home', '/items/', '/entities/', '/collections/', '/communities/', '/bitstream/', '/bitstreams/', '/handle/', '/reload/' ] + # Patterns to be run as regexes against the path of the page to check if SSR is allowed. + # If the path match any of the regexes it will be served directly in CSR. + # By default, excludes community and collection browse, global browse, global search, community list, statistics and various administrative tools. + excludePathPatterns: + - pattern: "^/communities/[a-f0-9-]{36}/browse(/.*)?$" + flag: "i" + - pattern: "^/collections/[a-f0-9-]{36}/browse(/.*)?$" + flag: "i" + - pattern: "^/browse/" + - pattern: "^/search$" + - pattern: "^/community-list$" + - pattern: "^/admin/" + - pattern: "^/processes/?" + - pattern: "^/notifications/" + - pattern: "^/statistics/?" + - pattern: "^/access-control/" + - pattern: "^/health$" + # Whether to enable rendering of Search component on SSR. # If set to true the component will be included in the HTML returned from the server side rendering. # If set to false the component will not be included in the HTML returned from the server side rendering. diff --git a/package.json b/package.json index 408eb0e134..997a8bb85d 100644 --- a/package.json +++ b/package.json @@ -66,8 +66,8 @@ "@angular/platform-browser-dynamic": "^17.3.11", "@angular/platform-server": "^17.3.11", "@angular/router": "^17.3.11", - "@angular/ssr": "^17.3.11", - "@babel/runtime": "7.26.7", + "@angular/ssr": "^17.3.17", + "@babel/runtime": "7.27.6", "@kolkov/ngx-gallery": "^2.0.1", "@ng-bootstrap/ng-bootstrap": "^11.0.0", "@ng-dynamic-forms/core": "^16.0.0", @@ -78,14 +78,14 @@ "@ngx-translate/core": "^14.0.0", "@nicky-lenaers/ngx-scroll-to": "^14.0.0", "angulartics2": "^12.2.0", - "axios": "^1.7.9", + "axios": "^1.10.0", "bootstrap": "^4.6.1", "cerialize": "0.1.18", "cli-progress": "^3.12.0", "colors": "^1.4.0", - "compression": "^1.7.5", + "compression": "^1.8.0", "cookie-parser": "1.4.7", - "core-js": "^3.40.0", + "core-js": "^3.42.0", "date-fns": "^2.29.3", "date-fns-tz": "^1.3.7", "deepmerge": "^4.3.1", @@ -94,9 +94,9 @@ "express-rate-limit": "^5.1.3", "fast-json-patch": "^3.1.1", "filesize": "^6.1.0", - "http-proxy-middleware": "^2.0.7", + "http-proxy-middleware": "^2.0.9", "http-terminator": "^3.2.0", - "isbot": "^5.1.22", + "isbot": "^5.1.28", "js-cookie": "2.2.1", "js-yaml": "^4.1.0", "json5": "^2.2.3", @@ -119,20 +119,20 @@ "nouislider": "^15.7.1", "pem": "1.14.8", "reflect-metadata": "^0.2.2", - "rxjs": "^7.8.0", + "rxjs": "^7.8.2", "uuid": "^8.3.2", - "zone.js": "~0.15.0" + "zone.js": "~0.14.0" }, "devDependencies": { "@angular-builders/custom-webpack": "~17.0.2", - "@angular-devkit/build-angular": "^17.3.11", + "@angular-devkit/build-angular": "^17.3.17", "@angular-eslint/builder": "17.5.3", "@angular-eslint/bundled-angular-compiler": "17.5.3", "@angular-eslint/eslint-plugin": "17.5.3", "@angular-eslint/eslint-plugin-template": "17.5.3", "@angular-eslint/schematics": "17.5.3", "@angular-eslint/template-parser": "17.5.3", - "@angular/cli": "^17.3.11", + "@angular/cli": "^17.3.17", "@angular/compiler-cli": "^17.3.11", "@angular/language-service": "^17.3.11", "@cypress/schematic": "^1.5.0", @@ -147,13 +147,13 @@ "@types/grecaptcha": "^3.0.9", "@types/jasmine": "~3.6.0", "@types/js-cookie": "2.2.6", - "@types/lodash": "^4.17.15", + "@types/lodash": "^4.17.17", "@types/node": "^14.14.9", "@typescript-eslint/eslint-plugin": "^7.2.0", "@typescript-eslint/parser": "^7.2.0", "@typescript-eslint/rule-tester": "^7.2.0", "@typescript-eslint/utils": "^7.2.0", - "axe-core": "^4.10.2", + "axe-core": "^4.10.3", "compression-webpack-plugin": "^9.2.0", "copy-webpack-plugin": "^6.4.1", "cross-env": "^7.0.3", @@ -168,7 +168,7 @@ "eslint-plugin-import": "^2.31.0", "eslint-plugin-import-newlines": "^1.3.1", "eslint-plugin-jsdoc": "^45.0.0", - "eslint-plugin-jsonc": "^2.19.1", + "eslint-plugin-jsonc": "^2.20.1", "eslint-plugin-lodash": "^7.4.0", "eslint-plugin-rxjs": "^5.0.3", "eslint-plugin-simple-import-sort": "^10.0.0", @@ -183,7 +183,7 @@ "karma-jasmine": "~4.0.0", "karma-jasmine-html-reporter": "^1.5.0", "karma-mocha-reporter": "2.2.5", - "ng-mocks": "^14.13.2", + "ng-mocks": "^14.13.5", "ngx-mask": "14.2.4", "nodemon": "^2.0.22", "postcss": "^8.5", @@ -195,12 +195,12 @@ "react-copy-to-clipboard": "^5.1.0", "react-dom": "^16.14.0", "rimraf": "^3.0.2", - "sass": "~1.84.0", + "sass": "~1.89.2", "sass-loader": "^12.6.0", "sass-resources-loader": "^2.2.5", "ts-node": "^8.10.2", "typescript": "~5.4.5", - "webpack": "5.97.1", + "webpack": "5.99.9", "webpack-cli": "^5.1.4", "webpack-dev-server": "^4.15.1" } diff --git a/server.ts b/server.ts index 4544a7c3ba..84c0722947 100644 --- a/server.ts +++ b/server.ts @@ -58,6 +58,7 @@ import { REQUEST, RESPONSE, } from './src/express.tokens'; +import { SsrExcludePatterns } from "./src/config/ssr-config.interface"; /* * Set path for the browser application's dist folder @@ -221,7 +222,7 @@ export function app() { * The callback function to serve server side angular */ function ngApp(req, res, next) { - if (environment.ssr.enabled && req.method === 'GET' && (req.path === '/' || environment.ssr.paths.some(pathPrefix => req.path.startsWith(pathPrefix)))) { + if (environment.ssr.enabled && req.method === 'GET' && (req.path === '/' || !isExcludedFromSsr(req.path, environment.ssr.excludePathPatterns))) { // Render the page to user via SSR (server side rendering) serverSideRender(req, res, next); } else { @@ -627,6 +628,21 @@ function start() { } } +/** + * Check if SSR should be skipped for path + * + * @param path + * @param excludePathPattern + */ +function isExcludedFromSsr(path: string, excludePathPattern: SsrExcludePatterns[]): boolean { + const patterns = excludePathPattern.map(p => + new RegExp(p.pattern, p.flag || '') + ); + return patterns.some((regex) => { + return regex.test(path) + }); +} + /* * The callback function to serve health check requests */ 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 8bfbe1fe5d..fda1db0aa3 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,4 +1,7 @@ -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { + Component, + NO_ERRORS_SCHEMA, +} from '@angular/core'; import { ComponentFixture, TestBed, @@ -62,10 +65,17 @@ describe('BulkAccessComponent', () => { 'file': { }, }; - const mockSettings: any = jasmine.createSpyObj('AccessControlFormContainerComponent', { - getValue: jasmine.createSpy('getValue'), - reset: jasmine.createSpy('reset'), - }); + @Component({ + selector: 'ds-bulk-access-settings', + template: '', + exportAs: 'dsBulkSettings', + standalone: true, + }) + class MockBulkAccessSettingsComponent { + isFormValid = jasmine.createSpy('isFormValid').and.returnValue(false); + 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']; @@ -93,6 +103,9 @@ describe('BulkAccessComponent', () => { BulkAccessSettingsComponent, ], }, + add: { + imports: [MockBulkAccessSettingsComponent], + }, }) .compileComponents(); }); @@ -109,13 +122,12 @@ describe('BulkAccessComponent', () => { fixture.destroy(); }); - describe('when there are no elements selected', () => { + describe('when there are no elements selected and step two form is invalid', () => { beforeEach(() => { (component as any).selectableListService.getSelectableList.and.returnValue(of(selectableListStateEmpty)); fixture.detectChanges(); - component.settings = mockSettings; }); it('should create', () => { @@ -138,7 +150,6 @@ describe('BulkAccessComponent', () => { (component as any).selectableListService.getSelectableList.and.returnValue(of(selectableListState)); fixture.detectChanges(); - component.settings = mockSettings; }); it('should create', () => { @@ -149,15 +160,29 @@ describe('BulkAccessComponent', () => { expect(component.objectsSelected$.value).toEqual(expectedIdList); }); - it('should enable the execute button when there are objects selected', () => { + it('should not enable the execute button when there are objects selected and step two form is invalid', () => { component.objectsSelected$.next(['1234']); - expect(component.canExport()).toBe(true); + expect(component.canExport()).toBe(false); }); it('should call the settings reset method when reset is called', () => { component.reset(); expect(component.settings.reset).toHaveBeenCalled(); }); + }); + describe('when there are elements selected and the step two form is valid', () => { + + beforeEach(() => { + + (component as any).selectableListService.getSelectableList.and.returnValue(of(selectableListState)); + fixture.detectChanges(); + (component as any).settings.isFormValid.and.returnValue(true); + }); + + it('should enable the execute button when there are objects selected and step two form is valid', () => { + component.objectsSelected$.next(['1234']); + expect(component.canExport()).toBe(true); + }); it('should call the bulkAccessControlService executeScript method when submit is called', () => { (component.settings as any).getValue.and.returnValue(mockFormState); 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 a1608d27d0..e158f3c446 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.ts +++ b/src/app/access-control/bulk-access/bulk-access.component.ts @@ -1,4 +1,5 @@ import { + ChangeDetectionStrategy, Component, OnInit, ViewChild, @@ -31,6 +32,7 @@ import { BulkAccessSettingsComponent } from './settings/bulk-access-settings.com BtnDisabledDirective, ], standalone: true, + changeDetection: ChangeDetectionStrategy.OnPush, }) export class BulkAccessComponent implements OnInit { @@ -70,7 +72,7 @@ export class BulkAccessComponent implements OnInit { } canExport(): boolean { - return this.objectsSelected$.value?.length > 0; + return this.objectsSelected$.value?.length > 0 && this.settings?.isFormValid(); } /** 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 264cefc708..1cb0dcf531 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 @@ -43,4 +43,8 @@ export class BulkAccessSettingsComponent { this.controlForm.reset(); } + isFormValid() { + return this.controlForm.isValid(); + } + } 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 c7b57c986d..60d221e116 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 @@ -1,6 +1,5 @@ import { AsyncPipe, - NgClass, NgFor, NgIf, } from '@angular/common'; @@ -88,7 +87,6 @@ import { ValidateEmailNotTaken } from './validators/email-taken.validator'; NgFor, AsyncPipe, TranslateModule, - NgClass, ThemedLoadingComponent, PaginationComponent, RouterLink, diff --git a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.html b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.html index 44b6bfb697..a9fb368ef4 100644 --- a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.html +++ b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.html @@ -1,4 +1,4 @@ -
+

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

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 bfadd018ef..39c6b49312 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 @@ -22,7 +22,7 @@ import { TranslateModule, TranslateService, } from '@ngx-translate/core'; -import { combineLatest } from 'rxjs'; +import { Observable } from 'rxjs'; import { take } from 'rxjs/operators'; import { MetadataField } from '../../../../core/metadata/metadata-field.model'; @@ -113,6 +113,8 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy { */ @Output() submitForm: EventEmitter = new EventEmitter(); + activeMetadataField$: Observable; + constructor(public registryService: RegistryService, private formBuilderService: FormBuilderService, private translateService: TranslateService) { @@ -121,71 +123,66 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy { /** * Initialize the component, setting up the necessary Models for the dynamic form */ - ngOnInit() { - combineLatest([ - this.translateService.get(`${this.messagePrefix}.element`), - this.translateService.get(`${this.messagePrefix}.qualifier`), - this.translateService.get(`${this.messagePrefix}.scopenote`), - ]).subscribe(([element, qualifier, scopenote]) => { - this.element = new DynamicInputModel({ - id: 'element', - label: element, - name: 'element', - validators: { - required: null, - pattern: '^[^. ,]*$', - maxLength: 64, - }, - required: true, - errorMessages: { - pattern: 'error.validation.metadata.element.invalid-pattern', - maxLength: 'error.validation.metadata.element.max-length', - }, - }); - this.qualifier = new DynamicInputModel({ - id: 'qualifier', - label: qualifier, - name: 'qualifier', - validators: { - pattern: '^[^. ,]*$', - maxLength: 64, - }, - required: false, - errorMessages: { - pattern: 'error.validation.metadata.qualifier.invalid-pattern', - maxLength: 'error.validation.metadata.qualifier.max-length', - }, - }); - this.scopeNote = new DynamicTextAreaModel({ - id: 'scopeNote', - label: scopenote, - name: 'scopeNote', - required: false, - rows: 5, - }); - this.formModel = [ - new DynamicFormGroupModel( - { - id: 'metadatadatafieldgroup', - group:[this.element, this.qualifier, this.scopeNote], - }), - ]; - this.formGroup = this.formBuilderService.createFormGroup(this.formModel); - 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; - } - }); + ngOnInit(): void { + this.activeMetadataField$ = this.registryService.getActiveMetadataField(); + this.element = new DynamicInputModel({ + id: 'element', + label: this.translateService.instant(`${this.messagePrefix}.element`), + name: 'element', + validators: { + required: null, + pattern: '^[^. ,]*$', + maxLength: 64, + }, + required: true, + errorMessages: { + pattern: 'error.validation.metadata.element.invalid-pattern', + maxLength: 'error.validation.metadata.element.max-length', + }, + }); + this.qualifier = new DynamicInputModel({ + id: 'qualifier', + label: this.translateService.instant(`${this.messagePrefix}.qualifier`), + name: 'qualifier', + validators: { + pattern: '^[^. ,]*$', + maxLength: 64, + }, + required: false, + errorMessages: { + pattern: 'error.validation.metadata.qualifier.invalid-pattern', + maxLength: 'error.validation.metadata.qualifier.max-length', + }, + }); + this.scopeNote = new DynamicTextAreaModel({ + id: 'scopeNote', + label: this.translateService.instant(`${this.messagePrefix}.scopenote`), + name: 'scopeNote', + required: false, + rows: 5, + }); + this.formModel = [ + new DynamicFormGroupModel( + { + id: 'metadatadatafieldgroup', + group:[this.element, this.qualifier, this.scopeNote], + }), + ]; + this.formGroup = this.formBuilderService.createFormGroup(this.formModel); + 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; + } }); } diff --git a/src/app/admin/admin-routes.ts b/src/app/admin/admin-routes.ts index 59529710c9..e5afe09cc7 100644 --- a/src/app/admin/admin-routes.ts +++ b/src/app/admin/admin-routes.ts @@ -11,8 +11,8 @@ import { REGISTRIES_MODULE_PATH, REPORTS_MODULE_PATH, } from './admin-routing-paths'; -import { AdminSearchPageComponent } from './admin-search-page/admin-search-page.component'; -import { AdminWorkflowPageComponent } from './admin-workflow-page/admin-workflow-page.component'; +import { ThemedAdminSearchPageComponent } from './admin-search-page/themed-admin-search-page.component'; +import { ThemedAdminWorkflowPageComponent } from './admin-workflow-page/themed-admin-workflow-page.component'; export const ROUTES: Route[] = [ { @@ -28,13 +28,13 @@ export const ROUTES: Route[] = [ { path: 'search', resolve: { breadcrumb: i18nBreadcrumbResolver }, - component: AdminSearchPageComponent, + component: ThemedAdminSearchPageComponent, data: { title: 'admin.search.title', breadcrumbKey: 'admin.search' }, }, { path: 'workflow', resolve: { breadcrumb: i18nBreadcrumbResolver }, - component: AdminWorkflowPageComponent, + component: ThemedAdminWorkflowPageComponent, data: { title: 'admin.workflow.title', breadcrumbKey: 'admin.workflow' }, }, { diff --git a/src/app/admin/admin-search-page/admin-search-page.component.ts b/src/app/admin/admin-search-page/admin-search-page.component.ts index 99909b8257..4ae11a9d47 100644 --- a/src/app/admin/admin-search-page/admin-search-page.component.ts +++ b/src/app/admin/admin-search-page/admin-search-page.component.ts @@ -4,7 +4,7 @@ import { Context } from '../../core/shared/context.model'; import { ThemedConfigurationSearchPageComponent } from '../../search-page/themed-configuration-search-page.component'; @Component({ - selector: 'ds-admin-search-page', + selector: 'ds-base-admin-search-page', templateUrl: './admin-search-page.component.html', styleUrls: ['./admin-search-page.component.scss'], standalone: true, diff --git a/src/app/admin/admin-search-page/admin-search.module.ts b/src/app/admin/admin-search-page/admin-search.module.ts new file mode 100644 index 0000000000..fae7d880be --- /dev/null +++ b/src/app/admin/admin-search-page/admin-search.module.ts @@ -0,0 +1,52 @@ +import { NgModule } from '@angular/core'; + +import { JournalEntitiesModule } from '../../entity-groups/journal-entities/journal-entities.module'; +import { ResearchEntitiesModule } from '../../entity-groups/research-entities/research-entities.module'; +import { SearchModule } from '../../shared/search/search.module'; +import { SharedModule } from '../../shared/shared.module'; +import { AdminSearchPageComponent } from './admin-search-page.component'; +import { CollectionAdminSearchResultGridElementComponent } from './admin-search-results/admin-search-result-grid-element/collection-search-result/collection-admin-search-result-grid-element.component'; +import { CommunityAdminSearchResultGridElementComponent } from './admin-search-results/admin-search-result-grid-element/community-search-result/community-admin-search-result-grid-element.component'; +import { ItemAdminSearchResultGridElementComponent } from './admin-search-results/admin-search-result-grid-element/item-search-result/item-admin-search-result-grid-element.component'; +import { CollectionAdminSearchResultListElementComponent } from './admin-search-results/admin-search-result-list-element/collection-search-result/collection-admin-search-result-list-element.component'; +import { CommunityAdminSearchResultListElementComponent } from './admin-search-results/admin-search-result-list-element/community-search-result/community-admin-search-result-list-element.component'; +import { ItemAdminSearchResultListElementComponent } from './admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component'; +import { ItemAdminSearchResultActionsComponent } from './admin-search-results/item-admin-search-result-actions.component'; +import { ThemedAdminSearchPageComponent } from './themed-admin-search-page.component'; + +const ENTRY_COMPONENTS = [ + // put only entry components that use custom decorator + ItemAdminSearchResultListElementComponent, + CommunityAdminSearchResultListElementComponent, + CollectionAdminSearchResultListElementComponent, + ItemAdminSearchResultGridElementComponent, + CommunityAdminSearchResultGridElementComponent, + CollectionAdminSearchResultGridElementComponent, + ItemAdminSearchResultActionsComponent, +]; + +@NgModule({ + imports: [ + SearchModule, + SharedModule.withEntryComponents(), + JournalEntitiesModule.withEntryComponents(), + ResearchEntitiesModule.withEntryComponents(), + ], + declarations: [ + ThemedAdminSearchPageComponent, + AdminSearchPageComponent, + ...ENTRY_COMPONENTS, + ], +}) +export class AdminSearchModule { + /** + * NOTE: this method allows to resolve issue with components that using a custom decorator + * which are not loaded during SSR otherwise + */ + static withEntryComponents() { + return { + ngModule: SharedModule, + providers: ENTRY_COMPONENTS.map((component) => ({ provide: component })), + }; + } +} diff --git a/src/app/admin/admin-search-page/themed-admin-search-page.component.ts b/src/app/admin/admin-search-page/themed-admin-search-page.component.ts new file mode 100644 index 0000000000..d49c184784 --- /dev/null +++ b/src/app/admin/admin-search-page/themed-admin-search-page.component.ts @@ -0,0 +1,29 @@ +import { Component } from '@angular/core'; + +import { ThemedComponent } from '../../shared/theme-support/themed.component'; +import { AdminSearchPageComponent } from './admin-search-page.component'; + +/** + * Themed wrapper for {@link AdminSearchPageComponent} + */ +@Component({ + selector: 'ds-admin-search-page', + templateUrl: '../../shared/theme-support/themed.component.html', + standalone: true, + imports: [AdminSearchPageComponent], +}) +export class ThemedAdminSearchPageComponent extends ThemedComponent { + + protected getComponentName(): string { + return 'AdminSearchPageComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../themes/${themeName}/app/admin/admin-search-page/admin-search-page.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./admin-search-page.component'); + } + +} diff --git a/src/app/admin/admin-workflow-page/admin-workflow-page.component.ts b/src/app/admin/admin-workflow-page/admin-workflow-page.component.ts index 62a66039af..0daf4e67f0 100644 --- a/src/app/admin/admin-workflow-page/admin-workflow-page.component.ts +++ b/src/app/admin/admin-workflow-page/admin-workflow-page.component.ts @@ -4,7 +4,7 @@ import { Context } from '../../core/shared/context.model'; import { ThemedConfigurationSearchPageComponent } from '../../search-page/themed-configuration-search-page.component'; @Component({ - selector: 'ds-admin-workflow-page', + selector: 'ds-base-admin-workflow-page', templateUrl: './admin-workflow-page.component.html', styleUrls: ['./admin-workflow-page.component.scss'], standalone: true, diff --git a/src/app/admin/admin-workflow-page/admin-workflow.module.ts b/src/app/admin/admin-workflow-page/admin-workflow.module.ts new file mode 100644 index 0000000000..ba2520e46e --- /dev/null +++ b/src/app/admin/admin-workflow-page/admin-workflow.module.ts @@ -0,0 +1,43 @@ +import { NgModule } from '@angular/core'; + +import { SearchModule } from '../../shared/search/search.module'; +import { SharedModule } from '../../shared/shared.module'; +import { AdminWorkflowPageComponent } from './admin-workflow-page.component'; +import { WorkflowItemSearchResultAdminWorkflowGridElementComponent } from './admin-workflow-search-results/admin-workflow-search-result-grid-element/workflow-item/workflow-item-search-result-admin-workflow-grid-element.component'; +import { WorkflowItemSearchResultAdminWorkflowListElementComponent } from './admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component'; +import { WorkflowItemAdminWorkflowActionsComponent } from './admin-workflow-search-results/workflow-item-admin-workflow-actions.component'; +import { ThemedAdminWorkflowPageComponent } from './themed-admin-workflow-page.component'; + +const ENTRY_COMPONENTS = [ + // put only entry components that use custom decorator + WorkflowItemSearchResultAdminWorkflowListElementComponent, + WorkflowItemSearchResultAdminWorkflowGridElementComponent, +]; + +@NgModule({ + imports: [ + SearchModule, + SharedModule.withEntryComponents(), + ], + declarations: [ + ThemedAdminWorkflowPageComponent, + AdminWorkflowPageComponent, + WorkflowItemAdminWorkflowActionsComponent, + ...ENTRY_COMPONENTS, + ], + exports: [ + AdminWorkflowPageComponent, + ], +}) +export class AdminWorkflowModuleModule { + /** + * NOTE: this method allows to resolve issue with components that using a custom decorator + * which are not loaded during SSR otherwise + */ + static withEntryComponents() { + return { + ngModule: SharedModule, + providers: ENTRY_COMPONENTS.map((component) => ({ provide: component })), + }; + } +} diff --git a/src/app/admin/admin-workflow-page/themed-admin-workflow-page.component.ts b/src/app/admin/admin-workflow-page/themed-admin-workflow-page.component.ts new file mode 100644 index 0000000000..5668b5c7a6 --- /dev/null +++ b/src/app/admin/admin-workflow-page/themed-admin-workflow-page.component.ts @@ -0,0 +1,29 @@ +import { Component } from '@angular/core'; + +import { ThemedComponent } from '../../shared/theme-support/themed.component'; +import { AdminWorkflowPageComponent } from './admin-workflow-page.component'; + +/** + * Themed wrapper for {@link AdminWorkflowPageComponent} + */ +@Component({ + selector: 'ds-admin-workflow-page', + templateUrl: '../../shared/theme-support/themed.component.html', + standalone: true, + imports: [AdminWorkflowPageComponent], +}) +export class ThemedAdminWorkflowPageComponent extends ThemedComponent { + + protected getComponentName(): string { + return 'AdminWorkflowPageComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../themes/${themeName}/app/admin/admin-workflow-page/admin-workflow-page.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./admin-workflow-page.component'); + } + +} diff --git a/src/app/app-routes.ts b/src/app/app-routes.ts index 29a78364b5..c62aa3253d 100644 --- a/src/app/app-routes.ts +++ b/src/app/app-routes.ts @@ -33,6 +33,7 @@ import { reloadGuard } from './core/reload/reload.guard'; import { forgotPasswordCheckGuard } from './core/rest-property/forgot-password-check-guard.guard'; import { ServerCheckGuard } from './core/server-check/server-check.guard'; import { ThemedForbiddenComponent } from './forbidden/themed-forbidden.component'; +import { homePageResolver } from './home-page/home-page.resolver'; import { ITEM_MODULE_PATH } from './item-page/item-page-routing-paths'; import { menuResolver } from './menuResolver'; import { provideSuggestionNotificationsState } from './notifications/provide-suggestion-notifications-state'; @@ -40,6 +41,7 @@ import { ThemedPageErrorComponent } from './page-error/themed-page-error.compone import { ThemedPageInternalServerErrorComponent } from './page-internal-server-error/themed-page-internal-server-error.component'; import { ThemedPageNotFoundComponent } from './pagenotfound/themed-pagenotfound.component'; import { PROCESS_MODULE_PATH } from './process-page/process-page-routing.paths'; +import { viewTrackerResolver } from './statistics/angulartics/dspace/view-tracker.resolver'; import { provideSubmissionState } from './submission/provide-submission-state'; import { SUGGESTION_MODULE_PATH } from './suggestions-page/suggestions-page-routing-paths'; @@ -63,9 +65,16 @@ export const APP_ROUTES: Route[] = [ path: 'home', loadChildren: () => import('./home-page/home-page-routes') .then((m) => m.ROUTES), - data: { showBreadcrumbs: false }, + data: { + showBreadcrumbs: false, + dsoPath: 'site', + }, providers: [provideSuggestionNotificationsState()], canActivate: [endUserAgreementCurrentUserGuard], + resolve: { + site: homePageResolver, + tracking: viewTrackerResolver, + }, }, { path: 'community-list', diff --git a/src/app/breadcrumbs/breadcrumbs.component.html b/src/app/breadcrumbs/breadcrumbs.component.html index 3bba89622f..1d95c39cc0 100644 --- a/src/app/breadcrumbs/breadcrumbs.component.html +++ b/src/app/breadcrumbs/breadcrumbs.component.html @@ -10,7 +10,7 @@ - + diff --git a/src/app/browse-by/browse-by-taxonomy/browse-by-taxonomy.component.html b/src/app/browse-by/browse-by-taxonomy/browse-by-taxonomy.component.html index e2c0c52827..5d88ca3ed7 100644 --- a/src/app/browse-by/browse-by-taxonomy/browse-by-taxonomy.component.html +++ b/src/app/browse-by/browse-by-taxonomy/browse-by-taxonomy.component.html @@ -18,6 +18,8 @@ + [queryParamsHandling]="'merge'" + role="link" + tabindex="0"> {{ 'browse.taxonomy.button' | translate }} diff --git a/src/app/collection-page/collection-page-routes.ts b/src/app/collection-page/collection-page-routes.ts index e20e3ba8af..4e3e361243 100644 --- a/src/app/collection-page/collection-page-routes.ts +++ b/src/app/collection-page/collection-page-routes.ts @@ -11,6 +11,7 @@ import { ComcolSearchSectionComponent } from '../shared/comcol/sections/comcol-s import { dsoEditMenuResolver } from '../shared/dso-page/dso-edit-menu.resolver'; import { LinkMenuItemModel } from '../shared/menu/menu-item/models/link.model'; import { MenuItemType } from '../shared/menu/menu-item-type.model'; +import { viewTrackerResolver } from '../statistics/angulartics/dspace/view-tracker.resolver'; import { collectionPageResolver } from './collection-page.resolver'; import { collectionPageAdministratorGuard } from './collection-page-administrator.guard'; import { @@ -84,6 +85,7 @@ export const ROUTES: Route[] = [ component: ThemedCollectionPageComponent, resolve: { menu: dsoEditMenuResolver, + tracking: viewTrackerResolver, }, children: [ { diff --git a/src/app/collection-page/collection-page.component.html b/src/app/collection-page/collection-page.component.html index 4a3e28c6aa..08f338b2d8 100644 --- a/src/app/collection-page/collection-page.component.html +++ b/src/app/collection-page/collection-page.component.html @@ -3,7 +3,6 @@ *ngVar="(collectionRD$ | async) as collectionRD">
-
diff --git a/src/app/collection-page/collection-page.component.ts b/src/app/collection-page/collection-page.component.ts index 0d240f5328..43f8e9072d 100644 --- a/src/app/collection-page/collection-page.component.ts +++ b/src/app/collection-page/collection-page.component.ts @@ -50,7 +50,6 @@ import { ThemedLoadingComponent } from '../shared/loading/themed-loading.compone import { ObjectCollectionComponent } from '../shared/object-collection/object-collection.component'; import { PaginationComponentOptions } from '../shared/pagination/pagination-component-options.model'; import { VarDirective } from '../shared/utils/var.directive'; -import { ViewTrackerComponent } from '../statistics/angulartics/dspace/view-tracker.component'; import { getCollectionPageRoute } from './collection-page-routing-paths'; @Component({ @@ -68,7 +67,6 @@ import { getCollectionPageRoute } from './collection-page-routing-paths'; NgIf, ThemedLoadingComponent, TranslateModule, - ViewTrackerComponent, VarDirective, AsyncPipe, ComcolPageHeaderComponent, 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 82238ddd0d..d7293aa559 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 @@ -9,7 +9,7 @@
@@ -27,7 +27,12 @@ @@ -74,20 +74,20 @@
  • {{ 'footer.link.privacy-policy' | translate}} + routerLink="info/privacy" role="link" tabindex="0">{{ 'footer.link.privacy-policy' | translate}}
  • {{ 'footer.link.end-user-agreement' | translate}} + routerLink="info/end-user-agreement" role="link" tabindex="0">{{ 'footer.link.end-user-agreement' | translate}}
  • {{ 'footer.link.feedback' | translate}} + routerLink="info/feedback" role="link" tabindex="0">{{ 'footer.link.feedback' | translate}}
  • - + {{ 'footer.link.coar-notify-support' | translate }} diff --git a/src/app/header/header.component.html b/src/app/header/header.component.html index e59086134a..8dd3df8509 100644 --- a/src/app/header/header.component.html +++ b/src/app/header/header.component.html @@ -1,7 +1,7 @@
    - + diff --git a/src/app/home-page/home-news/home-news.component.html b/src/app/home-page/home-news/home-news.component.html index c83d2103c8..92126c09af 100644 --- a/src/app/home-page/home-news/home-news.component.html +++ b/src/app/home-page/home-news/home-news.component.html @@ -14,7 +14,7 @@
  • issue permanent urls and trustworthy identifiers, including optional integrations with handle.net and DataCite DOI
  • Join an international community of leading institutions using DSpace. + target="_blank" role="link" tabindex="0">leading institutions using DSpace.

    diff --git a/src/app/home-page/home-page-routes.ts b/src/app/home-page/home-page-routes.ts index 6e4a8f353f..0440315a2c 100644 --- a/src/app/home-page/home-page-routes.ts +++ b/src/app/home-page/home-page-routes.ts @@ -2,7 +2,6 @@ import { Route } from '@angular/router'; import { LinkMenuItemModel } from '../shared/menu/menu-item/models/link.model'; import { MenuItemType } from '../shared/menu/menu-item-type.model'; -import { homePageResolver } from './home-page.resolver'; import { ThemedHomePageComponent } from './themed-home-page.component'; export const ROUTES: Route[] = [ @@ -26,8 +25,5 @@ export const ROUTES: Route[] = [ }], }, }, - resolve: { - site: homePageResolver, - }, }, ]; diff --git a/src/app/home-page/home-page.component.html b/src/app/home-page/home-page.component.html index ad48fb328c..9a1b23d9c6 100644 --- a/src/app/home-page/home-page.component.html +++ b/src/app/home-page/home-page.component.html @@ -14,9 +14,6 @@ - - - diff --git a/src/app/home-page/home-page.component.ts b/src/app/home-page/home-page.component.ts index c954e90402..eacef092b3 100644 --- a/src/app/home-page/home-page.component.ts +++ b/src/app/home-page/home-page.component.ts @@ -23,7 +23,6 @@ import { SuggestionsPopupComponent } from '../notifications/suggestions-popup/su import { ThemedConfigurationSearchPageComponent } from '../search-page/themed-configuration-search-page.component'; import { ThemedSearchFormComponent } from '../shared/search-form/themed-search-form.component'; import { PageWithSidebarComponent } from '../shared/sidebar/page-with-sidebar.component'; -import { ViewTrackerComponent } from '../statistics/angulartics/dspace/view-tracker.component'; import { HomeCoarComponent } from './home-coar/home-coar.component'; import { ThemedHomeNewsComponent } from './home-news/themed-home-news.component'; import { RecentItemListComponent } from './recent-item-list/recent-item-list.component'; @@ -34,7 +33,7 @@ import { ThemedTopLevelCommunityListComponent } from './top-level-community-list styleUrls: ['./home-page.component.scss'], templateUrl: './home-page.component.html', standalone: true, - imports: [ThemedHomeNewsComponent, NgTemplateOutlet, NgIf, ViewTrackerComponent, ThemedSearchFormComponent, ThemedTopLevelCommunityListComponent, RecentItemListComponent, AsyncPipe, TranslateModule, NgClass, SuggestionsPopupComponent, ThemedConfigurationSearchPageComponent, PageWithSidebarComponent, HomeCoarComponent], + imports: [ThemedHomeNewsComponent, NgTemplateOutlet, NgIf, ThemedSearchFormComponent, ThemedTopLevelCommunityListComponent, RecentItemListComponent, AsyncPipe, TranslateModule, NgClass, SuggestionsPopupComponent, ThemedConfigurationSearchPageComponent, PageWithSidebarComponent, HomeCoarComponent], }) export class HomePageComponent implements OnInit { diff --git a/src/app/home-page/recent-item-list/recent-item-list.component.html b/src/app/home-page/recent-item-list/recent-item-list.component.html index 82262be1b3..c70971c8d8 100644 --- a/src/app/home-page/recent-item-list/recent-item-list.component.html +++ b/src/app/home-page/recent-item-list/recent-item-list.component.html @@ -6,7 +6,7 @@
    - +
    diff --git a/src/app/item-page/alerts/item-alerts.component.html b/src/app/item-page/alerts/item-alerts.component.html index b964327e39..11d229733a 100644 --- a/src/app/item-page/alerts/item-alerts.component.html +++ b/src/app/item-page/alerts/item-alerts.component.html @@ -7,8 +7,8 @@ diff --git a/src/app/item-page/edit-item-page/item-authorizations/item-authorizations.component.html b/src/app/item-page/edit-item-page/item-authorizations/item-authorizations.component.html index 7f121081f2..7569ebd6e3 100644 --- a/src/app/item-page/edit-item-page/item-authorizations/item-authorizations.component.html +++ b/src/app/item-page/edit-item-page/item-authorizations/item-authorizations.component.html @@ -1,9 +1,9 @@
    - - + + - + @@ -16,7 +16,7 @@
    + *ngFor="let bitstream of (bundleBitstreamsMap.get(bundle.id).bitstreams | async)"> diff --git a/src/app/item-page/edit-item-page/item-authorizations/item-authorizations.component.spec.ts b/src/app/item-page/edit-item-page/item-authorizations/item-authorizations.component.spec.ts index 3181b0e766..15bd82b82a 100644 --- a/src/app/item-page/edit-item-page/item-authorizations/item-authorizations.component.spec.ts +++ b/src/app/item-page/edit-item-page/item-authorizations/item-authorizations.component.spec.ts @@ -169,17 +169,9 @@ describe('ItemAuthorizationsComponent test suite', () => { })); }); - it('should get the item UUID', () => { - - expect(comp.getItemUUID()).toBeObservable(cold('(a|)', { - a: item.id, - })); - - }); - it('should get the item\'s bundle', () => { - expect(comp.getItemBundles()).toBeObservable(cold('a', { + expect(comp.bundles$).toBeObservable(cold('a', { a: bundles, })); diff --git a/src/app/item-page/edit-item-page/item-authorizations/item-authorizations.component.ts b/src/app/item-page/edit-item-page/item-authorizations/item-authorizations.component.ts index 30d1fce2bc..d5d03e1c89 100644 --- a/src/app/item-page/edit-item-page/item-authorizations/item-authorizations.component.ts +++ b/src/app/item-page/edit-item-page/item-authorizations/item-authorizations.component.ts @@ -21,7 +21,6 @@ import { import { catchError, filter, - first, map, mergeMap, take, @@ -41,11 +40,11 @@ import { getFirstSucceededRemoteDataWithNotEmptyPayload, } from '../../../core/shared/operators'; import { AlertComponent } from '../../../shared/alert/alert.component'; +import { AlertType } from '../../../shared/alert/alert-type'; import { hasValue, isNotEmpty, } from '../../../shared/empty.util'; -import { NgForTrackByIdDirective } from '../../../shared/ng-for-track-by-id.directive'; import { ResourcePoliciesComponent } from '../../../shared/resource-policies/resource-policies.component'; import { followLink } from '../../../shared/utils/follow-link-config.model'; @@ -66,7 +65,6 @@ interface BundleBitstreamsMapEntry { NgbCollapseModule, TranslateModule, NgForOf, - NgForTrackByIdDirective, AsyncPipe, NgIf, AlertComponent, @@ -94,7 +92,7 @@ export class ItemAuthorizationsComponent implements OnInit, OnDestroy { * The target editing item * @type {Observable} */ - private item$: Observable; + item$: Observable; /** * Array to track all subscriptions and unsubscribe them onDestroy @@ -133,16 +131,13 @@ export class ItemAuthorizationsComponent implements OnInit, OnDestroy { */ private bitstreamPageSize = 4; - /** - * Initialize instance variables - * - * @param {LinkService} linkService - * @param {ActivatedRoute} route - * @param nameService - */ + itemName$: Observable; + + readonly AlertType = AlertType; + constructor( - private linkService: LinkService, - private route: ActivatedRoute, + protected linkService: LinkService, + protected route: ActivatedRoute, public nameService: DSONameService, ) { } @@ -152,36 +147,18 @@ export class ItemAuthorizationsComponent implements OnInit, OnDestroy { */ ngOnInit(): void { this.getBundlesPerItem(); + this.itemName$ = this.getItemName(); } /** - * Return the item's UUID + * Return the item's name */ - getItemUUID(): Observable { - return this.item$.pipe( - map((item: Item) => item.id), - first((UUID: string) => isNotEmpty(UUID)), - ); - } - - /** - * Return the item's name - */ - getItemName(): Observable { + private getItemName(): Observable { return this.item$.pipe( map((item: Item) => this.nameService.getName(item)), ); } - /** - * Return all item's bundles - * - * @return an observable that emits all item's bundles - */ - getItemBundles(): Observable { - return this.bundles$.asObservable(); - } - /** * Get all bundles per item * and all the bitstreams per bundle 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 c10586db47..214b73730b 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 @@ -32,7 +32,6 @@ import { map, switchMap, take, - tap, } from 'rxjs/operators'; import { AlertComponent } from 'src/app/shared/alert/alert.component'; import { AlertType } from 'src/app/shared/alert/alert-type'; @@ -243,15 +242,28 @@ export class ItemBitstreamsComponent extends AbstractItemUpdateComponent impleme this.itemService.getBundles(this.item.id, new PaginatedSearchOptions({ pagination: this.bundlesOptions })).pipe( getFirstSucceededRemoteData(), getRemoteDataPayload(), - tap((bundlesPL: PaginatedList) => - this.showLoadMoreLink$.next(bundlesPL.pageInfo.currentPage < bundlesPL.pageInfo.totalPages), - ), - map((bundlePage: PaginatedList) => bundlePage.page), - ).subscribe((bundles: Bundle[]) => { - this.bundlesSubject.next([...this.bundlesSubject.getValue(), ...bundles]); + ).subscribe((bundles: PaginatedList) => { + this.updateBundles(bundles); }); } + /** + * Update the subject containing the bundles with the provided bundles. + * Also updates the showLoadMoreLink observable so it does not show up when it is no longer necessary. + */ + updateBundles(newBundlesPL: PaginatedList) { + const currentBundles = this.bundlesSubject.getValue(); + + // Only add bundles to the bundle subject if they are not present yet + const bundlesToAdd = newBundlesPL.page + .filter(bundleToAdd => !currentBundles.some(currentBundle => currentBundle.id === bundleToAdd.id)); + + const updatedBundles = [...currentBundles, ...bundlesToAdd]; + + this.showLoadMoreLink$.next(updatedBundles.length < newBundlesPL.totalElements); + this.bundlesSubject.next(updatedBundles); + } + /** * Submit the current changes diff --git a/src/app/item-page/field-components/collections/collections.component.html b/src/app/item-page/field-components/collections/collections.component.html index 7c08ce5c1c..75224738df 100644 --- a/src/app/item-page/field-components/collections/collections.component.html +++ b/src/app/item-page/field-components/collections/collections.component.html @@ -1,6 +1,6 @@ @@ -14,6 +14,7 @@ (click)="$event.preventDefault(); handleLoadMore()" class="load-more-btn btn btn-sm btn-outline-secondary" role="button" + tabindex="0" href="javascript:void(0);" > {{'item.page.collections.load-more' | translate}} diff --git a/src/app/item-page/field-components/metadata-uri-values/metadata-uri-values.component.html b/src/app/item-page/field-components/metadata-uri-values/metadata-uri-values.component.html index 4cef0a1592..881bdf726d 100644 --- a/src/app/item-page/field-components/metadata-uri-values/metadata-uri-values.component.html +++ b/src/app/item-page/field-components/metadata-uri-values/metadata-uri-values.component.html @@ -1,5 +1,5 @@ - + {{ linktext || mdValue.value }} diff --git a/src/app/item-page/field-components/metadata-values/metadata-values.component.html b/src/app/item-page/field-components/metadata-values/metadata-values.component.html index 4fc0b41136..93a7394f1b 100644 --- a/src/app/item-page/field-components/metadata-values/metadata-values.component.html +++ b/src/app/item-page/field-components/metadata-values/metadata-values.component.html @@ -21,14 +21,14 @@ - {{value}} + [queryParams]="getQueryParams(value)" role="link" tabindex="0">{{value}} diff --git a/src/app/item-page/full/full-item-page.component.html b/src/app/item-page/full/full-item-page.component.html index b6e1d1e6ed..bf8c4d672d 100644 --- a/src/app/item-page/full/full-item-page.component.html +++ b/src/app/item-page/full/full-item-page.component.html @@ -3,14 +3,13 @@
    -
    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 0d05510fbf..f2bf0af421 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 @@ -45,7 +45,7 @@ import { createPaginatedList } from '../../shared/testing/utils.test'; import { ThemeService } from '../../shared/theme-support/theme.service'; import { TruncatePipe } from '../../shared/utils/truncate.pipe'; import { VarDirective } from '../../shared/utils/var.directive'; -import { ViewTrackerComponent } from '../../statistics/angulartics/dspace/view-tracker.component'; +import { ViewTrackerResolverService } from '../../statistics/angulartics/dspace/view-tracker-resolver.service'; import { ThemedItemAlertsComponent } from '../alerts/themed-item-alerts.component'; import { CollectionsComponent } from '../field-components/collections/collections.component'; import { ThemedItemPageTitleFieldComponent } from '../simple/field-components/specific-field/title/themed-item-page-field.component'; @@ -162,7 +162,7 @@ describe('FullItemPageComponent', () => { ThemedLoadingComponent, ThemedItemPageTitleFieldComponent, DsoEditMenuComponent, - ViewTrackerComponent, + ViewTrackerResolverService, ThemedItemAlertsComponent, CollectionsComponent, ThemedFullFileSectionComponent, 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 88a1254feb..853589cd74 100644 --- a/src/app/item-page/full/full-item-page.component.ts +++ b/src/app/item-page/full/full-item-page.component.ts @@ -44,7 +44,6 @@ import { hasValue } from '../../shared/empty.util'; import { ErrorComponent } from '../../shared/error/error.component'; import { ThemedLoadingComponent } from '../../shared/loading/themed-loading.component'; import { VarDirective } from '../../shared/utils/var.directive'; -import { ViewTrackerComponent } from '../../statistics/angulartics/dspace/view-tracker.component'; import { ThemedItemAlertsComponent } from '../alerts/themed-item-alerts.component'; import { CollectionsComponent } from '../field-components/collections/collections.component'; import { ThemedItemPageTitleFieldComponent } from '../simple/field-components/specific-field/title/themed-item-page-field.component'; @@ -79,7 +78,6 @@ import { ThemedFullFileSectionComponent } from './field-components/file-section/ ThemedItemPageTitleFieldComponent, DsoEditMenuComponent, ItemVersionsNoticeComponent, - ViewTrackerComponent, ThemedItemAlertsComponent, VarDirective, ], diff --git a/src/app/item-page/item-page-routes.ts b/src/app/item-page/item-page-routes.ts index 854d66fabe..abd03ad5cf 100644 --- a/src/app/item-page/item-page-routes.ts +++ b/src/app/item-page/item-page-routes.ts @@ -6,6 +6,7 @@ import { itemBreadcrumbResolver } from '../core/breadcrumbs/item-breadcrumb.reso import { dsoEditMenuResolver } from '../shared/dso-page/dso-edit-menu.resolver'; import { LinkMenuItemModel } from '../shared/menu/menu-item/models/link.model'; import { MenuItemType } from '../shared/menu/menu-item-type.model'; +import { viewTrackerResolver } from '../statistics/angulartics/dspace/view-tracker.resolver'; import { BitstreamRequestACopyPageComponent } from './bitstreams/request-a-copy/bitstream-request-a-copy-page.component'; import { UploadBitstreamComponent } from './bitstreams/upload/upload-bitstream.component'; import { ThemedFullItemPageComponent } from './full/themed-full-item-page.component'; @@ -36,6 +37,7 @@ export const ROUTES: Route[] = [ pathMatch: 'full', resolve: { menu: dsoEditMenuResolver, + tracking: viewTrackerResolver, }, }, { @@ -43,6 +45,7 @@ export const ROUTES: Route[] = [ component: ThemedFullItemPageComponent, resolve: { menu: dsoEditMenuResolver, + tracking: viewTrackerResolver, }, }, { diff --git a/src/app/item-page/media-viewer/media-viewer.component.html b/src/app/item-page/media-viewer/media-viewer.component.html index a76ee73963..9f33277983 100644 --- a/src/app/item-page/media-viewer/media-viewer.component.html +++ b/src/app/item-page/media-viewer/media-viewer.component.html @@ -16,12 +16,7 @@
    - - + diff --git a/src/app/item-page/media-viewer/media-viewer.component.spec.ts b/src/app/item-page/media-viewer/media-viewer.component.spec.ts index 7649e17b71..b479d30a92 100644 --- a/src/app/item-page/media-viewer/media-viewer.component.spec.ts +++ b/src/app/item-page/media-viewer/media-viewer.component.spec.ts @@ -1,4 +1,7 @@ -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { + NO_ERRORS_SCHEMA, + PLATFORM_ID, +} from '@angular/core'; import { ComponentFixture, TestBed, @@ -14,7 +17,9 @@ import { of as observableOf } from 'rxjs'; import { AuthService } from '../../core/auth/auth.service'; import { BitstreamDataService } from '../../core/data/bitstream-data.service'; +import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; import { Bitstream } from '../../core/shared/bitstream.model'; +import { FileService } from '../../core/shared/file.service'; import { MediaViewerItem } from '../../core/shared/media-viewer-item.model'; import { MetadataFieldWrapperComponent } from '../../shared/metadata-field-wrapper/metadata-field-wrapper.component'; import { AuthServiceMock } from '../../shared/mocks/auth.service.mock'; @@ -31,6 +36,9 @@ import { MediaViewerComponent } from './media-viewer.component'; describe('MediaViewerComponent', () => { let comp: MediaViewerComponent; let fixture: ComponentFixture; + let authService; + let authorizationService; + let fileService; const mockBitstream: Bitstream = Object.assign(new Bitstream(), { sizeBytes: 10201, @@ -55,7 +63,7 @@ describe('MediaViewerComponent', () => { 'dc.title': [ { language: null, - value: 'test_word.docx', + value: 'test_image.jpg', }, ], }, @@ -73,6 +81,15 @@ describe('MediaViewerComponent', () => { ); beforeEach(waitForAsync(() => { + authService = jasmine.createSpyObj('AuthService', { + isAuthenticated: observableOf(true), + }); + authorizationService = jasmine.createSpyObj('AuthorizationService', { + isAuthorized: observableOf(true), + }); + fileService = jasmine.createSpyObj('FileService', { + retrieveFileDownloadLink: null, + }); return TestBed.configureTestingModule({ imports: [ TranslateModule.forRoot({ @@ -88,6 +105,10 @@ describe('MediaViewerComponent', () => { MetadataFieldWrapperComponent, ], providers: [ + { provide: AuthService, useValue: authService }, + { provide: AuthorizationDataService, useValue: authorizationService }, + { provide: FileService, useValue: fileService }, + { provide: PLATFORM_ID, useValue: 'browser' }, { provide: BitstreamDataService, useValue: bitstreamDataService }, { provide: ThemeService, useValue: getMockThemeService() }, { provide: AuthService, useValue: new AuthServiceMock() }, @@ -150,9 +171,9 @@ describe('MediaViewerComponent', () => { expect(mediaItem.thumbnail).toBe(null); }); - it('should display a default, thumbnail', () => { + it('should display a default thumbnail', () => { const defaultThumbnail = fixture.debugElement.query( - By.css('ds-media-viewer-image'), + By.css('ds-thumbnail'), ); expect(defaultThumbnail.nativeElement).toBeDefined(); }); diff --git a/src/app/item-page/orcid-page/orcid-auth/orcid-auth.component.html b/src/app/item-page/orcid-page/orcid-auth/orcid-auth.component.html index 905372ba8c..af89395d44 100644 --- a/src/app/item-page/orcid-page/orcid-auth/orcid-auth.component.html +++ b/src/app/item-page/orcid-page/orcid-auth/orcid-auth.component.html @@ -1,18 +1,18 @@

    {{'person.orcid.registry.auth' | translate}}

    - +
    -
    +
    {{ 'person.page.orcid.granted-authorizations'| translate }}
      -
    • +
    • {{getAuthorizationDescription(auth) | translate}}
    @@ -25,13 +25,13 @@
    {{ 'person.page.orcid.missing-authorizations'| translate }}
    - + {{'person.page.orcid.no-missing-authorizations-message' | translate}} - + {{'person.page.orcid.missing-authorizations-message' | translate}}
      -
    • +
    • {{getAuthorizationDescription(auth) | translate }}
    @@ -41,11 +41,11 @@
    - + {{ 'person.page.orcid.remove-orcid-message' | translate}} -
    +
    - @@ -68,7 +68,7 @@
    orcid-logo
    - {{ getOrcidNotLinkedMessage() | async }} + {{ getOrcidNotLinkedMessage() }}
    diff --git a/src/app/item-page/orcid-page/orcid-auth/orcid-auth.component.ts b/src/app/item-page/orcid-page/orcid-auth/orcid-auth.component.ts index 63b908fb83..de2711c623 100644 --- a/src/app/item-page/orcid-page/orcid-auth/orcid-auth.component.ts +++ b/src/app/item-page/orcid-page/orcid-auth/orcid-auth.component.ts @@ -34,6 +34,7 @@ import { import { Item } from '../../../core/shared/item.model'; import { getFirstCompletedRemoteData } from '../../../core/shared/operators'; import { AlertComponent } from '../../../shared/alert/alert.component'; +import { AlertType } from '../../../shared/alert/alert-type'; import { BtnDisabledDirective } from '../../../shared/btn-disabled.directive'; import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { createFailedRemoteDataObjectFromError$ } from '../../../shared/remote-data.utils'; @@ -62,43 +63,49 @@ export class OrcidAuthComponent implements OnInit, OnChanges { /** * The list of exposed orcid authorization scopes for the orcid profile */ - profileAuthorizationScopes: BehaviorSubject = new BehaviorSubject([]); + profileAuthorizationScopes$: BehaviorSubject = new BehaviorSubject([]); + + hasOrcidAuthorizations$: Observable; /** * The list of all orcid authorization scopes missing in the orcid profile */ - missingAuthorizationScopes: BehaviorSubject = new BehaviorSubject([]); + missingAuthorizationScopes: BehaviorSubject = new BehaviorSubject([]); + + hasMissingOrcidAuthorizations$: Observable; /** * The list of all orcid authorization scopes available */ - orcidAuthorizationScopes: BehaviorSubject = new BehaviorSubject([]); + orcidAuthorizationScopes: BehaviorSubject = new BehaviorSubject([]); /** * A boolean representing if unlink operation is processing */ - unlinkProcessing: BehaviorSubject = new BehaviorSubject(false); + unlinkProcessing: BehaviorSubject = new BehaviorSubject(false); /** * A boolean representing if orcid profile is linked */ - private isOrcidLinked$: BehaviorSubject = new BehaviorSubject(false); + isOrcidLinked$: BehaviorSubject = new BehaviorSubject(false); /** * A boolean representing if only admin can disconnect orcid profile */ - private onlyAdminCanDisconnectProfileFromOrcid$: BehaviorSubject = new BehaviorSubject(false); + onlyAdminCanDisconnectProfileFromOrcid$: BehaviorSubject = new BehaviorSubject(false); /** * A boolean representing if owner can disconnect orcid profile */ - private ownerCanDisconnectProfileFromOrcid$: BehaviorSubject = new BehaviorSubject(false); + ownerCanDisconnectProfileFromOrcid$: BehaviorSubject = new BehaviorSubject(false); /** * An event emitted when orcid profile is unliked successfully */ @Output() unlink: EventEmitter = new EventEmitter(); + readonly AlertType = AlertType; + constructor( private orcidAuthService: OrcidAuthService, private translateService: TranslateService, @@ -112,6 +119,8 @@ export class OrcidAuthComponent implements OnInit, OnChanges { this.orcidAuthorizationScopes.next(scopes); this.initOrcidAuthSettings(); }); + this.hasOrcidAuthorizations$ = this.hasOrcidAuthorizations(); + this.hasMissingOrcidAuthorizations$ = this.hasMissingOrcidAuthorizations(); } ngOnChanges(changes: SimpleChanges): void { @@ -124,18 +133,11 @@ export class OrcidAuthComponent implements OnInit, OnChanges { * Check if the list of exposed orcid authorization scopes for the orcid profile has values */ hasOrcidAuthorizations(): Observable { - return this.profileAuthorizationScopes.asObservable().pipe( + return this.profileAuthorizationScopes$.pipe( map((scopes: string[]) => scopes.length > 0), ); } - /** - * Return the list of exposed orcid authorization scopes for the orcid profile - */ - getOrcidAuthorizations(): Observable { - return this.profileAuthorizationScopes.asObservable(); - } - /** * Check if the list of exposed orcid authorization scopes for the orcid profile has values */ @@ -145,26 +147,12 @@ export class OrcidAuthComponent implements OnInit, OnChanges { ); } - /** - * Return the list of exposed orcid authorization scopes for the orcid profile - */ - getMissingOrcidAuthorizations(): Observable { - return this.profileAuthorizationScopes.asObservable(); - } - - /** - * Return a boolean representing if orcid profile is linked - */ - isLinkedToOrcid(): Observable { - return this.isOrcidLinked$.asObservable(); - } - - getOrcidNotLinkedMessage(): Observable { + getOrcidNotLinkedMessage(): string { const orcid = this.item.firstMetadataValue('person.identifier.orcid'); if (orcid) { - return this.translateService.get('person.page.orcid.orcid-not-linked-message', { 'orcid': orcid }); + return this.translateService.instant('person.page.orcid.orcid-not-linked-message', { 'orcid': orcid }); } else { - return this.translateService.get('person.page.orcid.no-orcid-message'); + return this.translateService.instant('person.page.orcid.no-orcid-message'); } } @@ -177,13 +165,6 @@ export class OrcidAuthComponent implements OnInit, OnChanges { return 'person.page.orcid.scope.' + scope.substring(1).replace('/', '-'); } - /** - * Return a boolean representing if only admin can disconnect orcid profile - */ - onlyAdminCanDisconnectProfileFromOrcid(): Observable { - return this.onlyAdminCanDisconnectProfileFromOrcid$.asObservable(); - } - /** * Return a boolean representing if owner can disconnect orcid profile */ @@ -249,7 +230,7 @@ export class OrcidAuthComponent implements OnInit, OnChanges { } private setOrcidAuthorizationsFromItem(): void { - this.profileAuthorizationScopes.next(this.orcidAuthService.getOrcidAuthorizationScopesByItem(this.item)); + this.profileAuthorizationScopes$.next(this.orcidAuthService.getOrcidAuthorizationScopesByItem(this.item)); } } 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 e9d9ec035b..8d33e5bba9 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 @@ -3,13 +3,13 @@

    {{ 'person.orcid.registry.queue' | translate }}

    - {{ 'person.page.orcid.sync-queue.empty-message' | translate}} -
    @@ -22,7 +22,7 @@ - + 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 dfc7fac526..325204309c 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 @@ -80,13 +80,12 @@ export class OrcidQueueComponent implements OnInit, OnDestroy, OnChanges { /** * A list of orcid queue records */ - private list$: BehaviorSubject>> = new BehaviorSubject>>({} as any); + list$: BehaviorSubject>> = new BehaviorSubject>>({} as any); /** * The AlertType enumeration - * @type {AlertType} */ - AlertTypeEnum = AlertType; + readonly AlertTypeEnum = AlertType; /** * Array to track all subscriptions and unsubscribe them onDestroy @@ -132,13 +131,6 @@ export class OrcidQueueComponent implements OnInit, OnDestroy, OnChanges { ); } - /** - * Return the list of orcid queue records - */ - getList(): Observable>> { - return this.list$.asObservable(); - } - /** * Return the icon class for the queue object type * diff --git a/src/app/item-page/simple/item-page.component.html b/src/app/item-page/simple/item-page.component.html index 912115c961..b9b6fbf30e 100644 --- a/src/app/item-page/simple/item-page.component.html +++ b/src/app/item-page/simple/item-page.component.html @@ -5,7 +5,6 @@ -
    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 7b29711206..80686a682d 100644 --- a/src/app/item-page/simple/item-page.component.spec.ts +++ b/src/app/item-page/simple/item-page.component.spec.ts @@ -44,7 +44,7 @@ import { import { ActivatedRouteStub } from '../../shared/testing/active-router.stub'; import { createPaginatedList } from '../../shared/testing/utils.test'; import { VarDirective } from '../../shared/utils/var.directive'; -import { ViewTrackerComponent } from '../../statistics/angulartics/dspace/view-tracker.component'; +import { ViewTrackerResolverService } from '../../statistics/angulartics/dspace/view-tracker-resolver.service'; import { ThemedItemAlertsComponent } from '../alerts/themed-item-alerts.component'; import { ItemVersionsComponent } from '../versions/item-versions.component'; import { ItemVersionsNoticeComponent } from '../versions/notice/item-versions-notice.component'; @@ -142,7 +142,7 @@ describe('ItemPageComponent', () => { remove: { imports: [ ThemedItemAlertsComponent, ItemVersionsNoticeComponent, - ViewTrackerComponent, + ViewTrackerResolverService, ListableObjectComponentLoaderComponent, ItemVersionsComponent, ErrorComponent, diff --git a/src/app/item-page/simple/item-page.component.ts b/src/app/item-page/simple/item-page.component.ts index fb2db4ad05..8f3241c537 100644 --- a/src/app/item-page/simple/item-page.component.ts +++ b/src/app/item-page/simple/item-page.component.ts @@ -48,7 +48,6 @@ import { ErrorComponent } from '../../shared/error/error.component'; import { ThemedLoadingComponent } from '../../shared/loading/themed-loading.component'; import { ListableObjectComponentLoaderComponent } from '../../shared/object-collection/shared/listable-object/listable-object-component-loader.component'; import { VarDirective } from '../../shared/utils/var.directive'; -import { ViewTrackerComponent } from '../../statistics/angulartics/dspace/view-tracker.component'; import { ThemedItemAlertsComponent } from '../alerts/themed-item-alerts.component'; import { getItemPageRoute } from '../item-page-routing-paths'; import { ItemVersionsComponent } from '../versions/item-versions.component'; @@ -72,7 +71,6 @@ import { QaEventNotificationComponent } from './qa-event-notification/qa-event-n VarDirective, ThemedItemAlertsComponent, ItemVersionsNoticeComponent, - ViewTrackerComponent, ListableObjectComponentLoaderComponent, ItemVersionsComponent, ErrorComponent, @@ -168,7 +166,8 @@ export class ItemPageComponent implements OnInit, OnDestroy { this.signpostingLinks = signpostingLinks; 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}"` + (isNotEmpty(link.type) ? ` ; type="${link.type}" ` : ' ') + + (isNotEmpty(link.profile) ? ` ; profile="${link.profile}" ` : ''); let tag: LinkDefinition = { href: link.href, rel: link.rel, @@ -178,6 +177,11 @@ export class ItemPageComponent implements OnInit, OnDestroy { type: link.type, }); } + if (isNotEmpty(link.profile)) { + tag = Object.assign(tag, { + profile: link.profile, + }); + } this.linkHeadService.addTag(tag); }); diff --git a/src/app/item-page/simple/item-types/publication/publication.component.html b/src/app/item-page/simple/item-types/publication/publication.component.html index 86f203deca..3894c9f2fe 100644 --- a/src/app/item-page/simple/item-types/publication/publication.component.html +++ b/src/app/item-page/simple/item-types/publication/publication.component.html @@ -101,7 +101,7 @@ [label]="'item.page.referenced'"> diff --git a/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html b/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html index 962cc2fcad..d2f29b9ab6 100644 --- a/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html +++ b/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html @@ -89,7 +89,7 @@ diff --git a/src/app/item-page/simple/notify-requests-status/notify-status.enum.ts b/src/app/item-page/simple/notify-requests-status/notify-status.enum.ts index e44c614130..19ba320d49 100644 --- a/src/app/item-page/simple/notify-requests-status/notify-status.enum.ts +++ b/src/app/item-page/simple/notify-requests-status/notify-status.enum.ts @@ -2,4 +2,5 @@ export enum RequestStatusEnum { ACCEPTED = 'ACCEPTED', REJECTED = 'REJECTED', REQUESTED = 'REQUESTED', + TENTATIVE_REJECT = 'TENTATIVE_REJECT', } diff --git a/src/app/item-page/simple/notify-requests-status/request-status-alert-box/request-status-alert-box.component.ts b/src/app/item-page/simple/notify-requests-status/request-status-alert-box/request-status-alert-box.component.ts index e6059688fb..9ab8f90c18 100644 --- a/src/app/item-page/simple/notify-requests-status/request-status-alert-box/request-status-alert-box.component.ts +++ b/src/app/item-page/simple/notify-requests-status/request-status-alert-box/request-status-alert-box.component.ts @@ -74,6 +74,13 @@ export class RequestStatusAlertBoxComponent implements OnInit { }; break; + case RequestStatusEnum.TENTATIVE_REJECT: + this.displayOptions = { + alertType: 'alert-warning', + text: 'request-status-alert-box.tentative_rejected', + }; + break; + case RequestStatusEnum.REQUESTED: this.displayOptions = { alertType: 'alert-warning', diff --git a/src/app/lookup-by-id/objectnotfound/objectnotfound.component.html b/src/app/lookup-by-id/objectnotfound/objectnotfound.component.html index e1cf58b5b2..e3416f8405 100644 --- a/src/app/lookup-by-id/objectnotfound/objectnotfound.component.html +++ b/src/app/lookup-by-id/objectnotfound/objectnotfound.component.html @@ -3,6 +3,6 @@

    {{missingItem}}


    - {{"404.link.home-page" | translate}} + {{"404.link.home-page" | translate}}

    diff --git a/src/app/navbar/navbar.component.html b/src/app/navbar/navbar.component.html index 90cf07caa4..8e55fd6416 100644 --- a/src/app/navbar/navbar.component.html +++ b/src/app/navbar/navbar.component.html @@ -1,5 +1,5 @@
    diff --git a/src/app/pagenotfound/pagenotfound.component.html b/src/app/pagenotfound/pagenotfound.component.html index e85316b0ec..8177323a7b 100644 --- a/src/app/pagenotfound/pagenotfound.component.html +++ b/src/app/pagenotfound/pagenotfound.component.html @@ -5,6 +5,6 @@

    {{"404.help" | translate}}


    - {{"404.link.home-page" | translate}} + {{"404.link.home-page" | translate}}

    \ No newline at end of file diff --git a/src/app/process-page/overview/process-overview.component.html b/src/app/process-page/overview/process-overview.component.html index cd7b97609a..81c3e89c20 100644 --- a/src/app/process-page/overview/process-overview.component.html +++ b/src/app/process-page/overview/process-overview.component.html @@ -58,16 +58,16 @@
    diff --git a/src/app/search-navbar/search-navbar.component.html b/src/app/search-navbar/search-navbar.component.html index e9b5f285fb..84ffb5b38d 100644 --- a/src/app/search-navbar/search-navbar.component.html +++ b/src/app/search-navbar/search-navbar.component.html @@ -7,7 +7,7 @@ [class.display]="searchExpanded ? 'inline-block' : 'none'" [tabIndex]="searchExpanded ? 0 : -1" [attr.data-test]="'header-search-box' | dsBrowserOnly"> - 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 3dc84a833a..191a795576 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 @@ -138,6 +138,10 @@ export class AccessControlArrayFormComponent implements OnInit { return item.id; } + isValid() { + return this.ngForm.valid; + } + } 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 46895b8532..bb84aee35d 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 @@ -179,5 +179,9 @@ export class AccessControlFormContainerComponent impleme this.selectableListService.deselectAll(ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID); } + isValid() { + return this.bitstreamAccessCmp.isValid() || this.itemAccessCmp.isValid(); + } + } 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 8cf0ecea38..88706e2df3 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 @@ -8,20 +8,19 @@
    + [dsBtnDisabled]="!form.valid" role="button" tabindex="0"> {{"login.form.submit" | translate}}
    {{"login.form.new-user" | translate}} + [attr.data-test]="'register' | dsBrowserOnly" role="menuitem" tabindex="0">{{"login.form.new-user" | translate}} {{"login.form.forgot-password" | translate}} + [attr.data-test]="'forgot' | dsBrowserOnly" role="menuitem" tabindex="0">{{"login.form.forgot-password" | translate}}
    diff --git a/src/app/shared/menu/menu-item/link-menu-item.component.html b/src/app/shared/menu/menu-item/link-menu-item.component.html index 71eeda2e68..f96084e6e1 100644 --- a/src/app/shared/menu/menu-item/link-menu-item.component.html +++ b/src/app/shared/menu/menu-item/link-menu-item.component.html @@ -8,4 +8,5 @@ (keyup.space)="navigate($event)" (keydown.enter)="navigate($event)" href="javascript:void(0);" + tabindex="0" >{{item.text | translate}} diff --git a/src/app/shared/menu/menu-item/text-menu-item.component.html b/src/app/shared/menu/menu-item/text-menu-item.component.html index ba3cf99a49..e2dd334caf 100644 --- a/src/app/shared/menu/menu-item/text-menu-item.component.html +++ b/src/app/shared/menu/menu-item/text-menu-item.component.html @@ -1 +1 @@ -{{item.text | translate}} +{{item.text | translate}} diff --git a/src/app/shared/mydspace-actions/mydspace-actions.ts b/src/app/shared/mydspace-actions/mydspace-actions.ts index 5100d8122e..73caf4f30c 100644 --- a/src/app/shared/mydspace-actions/mydspace-actions.ts +++ b/src/app/shared/mydspace-actions/mydspace-actions.ts @@ -101,17 +101,25 @@ export abstract class MyDSpaceActionsComponent { return false; }; // This assures that the search cache is empty before reloading mydspace. // See https://github.com/DSpace/dspace-angular/pull/468 + this.invalidateCacheForCurrentSearchUrl(true); + } + + invalidateCacheForCurrentSearchUrl(shouldNavigate = false): void { + const url = decodeURIComponent(this.router.url); this.searchService.getEndpoint().pipe( take(1), tap((cachedHref: string) => this.requestService.removeByHrefSubstring(cachedHref)), - ).subscribe(() => this.router.navigateByUrl(url)); + ).subscribe(() => { + if (shouldNavigate) { + this.router.navigateByUrl(url); + } + }); } /** diff --git a/src/app/shared/mydspace-actions/mydspace-reloadable-actions.spec.ts b/src/app/shared/mydspace-actions/mydspace-reloadable-actions.spec.ts index 1d0d231503..b7a0a20219 100644 --- a/src/app/shared/mydspace-actions/mydspace-reloadable-actions.spec.ts +++ b/src/app/shared/mydspace-actions/mydspace-reloadable-actions.spec.ts @@ -219,6 +219,7 @@ describe('MyDSpaceReloadableActionsComponent', () => { spyOn(component, 'reloadObjectExecution').and.callThrough(); spyOn(component, 'convertReloadedObject').and.callThrough(); spyOn(component.processCompleted, 'emit').and.callThrough(); + spyOn(component, 'invalidateCacheForCurrentSearchUrl').and.callThrough(); (component as any).objectDataService = mockDataService; }); @@ -239,10 +240,11 @@ describe('MyDSpaceReloadableActionsComponent', () => { }); }); - it('should emit the reloaded object in case of success', (done) => { + it('should emit the reloaded object and invalidate cache in case of success', (done) => { component.startActionExecution().subscribe( (result) => { expect(component.processCompleted.emit).toHaveBeenCalledWith({ result: true, reloadedObject: result as any }); + expect(component.invalidateCacheForCurrentSearchUrl).toHaveBeenCalled(); done(); }); }); diff --git a/src/app/shared/mydspace-actions/mydspace-reloadable-actions.ts b/src/app/shared/mydspace-actions/mydspace-reloadable-actions.ts index 28e3ac4040..062bf25741 100644 --- a/src/app/shared/mydspace-actions/mydspace-reloadable-actions.ts +++ b/src/app/shared/mydspace-actions/mydspace-reloadable-actions.ts @@ -105,6 +105,8 @@ export abstract class MyDSpaceReloadableActionsComponent - + {{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 1c4f68fbcc..2c33d9d942 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,5 +1,5 @@
    - + {{ 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 d63abd9672..f8197575d6 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,5 +1,5 @@
    - + {{ dsoNameService.getName(object) }} diff --git a/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.html b/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.html index f88347a8b7..8ea4d2309a 100644 --- a/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.html +++ b/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.html @@ -4,14 +4,16 @@ {{mdRepresentation.getValue()}} + target="_blank" [href]="mdRepresentation.getValue()" role="link" tabindex="0"> {{mdRepresentation.getValue()}} {{mdRepresentation.getValue()}} + [queryParams]="getQueryParams()" + role="link" + tabindex="0"> {{mdRepresentation.getValue()}}
    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 baebf5fe86..547180f18c 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 @@
    + [routerLink]="[itemPageRoute]" class="dont-break-out" role="link" tabindex="0"> @@ -18,7 +18,7 @@ + [innerHTML]="dsoTitle" role="link" tabindex="0"> diff --git a/src/app/shared/pagination/pagination.component.html b/src/app/shared/pagination/pagination.component.html index 605ac4ef45..b61bb65ddd 100644 --- a/src/app/shared/pagination/pagination.component.html +++ b/src/app/shared/pagination/pagination.component.html @@ -7,13 +7,13 @@
    - +
    -
    +
    diff --git a/src/app/shared/search/search-filters/search-filter/search-authority-filter/search-authority-filter.component.html b/src/app/shared/search/search-filters/search-filter/search-authority-filter/search-authority-filter.component.html index 1a95d68b2c..eb18519c05 100644 --- a/src/app/shared/search/search-filters/search-filter/search-authority-filter/search-authority-filter.component.html +++ b/src/app/shared/search/search-filters/search-filter/search-authority-filter/search-authority-filter.component.html @@ -8,11 +8,11 @@ diff --git a/src/app/shared/search/search-filters/search-filter/search-boolean-filter/search-boolean-filter.component.html b/src/app/shared/search/search-filters/search-filter/search-boolean-filter/search-boolean-filter.component.html index 6c26198e65..43df8184b8 100644 --- a/src/app/shared/search/search-filters/search-filter/search-boolean-filter/search-boolean-filter.component.html +++ b/src/app/shared/search/search-filters/search-filter/search-boolean-filter/search-boolean-filter.component.html @@ -8,11 +8,11 @@ diff --git a/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-option/search-facet-option.component.html b/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-option/search-facet-option.component.html index dfd68d026a..c97af4bc25 100644 --- a/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-option/search-facet-option.component.html +++ b/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-option/search-facet-option.component.html @@ -4,7 +4,7 @@ [queryParams]="addQueryParams$ | async" (click)="announceFilter(); filterService.minimizeAll()">
    - @@ -44,7 +44,7 @@
    -
    diff --git a/src/app/shared/search/search-filters/search-filter/search-text-filter/search-text-filter.component.html b/src/app/shared/search/search-filters/search-filter/search-text-filter/search-text-filter.component.html index 037964c63f..a7b5fa6e00 100644 --- a/src/app/shared/search/search-filters/search-filter/search-text-filter/search-text-filter.component.html +++ b/src/app/shared/search/search-filters/search-filter/search-text-filter/search-text-filter.component.html @@ -8,11 +8,11 @@ diff --git a/src/app/shared/search/search-filters/search-filters.component.html b/src/app/shared/search/search-filters/search-filters.component.html index a9afaf7e5e..bea2ea9467 100644 --- a/src/app/shared/search/search-filters/search-filters.component.html +++ b/src/app/shared/search/search-filters/search-filters.component.html @@ -5,14 +5,14 @@ } @if ((filters | async)?.hasSucceeded) { -
    +
    @for (filter of (filters | async)?.payload; track filter.name) { }
    } -@if(filtersWithComputedVisibility !== (filters | async)?.payload?.length) { +@if(getCurrentFiltersComputed(this.currentConfiguration) < (filters | async)?.payload?.length) { } diff --git a/src/app/shared/search/search-filters/search-filters.component.ts b/src/app/shared/search/search-filters/search-filters.component.ts index dad3bffb75..67bcfc5767 100644 --- a/src/app/shared/search/search-filters/search-filters.component.ts +++ b/src/app/shared/search/search-filters/search-filters.component.ts @@ -15,7 +15,11 @@ import { BehaviorSubject, Observable, } from 'rxjs'; -import { map } from 'rxjs/operators'; +import { + filter, + map, + take, +} from 'rxjs/operators'; import { APP_CONFIG, @@ -82,9 +86,16 @@ export class SearchFiltersComponent implements OnInit { searchLink: string; /** - * Filters for which visibility has been computed + * Keeps track of the filters computed for each configuration during the current rendering cycle + * This array stores objects with configuration identifier and number of computed filters */ - filtersWithComputedVisibility = 0; + private currentFiltersComputed = []; + + /** + * Stores the final count of computed filters for each configuration + * Used to determine when all filters for a configuration have been processed + */ + private finalFiltersComputed = []; subs = []; filterLabel = 'search'; @@ -136,7 +147,112 @@ export class SearchFiltersComponent implements OnInit { countFiltersWithComputedVisibility(computed: boolean) { if (computed) { - this.filtersWithComputedVisibility += 1; + this.filters.pipe( + // Get filter data and check if we need to increment the counter + map(filtersData => { + if (filtersData && filtersData.hasSucceeded && filtersData.payload) { + const totalFilters = filtersData.payload.length; + const currentComputed = this.getCurrentFiltersComputed(this.currentConfiguration); + + // If we've already computed all filters for this configuration + if (currentComputed >= totalFilters) { + // Register in finalFiltersComputed if not already registered + if (!this.findConfigInFinalFilters(this.currentConfiguration)) { + this.updateFinalFiltersComputed(this.currentConfiguration, totalFilters); + } + return { shouldIncrement: false }; + } + + // We haven't reached the total yet, proceed with increment + return { + shouldIncrement: true, + totalFilters, + }; + } + return { shouldIncrement: false }; + }), + // Only continue if we need to increment the counter + filter(result => result.shouldIncrement), + // Increment the counter for the current configuration + map(result => { + const filterConfig = this.findConfigInCurrentFilters(this.currentConfiguration); + + if (filterConfig) { + // Update existing counter + filterConfig.filtersComputed += 1; + } else { + // Create new counter entry + this.currentFiltersComputed.push({ + configuration: this.currentConfiguration, + filtersComputed: 1, + }); + } + + // Pass along the total and updated count + return { + totalFilters: result.totalFilters, + currentComputed: this.getCurrentFiltersComputed(this.currentConfiguration), + }; + }), + // Check if we've reached the total after incrementing + map(result => { + if (result.currentComputed === result.totalFilters) { + // If we've reached the total, update final filters count + this.updateFinalFiltersComputed(this.currentConfiguration, result.currentComputed); + } + return result; + }), + ).pipe(take(1)).subscribe(); // Execute the pipeline and immediately unsubscribe } } + + /** + * Finds a configuration entry in the currentFiltersComputed array + * @param configuration The configuration identifier to search for + * @returns The filter configuration object if found, otherwise undefined + */ + private findConfigInCurrentFilters(configuration: string) { + return this.currentFiltersComputed.find( + (configFilter) => configFilter.configuration === configuration, + ); + } + + /** + * Finds a configuration entry in the finalFiltersComputed array + * @param configuration The configuration identifier to search for + * @returns The filter configuration object if found, otherwise undefined + */ + private findConfigInFinalFilters(configuration: string) { + return this.finalFiltersComputed.find( + (configFilter) => configFilter.configuration === configuration, + ); + } + + /** + * Updates or adds a new entry in the finalFiltersComputed array + * @param configuration The configuration identifier to update + * @param count The number of computed filters to set for this configuration + */ + private updateFinalFiltersComputed(configuration: string, count: number) { + const filterConfig = this.findConfigInFinalFilters(configuration); + + if (filterConfig) { + filterConfig.filtersComputed = count; + } else { + this.finalFiltersComputed.push({ + configuration, + filtersComputed: count, + }); + } + } + + /** + * Gets the current number of computed filters for a specific configuration + * @param configuration The configuration identifier to get the count for + * @returns The number of computed filters, or 0 if none found + */ + getCurrentFiltersComputed(configuration: string): number { + const configFilter = this.findConfigInCurrentFilters(configuration); + return configFilter?.filtersComputed || 0; + } } diff --git a/src/app/shared/search/search-results/search-results.component.html b/src/app/shared/search/search-results/search-results.component.html index d56d69761b..ecc4672b0a 100644 --- a/src/app/shared/search/search-results/search-results.component.html +++ b/src/app/shared/search/search-results/search-results.component.html @@ -44,7 +44,9 @@ {{ 'search.results.no-results' | translate }} + queryParamsHandling="merge" + role="link" + tabindex="0"> {{"search.results.no-results-link" | translate}}
    diff --git a/src/app/shared/starts-with/date/starts-with-date.component.html b/src/app/shared/starts-with/date/starts-with-date.component.html index b350d9896c..c3fbb884ab 100644 --- a/src/app/shared/starts-with/date/starts-with-date.component.html +++ b/src/app/shared/starts-with/date/starts-with-date.component.html @@ -27,7 +27,7 @@
    - +
    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 edbd1f1960..3952f86fda 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 @@ -4,7 +4,7 @@
    - +
    diff --git a/src/app/shared/testing/eperson.mock.ts b/src/app/shared/testing/eperson.mock.ts index 002ee9326f..36daad1e57 100644 --- a/src/app/shared/testing/eperson.mock.ts +++ b/src/app/shared/testing/eperson.mock.ts @@ -91,3 +91,43 @@ export const EPersonMock2: EPerson = Object.assign(new EPerson(), { ], }, }); + +export const EPersonMockWithNoName: EPerson = Object.assign(new EPerson(), { + handle: null, + groups: [], + netid: 'test@test.com', + lastActive: '2018-05-14T12:25:42.411+0000', + canLogIn: true, + email: 'test@test.com', + requireCertificate: false, + selfRegistered: false, + _links: { + self: { + href: 'https://rest.api/dspace-spring-rest/api/eperson/epersons/testid', + }, + groups: { href: 'https://rest.api/dspace-spring-rest/api/eperson/epersons/testid/groups' }, + }, + id: 'testid', + uuid: 'testid', + type: 'eperson', + metadata: { + 'dc.title': [ + { + language: null, + value: 'User Test', + }, + ], + 'eperson.lastname': [ + { + language: null, + value: 'Test', + }, + ], + 'eperson.language': [ + { + language: null, + value: 'en', + }, + ], + }, +}); diff --git a/src/app/shared/theme-support/themed.component.ts b/src/app/shared/theme-support/themed.component.ts index 84b1163d7b..2c6b9c8836 100644 --- a/src/app/shared/theme-support/themed.component.ts +++ b/src/app/shared/theme-support/themed.component.ts @@ -99,6 +99,9 @@ export abstract class ThemedComponent implements AfterViewInit } initComponentInstance(changes?: SimpleChanges) { + if (hasValue(this.themeSub)) { + this.themeSub.unsubscribe(); + } this.themeSub = this.themeService?.getThemeName$().subscribe(() => { this.renderComponentInstance(changes); }); diff --git a/src/app/shared/truncatable/truncatable-part/truncatable-part.component.html b/src/app/shared/truncatable/truncatable-part/truncatable-part.component.html index 55ebe2d957..1ac89e5329 100644 --- a/src/app/shared/truncatable/truncatable-part/truncatable-part.component.html +++ b/src/app/shared/truncatable/truncatable-part/truncatable-part.component.html @@ -10,6 +10,7 @@ (keyup.Space)="toggle()" role="button" [attr.aria-expanded]="isExpanded" + tabindex="0" > {{ 'item.truncatable-part.show-' + (isExpanded ? 'less' : 'more') | translate }} diff --git a/src/app/shared/upload/uploader/uploader-options.model.ts b/src/app/shared/upload/uploader/uploader-options.model.ts index 559fb0485b..e21628d06e 100644 --- a/src/app/shared/upload/uploader/uploader-options.model.ts +++ b/src/app/shared/upload/uploader/uploader-options.model.ts @@ -22,6 +22,11 @@ export class UploaderOptions { */ maxFileNumber: number; + /** + * Impersonating user uuid + */ + impersonatingID: string; + /** * The request method to use for the file upload request */ diff --git a/src/app/shared/upload/uploader/uploader.component.ts b/src/app/shared/upload/uploader/uploader.component.ts index fbafe811eb..804200d220 100644 --- a/src/app/shared/upload/uploader/uploader.component.ts +++ b/src/app/shared/upload/uploader/uploader.component.ts @@ -47,6 +47,11 @@ import { UploaderProperties } from './uploader-properties.model'; }) export class UploaderComponent implements OnInit, AfterViewInit { + /** + * Header key to impersonate a user + */ + private readonly ON_BEHALF_HEADER = 'X-On-Behalf-Of'; + /** * The message to show when drag files on the drop zone */ @@ -162,7 +167,13 @@ export class UploaderComponent implements OnInit, AfterViewInit { item.url = this.uploader.options.url; } // Ensure the current XSRF token is included in every upload request (token may change between items uploaded) - this.uploader.options.headers = [{ name: XSRF_REQUEST_HEADER, value: this.tokenExtractor.getToken() }]; + // Ensure the behalf header is set if impersonating + this.uploader.options.headers = [ + { name: XSRF_REQUEST_HEADER, value: this.tokenExtractor.getToken() }, + ]; + if (hasValue(this.uploadFilesOptions.impersonatingID)) { + this.uploader.options.headers.push({ name: this.ON_BEHALF_HEADER, value: this.uploadFilesOptions.impersonatingID }); + } this.onBeforeUpload(); this.isOverDocumentDropZone = observableOf(false); }; diff --git a/src/app/statistics/angulartics/dspace/view-tracker-resolver.service.ts b/src/app/statistics/angulartics/dspace/view-tracker-resolver.service.ts new file mode 100644 index 0000000000..004864cc68 --- /dev/null +++ b/src/app/statistics/angulartics/dspace/view-tracker-resolver.service.ts @@ -0,0 +1,64 @@ +import { Injectable } from '@angular/core'; +import { + ActivatedRouteSnapshot, + ResolveEnd, + Router, + RouterStateSnapshot, +} from '@angular/router'; +import { Angulartics2 } from 'angulartics2'; +import { switchMap } from 'rxjs'; +import { + filter, + take, +} from 'rxjs/operators'; + +import { ReferrerService } from '../../../core/services/referrer.service'; + +/** + * This component triggers a page view statistic + */ +@Injectable({ + providedIn: 'root', +}) +export class ViewTrackerResolverService { + + constructor( + public angulartics2: Angulartics2, + public referrerService: ReferrerService, + public router: Router, + ) { + } + + resolve(routeSnapshot: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { + const dsoPath = routeSnapshot.data.dsoPath || 'dso.payload'; // Fetch the resolvers passed via the route data + this.router.events.pipe( + filter(event => event instanceof ResolveEnd), + take(1), + switchMap(() => + this.referrerService.getReferrer().pipe(take(1)))) + .subscribe((referrer: string) => { + this.angulartics2.eventTrack.next({ + action: 'page_view', + properties: { + object: this.getNestedProperty(routeSnapshot.data, dsoPath), + referrer, + }, + }); + }); + return true; + } + + private getNestedProperty(obj: any, path: string) { + const keys = path.split('.'); + let result = obj; + + for (const key of keys) { + if (result && result.hasOwnProperty(key)) { + result = result[key]; + } else { + return undefined; + } + } + return result; + } +} diff --git a/src/app/statistics/angulartics/dspace/view-tracker.component.html b/src/app/statistics/angulartics/dspace/view-tracker.component.html deleted file mode 100644 index c0c0ffe181..0000000000 --- a/src/app/statistics/angulartics/dspace/view-tracker.component.html +++ /dev/null @@ -1 +0,0 @@ -  diff --git a/src/app/statistics/angulartics/dspace/view-tracker.component.scss b/src/app/statistics/angulartics/dspace/view-tracker.component.scss deleted file mode 100644 index c76cafbe44..0000000000 --- a/src/app/statistics/angulartics/dspace/view-tracker.component.scss +++ /dev/null @@ -1,3 +0,0 @@ -:host { - display: none -} diff --git a/src/app/statistics/angulartics/dspace/view-tracker.component.ts b/src/app/statistics/angulartics/dspace/view-tracker.component.ts deleted file mode 100644 index 801f4fd2cb..0000000000 --- a/src/app/statistics/angulartics/dspace/view-tracker.component.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { - Component, - Input, - OnDestroy, - OnInit, -} from '@angular/core'; -import { Angulartics2 } from 'angulartics2'; -import { Subscription } from 'rxjs'; -import { take } from 'rxjs/operators'; - -import { ReferrerService } from '../../../core/services/referrer.service'; -import { DSpaceObject } from '../../../core/shared/dspace-object.model'; -import { hasValue } from '../../../shared/empty.util'; - -/** - * This component triggers a page view statistic - */ -@Component({ - selector: 'ds-view-tracker', - styleUrls: ['./view-tracker.component.scss'], - templateUrl: './view-tracker.component.html', - standalone: true, -}) -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 referrerService: ReferrerService, - ) { - } - - ngOnInit(): void { - this.sub = this.referrerService.getReferrer() - .pipe(take(1)) - .subscribe((referrer: string) => { - this.angulartics2.eventTrack.next({ - action: 'page_view', - 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/angulartics/dspace/view-tracker.resolver.ts b/src/app/statistics/angulartics/dspace/view-tracker.resolver.ts new file mode 100644 index 0000000000..78b6bb6f8a --- /dev/null +++ b/src/app/statistics/angulartics/dspace/view-tracker.resolver.ts @@ -0,0 +1,16 @@ +import { inject } from '@angular/core'; +import { + ActivatedRouteSnapshot, + ResolveFn, + RouterStateSnapshot, +} from '@angular/router'; + +import { ViewTrackerResolverService } from './view-tracker-resolver.service'; + +export const viewTrackerResolver: ResolveFn = ( + route: ActivatedRouteSnapshot, + state: RouterStateSnapshot, + viewTrackerResolverService: ViewTrackerResolverService = inject(ViewTrackerResolverService), +): boolean => { + return viewTrackerResolverService.resolve(route, state); +}; diff --git a/src/app/submission/form/footer/submission-form-footer.component.html b/src/app/submission/form/footer/submission-form-footer.component.html index c860fb557b..5c76b2f9dc 100644 --- a/src/app/submission/form/footer/submission-form-footer.component.html +++ b/src/app/submission/form/footer/submission-form-footer.component.html @@ -1,5 +1,5 @@ -
    -
    +
    +
    -
    +
    {{'submission.general.info.saved' | translate}} diff --git a/src/app/submission/form/section-add/submission-form-section-add.component.html b/src/app/submission/form/section-add/submission-form-section-add.component.html index 563044d270..3a046e119d 100644 --- a/src/app/submission/form/section-add/submission-form-section-add.component.html +++ b/src/app/submission/form/section-add/submission-form-section-add.component.html @@ -2,12 +2,12 @@ #sectionAdd="ngbDropdown" placement="bottom-right" class="d-inline-block" - [ngClass]="{'w-100': windowService.isXs()}"> + [ngClass]="{'w-100': isXs$}"> @@ -15,7 +15,7 @@
    + [ngClass]="{'w-100': (isXs$ | async)}"> diff --git a/src/app/submission/form/section-add/submission-form-section-add.component.ts b/src/app/submission/form/section-add/submission-form-section-add.component.ts index eeeda893f1..35c52d2450 100644 --- a/src/app/submission/form/section-add/submission-form-section-add.component.ts +++ b/src/app/submission/form/section-add/submission-form-section-add.component.ts @@ -51,6 +51,11 @@ export class SubmissionFormSectionAddComponent implements OnInit { */ public hasSections$: Observable; + /** + * A boolean representing whether it's a small screen + */ + isXs$: Observable; + /** * Initialize instance variables * @@ -71,6 +76,7 @@ export class SubmissionFormSectionAddComponent implements OnInit { this.hasSections$ = this.sectionList$.pipe( map((list: SectionDataObject[]) => list.length > 0), ); + this.isXs$ = this.windowService.isXs(); } /** diff --git a/src/app/submission/form/submission-form.component.html b/src/app/submission/form/submission-form.component.html index 17e863d435..71dd95b4bc 100644 --- a/src/app/submission/form/submission-form.component.html +++ b/src/app/submission/form/submission-form.component.html @@ -1,5 +1,5 @@
    -
    +
    - +
    - diff --git a/src/app/submission/form/submission-form.component.spec.ts b/src/app/submission/form/submission-form.component.spec.ts index f097a1e7ea..34a603311b 100644 --- a/src/app/submission/form/submission-form.component.spec.ts +++ b/src/app/submission/form/submission-form.component.spec.ts @@ -1,7 +1,6 @@ import { ChangeDetectorRef, Component, - NO_ERRORS_SCHEMA, SimpleChange, } from '@angular/core'; import { @@ -10,6 +9,7 @@ import { TestBed, waitForAsync, } from '@angular/core/testing'; +import { TranslateModule } from '@ngx-translate/core'; import { cold, getTestScheduler, @@ -31,12 +31,10 @@ import { mockSubmissionSelfUrl, mockSubmissionState, } from '../../shared/mocks/submission.mock'; -import { getMockThemeService } from '../../shared/mocks/theme-service.mock'; import { AuthServiceStub } from '../../shared/testing/auth-service.stub'; import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; import { SubmissionServiceStub } from '../../shared/testing/submission-service.stub'; import { createTestComponent } from '../../shared/testing/utils.test'; -import { ThemeService } from '../../shared/theme-support/theme.service'; import { SubmissionSectionContainerComponent } from '../sections/container/section-container.component'; import { SectionsService } from '../sections/sections.service'; import { VisibilityType } from '../sections/visibility-type'; @@ -47,7 +45,7 @@ import { SubmissionFormSectionAddComponent } from './section-add/submission-form import { SubmissionFormComponent } from './submission-form.component'; import { ThemedSubmissionUploadFilesComponent } from './submission-upload-files/themed-submission-upload-files.component'; -describe('SubmissionFormComponent Component', () => { +describe('SubmissionFormComponent', () => { let comp: SubmissionFormComponent; let compAsAny: any; @@ -67,18 +65,19 @@ describe('SubmissionFormComponent Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [SubmissionFormComponent, TestComponent, + imports: [ + SubmissionFormComponent, + TestComponent, + TranslateModule.forRoot(), ], providers: [ { provide: AuthService, useClass: AuthServiceStub }, { provide: HALEndpointService, useValue: new HALEndpointServiceStub('workspaceitems') }, { provide: SubmissionService, useValue: submissionServiceStub }, { provide: SectionsService, useValue: { isSectionTypeAvailable: () => observableOf(true) } }, - { provide: ThemeService, useValue: getMockThemeService() }, ChangeDetectorRef, SubmissionFormComponent, ], - schemas: [NO_ERRORS_SCHEMA], }) .overrideComponent(SubmissionFormComponent, { remove: { @@ -147,7 +146,7 @@ describe('SubmissionFormComponent Component', () => { expect(compAsAny.submissionSections).toBeUndefined(); expect(compAsAny.subs).toEqual([]); expect(submissionServiceStub.startAutoSave).not.toHaveBeenCalled(); - expect(comp.loading).toBeObservable(cold('(a|)', { a: true })); + expect(comp.isLoading$).toBeObservable(cold('(a|)', { a: true })); done(); }); @@ -227,7 +226,6 @@ describe('SubmissionFormComponent Component', () => { }); scheduler.flush(); - expect(comp.collectionId).toEqual(submissionObjectNew.collection.id); expect(comp.submissionDefinition).toEqual(submissionObjectNew.submissionDefinition); expect(comp.definitionId).toEqual(submissionObjectNew.submissionDefinition.name); expect(comp.sections).toEqual(submissionObjectNew.sections); @@ -265,7 +263,6 @@ describe('SubmissionFormComponent Component', () => { }); scheduler.flush(); - expect(comp.collectionId).toEqual('45f2f3f1-ba1f-4f36-908a-3f1ea9a557eb'); expect(submissionServiceStub.resetSubmissionObject).not.toHaveBeenCalled(); done(); }); diff --git a/src/app/submission/form/submission-form.component.ts b/src/app/submission/form/submission-form.component.ts index 74c262befc..b9555bfd70 100644 --- a/src/app/submission/form/submission-form.component.ts +++ b/src/app/submission/form/submission-form.component.ts @@ -7,6 +7,7 @@ import { OnDestroy, SimpleChanges, } from '@angular/core'; +import { TranslateModule } from '@ngx-translate/core'; import isEqual from 'lodash/isEqual'; import { Observable, @@ -64,6 +65,7 @@ import { ThemedSubmissionUploadFilesComponent } from './submission-upload-files/ ThemedSubmissionUploadFilesComponent, SubmissionFormCollectionComponent, SubmissionFormSectionAddComponent, + TranslateModule, ], standalone: true, }) @@ -124,7 +126,7 @@ export class SubmissionFormComponent implements OnChanges, OnDestroy { * A boolean representing if a submission form is pending * @type {Observable} */ - public loading: Observable = observableOf(true); + public isLoading$: Observable = observableOf(true); /** * Emits true when the submission config has bitstream uploading enabled in submission @@ -196,7 +198,7 @@ export class SubmissionFormComponent implements OnChanges, OnDestroy { this.uploadEnabled$ = this.sectionsService.isSectionTypeAvailable(this.submissionId, SectionsType.Upload); // check if is submission loading - this.loading = this.submissionService.getSubmissionObject(this.submissionId).pipe( + this.isLoading$ = this.submissionService.getSubmissionObject(this.submissionId).pipe( filter(() => this.isActive), map((submission: SubmissionObjectEntry) => submission.isLoading), map((isLoading: boolean) => isLoading), @@ -209,6 +211,7 @@ export class SubmissionFormComponent implements OnChanges, OnDestroy { distinctUntilChanged()) .subscribe((endpointURL) => { this.uploadFilesOptions.authToken = this.authService.buildAuthHeader(); + this.uploadFilesOptions.impersonatingID = this.authService.getImpersonateID(); this.uploadFilesOptions.url = endpointURL.concat(`/${this.submissionId}`); this.definitionId = this.submissionDefinition.name; this.submissionService.dispatchInit( @@ -285,13 +288,12 @@ export class SubmissionFormComponent implements OnChanges, OnDestroy { * new submission object */ onCollectionChange(submissionObject: SubmissionObject) { - this.collectionId = (submissionObject.collection as Collection).id; if (this.definitionId !== (submissionObject.submissionDefinition as SubmissionDefinitionsModel).name) { this.sections = submissionObject.sections; this.submissionDefinition = (submissionObject.submissionDefinition as SubmissionDefinitionsModel); this.definitionId = this.submissionDefinition.name; this.submissionService.resetSubmissionObject( - this.collectionId, + (submissionObject.collection as Collection).id, this.submissionId, submissionObject._links.self.href, this.submissionDefinition, @@ -302,13 +304,6 @@ export class SubmissionFormComponent implements OnChanges, OnDestroy { } } - /** - * Check if submission form is loading - */ - isLoading(): Observable { - return this.loading; - } - /** * Check if submission form is loading */ diff --git a/src/app/submission/objects/submission-objects.effects.ts b/src/app/submission/objects/submission-objects.effects.ts index ef1610794c..f4880fb589 100644 --- a/src/app/submission/objects/submission-objects.effects.ts +++ b/src/app/submission/objects/submission-objects.effects.ts @@ -97,11 +97,13 @@ export class SubmissionObjectEffects { const sectionId = selfLink.substr(selfLink.lastIndexOf('/') + 1); const config = sectionDefinition._links.config ? (sectionDefinition._links.config.href || sectionDefinition._links.config) : ''; // A section is enabled if it is mandatory or contains data in its section payload - // except for detect duplicate steps which will be hidden with no data unless overridden in config, even if mandatory - const enabled = (sectionDefinition.mandatory && (sectionDefinition.sectionType !== SectionsType.Duplicates)) - || (isNotEmpty(action.payload.sections) && action.payload.sections.hasOwnProperty(sectionId) - && (sectionDefinition.sectionType === SectionsType.Duplicates && (alwaysDisplayDuplicates() || isNotEmpty((action.payload.sections[sectionId] as WorkspaceitemSectionDuplicatesObject).potentialDuplicates))) - ); + let enabled = (sectionDefinition.mandatory || (isNotEmpty(action.payload.sections) && action.payload.sections.hasOwnProperty(sectionId))); + + // Duplicates will ignore mandatory and display only when "always display" is set or there is data to show + if (sectionDefinition.sectionType === SectionsType.Duplicates) { + enabled = (alwaysDisplayDuplicates() || isNotEmpty((action.payload.sections[sectionId] as WorkspaceitemSectionDuplicatesObject).potentialDuplicates)); + } + let sectionData; if (sectionDefinition.sectionType !== SectionsType.SubmissionForm) { sectionData = (isNotUndefined(action.payload.sections) && isNotUndefined(action.payload.sections[sectionId])) ? action.payload.sections[sectionId] : Object.create(null); 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 a8d6ef3262..1197df6332 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 @@ -119,28 +119,26 @@ - - -
    - + +
    + +
    +
    +
    + {{ 'submission.sections.ccLicense.link' | translate }}
    -
    -
    - {{ 'submission.sections.ccLicense.link' | translate }} -
    - - {{ licenseLink }} - -
    -
    - - {{ 'submission.sections.ccLicense.confirmation' | translate }} -
    + + {{ licenseLink }} + +
    +
    + + {{ 'submission.sections.ccLicense.confirmation' | translate }}
    - +
    diff --git a/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.ts b/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.ts index a633e640ab..91d07f1aa3 100644 --- a/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.ts +++ b/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.ts @@ -7,6 +7,9 @@ import { ChangeDetectorRef, Component, Inject, + OnChanges, + OnInit, + SimpleChanges, } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { @@ -48,7 +51,11 @@ import { SubmissionCcLicenseDataService } from '../../../core/submission/submiss import { SubmissionCcLicenseUrlDataService } from '../../../core/submission/submission-cc-license-url-data.service'; import { BtnDisabledDirective } from '../../../shared/btn-disabled.directive'; import { DsSelectComponent } from '../../../shared/ds-select/ds-select.component'; -import { isNotEmpty } from '../../../shared/empty.util'; +import { + hasNoValue, + hasValue, + isNotEmpty, +} from '../../../shared/empty.util'; import { ThemedLoadingComponent } from '../../../shared/loading/themed-loading.component'; import { VarDirective } from '../../../shared/utils/var.directive'; import { SectionModelComponent } from '../models/section.model'; @@ -78,7 +85,7 @@ import { SectionsType } from '../sections-type'; ], standalone: true, }) -export class SubmissionSectionCcLicensesComponent extends SectionModelComponent { +export class SubmissionSectionCcLicensesComponent extends SectionModelComponent implements OnChanges, OnInit { /** * The form id @@ -154,6 +161,8 @@ export class SubmissionSectionCcLicensesComponent extends SectionModelComponent return this.data.accepted; } + ccLicenseLink$: Observable; + constructor( protected modalService: NgbModal, protected sectionService: SectionsService, @@ -173,6 +182,19 @@ export class SubmissionSectionCcLicensesComponent extends SectionModelComponent ); } + ngOnInit(): void { + super.ngOnInit(); + if (hasNoValue(this.ccLicenseLink$)) { + this.ccLicenseLink$ = this.getCcLicenseLink$(); + } + } + + ngOnChanges(changes: SimpleChanges): void { + if (hasValue(changes.sectionData) || hasValue(changes.submissionCcLicenses)) { + this.ccLicenseLink$ = this.getCcLicenseLink$(); + } + } + /** * The data of this section. */ @@ -197,6 +219,7 @@ export class SubmissionSectionCcLicensesComponent extends SectionModelComponent }, uri: undefined, }); + this.ccLicenseLink$ = this.getCcLicenseLink$(); } /** @@ -228,6 +251,7 @@ export class SubmissionSectionCcLicensesComponent extends SectionModelComponent }, accepted: false, }); + this.ccLicenseLink$ = this.getCcLicenseLink$(); } /** diff --git a/src/app/submission/sections/form/section-form-operations.service.ts b/src/app/submission/sections/form/section-form-operations.service.ts index 25c2ae303d..6ef2fc51b8 100644 --- a/src/app/submission/sections/form/section-form-operations.service.ts +++ b/src/app/submission/sections/form/section-form-operations.service.ts @@ -412,7 +412,7 @@ export class SectionFormOperationsService { ); } } - } else if (!value.hasValue()) { + } else if (isNotEmpty(value) && !value.hasValue()) { // New value is empty, so dispatch a remove operation if (this.getArrayIndexFromEvent(event) === 0) { this.operationsBuilder.remove(pathCombiner.getPath(segmentedPath)); diff --git a/src/app/submission/sections/identifiers/section-identifiers.component.html b/src/app/submission/sections/identifiers/section-identifiers.component.html index dd0b5d2930..caf249e5b6 100644 --- a/src/app/submission/sections/identifiers/section-identifiers.component.html +++ b/src/app/submission/sections/identifiers/section-identifiers.component.html @@ -3,18 +3,17 @@ Template for the identifiers submission section component @author Kim Shepherd --> - - -
    - {{'submission.sections.identifiers.info' | translate}} -
      - - -
    • {{'submission.sections.identifiers.' + identifier.identifierType + '_label' | translate}} - {{identifier.value}}
    • + +
      + {{ 'submission.sections.identifiers.info' | translate }} +
        + + +
      • {{ 'submission.sections.identifiers.' + identifier.identifierType + '_label' | translate }} + {{ identifier.value }} +
      • +
        - -
      -
      -
      +
    +
    diff --git a/src/app/submission/sections/identifiers/section-identifiers.component.ts b/src/app/submission/sections/identifiers/section-identifiers.component.ts index e297c795df..759b65c641 100644 --- a/src/app/submission/sections/identifiers/section-identifiers.component.ts +++ b/src/app/submission/sections/identifiers/section-identifiers.component.ts @@ -16,11 +16,9 @@ import { import { Observable, of as observableOf, - Subscription, } from 'rxjs'; import { WorkspaceitemSectionIdentifiersObject } from '../../../core/submission/models/workspaceitem-section-identifiers.model'; -import { AlertType } from '../../../shared/alert/alert-type'; import { VarDirective } from '../../../shared/utils/var.directive'; import { SubmissionService } from '../../submission.service'; import { SectionModelComponent } from '../models/section.model'; @@ -49,11 +47,6 @@ import { SectionsService } from '../sections.service'; }) export class SubmissionSectionIdentifiersComponent extends SectionModelComponent implements OnInit { - /** - * The Alert categories. - * @type {AlertType} - */ - public AlertTypeEnum = AlertType; /** * Variable to track if the section is loading. @@ -65,14 +58,7 @@ export class SubmissionSectionIdentifiersComponent extends SectionModelComponent * Observable identifierData subject * @type {Observable} */ - public identifierData$: Observable = new Observable(); - - /** - * Array to track all subscriptions and unsubscribe them onDestroy - * @type {Array} - */ - protected subs: Subscription[] = []; - public subbedIdentifierData: WorkspaceitemSectionIdentifiersObject; + public identifierData$: Observable; /** * Initialize instance variables. @@ -93,10 +79,6 @@ export class SubmissionSectionIdentifiersComponent extends SectionModelComponent super(injectedCollectionId, injectedSectionData, injectedSubmissionId); } - ngOnInit(): void { - super.ngOnInit(); - } - /** * Initialize all instance variables and retrieve configuration. */ @@ -105,13 +87,6 @@ export class SubmissionSectionIdentifiersComponent extends SectionModelComponent this.identifierData$ = this.getIdentifierData(); } - /** - * Check if identifier section has read-only visibility - */ - isReadOnly(): boolean { - return true; - } - /** * Unsubscribe from all subscriptions, if needed. */ diff --git a/src/app/thumbnail/thumbnail.component.html b/src/app/thumbnail/thumbnail.component.html index e151684a01..c0f3ad91c0 100644 --- a/src/app/thumbnail/thumbnail.component.html +++ b/src/app/thumbnail/thumbnail.component.html @@ -1,15 +1,15 @@
    -
    +
    - - -
    + + +
    {{ placeholder | translate }} diff --git a/src/app/thumbnail/thumbnail.component.spec.ts b/src/app/thumbnail/thumbnail.component.spec.ts index f81089e57c..38eceb8427 100644 --- a/src/app/thumbnail/thumbnail.component.spec.ts +++ b/src/app/thumbnail/thumbnail.component.spec.ts @@ -100,31 +100,31 @@ describe('ThumbnailComponent', () => { describe('loading', () => { it('should start out with isLoading$ true', () => { - expect(comp.isLoading).toBeTrue(); + expect(comp.isLoading$.getValue()).toBeTrue(); }); it('should set isLoading$ to false once an image is successfully loaded', () => { comp.setSrc('http://bit.stream'); fixture.debugElement.query(By.css('img.thumbnail-content')).triggerEventHandler('load', new Event('load')); - expect(comp.isLoading).toBeFalse(); + expect(comp.isLoading$.getValue()).toBeFalse(); }); it('should set isLoading$ to false once the src is set to null', () => { comp.setSrc(null); - expect(comp.isLoading).toBeFalse(); + expect(comp.isLoading$.getValue()).toBeFalse(); }); it('should show a loading animation while isLoading$ is true', () => { expect(de.query(By.css('ds-loading'))).toBeTruthy(); - comp.isLoading = false; + comp.isLoading$.next(false); fixture.detectChanges(); expect(fixture.debugElement.query(By.css('ds-loading'))).toBeFalsy(); }); describe('with a thumbnail image', () => { beforeEach(() => { - comp.src = 'https://bit.stream'; + comp.src$.next('https://bit.stream'); fixture.detectChanges(); }); @@ -133,7 +133,7 @@ describe('ThumbnailComponent', () => { expect(img).toBeTruthy(); expect(img.classes['d-none']).toBeTrue(); - comp.isLoading = false; + comp.isLoading$.next(false); fixture.detectChanges(); img = fixture.debugElement.query(By.css('img.thumbnail-content')); expect(img).toBeTruthy(); @@ -144,14 +144,14 @@ describe('ThumbnailComponent', () => { describe('without a thumbnail image', () => { beforeEach(() => { - comp.src = null; + comp.src$.next(null); fixture.detectChanges(); }); it('should only show the HTML placeholder once done loading', () => { expect(fixture.debugElement.query(By.css('div.thumbnail-placeholder'))).toBeFalsy(); - comp.isLoading = false; + comp.isLoading$.next(false); fixture.detectChanges(); expect(fixture.debugElement.query(By.css('div.thumbnail-placeholder'))).toBeTruthy(); }); @@ -247,14 +247,14 @@ describe('ThumbnailComponent', () => { describe('fallback', () => { describe('if there is a default image', () => { it('should display the default image', () => { - comp.src = 'http://bit.stream'; + comp.src$.next('http://bit.stream'); comp.defaultImage = 'http://default.img'; comp.errorHandler(); - expect(comp.src).toBe(comp.defaultImage); + expect(comp.src$.getValue()).toBe(comp.defaultImage); }); it('should include the alt text', () => { - comp.src = 'http://bit.stream'; + comp.src$.next('http://bit.stream'); comp.defaultImage = 'http://default.img'; comp.errorHandler(); @@ -266,10 +266,10 @@ describe('ThumbnailComponent', () => { describe('if there is no default image', () => { it('should display the HTML placeholder', () => { - comp.src = 'http://default.img'; + comp.src$.next('http://default.img'); comp.defaultImage = null; comp.errorHandler(); - expect(comp.src).toBe(null); + expect(comp.src$.getValue()).toBe(null); fixture.detectChanges(); const placeholder = fixture.debugElement.query(By.css('div.thumbnail-placeholder')).nativeElement; @@ -361,7 +361,7 @@ describe('ThumbnailComponent', () => { it('should show the default image', () => { comp.defaultImage = 'default/image.jpg'; comp.ngOnChanges({}); - expect(comp.src).toBe('default/image.jpg'); + expect(comp.src$.getValue()).toBe('default/image.jpg'); }); }); }); @@ -417,7 +417,7 @@ describe('ThumbnailComponent', () => { }); it('should start out with isLoading$ true', () => { - expect(comp.isLoading).toBeTrue(); + expect(comp.isLoading$.getValue()).toBeTrue(); expect(de.query(By.css('ds-loading'))).toBeTruthy(); }); diff --git a/src/app/thumbnail/thumbnail.component.ts b/src/app/thumbnail/thumbnail.component.ts index 7b22dde4cd..179af1dac0 100644 --- a/src/app/thumbnail/thumbnail.component.ts +++ b/src/app/thumbnail/thumbnail.component.ts @@ -11,7 +11,10 @@ import { SimpleChanges, } from '@angular/core'; import { TranslateModule } from '@ngx-translate/core'; -import { of as observableOf } from 'rxjs'; +import { + BehaviorSubject, + of as observableOf, +} from 'rxjs'; import { switchMap } from 'rxjs/operators'; import { AuthService } from '../core/auth/auth.service'; @@ -55,7 +58,7 @@ export class ThumbnailComponent implements OnChanges { /** * The src attribute used in the template to render the image. */ - src: string = undefined; + src$: BehaviorSubject = new BehaviorSubject(undefined); retriedWithToken = false; @@ -78,7 +81,7 @@ export class ThumbnailComponent implements OnChanges { * Whether the thumbnail is currently loading * Start out as true to avoid flashing the alt text while a thumbnail is being loaded. */ - isLoading = true; + isLoading$: BehaviorSubject = new BehaviorSubject(true); constructor( @Inject(PLATFORM_ID) private platformID: any, @@ -134,7 +137,7 @@ export class ThumbnailComponent implements OnChanges { * Otherwise, fall back to the default image or a HTML placeholder */ errorHandler() { - const src = this.src; + const src = this.src$.getValue(); const thumbnail = this.bitstream; const thumbnailSrc = thumbnail?._links?.content?.href; @@ -186,9 +189,22 @@ export class ThumbnailComponent implements OnChanges { * @param src */ setSrc(src: string): void { - this.src = src; - if (src === null) { - this.isLoading = false; + // only update the src if it has changed (the parent component may fire the same one multiple times + if (this.src$.getValue() !== src) { + // every time the src changes we need to start the loading animation again, as it's possible + // that it is first set to null when the parent component initializes and then set to + // the actual value + // + // isLoading$ will be set to false by the error or success handler afterwards, except in the + // case where src is null, then we have to set it manually here (because those handlers won't + // trigger) + if (src !== null && this.isLoading$.getValue() === false) { + this.isLoading$.next(true); + } + this.src$.next(src); + if (src === null && this.isLoading$.getValue() === true) { + this.isLoading$.next(false); + } } } @@ -196,6 +212,6 @@ export class ThumbnailComponent implements OnChanges { * Stop the loading animation once the thumbnail is successfully loaded */ successHandler() { - this.isLoading = false; + this.isLoading$.next(false); } } diff --git a/src/app/workflowitems-edit-page/workflow-item-page.resolver.ts b/src/app/workflowitems-edit-page/workflow-item-page.resolver.ts index d0f49d5700..09aa91124b 100644 --- a/src/app/workflowitems-edit-page/workflow-item-page.resolver.ts +++ b/src/app/workflowitems-edit-page/workflow-item-page.resolver.ts @@ -9,8 +9,8 @@ import { Observable } from 'rxjs'; import { RemoteData } from '../core/data/remote-data'; import { getFirstCompletedRemoteData } from '../core/shared/operators'; import { WorkflowItem } from '../core/submission/models/workflowitem.model'; +import { SUBMISSION_LINKS_TO_FOLLOW } from '../core/submission/resolver/submission-links-to-follow'; import { WorkflowItemDataService } from '../core/submission/workflowitem-data.service'; -import { followLink } from '../shared/utils/follow-link-config.model'; export const workflowItemPageResolver: ResolveFn> = ( route: ActivatedRouteSnapshot, @@ -21,7 +21,7 @@ export const workflowItemPageResolver: ResolveFn> = ( route.params.id, true, false, - followLink('item'), + ...SUBMISSION_LINKS_TO_FOLLOW, ).pipe( getFirstCompletedRemoteData(), ); diff --git a/src/app/workspaceitems-edit-page/workspace-item-page.resolver.ts b/src/app/workspaceitems-edit-page/workspace-item-page.resolver.ts index 1d3b8e946d..e8d781b948 100644 --- a/src/app/workspaceitems-edit-page/workspace-item-page.resolver.ts +++ b/src/app/workspaceitems-edit-page/workspace-item-page.resolver.ts @@ -9,8 +9,8 @@ import { Observable } from 'rxjs'; import { RemoteData } from '../core/data/remote-data'; import { getFirstCompletedRemoteData } from '../core/shared/operators'; import { WorkspaceItem } from '../core/submission/models/workspaceitem.model'; +import { SUBMISSION_LINKS_TO_FOLLOW } from '../core/submission/resolver/submission-links-to-follow'; import { WorkspaceitemDataService } from '../core/submission/workspaceitem-data.service'; -import { followLink } from '../shared/utils/follow-link-config.model'; /** * Method for resolving a workflow item based on the parameters in the current route @@ -28,7 +28,7 @@ export const workspaceItemPageResolver: ResolveFn> = ( return workspaceItemService.findById(route.params.id, true, false, - followLink('item'), + ...SUBMISSION_LINKS_TO_FOLLOW, ).pipe( getFirstCompletedRemoteData(), ); diff --git a/src/assets/i18n/de.json5 b/src/assets/i18n/de.json5 index 9fd318e5e5..abf18f3263 100644 --- a/src/assets/i18n/de.json5 +++ b/src/assets/i18n/de.json5 @@ -6,10 +6,8 @@ // "401.link.home-page": "Take me to the home page", "401.link.home-page": "Zur Startseite", - // "401.unauthorized": "unauthorized", - "401.unauthorized": "unautorisiert", - - + // "401.unauthorized": "Unauthorized", + "401.unauthorized": "Unautorisiert", // "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": "Sie sind nicht berechtigt, auf diese Seite zuzugreifen. Über den Button unten auf der Seite gelangen Sie zurück zur Startseite.", @@ -17,10 +15,17 @@ // "403.link.home-page": "Take me to the home page", "403.link.home-page": "Zur Startseite", - // "403.forbidden": "forbidden", - "403.forbidden": "verboten", + // "403.forbidden": "Forbidden", + "403.forbidden": "Verboten", + // "500.page-internal-server-error": "Service unavailable", + "500.page-internal-server-error": "Dienst nicht verfügbar", + // "500.help": "The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.", + "500.help": "Der Server ist aufgrund von Wartungsarbeiten oder Kapazitätsproblemen vorübergehend nicht in der Lage, Ihre Anfrage zu bearbeiten. Bitte versuchen Sie es später noch einmal.", + + // "500.link.home-page": "Take me to the home page", + "500.link.home-page": "Zur Startseite", // "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": "Die Seite konnte nicht gefunden werden. Eventuell wurde sie verschoben oder gelöscht. Über den Button unten auf der Seite gelangen Sie zurück zur Startseite.", @@ -28,29 +33,38 @@ // "404.link.home-page": "Take me to the home page", "404.link.home-page": "Zur Startseite", - // "404.page-not-found": "page not found", + // "404.page-not-found": "Page not found", "404.page-not-found": "Seite nicht gefunden", - // "admin.access-control.epeople.breadcrumbs": "EPeople", - "admin.access-control.epeople.breadcrumbs": "Personen suchen", + // "error-page.description.401": "Unauthorized", + "error-page.description.401": "Nicht autorisiert", - // "admin.access-control.epeople.search.placeholder": "Search people...", - "admin.access-control.epeople.search.placeholder": "Person suchen", + // "error-page.description.403": "Forbidden", + "error-page.description.403": "Verboten", - // "admin.access-control.groups.addGroup.breadcrumbs": "New Group", - "admin.access-control.groups.addGroup.breadcrumbs": "Neue Gruppe", + // "error-page.description.500": "Service unavailable", + "error-page.description.500": "Dienst nicht verfügbar", - // "admin.access-control.groups.breadcrumbs": "Groups", - "admin.access-control.groups.breadcrumbs": "Gruppe", + // "error-page.description.404": "Page not found", + "error-page.description.404": "Seite nicht gefunden", - // "admin.access-control.groups.form.members-list.table.email": "Email", - "admin.access-control.groups.form.members-list.table.email": "E-Mail-Adresse", + // "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": "Bei der Anmeldung über ORCID ist ein Fehler aufgetreten. Stellen Sie sicher, dass Sie die E-Mail-Adresse Ihres ORCID-Kontos für DSpace freigegeben haben. Wenn der Fehler weiterhin besteht, wenden Sie sich an den Administrator", - // "admin.access-control.groups.search.placeholder": "Search groups...", - "admin.access-control.groups.search.placeholder": "Gruppe suchen", + // "access-status.embargo.listelement.badge": "Embargo", + "access-status.embargo.listelement.badge": "Embargo", - // "admin.access-control.groups.singleGroup.breadcrumbs": "Edit Group", - "admin.access-control.groups.singleGroup.breadcrumbs": "Gruppe bearbeiten", + // "access-status.metadata.only.listelement.badge": "Metadata only", + "access-status.metadata.only.listelement.badge": "Nur Metadaten", + + // "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": "Eingeschränkt", + + // "access-status.unknown.listelement.badge": "Unknown", + "access-status.unknown.listelement.badge": "Unbekannt", // "admin.curation-tasks.breadcrumbs": "System curation tasks", "admin.curation-tasks.breadcrumbs": "Wartungsarbeiten", @@ -73,7 +87,7 @@ // "admin.registries.bitstream-formats.create.failure.head": "Failure", "admin.registries.bitstream-formats.create.failure.head": "Aktion fehlgeschlagen", - // "admin.registries.bitstream-formats.create.head": "Create Bitstream format", + // "admin.registries.bitstream-formats.create.head": "Create bitstream format", "admin.registries.bitstream-formats.create.head": "Neues Dateiformat anlegen", // "admin.registries.bitstream-formats.create.new": "Add a new bitstream format", @@ -177,10 +191,14 @@ // "admin.registries.bitstream-formats.table.name": "Name", "admin.registries.bitstream-formats.table.name": "Name", - // TODO New key - Add a translation + + // "admin.registries.bitstream-formats.table.selected": "Selected bitstream formats", + "admin.registries.bitstream-formats.table.selected": "Ausgewählte Dateiformate", + + // "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": "Zurück", // "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Known", @@ -198,7 +216,11 @@ // "admin.registries.bitstream-formats.title": "Bitstream Format Registry", "admin.registries.bitstream-formats.title": "Referenzliste der Dateiformate", + // "admin.registries.bitstream-formats.select": "Select", + "admin.registries.bitstream-formats.select": "Auswählen", + // "admin.registries.bitstream-formats.deselect": "Deselect", + "admin.registries.bitstream-formats.deselect": "Auswahl zurücknehmen", // "admin.registries.metadata.breadcrumbs": "Metadata registry", "admin.registries.metadata.breadcrumbs": "Referenzliste der Metadaten", @@ -224,9 +246,18 @@ // "admin.registries.metadata.schemas.no-items": "No metadata schemas to show.", "admin.registries.metadata.schemas.no-items": "Es gibt keine Metadatenschemata in der Referenzliste.", + // "admin.registries.metadata.schemas.select": "Select", + "admin.registries.metadata.schemas.select": "Auswählen", + + // "admin.registries.metadata.schemas.deselect": "Deselect", + "admin.registries.metadata.schemas.deselect": "Auswahl zurücknehmen", + // "admin.registries.metadata.schemas.table.delete": "Delete selected", "admin.registries.metadata.schemas.table.delete": "Auswahl löschen", + // "admin.registries.metadata.schemas.table.selected": "Selected schemas", + "admin.registries.metadata.schemas.table.selected": "Ausgewählte Schemata", + // "admin.registries.metadata.schemas.table.id": "ID", "admin.registries.metadata.schemas.table.id": "ID", @@ -239,14 +270,18 @@ // "admin.registries.metadata.title": "Metadata Registry", "admin.registries.metadata.title": "Metadatenreferenzliste", - - // "admin.registries.schema.breadcrumbs": "Metadata schema", "admin.registries.schema.breadcrumbs": "Metadatenschema", // "admin.registries.schema.description": "This is the metadata schema for \"{{namespace}}\".", "admin.registries.schema.description": "Dies ist das Metadatenschema für den Namensraum \"{{namespace}}\".", + // "admin.registries.schema.fields.select": "Select", + "admin.registries.schema.fields.select": "Auswählen", + + // "admin.registries.schema.fields.deselect": "Deselect", + "admin.registries.schema.fields.deselect": "Auswahl zurücknehmen", + // "admin.registries.schema.fields.head": "Schema metadata fields", "admin.registries.schema.fields.head": "Im Schema enthaltene Metadatenfelder", @@ -258,7 +293,11 @@ // "admin.registries.schema.fields.table.field": "Field", "admin.registries.schema.fields.table.field": "Feld", - // TODO New key - Add a translation + + // "admin.registries.schema.fields.table.selected": "Selected metadata fields", + "admin.registries.schema.fields.table.selected": "Ausgewählte Metadatenfelder", + + // "admin.registries.schema.fields.table.id": "ID", "admin.registries.schema.fields.table.id": "ID", // "admin.registries.schema.fields.table.scopenote": "Scope Note", @@ -274,7 +313,7 @@ "admin.registries.schema.form.element": "Element", // "admin.registries.schema.form.qualifier": "Qualifier", - "admin.registries.schema.form.qualifier": "Qualifizierer", + "admin.registries.schema.form.qualifier": "Qualifier", // "admin.registries.schema.form.scopenote": "Scope Note", "admin.registries.schema.form.scopenote": "Geltungs- bzw. Gültigkeitsbereich", @@ -312,13 +351,35 @@ // "admin.registries.schema.notification.success": "Success", "admin.registries.schema.notification.success": "Erfolg", - // "admin.registries.schema.return": "Return", + // "admin.registries.schema.return": "Back", "admin.registries.schema.return": "Zurück", // "admin.registries.schema.title": "Metadata Schema Registry", "admin.registries.schema.title": "Referenzliste der Metadatenschemata", + // "admin.access-control.bulk-access.breadcrumbs": "Bulk Access Management", + "admin.access-control.bulk-access.breadcrumbs": "Bulk Access Management", + // "administrativeBulkAccess.search.results.head": "Search Results", + "administrativeBulkAccess.search.results.head": "Suchergebnisse", + + // "admin.access-control.bulk-access": "Bulk Access Management", + "admin.access-control.bulk-access": "Bulk Access Management", + + // "admin.access-control.bulk-access.title": "Bulk Access Management", + "admin.access-control.bulk-access.title": "Bulk Access Management", + + // "admin.access-control.bulk-access-browse.header": "Step 1: Select Objects", + "admin.access-control.bulk-access-browse.header": "Schritt 1: Objekte auswählen", + + // "admin.access-control.bulk-access-browse.search.header": "Search", + "admin.access-control.bulk-access-browse.search.header": "Suche", + + // "admin.access-control.bulk-access-browse.selected.header": "Current selection({{number}})", + "admin.access-control.bulk-access-browse.selected.header": "Aktuelle Auswahl({{number}})", + + // "admin.access-control.bulk-access-settings.header": "Step 2: Operation to Perform", + "admin.access-control.bulk-access-settings.header": "Schritt 2: Auszuführende Operation", // "admin.access-control.epeople.actions.delete": "Delete EPerson", "admin.access-control.epeople.actions.delete": "Person löschen", @@ -332,9 +393,24 @@ // "admin.access-control.epeople.actions.stop-impersonating": "Stop impersonating EPerson", "admin.access-control.epeople.actions.stop-impersonating": "Von Person ausloggen", + // "admin.access-control.epeople.breadcrumbs": "EPeople", + "admin.access-control.epeople.breadcrumbs": "Personen suchen", + // "admin.access-control.epeople.title": "EPeople", "admin.access-control.epeople.title": "Personen", + // "admin.access-control.epeople.edit.breadcrumbs": "New EPerson", + "admin.access-control.epeople.edit.breadcrumbs": "Neue EPerson", + + // "admin.access-control.epeople.edit.title": "New EPerson", + "admin.access-control.epeople.edit.title": "Neue EPerson", + + // "admin.access-control.epeople.add.breadcrumbs": "Add EPerson", + "admin.access-control.epeople.add.breadcrumbs": "EPerson hinzufügen", + + // "admin.access-control.epeople.add.title": "Add EPerson", + "admin.access-control.epeople.add.title": "EPerson hinzufügen", + // "admin.access-control.epeople.head": "EPeople", "admin.access-control.epeople.head": "Personen", @@ -347,12 +423,15 @@ // "admin.access-control.epeople.search.scope.metadata": "Metadata", "admin.access-control.epeople.search.scope.metadata": "Metadaten", - // "admin.access-control.epeople.search.scope.email": "E-mail (exact)", + // "admin.access-control.epeople.search.scope.email": "Email (exact)", "admin.access-control.epeople.search.scope.email": "E-Mail (exakt)", // "admin.access-control.epeople.search.button": "Search", "admin.access-control.epeople.search.button": "Suche", + // "admin.access-control.epeople.search.placeholder": "Search people...", + "admin.access-control.epeople.search.placeholder": "Person suchen", + // "admin.access-control.epeople.button.add": "Add EPerson", "admin.access-control.epeople.button.add": "Person hinzufügen", @@ -362,7 +441,7 @@ // "admin.access-control.epeople.table.name": "Name", "admin.access-control.epeople.table.name": "Name", - // "admin.access-control.epeople.table.email": "E-mail (exact)", + // "admin.access-control.epeople.table.email": "Email (exact)", "admin.access-control.epeople.table.email": "E-Mail (exakt)", // "admin.access-control.epeople.table.edit": "Edit", @@ -371,6 +450,9 @@ // "admin.access-control.epeople.table.edit.buttons.edit": "Edit \"{{name}}\"", "admin.access-control.epeople.table.edit.buttons.edit": "\"{{name}}\" bearbeiten", + // "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": "Sie sind nicht berechtigt, diese Gruppe zu bearbeiten", + // "admin.access-control.epeople.table.edit.buttons.remove": "Delete \"{{name}}\"", "admin.access-control.epeople.table.edit.buttons.remove": "\"{{name}}\" löschen", @@ -389,10 +471,10 @@ // "admin.access-control.epeople.form.lastName": "Last name", "admin.access-control.epeople.form.lastName": "Nachname", - // "admin.access-control.epeople.form.email": "E-mail", - "admin.access-control.epeople.form.email": "E-Mail-Adresse", + // "admin.access-control.epeople.form.email": "Email", + "admin.access-control.epeople.form.email": "E-Mail", - // "admin.access-control.epeople.form.emailHint": "Must be valid e-mail address", + // "admin.access-control.epeople.form.emailHint": "Must be a valid email address", "admin.access-control.epeople.form.emailHint": "Bitte geben Sie eine gültige E-Mail-Adresse an.", // "admin.access-control.epeople.form.canLogIn": "Can log in", @@ -401,6 +483,9 @@ // "admin.access-control.epeople.form.requireCertificate": "Requires certificate", "admin.access-control.epeople.form.requireCertificate": "Es wird ein Zertifikat benötigt.", + // "admin.access-control.epeople.form.return": "Back", + "admin.access-control.epeople.form.return": "Zurück", + // "admin.access-control.epeople.form.notification.created.success": "Successfully created EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.created.success": "Die Person \"{{name}}\" wurde erstellt.", @@ -434,29 +519,39 @@ // "admin.access-control.epeople.form.table.name": "Name", "admin.access-control.epeople.form.table.name": "Name", + // "admin.access-control.epeople.form.table.collectionOrCommunity": "Collection/Community", + "admin.access-control.epeople.form.table.collectionOrCommunity": "Sammlung/Bereich", + // "admin.access-control.epeople.form.memberOfNoGroups": "This EPerson is not a member of any groups", "admin.access-control.epeople.form.memberOfNoGroups": "Diese Person ist kein Mitglied einer Gruppe.", // "admin.access-control.epeople.form.goToGroups": "Add to groups", "admin.access-control.epeople.form.goToGroups": "Zu Gruppen hinzufügen", - // "admin.access-control.epeople.notification.deleted.failure": "Failed to delete EPerson: \"{{name}}\"", - "admin.access-control.epeople.notification.deleted.failure": "Person: \"{{name}}\" konnte nicht gelöscht werden", + // "admin.access-control.epeople.notification.deleted.failure": "Error occurred when trying to delete EPerson with id \"{{id}}\" with code: \"{{statusCode}}\" and message: \"{{restResponse.errorMessage}}\"", + "admin.access-control.epeople.notification.deleted.failure": "Beim Versuch, eine EPerson mit der ID \"{{id}}\" mit dem Code: \"{{statusCode}}\" und der Nachricht: \"{{restResponse.errorMessage}}\" zu löschen, ist ein Fehler aufgetreten.", // "admin.access-control.epeople.notification.deleted.success": "Successfully deleted EPerson: \"{{name}}\"", "admin.access-control.epeople.notification.deleted.success": "Person: \"{{name}}\" erfolgreich gelöscht", - - // "admin.access-control.groups.title": "Groups", "admin.access-control.groups.title": "Gruppen", + // "admin.access-control.groups.breadcrumbs": "Groups", + "admin.access-control.groups.breadcrumbs": "Gruppe", + + // "admin.access-control.groups.singleGroup.breadcrumbs": "Edit Group", + "admin.access-control.groups.singleGroup.breadcrumbs": "Gruppe bearbeiten", + // "admin.access-control.groups.title.singleGroup": "Edit Group", "admin.access-control.groups.title.singleGroup": "Gruppe bearbeiten", // "admin.access-control.groups.title.addGroup": "New Group", "admin.access-control.groups.title.addGroup": "Neue Gruppe", + // "admin.access-control.groups.addGroup.breadcrumbs": "New Group", + "admin.access-control.groups.addGroup.breadcrumbs": "Neue Gruppe", + // "admin.access-control.groups.head": "Groups", "admin.access-control.groups.head": "Gruppen", @@ -472,12 +567,18 @@ // "admin.access-control.groups.search.button": "Search", "admin.access-control.groups.search.button": "Suche", + // "admin.access-control.groups.search.placeholder": "Search groups...", + "admin.access-control.groups.search.placeholder": "Gruppe suchen", + // "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": "Name", + // "admin.access-control.groups.table.collectionOrCommunity": "Collection/Community", + "admin.access-control.groups.table.collectionOrCommunity": "Sammlung/Bereich", + // "admin.access-control.groups.table.members": "Members", "admin.access-control.groups.table.members": "Mitglieder", @@ -502,8 +603,6 @@ // "admin.access-control.groups.notification.deleted.failure.content": "Cause: \"{{cause}}\"", "admin.access-control.groups.notification.deleted.failure.content": "Ursache: \"{{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": "Diese Gruppe ist permanent, das heißt sie kann nicht bearbeitet oder gelöscht werden. Sie können jedoch über diese Seite Gruppenmitglieder hinzufügen und entfernen.", @@ -519,6 +618,9 @@ // "admin.access-control.groups.form.groupName": "Group name", "admin.access-control.groups.form.groupName": "Gruppenname", + // "admin.access-control.groups.form.groupCommunity": "Community or Collection", + "admin.access-control.groups.form.groupCommunity": "Bereich oder Sammlung", + // "admin.access-control.groups.form.groupDescription": "Description", "admin.access-control.groups.form.groupDescription": "Beschreibung", @@ -576,12 +678,6 @@ // "admin.access-control.groups.form.members-list.headMembers": "Current Members", "admin.access-control.groups.form.members-list.headMembers": "Derzeitige Mitglieder", - // "admin.access-control.groups.form.members-list.search.scope.metadata": "Metadata", - "admin.access-control.groups.form.members-list.search.scope.metadata": "Metadaten", - - // "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 (exakt)", - // "admin.access-control.groups.form.members-list.search.button": "Search", "admin.access-control.groups.form.members-list.search.button": "Suche", @@ -591,6 +687,15 @@ // "admin.access-control.groups.form.members-list.table.name": "Name", "admin.access-control.groups.form.members-list.table.name": "Name", + // "admin.access-control.groups.form.members-list.table.identity": "Identity", + "admin.access-control.groups.form.members-list.table.identity": "Identität", + + // "admin.access-control.groups.form.members-list.table.email": "Email", + "admin.access-control.groups.form.members-list.table.email": "E-Mail-Adresse", + + // "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": "Entfernen / Hinzufügen", @@ -645,6 +750,9 @@ // "admin.access-control.groups.form.subgroups-list.table.name": "Name", "admin.access-control.groups.form.subgroups-list.table.name": "Name", + // "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Collection/Community", + "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Sammlung/Bereich", + // "admin.access-control.groups.form.subgroups-list.table.edit": "Remove / Add", "admin.access-control.groups.form.subgroups-list.table.edit": "Entfernen / Hinzufügen", @@ -654,9 +762,6 @@ // "admin.access-control.groups.form.subgroups-list.table.edit.buttons.add": "Add subgroup with name \"{{name}}\"", "admin.access-control.groups.form.subgroups-list.table.edit.buttons.add": "Untergruppe mit Namen \"{{name}}\" hinzufügen", - // "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Current group", - "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Derzeitige Gruppe", - // "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup": "Successfully added subgroup: \"{{name}}\"", "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup": "Untergruppe: \"{{name}}\" erfolgreich hinzugefügt", @@ -681,405 +786,331 @@ // "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": "Die Gruppe hat noch keine Untergruppen.", - // "admin.access-control.groups.form.return": "Return to groups", - "admin.access-control.groups.form.return": "Zurück zu den Gruppen", + // "admin.access-control.groups.form.return": "Back", + "admin.access-control.groups.form.return": "Zurück", - //"admin.reports.collections.title": "Collection Filter Report", - // TODO New key - Add a translation - "admin.reports.collections.title": "Collection Filter Report", + // "admin.quality-assurance.breadcrumbs": "Quality Assurance", + "admin.quality-assurance.breadcrumbs": "Qualitätssicherung", - //"admin.reports.collections.breadcrumbs": "Collection Filter Report", - // TODO New key - Add a translation - "admin.reports.collections.breadcrumbs": "Collection Filter Report", + // "admin.notifications.event.breadcrumbs": "Quality Assurance Suggestions", + "admin.notifications.event.breadcrumbs": "Vorschläge zur Qualitätssicherung", - //"admin.reports.collections.head": "Collection Filter Report", - // TODO New key - Add a translation - "admin.reports.collections.head": "Collection Filter Report", + // "admin.notifications.event.page.title": "Quality Assurance Suggestions", + "admin.notifications.event.page.title": "Vorschläge zur Qualitätssicherung", - //"admin.reports.button.show-collections": "Show Collections", - // TODO New key - Add a translation - "admin.reports.button.show-collections": "Show Collections", + // "admin.quality-assurance.page.title": "Quality Assurance", + "admin.quality-assurance.page.title": "Qualitätssicherung", - //"admin.reports.collections.collections-report": "Collection Report", - // TODO New key - Add a translation - "admin.reports.collections.collections-report": "Collection Report", + // "admin.notifications.source.breadcrumbs": "Quality Assurance", + "admin.notifications.source.breadcrumbs": "Qualitätssicherung", - //"admin.reports.collections.item-results": "Item Results", - // TODO New key - Add a translation - "admin.reports.collections.item-results": "Item Results", + // "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": "Auf dieser Seite können Sie die Eigenschaften und Mitglieder einer Gruppe ändern. Im obersten Abschnitt können Sie den Gruppennamen und die Beschreibung bearbeiten, es sei denn, es handelt sich um eine Administratorengruppe für eine Sammlung oder einen Bereich; in diesem Fall werden der Gruppenname und die Beschreibung automatisch generiert und können nicht bearbeitet werden. In den folgenden Abschnitten können Sie die Gruppenmitgliedschaft bearbeiten. Weitere Informationen finden Sie [im Wiki](https://wiki.lyrasis.org/display/DSDOC7x/Create+or+manage+a+user+group).", - //"admin.reports.collections.community": "Community", - // TODO New key - Add a translation - "admin.reports.collections.community": "Community", + // "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.", + "admin.access-control.groups.form.tooltip.editGroup.addEpeople": "Um eine EPerson zu dieser Gruppe hinzuzufügen oder aus ihr zu entfernen, klicken Sie entweder auf die Schaltfläche \"Alles durchsuchen\" oder verwenden Sie die Suchleiste unten, um nach Benutzer:innen zu suchen (verwenden Sie das Dropdown-Menü links von der Suchleiste, um auszuwählen, ob Sie nach Metadaten oder nach E-Mail suchen möchten). Klicken Sie dann auf das Plus-Symbol für jeden Nutzer, den Sie in der Liste unten hinzufügen möchten, oder auf das Mülleimer-Symbol für jeden Benutzer, den Sie entfernen möchten. Die Liste unten kann mehrere Seiten umfassen: Verwenden Sie die Seitensteuerungen unter der Liste, um zu den nächsten Seiten zu navigieren.", - //"admin.reports.collections.collection": "Collection", - // TODO New key - Add a translation - "admin.reports.collections.collection": "Collection", + // "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 groups. Then click the plus icon for each group you wish to add in the list below, or the trash can icon for each group you wish to remove. The list below may have several pages: use the page controls below the list to navigate to the next pages.", + "admin.access-control.groups.form.tooltip.editGroup.addSubgroups": "Um eine Untergruppe zu dieser Gruppe hinzuzufügen oder aus ihr zu entfernen, klicken Sie entweder auf die Schaltfläche \"Alles durchsuchen\", oder verwenden Sie die Suchleiste unten, um nach Gruppen zu suchen. Klicken Sie dann auf das Plus-Symbol für jede Gruppe, die Sie der Liste unten hinzufügen möchten, oder auf das Mülleimersymbol für jede Gruppe, die Sie entfernen möchten. Die Liste unten kann mehrere Seiten umfassen: Verwenden Sie die Seitensteuerungen unter der Liste, um zu den nächsten Seiten zu navigieren.", - //"admin.reports.collections.nb_items": "Nb. Items", - // TODO New key - Add a translation + // "admin.reports.collections.title": "Collection Filter Report", + "admin.reports.collections.title": "Sammlungsfilterbericht", + + // "admin.reports.collections.breadcrumbs": "Collection Filter Report", + "admin.reports.collections.breadcrumbs": "Sammlungsfilterbericht", + + // "admin.reports.collections.head": "Collection Filter Report", + "admin.reports.collections.head": "Sammlungsfilterbericht", + + // "admin.reports.button.show-collections": "Show Collections", + "admin.reports.button.show-collections": "Sammlungen anzeigen", + + // "admin.reports.collections.collections-report": "Collection Report", + "admin.reports.collections.collections-report": "Sammlungsbericht", + + // "admin.reports.collections.item-results": "Item Results", + "admin.reports.collections.item-results": "Item-Ergebnisse", + + // "admin.reports.collections.community": "Community", + "admin.reports.collections.community": "Bereich", + + // "admin.reports.collections.collection": "Collection", + "admin.reports.collections.collection": "Sammlung", + + // "admin.reports.collections.nb_items": "Nb. Items", "admin.reports.collections.nb_items": "Nb. Items", - //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", - // TODO New key - Add a translation - "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + "admin.reports.collections.match_all_selected_filters": "Übereinstimmung mit allen ausgewählten Filtern", - //"admin.reports.items.breadcrumbs": "Metadata Query Report", - // TODO New key - Add a translation - "admin.reports.items.breadcrumbs": "Metadata Query Report", + // "admin.reports.items.breadcrumbs": "Metadata Query Report", + "admin.reports.items.breadcrumbs": "Bericht über die Metadatenabfrage", - //"admin.reports.items.head": "Metadata Query Report", - // TODO New key - Add a translation - "admin.reports.items.head": "Metadata Query Report", + // "admin.reports.items.head": "Metadata Query Report", + "admin.reports.items.head": "Bericht über die Metadatenabfrage", - //"admin.reports.items.run": "Run Item Query", - // TODO New key - Add a translation - "admin.reports.items.run": "Run Item Query", + // "admin.reports.items.run": "Run Item Query", + "admin.reports.items.run": "Item-Abfrage ausführen", - //"admin.reports.items.section.collectionSelector": "Collection Selector", - // TODO New key - Add a translation - "admin.reports.items.section.collectionSelector": "Collection Selector", + // "admin.reports.items.section.collectionSelector": "Collection Selector", + "admin.reports.items.section.collectionSelector": "Sammlungs-Selektor", - //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", - // TODO New key - Add a translation - "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + "admin.reports.items.section.metadataFieldQueries": "Abfragen von Metadatenfeldern", - //"admin.reports.items.predefinedQueries": "Predefined Queries", - // TODO New key - Add a translation - "admin.reports.items.predefinedQueries": "Predefined Queries", + // "admin.reports.items.predefinedQueries": "Predefined Queries", + "admin.reports.items.predefinedQueries": "Vordefinierte Abfragen", - //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", - // TODO New key - Add a translation - "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + "admin.reports.items.section.limitPaginateQueries": "Abfragen begrenzen/paginieren", - //"admin.reports.items.limit": "Limit/", - // TODO New key - Add a translation + // "admin.reports.items.limit": "Limit/", "admin.reports.items.limit": "Limit/", - //"admin.reports.items.wholeRepo": "Whole Repository", - // TODO New key - Add a translation - "admin.reports.items.wholeRepo": "Whole Repository", + // "admin.reports.items.offset": "Offset", + "admin.reports.items.offset": "Offset", - //"admin.reports.items.anyField": "Any field", - // TODO New key - Add a translation - "admin.reports.items.anyField": "Any field", + // "admin.reports.items.wholeRepo": "Whole Repository", + "admin.reports.items.wholeRepo": "Gesamtes Repositorium", - //"admin.reports.items.predicate.exists": "exists", - // TODO New key - Add a translation - "admin.reports.items.predicate.exists": "exists", + // "admin.reports.items.anyField": "Any field", + "admin.reports.items.anyField": "Jedes Feld", - //"admin.reports.items.predicate.doesNotExist": "does not exist", - // TODO New key - Add a translation - "admin.reports.items.predicate.doesNotExist": "does not exist", + // "admin.reports.items.predicate.exists": "exists", + "admin.reports.items.predicate.exists": "existiert", - //"admin.reports.items.predicate.equals": "equals", - // TODO New key - Add a translation - "admin.reports.items.predicate.equals": "equals", + // "admin.reports.items.predicate.doesNotExist": "does not exist", + "admin.reports.items.predicate.doesNotExist": "existiert nicht", - //"admin.reports.items.predicate.doesNotEqual": "does not equal", - // TODO New key - Add a translation - "admin.reports.items.predicate.doesNotEqual": "does not equal", + // "admin.reports.items.predicate.equals": "equals", + "admin.reports.items.predicate.equals": "ist gleich", - //"admin.reports.items.predicate.like": "like", - // TODO New key - Add a translation - "admin.reports.items.predicate.like": "like", + // "admin.reports.items.predicate.doesNotEqual": "does not equal", + "admin.reports.items.predicate.doesNotEqual": "ist nicht gleich", - //"admin.reports.items.predicate.notLike": "not like", - // TODO New key - Add a translation - "admin.reports.items.predicate.notLike": "not like", + // "admin.reports.items.predicate.like": "like", + "admin.reports.items.predicate.like": "wie", - //"admin.reports.items.predicate.contains": "contains", - // TODO New key - Add a translation - "admin.reports.items.predicate.contains": "contains", + // "admin.reports.items.predicate.notLike": "not like", + "admin.reports.items.predicate.notLike": "nicht wie", - //"admin.reports.items.predicate.doesNotContain": "does not contain", - // TODO New key - Add a translation - "admin.reports.items.predicate.doesNotContain": "does not contain", + // "admin.reports.items.predicate.contains": "contains", + "admin.reports.items.predicate.contains": "enthält", - //"admin.reports.items.predicate.matches": "matches", - // TODO New key - Add a translation - "admin.reports.items.predicate.matches": "matches", + // "admin.reports.items.predicate.doesNotContain": "does not contain", + "admin.reports.items.predicate.doesNotContain": "enthält nicht", - //"admin.reports.items.predicate.doesNotMatch": "does not match", - // TODO New key - Add a translation - "admin.reports.items.predicate.doesNotMatch": "does not match", + // "admin.reports.items.predicate.matches": "matches", + "admin.reports.items.predicate.matches": "stimmt überein", - //"admin.reports.items.preset.new": "New Query", - // TODO New key - Add a translation - "admin.reports.items.preset.new": "New Query", + // "admin.reports.items.predicate.doesNotMatch": "does not match", + "admin.reports.items.predicate.doesNotMatch": "stimmt nicht überein", - //"admin.reports.items.preset.hasNoTitle": "Has No Title", - // TODO New key - Add a translation - "admin.reports.items.preset.hasNoTitle": "Has No Title", + // "admin.reports.items.preset.new": "New Query", + "admin.reports.items.preset.new": "Neue Abfrage", - //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", - // TODO New key - Add a translation - "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // "admin.reports.items.preset.hasNoTitle": "Has No Title", + "admin.reports.items.preset.hasNoTitle": "Hat keinen Titel", - //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", - // TODO New key - Add a translation - "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + "admin.reports.items.preset.hasNoIdentifierUri": "Hat kein dc.identifier.uri", - //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", - // TODO New key - Add a translation - "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + "admin.reports.items.preset.hasCompoundSubject": "Hat zusammengesetztes Thema", - //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", - // TODO New key - Add a translation - "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + "admin.reports.items.preset.hasCompoundAuthor": "Hat zusammengesetztes dc.contributor.author", - //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", - // TODO New key - Add a translation - "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + "admin.reports.items.preset.hasCompoundCreator": "Hat zusammengesetztes dc.creator", - //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", - // TODO New key - Add a translation - "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + "admin.reports.items.preset.hasUrlInDescription": "Hat URL in dc.description", - //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", - // TODO New key - Add a translation - "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + "admin.reports.items.preset.hasFullTextInProvenance": "Hat Volltext in dc.description.provenance", - //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", - // TODO New key - Add a translation - "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + "admin.reports.items.preset.hasNonFullTextInProvenance": "Hat nicht-ausführlichen Text in dc.description.provenance", - //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", - // TODO New key - Add a translation - "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + "admin.reports.items.preset.hasEmptyMetadata": "Hat leere Metadaten", - //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", - // TODO New key - Add a translation - "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Hat unteilbare Metadaten in der Beschreibung", - //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", - // TODO New key - Add a translation - "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + "admin.reports.items.preset.hasXmlEntityInMetadata": "Hat XML-Entität in Metadaten", - //"admin.reports.items.number": "No.", - // TODO New key - Add a translation - "admin.reports.items.number": "No.", + // "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Hat Nicht-Ascii-Zeichen in Metadaten", - //"admin.reports.items.id": "UUID", - // TODO New key - Add a translation + // "admin.reports.items.number": "No.", + "admin.reports.items.number": "Nein.", + + // "admin.reports.items.id": "UUID", "admin.reports.items.id": "UUID", - //"admin.reports.items.collection": "Collection", - // TODO New key - Add a translation - "admin.reports.items.collection": "Collection", + // "admin.reports.items.collection": "Collection", + "admin.reports.items.collection": "Sammlung", - //"admin.reports.items.handle": "URI", - // TODO New key - Add a translation + // "admin.reports.items.handle": "URI", "admin.reports.items.handle": "URI", - //"admin.reports.items.title": "Title", - // TODO New key - Add a translation - "admin.reports.items.title": "Title", - - //"admin.reports.commons.filters": "Filters", - // TODO New key - Add a translation - "admin.reports.commons.filters": "Filters", - - //"admin.reports.commons.additional-data": "Additional data to return", - // TODO New key - Add a translation - "admin.reports.commons.additional-data": "Additional data to return", - - //"admin.reports.commons.previous-page": "Prev Page", - // TODO New key - Add a translation - "admin.reports.commons.previous-page": "Prev Page", - - //"admin.reports.commons.next-page": "Next Page", - // TODO New key - Add a translation - "admin.reports.commons.next-page": "Next Page", - - //"admin.reports.commons.page": "Page", - // TODO New key - Add a translation - "admin.reports.commons.page": "Page", - - //"admin.reports.commons.of": "of", - // TODO New key - Add a translation - "admin.reports.commons.of": "of", - - //"admin.reports.commons.export": "Export for Metadata Update", - // TODO New key - Add a translation - "admin.reports.commons.export": "Export for Metadata Update", - - //"admin.reports.commons.filters.deselect_all": "Deselect all filters", - // TODO New key - Add a translation - "admin.reports.commons.filters.deselect_all": "Deselect all filters", - - //"admin.reports.commons.filters.select_all": "Select all filters", - // TODO New key - Add a translation - "admin.reports.commons.filters.select_all": "Select all filters", - - //"admin.reports.commons.filters.matches_all": "Matches all specified filters", - // TODO New key - Add a translation - "admin.reports.commons.filters.matches_all": "Matches all specified filters", + // "admin.reports.items.title": "Title", + "admin.reports.items.title": "Titel", - //"admin.reports.commons.filters.property": "Item Property Filters", - // TODO New key - Add a translation - "admin.reports.commons.filters.property": "Item Property Filters", + // "admin.reports.commons.filters": "Filters", + "admin.reports.commons.filters": "Filter", - //"admin.reports.commons.filters.property.is_item": "Is Item - always true", - // TODO New key - Add a translation - "admin.reports.commons.filters.property.is_item": "Is Item - always true", + // "admin.reports.commons.additional-data": "Additional data to return", + "admin.reports.commons.additional-data": "Zusätzliche zu übermittelnde Daten", - //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", - // TODO New key - Add a translation - "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // "admin.reports.commons.previous-page": "Prev Page", + "admin.reports.commons.previous-page": "Vorige Seite", - //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", - // TODO New key - Add a translation - "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // "admin.reports.commons.next-page": "Next Page", + "admin.reports.commons.next-page": "Nächste Seite", - //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", - // TODO New key - Add a translation - "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // "admin.reports.commons.page": "Page", + "admin.reports.commons.page": "Seite", - //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", - // TODO New key - Add a translation - "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // "admin.reports.commons.of": "of", + "admin.reports.commons.of": "von", - //"admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", - // TODO New key - Add a translation - "admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + // "admin.reports.commons.export": "Export for Metadata Update", + "admin.reports.commons.export": "Export für Metadaten-Update", - //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", - // TODO New key - Add a translation - "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // "admin.reports.commons.filters.deselect_all": "Deselect all filters", + "admin.reports.commons.filters.deselect_all": "Alle Filter nicht mehr auswählen", - //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", - // TODO New key - Add a translation - "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // "admin.reports.commons.filters.select_all": "Select all filters", + "admin.reports.commons.filters.select_all": "Alle Filter auswählen", - //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", - // TODO New key - Add a translation - "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // "admin.reports.commons.filters.matches_all": "Matches all specified filters", + "admin.reports.commons.filters.matches_all": "Entspricht allen angegebenen Filtern", - //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", - // TODO New key - Add a translation - "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", - //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", - // TODO New key - Add a translation - "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // "admin.reports.commons.filters.property": "Item Property Filters", + "admin.reports.commons.filters.property": "Filter für Item-Eigenschaften", - //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", - // TODO New key - Add a translation - "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + // "admin.reports.commons.filters.property.is_item": "Is Item - always true", + "admin.reports.commons.filters.property.is_item": "Ist Item - immer wahr", - //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", - // TODO New key - Add a translation - "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + "admin.reports.commons.filters.property.is_withdrawn": "Zurückgezogene Items", - //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", - // TODO New key - Add a translation - "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + "admin.reports.commons.filters.property.is_not_withdrawn": "Verfügbare Items - Nicht zurückgezogen", - //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", - // TODO New key - Add a translation - "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + "admin.reports.commons.filters.property.is_discoverable": "Auffindbare Items - nicht privat", - //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", - // TODO New key - Add a translation - "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + "admin.reports.commons.filters.property.is_not_discoverable": "Nicht auffindbar - Privates Item", - //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", - // TODO New key - Add a translation - "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + "admin.reports.commons.filters.bitstream": "Grundlegende Dateifilter", - //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", - // TODO New key - Add a translation - "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item hat mehrere Originaldateien", - //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", - // TODO New key - Add a translation - "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + "admin.reports.commons.filters.bitstream.has_no_originals": "Item hat keine Originaldateien", - //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", - // TODO New key - Add a translation - "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + "admin.reports.commons.filters.bitstream.has_one_original": "Item hat eine Originaldatei", - //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", - // TODO New key - Add a translation - "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + "admin.reports.commons.filters.bitstream_mime": "Dateifilter nach MIME-Typ", - //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", - // TODO New key - Add a translation - "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Das Item hat eine Dokument-Originaldatei (PDF, Office, Text, HTML, XML, etc.)", - //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", - // TODO New key - Add a translation - "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item hat eine Bild-Originaldatei", - //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", - // TODO New key - Add a translation - "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Hat andere Dateitypen (nicht Dokument oder Bild)", - //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", - // TODO New key - Add a translation - "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item hat mehrere Typen von Originaldateien (Dokument, Bild, Sonstiges)", - //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", - // TODO New key - Add a translation - "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item hat eine PDF-Originaldatei", - //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", - // TODO New key - Add a translation - "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item hat eine JPG-Originaldatei", - //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", - // TODO New key - Add a translation - "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Hat ungewöhnlich kleine PDF", - //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", - // TODO New key - Add a translation - "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Hat ungewöhnlich große PDF", - //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", - // TODO New key - Add a translation - "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Hat Dokument-Datei ohne TEXT-Element", - //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", - // TODO New key - Add a translation - "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + "admin.reports.commons.filters.mime": "Unterstützte MIME-Typ-Filter", - //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", - // TODO New key - Add a translation - "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item-Bilddateien werden unterstützt", - //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", - // TODO New key - Add a translation - "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item hat Bilddatei, die nicht unterstützt wird", - //"admin.reports.commons.filters.permission": "Permission Filters", - // TODO New key - Add a translation - "admin.reports.commons.filters.permission": "Permission Filters", + // "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item-Dokumentdateien werden unterstützt", - //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", - // TODO New key - Add a translation - "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item hat Dokumentdatei, die nicht unterstützt wird", - //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", - // TODO New key - Add a translation - "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + "admin.reports.commons.filters.bundle": "Datei-Bündel-Filter", - //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", - // TODO New key - Add a translation - "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Hat Datei in einem nicht unterstützten Bündel", - //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", - // TODO New key - Add a translation - "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Hat ein ungewöhnlich kleines Thumbnail", - //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", - // TODO New key - Add a translation - "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Hat Originaldatei ohne Thumbnail", - //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", - // TODO New key - Add a translation - "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Hat einen ungültigen Thumbnail-Namen (geht von einem Thumbnail für jedes Original aus)", + + // "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Hat ein nicht generiertes Thumbnail", + + // "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + "admin.reports.commons.filters.bundle.no_license": "Hat keine Lizenz", + + // "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + "admin.reports.commons.filters.bundle.has_license_documentation": "Verfügt über Dokumentation im Lizenzbündel", + + // "admin.reports.commons.filters.permission": "Permission Filters", + "admin.reports.commons.filters.permission": "Berechtigungen-Filter", + + // "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + "admin.reports.commons.filters.permission.has_restricted_original": "Item hat eingeschränkte Originaldatei", + + // "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Das Item hat mindestens eine Originaldatei, die für anonyme Nutzer:innen nicht zugänglich ist.", + + // "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item hat eingeschränkte Thumbnails", + + // "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Das Item hat mindestens ein Thumbnail, das für anonyme Nutzer:innen nicht zugänglich ist", + + // "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item hat eingeschränkte Metadaten", + + // "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item hat Metadaten, die für anonyme Nutzer:innen nicht zugänglich sind", // "admin.search.breadcrumbs": "Administrative Search", "admin.search.breadcrumbs": "Admin-Suche", @@ -1096,11 +1127,11 @@ // "admin.search.item.edit": "Edit", "admin.search.item.edit": "Bearbeiten", - // "admin.search.item.make-private": "Make Private", - "admin.search.item.make-private": "Verbergen", + // "admin.search.item.make-private": "Make non-discoverable", + "admin.search.item.make-private": "Nicht auffindbar machen", - // "admin.search.item.make-public": "Make Public", - "admin.search.item.make-public": "Öffentlich anzeigen", + // "admin.search.item.make-public": "Make discoverable", + "admin.search.item.make-public": "Auffindbar machen", // "admin.search.item.move": "Move", "admin.search.item.move": "Verschieben", @@ -1117,52 +1148,194 @@ // "administrativeView.search.results.head": "Administrative Search", "administrativeView.search.results.head": "Admin-Suche", - - - // "admin.workflow.breadcrumbs": "Administer Workflow", "admin.workflow.breadcrumbs": "Workflows verwalten", // "admin.workflow.title": "Administer Workflow", "admin.workflow.title": "Workflows verwalten", + // "admin.workflow.item.workflow": "Workflow", + "admin.workflow.item.workflow": "Workflow", + + // "admin.workflow.item.workspace": "Workspace", + "admin.workflow.item.workspace": "Arbeitsbereich", + // "admin.workflow.item.delete": "Delete", "admin.workflow.item.delete": "Löschen", // "admin.workflow.item.send-back": "Send back", "admin.workflow.item.send-back": "Zurücksenden", + // "admin.workflow.item.policies": "Policies", + "admin.workflow.item.policies": "Richtlinien", + // "admin.workflow.item.supervision": "Supervision", + "admin.workflow.item.supervision": "Beaufsichtigung", // "admin.metadata-import.breadcrumbs": "Import Metadata", "admin.metadata-import.breadcrumbs": "Metadaten importieren", + // "admin.batch-import.breadcrumbs": "Import Batch", + "admin.batch-import.breadcrumbs": "Batch importieren", + // "admin.metadata-import.title": "Import Metadata", "admin.metadata-import.title": "Metadaten importieren", + // "admin.batch-import.title": "Import Batch", + "admin.batch-import.title": "Batch importieren", + // "admin.metadata-import.page.header": "Import Metadata", "admin.metadata-import.page.header": "Metadaten importieren", + // "admin.batch-import.page.header": "Import Batch", + "admin.batch-import.page.header": "Batch importieren", + // "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": "Um Metadaten im Batch-Verfahren zu importieren, wählen Sie bitte eine CSV-Datei zum Hochladen aus oder ziehen Sie diese ins Browser-Fenster.", + // "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": "Wählen Sie die Sammlung aus, in die importiert werden soll. Legen Sie dann eine Zip-Datei im Simple Archive Format (SAF) ab, die die zu importierenden Items enthält.", + + // "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 ist möglich, den Import entweder mit einem Datei-Upload oder über eine URL durchzuführen, verwenden Sie den obigen Schalter, um die Eingabequelle festzulegen", + // "admin.metadata-import.page.dropMsg": "Drop a metadata CSV to import", "admin.metadata-import.page.dropMsg": "Ziehen Sie eine CSV-Datei mit Metadaten zum Importieren in das Browser-Fenster.", + // "admin.batch-import.page.dropMsg": "Drop a batch ZIP to import", + "admin.batch-import.page.dropMsg": "ZIP-Datei zum Importieren ablegen", + // "admin.metadata-import.page.dropMsgReplace": "Drop to replace the metadata CSV to import", "admin.metadata-import.page.dropMsgReplace": "Legen Sie eine neue CSV-Datei hier ab, um die Importdatei zu ersetzen.", - // "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": "Legen Sie eine neue ZIP-Datei hier ab, um die Importdatei zu ersetzen.", + + // "admin.metadata-import.page.button.return": "Back", "admin.metadata-import.page.button.return": "Zurück", // "admin.metadata-import.page.button.proceed": "Proceed", "admin.metadata-import.page.button.proceed": "Fortfahren", + // "admin.metadata-import.page.button.select-collection": "Select Collection", + "admin.metadata-import.page.button.select-collection": "Sammlung auswählen", + // "admin.metadata-import.page.error.addFile": "Select file first!", "admin.metadata-import.page.error.addFile": "Bitte wählen Sie zuerst eine Datei aus.", + // "admin.metadata-import.page.error.addFileUrl": "Insert file URL first!", + "admin.metadata-import.page.error.addFileUrl": "Fügen Sie zuerst die URL der Datei ein!", + // "admin.batch-import.page.error.addFile": "Select ZIP file first!", + "admin.batch-import.page.error.addFile": "Wählen Sie zuerst die ZIP-Datei aus!", + // "admin.metadata-import.page.toggle.upload": "Upload", + "admin.metadata-import.page.toggle.upload": "Hochladen", + + // "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": "Fügen Sie die zu importierende ZIP-URl ein", + + // "admin.metadata-import.page.validateOnly": "Validate Only", + "admin.metadata-import.page.validateOnly": "Nur validieren", + + // "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": "Wenn Sie diese Option wählen, wird die hochgeladene CSV-Datei validiert. Sie erhalten einen Bericht über erkannte Änderungen, es werden jedoch keine Änderungen gespeichert.", + + // "advanced-workflow-action.rating.form.rating.label": "Rating", + "advanced-workflow-action.rating.form.rating.label": "Bewertung", + + // "advanced-workflow-action.rating.form.rating.error": "You must rate the item", + "advanced-workflow-action.rating.form.rating.error": "Sie müssen das Item bewerten", + + // "advanced-workflow-action.rating.form.review.label": "Review", + "advanced-workflow-action.rating.form.review.label": "Review", + + // "advanced-workflow-action.rating.form.review.error": "You must enter a review to submit this rating", + "advanced-workflow-action.rating.form.review.error": "Sie müssen eine Review eingeben, um diese Bewertung abzugeben", + + // "advanced-workflow-action.rating.description": "Please select a rating below", + "advanced-workflow-action.rating.description": "Bitte wählen Sie unten eine Bewertung aus", + + // "advanced-workflow-action.rating.description-requiredDescription": "Please select a rating below and also add a review", + "advanced-workflow-action.rating.description-requiredDescription": "Bitte wählen Sie unten eine Bewertung aus und fügen Sie eine Review hinzu", + + // "advanced-workflow-action.select-reviewer.description-single": "Please select a single reviewer below before submitting", + "advanced-workflow-action.select-reviewer.description-single": "Bitte wählen Sie vor dem Absenden einen einzelnen Gutachter aus", + + // "advanced-workflow-action.select-reviewer.description-multiple": "Please select one or more reviewers below before submitting", + "advanced-workflow-action.select-reviewer.description-multiple": "Bitte wählen Sie vor dem Absenden einen oder mehrere Gutachter:innen aus", + + // "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": "EPeople hinzufügen", + + // "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": "Alles durchsuchen", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.headMembers": "Current Members", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.headMembers": "Aktuelle Mitglieder", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.button": "Search", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.button": "Suche", + + // "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": "Name", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity": "Identity", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity": "Identität", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "Email", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "E-Mail", + + // "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": "Entfernen / Hinzufügen", + + // "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": "Mitglied mit Namen \"{{name}}\" entfernen", + + // "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": "Erfolgreich hinzugefügtes Mitglied: \"{{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": "Mitglied kann nicht hinzugefügt werden: \"{{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": "Erfolgreich gelöschtes Mitglied: \"{{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": "Das Mitglied konnte nicht gelöscht werden: \"{{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": "Mitglied mit Namen \"{{name}}\" hinzufügen", + + // "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": "Keine derzeit aktive Gruppe, bitte erst einen Namen eingeben.", + + // "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": "Noch keine Mitglieder in der Gruppe, suchen und hinzufügen.", + + // "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": "Keine EPeople in dieser Suche gefunden", + + // "advanced-workflow-action.select-reviewer.no-reviewer-selected.error": "No reviewer selected.", + "advanced-workflow-action.select-reviewer.no-reviewer-selected.error": "Kein Gutachter ausgewählt.", + + // "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": "Wenn Sie diese Option wählen, wird die hochgeladene ZIP-Datei validiert. Sie erhalten einen Bericht über erkannte Änderungen, aber es werden keine Änderungen gespeichert.", + + // "admin.batch-import.page.remove": "remove", + "admin.batch-import.page.remove": "entfernen", // "auth.errors.invalid-user": "Invalid email address or password.", "auth.errors.invalid-user": "Passwort oder E-Mail-Adresse ungültig.", @@ -1170,58 +1343,11 @@ // "auth.messages.expired": "Your session has expired. Please log in again.", "auth.messages.expired": "Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an.", - - // "auth.messages.token-refresh-failed": "Refreshing your session token failed. Please log in again.", "auth.messages.token-refresh-failed": "Aktualisierung fehlgeschlagen. Bitte melden Sie sich erneut an.", - // "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": "Sie haben schon Zugriff auf die Datei. Um sie herunterzuladen, klicken Sie bitte", - - // "bitstream-request-a-copy.alert.canDownload2": "here", - "bitstream-request-a-copy.alert.canDownload2": "hier", - - // "bitstream-request-a-copy.allfiles.label": "Files", - "bitstream-request-a-copy.allfiles.label": "Dateien", - - // "bitstream-request-a-copy.email.error": "Please enter a valid email address.", - "bitstream-request-a-copy.email.error": "Bitte geben Sie eine gültige E-Mail-Adresse an.", - - // "bitstream-request-a-copy.email.hint": "This email address is used for sending the file.", - "bitstream-request-a-copy.email.hint": "An diese E-Mail-Adresse wird die Datei geschickt.", - - // "bitstream-request-a-copy.email.label": "Your e-mail address *", - "bitstream-request-a-copy.email.label": "E-Mail-Adresse *", - - // "bitstream-request-a-copy.files-all-false.label": "Only the requested file", - "bitstream-request-a-copy.files-all-false.label": "Nur die angefragte Datei", - - // "bitstream-request-a-copy.files-all-true.label": "All files (of this item) in restricted access", - "bitstream-request-a-copy.files-all-true.label": "Alle nicht öffentlich zugänglichen Dateien, die zu diesem Item gehören", - - // "bitstream-request-a-copy.header": "Request a copy of the file", - "bitstream-request-a-copy.header": "Eine Datei anfordern", - - // "bitstream-request-a-copy.intro": "Enter the following information to request a copy for the following item: ", - "bitstream-request-a-copy.intro": "Bitte füllen Sie für die Anfrage nach einer Datei die folgenden Felder aus:", - - // "bitstream-request-a-copy.intro.bitstream.all": "Requesting all files. ", - "bitstream-request-a-copy.intro.bitstream.all": "Bitte schicken Sie mir alle Dateien.", - - // "bitstream-request-a-copy.intro.bitstream.one": "Requesting the following file: ", - "bitstream-request-a-copy.intro.bitstream.one": "Bitte schicken Sie mir die folgende Datei:", - - // "bitstream-request-a-copy.message.label": "Message", - "bitstream-request-a-copy.message.label": "Nachricht", - - // "bitstream-request-a-copy.name.error": "The name is required", - "bitstream-request-a-copy.name.error": "Bitte geben Sie Ihren Namen an.", - - // "bitstream-request-a-copy.name.label": "Name *", - "bitstream-request-a-copy.name.label": "Name *", - - // "bitstream-request-a-copy.return": "Back", - "bitstream-request-a-copy.return": "Zurück", + // "bitstream.download.page": "Now downloading {{bitstream}}...", + "bitstream.download.page": "{{bitstream}} wird jetzt heruntergeladen...", // "bitstream.download.page.back": "Back", "bitstream.download.page.back": "Zurück", @@ -1232,11 +1358,14 @@ // "bitstream.edit.authorizations.title": "Edit bitstream's Policies", "bitstream.edit.authorizations.title": "Richtlinien für den Bitstream bearbeiten", + // "bitstream.edit.return": "Back", + "bitstream.edit.return": "Zurück", + // "bitstream.edit.bitstream": "Bitstream: ", "bitstream.edit.bitstream": "Bitstream: ", // "bitstream.edit.form.description.hint": "Optionally, provide a brief description of the file, for example \"Main article\" or \"Experiment data readings\".", - "bitstream.edit.form.description.hint": "Hier können Sie eine kurze Beschreibung der Datei angeben, zum Beispiel \"Artikel\" oder \"Tabellenhanhang\".", + "bitstream.edit.form.description.hint": "Hier können Sie eine kurze Beschreibung der Datei angeben, zum Beispiel \"Artikel\" oder \"Tabellenanhang\".", // "bitstream.edit.form.description.label": "Description", "bitstream.edit.form.description.label": "Beschreibung", @@ -1244,7 +1373,6 @@ // "bitstream.edit.form.embargo.hint": "The first day from which access is allowed. This date cannot be modified on this form. To set an embargo date for a bitstream, go to the Item Status tab, click Authorizations..., create or edit the bitstream's READ policy, and set the Start Date as desired.", "bitstream.edit.form.embargo.hint": "Der erste Tag, ab dem der Zugang erlaubt ist. Dieses Datum kann in diesem Formular nicht verändert werden. Um eine Embargo-Frist für eine Datei festzulegen, zu Item Status gehen, auf Authorizations... klicken, die Richtlinie READ für die Datei erstellen oder verändern und das Start Date wie gewünscht einstellen.", - // "bitstream.edit.form.embargo.label": "Embargo until specific date", "bitstream.edit.form.embargo.label": "Sperrfrist", @@ -1254,16 +1382,13 @@ // "bitstream.edit.form.fileName.label": "Filename", "bitstream.edit.form.fileName.label": "Dateiname", - // "bitstream.edit.form.iiifLabel.label": "IIIF Label", - "bitstream.edit.form.iiifLabel.label": "IIIF-Bezeichnung", - // "bitstream.edit.form.newFormat.label": "Describe new format", "bitstream.edit.form.newFormat.label": "Neues Format beschreiben", // "bitstream.edit.form.newFormat.hint": "The application you used to create the file, and the version number (for example, \"ACMESoft SuperApp version 1.5\").", "bitstream.edit.form.newFormat.hint": "Name und Versionsnummer des Programms, das Sie verwendet haben, um die Datei zu erstellen (z. B. \"ACMESoft SuperApp, Version 1.5\").", - // "bitstream.edit.form.primaryBitstream.label": "Primary bitstream", + // "bitstream.edit.form.primaryBitstream.label": "Primary File", "bitstream.edit.form.primaryBitstream.label": "Primäre Datei", // "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\".", @@ -1278,18 +1403,98 @@ // "bitstream.edit.notifications.error.format.title": "An error occurred saving the bitstream's format", "bitstream.edit.notifications.error.format.title": "Beim Speichern des Dateiformats ist ein Fehler aufgetreten", + // "bitstream.edit.notifications.error.primaryBitstream.title": "An error occurred saving the primary bitstream", + "bitstream.edit.notifications.error.primaryBitstream.title": "Beim Speichern der primären Datei ist ein Fehler aufgetreten", + + // "bitstream.edit.form.iiifLabel.label": "IIIF Label", + "bitstream.edit.form.iiifLabel.label": "IIIF-Bezeichnung", + + // "bitstream.edit.form.iiifLabel.hint": "Canvas label for this image. If not provided default label will be used.", + "bitstream.edit.form.iiifLabel.hint": "Beschriftung der Bildoberfläche. Wenn keine Beschriftung angegeben wird, wird die Standardbeschriftung verwendet.", + + // "bitstream.edit.form.iiifToc.label": "IIIF Table of Contents", + "bitstream.edit.form.iiifToc.label": "IIIF-Inhaltsverzeichnis", + + // "bitstream.edit.form.iiifToc.hint": "Adding text here makes this the start of a new table of contents range.", + "bitstream.edit.form.iiifToc.hint": "Durch das Hinzufügen von Text an dieser Stelle wird dies zum Anfang eines neuen Inhaltsverzeichnisses.", + + // "bitstream.edit.form.iiifWidth.label": "IIIF Canvas Width", + "bitstream.edit.form.iiifWidth.label": "IIIF-Bildoberflächenbreite", + + // "bitstream.edit.form.iiifWidth.hint": "The canvas width should usually match the image width.", + "bitstream.edit.form.iiifWidth.hint": "Die Breite der Bildoberfläche sollte in der Regel der Bildbreite entsprechen.", + + // "bitstream.edit.form.iiifHeight.label": "IIIF Canvas Height", + "bitstream.edit.form.iiifHeight.label": "IIIF-Bildoberflächenhöhe", + + // "bitstream.edit.form.iiifHeight.hint": "The canvas height should usually match the image height.", + "bitstream.edit.form.iiifHeight.hint": "Die Höhe der Bildoberfläche sollte in der Regel mit der Bildhöhe übereinstimmen.", + // "bitstream.edit.notifications.saved.content": "Your changes to this bitstream were saved.", "bitstream.edit.notifications.saved.content": "Ihre Änderungen an der Datei wurden gespeichert.", // "bitstream.edit.notifications.saved.title": "Bitstream saved", "bitstream.edit.notifications.saved.title": "Datei gespeichert", - // "bitstream.edit.return": "Back", - "bitstream.edit.return": "Zurück", - // "bitstream.edit.title": "Edit bitstream", "bitstream.edit.title": "Datei bearbeiten", + // "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": "Sie haben schon Zugriff auf die Datei. Um sie herunterzuladen, klicken Sie bitte", + + // "bitstream-request-a-copy.alert.canDownload2": "here", + "bitstream-request-a-copy.alert.canDownload2": "hier", + + // "bitstream-request-a-copy.header": "Request a copy of the file", + "bitstream-request-a-copy.header": "Eine Datei anfordern", + + // "bitstream-request-a-copy.intro": "Enter the following information to request a copy for the following item: ", + "bitstream-request-a-copy.intro": "Bitte füllen Sie für die Anfrage nach einer Datei die folgenden Felder aus:", + + // "bitstream-request-a-copy.intro.bitstream.one": "Requesting the following file: ", + "bitstream-request-a-copy.intro.bitstream.one": "Bitte schicken Sie mir die folgende Datei:", + + // "bitstream-request-a-copy.intro.bitstream.all": "Requesting all files. ", + "bitstream-request-a-copy.intro.bitstream.all": "Bitte schicken Sie mir alle Dateien.", + + // "bitstream-request-a-copy.name.label": "Name *", + "bitstream-request-a-copy.name.label": "Name *", + + // "bitstream-request-a-copy.name.error": "The name is required", + "bitstream-request-a-copy.name.error": "Bitte geben Sie Ihren Namen an.", + + // "bitstream-request-a-copy.email.label": "Your email address *", + "bitstream-request-a-copy.email.label": "Ihre E-Mail-Adresse *", + + // "bitstream-request-a-copy.email.hint": "This email address is used for sending the file.", + "bitstream-request-a-copy.email.hint": "An diese E-Mail-Adresse wird die Datei geschickt.", + + // "bitstream-request-a-copy.email.error": "Please enter a valid email address.", + "bitstream-request-a-copy.email.error": "Bitte geben Sie eine gültige E-Mail-Adresse an.", + + // "bitstream-request-a-copy.allfiles.label": "Files", + "bitstream-request-a-copy.allfiles.label": "Dateien", + + // "bitstream-request-a-copy.files-all-false.label": "Only the requested file", + "bitstream-request-a-copy.files-all-false.label": "Nur die angefragte Datei", + + // "bitstream-request-a-copy.files-all-true.label": "All files (of this item) in restricted access", + "bitstream-request-a-copy.files-all-true.label": "Alle nicht öffentlich zugänglichen Dateien, die zu diesem Item gehören", + + // "bitstream-request-a-copy.message.label": "Message", + "bitstream-request-a-copy.message.label": "Nachricht", + + // "bitstream-request-a-copy.return": "Back", + "bitstream-request-a-copy.return": "Zurück", + + // "bitstream-request-a-copy.submit": "Request copy", + "bitstream-request-a-copy.submit": "Kopie anfordern", + + // "bitstream-request-a-copy.submit.success": "The item request was submitted successfully.", + "bitstream-request-a-copy.submit.success": "Die Item-Anfrage wurde erfolgreich übermittelt.", + + // "bitstream-request-a-copy.submit.error": "Something went wrong with submitting the item request.", + "bitstream-request-a-copy.submit.error": "Bei der Übermittlung der Item-Anfrage ist etwas schief gelaufen.", // "browse.back.all-results": "All browse results", "browse.back.all-results": "Filter zurücksetzen", @@ -1303,6 +1508,12 @@ // "browse.comcol.by.subject": "By Subject", "browse.comcol.by.subject": "Nach Schlagwort", + // "browse.comcol.by.srsc": "By Subject Category", + "browse.comcol.by.srsc": "Nach Themenkategorie", + + // "browse.comcol.by.nsi": "By Norwegian Science Index", + "browse.comcol.by.nsi": "Nach Norwegian Science Index", + // "browse.comcol.by.title": "By Title", "browse.comcol.by.title": "Nach Titel", @@ -1324,6 +1535,9 @@ // "browse.metadata.title": "Title", "browse.metadata.title": "Titel", + // "browse.metadata.srsc": "Subject Category", + "browse.metadata.srsc": "Themenkategorie", + // "browse.metadata.author.breadcrumbs": "Browse by Author", "browse.metadata.author.breadcrumbs": "Auflistung nach Autor:in", @@ -1331,16 +1545,31 @@ "browse.metadata.dateissued.breadcrumbs": "Auflistung nach Datum", // "browse.metadata.subject.breadcrumbs": "Browse by Subject", - "browse.metadata.subject.breadcrumbs": "Schlagwörter", + "browse.metadata.subject.breadcrumbs": "Auflistung nach Schlagwort", + + // "browse.metadata.srsc.breadcrumbs": "Browse by Subject Category", + "browse.metadata.srsc.breadcrumbs": "Auflistung nach Themenkategorie", + + // "browse.metadata.srsc.tree.descrption": "Select a subject to add as search filter", + "browse.metadata.srsc.tree.descrption": "Wählen Sie ein Thema, um es als Suchfilter hinzuzufügen", + + // "browse.metadata.nsi.breadcrumbs": "Browse by Norwegian Science Index", + "browse.metadata.nsi.breadcrumbs": "Auflistung nach Norwegian Science Index", + + // "browse.metadata.nsi.tree.descrption": "Select an index to add as search filter", + "browse.metadata.nsi.tree.descrption": "Wählen Sie einen Index, um ihn als Suchfilter hinzuzufügen", // "browse.metadata.title.breadcrumbs": "Browse by Title", "browse.metadata.title.breadcrumbs": "Titel", - // "browse.next.button": "Next", - "browse.next.button": "Weiter", + // "pagination.next.button": "Next", + "pagination.next.button": "Weiter", - // "browse.previous.button": "Previous", - "browse.previous.button": "Zurück", + // "pagination.previous.button": "Previous", + "pagination.previous.button": "Zurück", + + // "pagination.next.button.disabled.tooltip": "No more pages of results", + "pagination.next.button.disabled.tooltip": "Keine weiteren Seiten mit Ergebnissen", // "browse.startsWith": ", starting with {{ startsWith }}", "browse.startsWith": ", beginnend mit {{ startsWith }}", @@ -1349,13 +1578,13 @@ "browse.startsWith.choose_start": "(Startpunkt wählen)", // "browse.startsWith.choose_year": "(Choose year)", - "browse.startsWith.choose_year": "(Zeitpunkt wählen)", + "browse.startsWith.choose_year": "(Jahr auswählen)", // "browse.startsWith.choose_year.label": "Choose the issue year", "browse.startsWith.choose_year.label": "Erscheinungsjahr auswählen", - // "browse.startsWith.jump": "Jump to a point in the index:", - "browse.startsWith.jump": "Zu einem Punkt im Index springen:", + // "browse.startsWith.jump": "Filter results by year or month", + "browse.startsWith.jump": "Ergebnisse nach Jahr oder Monat filtern", // "browse.startsWith.months.april": "April", "browse.startsWith.months.april": "April", @@ -1399,26 +1628,50 @@ // "browse.startsWith.months.september": "September", "browse.startsWith.months.september": "September", - // "browse.startsWith.submit": "Go", - "browse.startsWith.submit": "Los", + // "browse.startsWith.submit": "Browse", + "browse.startsWith.submit": "Durchsuchen", - // "browse.startsWith.type_date": "Or type in a date (year-month):", - "browse.startsWith.type_date": "Oder geben Sie ein Datum ein:", + // "browse.startsWith.type_date": "Filter results by date", + "browse.startsWith.type_date": "Ergebnisse nach Datum filtern", - // "browse.startsWith.type_text": "Or enter first few letters:", - "browse.startsWith.type_text": "Oder geben Sie die ersten Buchstaben ein:", + // "browse.startsWith.type_date.label": "Or type in a date (year-month) and click on the Browse button", + "browse.startsWith.type_date.label": "Oder geben Sie ein Datum ein (Jahr-Monat) und klicken Sie auf die Schaltfläche Durchsuchen", - // "browse.title": "Browsing {{ collection }} by {{ field }}{{ startsWith }} {{ value }}", - "browse.title": "Auflistung {{ collection }} nach {{ field }}{{ startsWith }} {{ value }}", + // "browse.startsWith.type_text": "Filter results by typing the first few letters", + "browse.startsWith.type_text": "Ergebnisse durch Eingabe der ersten Buchstaben filtern", - // "browse.title.page": "Browsing {{ collection }} by {{ field }} {{ value }}", - "browse.title.page": "Auflistung {{ collection }} nach {{ field }} {{ value }}", + // "browse.startsWith.input": "Filter", + "browse.startsWith.input": "Filter", + // "browse.taxonomy.button": "Browse", + "browse.taxonomy.button": "Durchsuchen", + + // "browse.title": "Browsing by {{ field }}{{ startsWith }} {{ value }}", + "browse.title": "Auflistung nach {{ field }}{{ startsWith }} {{ value }}", + + // "browse.title.page": "Browsing by {{ field }} {{ value }}", + "browse.title.page": "Auflistung nach {{ field }} {{ value }}", + + // "search.browse.item-back": "Back to Results", + "search.browse.item-back": "Zurück zu den Ergebnissen", // "chips.remove": "Remove chip", "chips.remove": "Teil löschen", + // "claimed-approved-search-result-list-element.title": "Approved", + "claimed-approved-search-result-list-element.title": "Genehmigt", + // "claimed-declined-search-result-list-element.title": "Rejected, sent back to submitter", + "claimed-declined-search-result-list-element.title": "Abgelehnt, an den Submitter zurückgeschickt", + + // "claimed-declined-task-search-result-list-element.title": "Declined, sent back to Review Manager's workflow", + "claimed-declined-task-search-result-list-element.title": "Abgelehnt, zurück an den Workflow des Review Managers geschickt", + + // "collection.create.breadcrumbs": "Create collection", + "collection.create.breadcrumbs": "Sammlung erstellen", + + // "collection.browse.logo": "Browse for a collection logo", + "collection.browse.logo": "Suche nach einem Sammlungslogo", // "collection.create.head": "Create a Collection", "collection.create.head": "Eine Sammlung anlegen", @@ -1438,6 +1691,9 @@ // "collection.delete.confirm": "Confirm", "collection.delete.confirm": "Bestätigen", + // "collection.delete.processing": "Deleting", + "collection.delete.processing": "Löschen", + // "collection.delete.head": "Delete Collection", "collection.delete.head": "Sammlung löschen", @@ -1450,8 +1706,6 @@ // "collection.delete.text": "Are you sure you want to delete collection \"{{ dso }}\"", "collection.delete.text": "Sind Sie sicher, dass Sie die Sammlung \"{{ dso }}\" löschen wollen?", - - // "collection.edit.delete": "Delete this collection", "collection.edit.delete": "Diese Sammlung löschen", @@ -1461,14 +1715,6 @@ // "collection.edit.breadcrumbs": "Edit Collection", "collection.edit.breadcrumbs": "Sammlung bearbeiten", - - - // "collection.edit.logo.delete-undo.title": "Undo delete", - "collection.edit.logo.delete-undo.title": "Löschen rückgängig machen", - - // "collection.edit.logo.delete.title": "Delete logo", - "collection.edit.logo.delete.title": "Logo löschen", - // "collection.edit.tabs.mapper.head": "Item Mapper", "collection.edit.tabs.mapper.head": "Item spiegeln", @@ -1520,13 +1766,20 @@ // "collection.edit.item-mapper.remove": "Remove selected item mappings", "collection.edit.item-mapper.remove": "Spiegelung der ausgewählten Items entfernen", + // "collection.edit.item-mapper.search-form.placeholder": "Search items...", + "collection.edit.item-mapper.search-form.placeholder": "Items suchen...", + // "collection.edit.item-mapper.tabs.browse": "Browse mapped items", "collection.edit.item-mapper.tabs.browse": "Gespiegelte Items auflisten", // "collection.edit.item-mapper.tabs.map": "Map new items", "collection.edit.item-mapper.tabs.map": "Neue Items spiegeln", + // "collection.edit.logo.delete.title": "Delete logo", + "collection.edit.logo.delete.title": "Logo löschen", + // "collection.edit.logo.delete-undo.title": "Undo delete", + "collection.edit.logo.delete-undo.title": "Löschen rückgängig machen", // "collection.edit.logo.label": "Collection logo", "collection.edit.logo.label": "Sammlungslogo", @@ -1549,15 +1802,17 @@ // "collection.edit.logo.upload": "Drop a Collection Logo to upload", "collection.edit.logo.upload": "Ziehen Sie ein Logo herüber, um es hochzuladen.", - - // "collection.edit.notifications.success": "Successfully edited the Collection", "collection.edit.notifications.success": "Sammlung erfolgreich bearbeitet", - // "collection.edit.return": "Return", + // "collection.edit.return": "Back", "collection.edit.return": "Zurück", + // "collection.edit.tabs.access-control.head": "Access Control", + "collection.edit.tabs.access-control.head": "Zugriffskontrolle", + // "collection.edit.tabs.access-control.title": "Collection Edit - Access Control", + "collection.edit.tabs.access-control.title": "Sammlung bearbeiten - Zugriffskontrolle", // "collection.edit.tabs.curate.head": "Curate", "collection.edit.tabs.curate.head": "Datenpflege", @@ -1571,6 +1826,15 @@ // "collection.edit.tabs.authorizations.title": "Collection Edit - Authorizations", "collection.edit.tabs.authorizations.title": "Sammlung bearbeiten - Berechtigungen", + // "collection.edit.item.authorizations.load-bundle-button": "Load more bundles", + "collection.edit.item.authorizations.load-bundle-button": "Mehr Bündel laden", + + // "collection.edit.item.authorizations.load-more-button": "Load more", + "collection.edit.item.authorizations.load-more-button": "Mehr laden", + + // "collection.edit.item.authorizations.show-bitstreams-button": "Show bitstream policies for bundle", + "collection.edit.item.authorizations.show-bitstreams-button": "Datei-Richtlinien für Bündel anzeigen", + // "collection.edit.tabs.metadata.head": "Edit Metadata", "collection.edit.tabs.metadata.head": "Metadaten bearbeiten", @@ -1619,7 +1883,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": "Die Änderungen wurden verworfen. Bitte klicken Sie auf \"Rückgängig\", um sie wieder einzusetzen.", - // "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": "Änderungen verworfen", // "collection.edit.tabs.source.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", @@ -1637,8 +1901,6 @@ // "collection.edit.tabs.source.title": "Collection Edit - Content Source", "collection.edit.tabs.source.title": "Sammlung bearbeiten - Bezugsquelle für den Inhalt", - - // "collection.edit.template.add-button": "Add", "collection.edit.template.add-button": "Hinzufügen", @@ -1654,12 +1916,18 @@ // "collection.edit.template.edit-button": "Edit", "collection.edit.template.edit-button": "Bearbeiten", + // "collection.edit.template.error": "An error occurred retrieving the template item", + "collection.edit.template.error": "Beim Abrufen der Itemvorlage ist ein Fehler aufgetreten", + // "collection.edit.template.head": "Edit Template Item for Collection \"{{ collection }}\"", "collection.edit.template.head": "Itemvorlage für Sammlung \"{{ collection }}\" bearbeiten", // "collection.edit.template.label": "Template item", "collection.edit.template.label": "Itemvorlage", + // "collection.edit.template.loading": "Loading template item...", + "collection.edit.template.loading": "Itemvorlage laden...", + // "collection.edit.template.notifications.delete.error": "Failed to delete the item template", "collection.edit.template.notifications.delete.error": "Löschen der Metadatenvorlage fehlgeschlagen", @@ -1669,8 +1937,6 @@ // "collection.edit.template.title": "Edit Template Item", "collection.edit.template.title": "Metadatenvorlage bearbeiten", - - // "collection.form.abstract": "Short Description", "collection.form.abstract": "Kurzbeschreibung", @@ -1695,18 +1961,17 @@ // "collection.form.title": "Name", "collection.form.title": "Name", - + // "collection.form.entityType": "Entity Type", + "collection.form.entityType": "Entitätstyp", // "collection.listelement.badge": "Collection", "collection.listelement.badge": "Sammlung", + // "collection.logo": "Collection logo", + "collection.logo": "Logo der Sammlung", - - // "collection.page.browse.recent.head": "Recent Submissions", - "collection.page.browse.recent.head": "Neueste Veröffentlichungen", - - // "collection.page.browse.recent.empty": "No items to show", - "collection.page.browse.recent.empty": "Es gibt keine Items, die angezeigt werden können.", + // "collection.page.browse.search.head": "Search", + "collection.page.browse.search.head": "Suche", // "collection.page.edit": "Edit this collection", "collection.page.edit": "Diese Sammlung bearbeiten", @@ -1720,7 +1985,8 @@ // "collection.page.news": "News", "collection.page.news": "Neuigkeiten", - + // "collection.search.results.head": "Search Results", + "collection.search.results.head": "Suchergebnisse", // "collection.select.confirm": "Confirm selected", "collection.select.confirm": "Auswahl bestätigen", @@ -1728,22 +1994,86 @@ // "collection.select.empty": "No collections to show", "collection.select.empty": "Es gibt keine Sammlungen, die angezeigt werden können", + // "collection.select.table.selected": "Selected collections", + "collection.select.table.selected": "Ausgewählte Sammlungen", + + // "collection.select.table.select": "Select collection", + "collection.select.table.select": "Sammlung auswählen", + + // "collection.select.table.deselect": "Deselect collection", + "collection.select.table.deselect": "Auswahl der Sammlung zurücknehmen", + // "collection.select.table.title": "Title", "collection.select.table.title": "Titel", + // "collection.source.controls.head": "Harvest Controls", + "collection.source.controls.head": "Harvesting-Kontrollen", + // "collection.source.controls.test.submit.error": "Something went wrong with initiating the testing of the settings", + "collection.source.controls.test.submit.error": "Beim Testen der Einstellungen ist etwas schief gelaufen", - // "collection.source.controls.import.running": "Importing...", - "collection.source.controls.import.running": "Importiere...", + // "collection.source.controls.test.failed": "The script to test the settings has failed", + "collection.source.controls.test.failed": "Das Skript zum Testen der Einstellungen ist fehlgeschlagen", - // "collection.source.controls.import.submit": "Import now", - "collection.source.controls.import.submit": "Jetzt importieren", + // "collection.source.controls.test.completed": "The script to test the settings has successfully finished", + "collection.source.controls.test.completed": "Das Skript zum Testen der Einstellungen wurde erfolgreich beendet", + + // "collection.source.controls.test.submit": "Test configuration", + "collection.source.controls.test.submit": "Test-Konfiguration", + + // "collection.source.controls.test.running": "Testing configuration...", + "collection.source.controls.test.running": "Die Konfiguration wird getestet.", // "collection.source.controls.import.submit.success": "The import has been successfully initiated", "collection.source.controls.import.submit.success": "Import begonnen", - // "collection.source.controls.test.running": "Testing configuration...", - "collection.source.controls.test.running": "Die Konfiguration wird getestet.", + // "collection.source.controls.import.submit.error": "Something went wrong with initiating the import", + "collection.source.controls.import.submit.error": "Beim Starten des Imports ist etwas schief gelaufen", + + // "collection.source.controls.import.submit": "Import now", + "collection.source.controls.import.submit": "Jetzt importieren", + + // "collection.source.controls.import.running": "Importing...", + "collection.source.controls.import.running": "Importiere...", + + // "collection.source.controls.import.failed": "An error occurred during the import", + "collection.source.controls.import.failed": "Während des Imports ist ein Fehler aufgetreten", + + // "collection.source.controls.import.completed": "The import completed", + "collection.source.controls.import.completed": "Der Import ist abgeschlossen", + + // "collection.source.controls.reset.submit.success": "The reset and reimport has been successfully initiated", + "collection.source.controls.reset.submit.success": "Das Zurücksetzen und der Reimport wurden erfolgreich eingeleitet.", + + // "collection.source.controls.reset.submit.error": "Something went wrong with initiating the reset and reimport", + "collection.source.controls.reset.submit.error": "Beim Zurücksetzen und Reimport ist etwas schief gelaufen", + + // "collection.source.controls.reset.failed": "An error occurred during the reset and reimport", + "collection.source.controls.reset.failed": "Während des Zurücksetzens und Reimport ist ein Fehler aufgetreten", + + // "collection.source.controls.reset.completed": "The reset and reimport completed", + "collection.source.controls.reset.completed": "Zurücksetzen und Reimport abgeschlossen", + + // "collection.source.controls.reset.submit": "Reset and reimport", + "collection.source.controls.reset.submit": "Zurücksetzen und erneut importieren", + + // "collection.source.controls.reset.running": "Resetting and reimporting...", + "collection.source.controls.reset.running": "Zurücksetzen und erneut importieren...", + + // "collection.source.controls.harvest.status": "Harvest status:", + "collection.source.controls.harvest.status": "Harvesting-Status:", + + // "collection.source.controls.harvest.start": "Harvest start time:", + "collection.source.controls.harvest.start": "Beginn des Harvesting:", + + // "collection.source.controls.harvest.last": "Last time harvested:", + "collection.source.controls.harvest.last": "Das letzte Mal abgerufen:", + + // "collection.source.controls.harvest.message": "Harvest info:", + "collection.source.controls.harvest.message": "Informationen zum Harvesting:", + + // "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": "Die angegebenen Einstellungen wurden getestet und haben nicht funktioniert.", @@ -1751,14 +2081,6 @@ // "collection.source.update.notifications.error.title": "Server Error", "collection.source.update.notifications.error.title": "Serverfehler", - - - // "community.edit.logo.delete-undo.title": "Undo delete", - "community.edit.logo.delete-undo.title": "Löschen rückgängig machen", - - // "community.edit.logo.delete.title": "Delete logo", - "community.edit.logo.delete.title": "Logo löschen", - // "communityList.breadcrumbs": "Community List", "communityList.breadcrumbs": "Bereichsliste", @@ -1771,7 +2093,20 @@ // "communityList.showMore": "Show More", "communityList.showMore": "Mehr anzeigen", + // "communityList.expand": "Expand {{ name }}", + "communityList.expand": "Erweitern Sie {{ name }}", + // "communityList.collapse": "Collapse {{ name }}", + "communityList.collapse": "Zusammenklappen von {{ name }}", + + // "community.browse.logo": "Browse for a community logo", + "community.browse.logo": "Suche nach einem Bereichslogo", + + // "community.subcoms-cols.breadcrumbs": "Subcommunities and Collections", + "community.subcoms-cols.breadcrumbs": "Unterbereiche und Sammlungen", + + // "community.create.breadcrumbs": "Create Community", + "community.create.breadcrumbs": "Bereich erstellen", // "community.create.head": "Create a Community", "community.create.head": "Bereich anlegen", @@ -1791,6 +2126,9 @@ // "community.delete.confirm": "Confirm", "community.delete.confirm": "Bestätigen", + // "community.delete.processing": "Deleting...", + "community.delete.processing": "Löschen...", + // "community.delete.head": "Delete Community", "community.delete.head": "Bereich Löschen", @@ -1812,14 +2150,25 @@ // "community.edit.breadcrumbs": "Edit Community", "community.edit.breadcrumbs": "Bereich bearbeiten", + // "community.edit.logo.delete.title": "Delete logo", + "community.edit.logo.delete.title": "Logo löschen", + + // "community-collection.edit.logo.delete.title": "Confirm deletion", + "community-collection.edit.logo.delete.title": "Bestätigen Sie die Löschung", + + // "community.edit.logo.delete-undo.title": "Undo delete", + "community.edit.logo.delete-undo.title": "Löschen rückgängig machen", + + // "community-collection.edit.logo.delete-undo.title": "Undo delete", + "community-collection.edit.logo.delete-undo.title": "Löschen rückgängig machen", // "community.edit.logo.label": "Community logo", "community.edit.logo.label": "Bereichslogo", - // "community.edit.logo.notifications.add.error": "Uploading Community logo failed. Please verify the content before retrying.", + // "community.edit.logo.notifications.add.error": "Uploading community logo failed. Please verify the content before retrying.", "community.edit.logo.notifications.add.error": "Hochladen des Bereichslogos fehlgeschlagen. Bitte überprüfen Sie den Inhalt bevor Sie es erneut versuchen.", - // "community.edit.logo.notifications.add.success": "Upload Community logo successful.", + // "community.edit.logo.notifications.add.success": "Upload community logo successful.", "community.edit.logo.notifications.add.success": "Hochladen des Bereichslogos erfolgreich.", // "community.edit.logo.notifications.delete.success.title": "Logo deleted", @@ -1831,31 +2180,33 @@ // "community.edit.logo.notifications.delete.error.title": "Error deleting logo", "community.edit.logo.notifications.delete.error.title": "Fehler beim Löschen des Logos", - // "community.edit.logo.upload": "Drop a Community Logo to upload", + // "community.edit.logo.upload": "Drop a community logo to upload", "community.edit.logo.upload": "Ziehen Sie ein Bereichslogo herüber, um es hochzuladen", - - // "community.edit.notifications.success": "Successfully edited the Community", "community.edit.notifications.success": "Bereich erfolgreich bearbeitet", // "community.edit.notifications.unauthorized": "You do not have privileges to make this change", "community.edit.notifications.unauthorized": "Sie haben keine Berechtigung, diese Änderung vorzunehmen", - // "community.edit.notifications.error": "An error occured while editing the Community", + // "community.edit.notifications.error": "An error occured while editing the community", "community.edit.notifications.error": "Bei der Bearbeitung des Bereichs ist ein Fehler aufgetreten", - // "community.edit.return": "Return", + // "community.edit.return": "Back", "community.edit.return": "Zurück", - - // "community.edit.tabs.curate.head": "Curate", "community.edit.tabs.curate.head": "Datenpflege", // "community.edit.tabs.curate.title": "Community Edit - Curate", "community.edit.tabs.curate.title": "Bereich bearbeiten - Datenpflege", + // "community.edit.tabs.access-control.head": "Access Control", + "community.edit.tabs.access-control.head": "Zugriffskontrolle", + + // "community.edit.tabs.access-control.title": "Community Edit - Access Control", + "community.edit.tabs.access-control.title": "Bereich bearbeiten - Zugriffskontrolle", + // "community.edit.tabs.metadata.head": "Edit Metadata", "community.edit.tabs.metadata.head": "Metadaten bearbeiten", @@ -1874,12 +2225,11 @@ // "community.edit.tabs.authorizations.title": "Community Edit - Authorizations", "community.edit.tabs.authorizations.title": "Bereich bearbeiten - Berechtigungen", - - // "community.listelement.badge": "Community", "community.listelement.badge": "Bereich", - + // "community.logo": "Community logo", + "community.logo": "Bereichslogo", // "comcol-role.edit.no-group": "None", "comcol-role.edit.no-group": "Keine", @@ -1887,12 +2237,17 @@ // "comcol-role.edit.create": "Create", "comcol-role.edit.create": "Erstellen", + // "comcol-role.edit.create.error.title": "Failed to create a group for the '{{ role }}' role", + "comcol-role.edit.create.error.title": "Es konnte keine Gruppe für die Rolle '{{ role }}' erstellt werden", + // "comcol-role.edit.restrict": "Restrict", "comcol-role.edit.restrict": "Beschränken", // "comcol-role.edit.delete": "Delete", "comcol-role.edit.delete": "Löschen", + // "comcol-role.edit.delete.error.title": "Failed to delete the '{{ role }}' role's group", + "comcol-role.edit.delete.error.title": "Die Gruppe der Rolle '{{ role }}' konnte nicht gelöscht werden", // "comcol-role.edit.community-admin.name": "Administrators", "comcol-role.edit.community-admin.name": "Administrator:innen", @@ -1900,21 +2255,18 @@ // "comcol-role.edit.collection-admin.name": "Administrators", "comcol-role.edit.collection-admin.name": "Administrator:innen", - // "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": "Community-Administrator:innen können Teilbereiche oder Sammlungen erstellen, verwalten oder die Verwaltung anderen zuweisen. Darüber hinaus entscheiden sie, wer Items zu einer Teilsammlung einreichen, Item-Metadaten bearbeiten (nach der Einreichung) und bestehende Items von anderen Sammlungen verknüpfen kann (vorbehaltlich einer Berechtigung).", // "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": "Sammlungsadministrator:innen entscheiden, wer Items zu einer Sammlung einreichen, Item-Metadaten bearbeiten (nach der Einreichung) and und bestehende Items von anderen Sammlungen mit dieser Sammlung verknüpfen kann (vorbehaltlich einer Berechtigung für diese Sammlung).", - // "comcol-role.edit.submitters.name": "Submitters", "comcol-role.edit.submitters.name": "Einreichende", // "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": "Personen und Gruppen, die neue Items für diese Sammlung einreichen dürfen", - // "comcol-role.edit.item_read.name": "Default item read access", "comcol-role.edit.item_read.name": "Standardeinstellungen für den Lesezugriff auf Items", @@ -1924,38 +2276,38 @@ // "comcol-role.edit.item_read.anonymous-group": "Default read for incoming items is currently set to Anonymous.", "comcol-role.edit.item_read.anonymous-group": "Freigeschaltete Items sind standardmäßig für jede:n öffentlich sichtbar.", - // "comcol-role.edit.bitstream_read.name": "Default bitstream read access", "comcol-role.edit.bitstream_read.name": "Standardeinstellungen für den Lesezugriff auf Dateien", - // "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": "Community-Administrator:innen können Teilbereiche oder Sammlungen erstellen, verwalten oder die Verwaltung anderen zuweisen. Darüber hinaus entscheiden sie, wer Items zu einer Teilsammlung einreichen, Item-Metadaten bearbeiten (nach der Einreichung) und bestehende Items von anderen Sammlungen verknüpfen kann (vorbehaltlich einer Berechtigung).", + // "comcol-role.edit.bitstream_read.description": "E-People and Groups that can read new bitstreams submitted to this collection. Changes to this role are not retroactive. Existing bitstreams in the system will still be viewable by those who had read access at the time of their addition.", + "comcol-role.edit.bitstream_read.description": "Personen und Gruppen, die neue Dateien lesen können, die in dieser Sammlung eingereicht wurden. Änderungen an dieser Rolle sind nicht rückwirkend. Bestehende Dateien im System bleiben sichtbar für diejenigen, die zum Zeitpunkt der Veröffentlichung Lesezugriff hatten.", // "comcol-role.edit.bitstream_read.anonymous-group": "Default read for incoming bitstreams is currently set to Anonymous.", "comcol-role.edit.bitstream_read.anonymous-group": "Freigeschaltete Dateien sind standardmäßig für jede:n öffentlich sichtbar.", - // "comcol-role.edit.editor.name": "Editors", "comcol-role.edit.editor.name": "Redakteur:innen", // "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": "Die Redakteure können die Metadaten der eingehenden Beiträge bearbeiten und sie dann annehmen oder ablehnen.", - // "comcol-role.edit.finaleditor.name": "Final editors", "comcol-role.edit.finaleditor.name": "Endredakteur:innen", // "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": "Die Endredakteur:innen können die Metadaten der eingehenden Beiträge bearbeiten, sie können sie jedoch nicht ablehnen.", - // "comcol-role.edit.reviewer.name": "Reviewers", "comcol-role.edit.reviewer.name": "Prüfer:innen", // "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": "Die Prüfer:innen können eingehende Beiträge annehmen oder ablehnen. Sie können jedoch nicht die Metadaten der Einreichung bearbeiten.", + // "comcol-role.edit.scorereviewers.name": "Score Reviewers", + "comcol-role.edit.scorereviewers.name": "Score-Reviewer", + // "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": "Die Prüfer:innen können die eingehenden Einreichungen mit einer Punktzahl bewerten, die bestimmt, ob die Einreichung abgelehnt wird oder nicht.", // "community.form.abstract": "Short Description", "community.form.abstract": "Kurzbeschreibung", @@ -1990,13 +2342,14 @@ // "community.all-lists.head": "Subcommunities and Collections", "community.all-lists.head": "Teilbereiche in diesem Bereich", - // "community.sub-collection-list.head": "Collections of this Community", + // "community.search.results.head": "Search Results", + "community.search.results.head": "Suchergebnisse", + + // "community.sub-collection-list.head": "Collections in this Community", "community.sub-collection-list.head": "Sammlungen in diesem Bereich", - // "community.sub-community-list.head": "Communities of this Community", - "community.sub-community-list.head": "Teilbereiche in diesem Bereich", - - + // "community.sub-community-list.head": "Communities in this Community", + "community.sub-community-list.head": "Bereiche in diesem Bereich", // "cookies.consent.accept-all": "Accept all", "cookies.consent.accept-all": "Alle Cookies akzeptieren", @@ -2019,6 +2372,12 @@ // "cookies.consent.app.required.title": "(always required)", "cookies.consent.app.required.title": "(immer erforderlich)", + // "cookies.consent.app.disable-all.description": "Use this switch to enable or disable all services.", + "cookies.consent.app.disable-all.description": "Mit diesem Schalter können Sie alle Dienste aktivieren oder deaktivieren.", + + // "cookies.consent.app.disable-all.title": "Enable or disable all services", + "cookies.consent.app.disable-all.title": "Aktivieren oder Deaktivieren aller Dienste", + // "cookies.consent.update": "There were changes since your last visit, please update your consent.", "cookies.consent.update": "Seit Ihrem letzten Besuch haben sich Änderungen ergeben, bitte aktualisieren Sie Ihr Einverständnis.", @@ -2028,9 +2387,21 @@ // "cookies.consent.decline": "Decline", "cookies.consent.decline": "Ablehnen", + // "cookies.consent.ok": "That's ok", + "cookies.consent.ok": "Das ist in Ordnung.", + + // "cookies.consent.save": "Save", + "cookies.consent.save": "Speichern", + + // "cookies.consent.content-notice.title": "Cookie Consent", + "cookies.consent.content-notice.title": "Cookie-Zustimmung", + // "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": "Wir sammeln und verarbeiten Ihre personenbezogenen Daten für die folgenden Zwecke: Authentifikation, Einstellungen, Zustimmungen und Statistiken.
    Um mehr zu erfahren, lesen Sie bitte unsere {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": "Wir sammeln und verarbeiten Ihre persönlichen Daten für die folgenden Zwecke: Authentifizierung, Präferenzen, Bestätigung und Statistiken.", + // "cookies.consent.content-notice.learnMore": "Customize", "cookies.consent.content-notice.learnMore": "Anpassen", @@ -2046,7 +2417,11 @@ // "cookies.consent.content-modal.title": "Information that we collect", "cookies.consent.content-modal.title": "Information, die wir sammeln", + // "cookies.consent.content-modal.services": "services", + "cookies.consent.content-modal.services": "Dienstleistungen", + // "cookies.consent.content-modal.service": "service", + "cookies.consent.content-modal.service": "Dienstleistung", // "cookies.consent.app.title.authentication": "Authentication", "cookies.consent.app.title.authentication": "Authentifizierung", @@ -2054,30 +2429,29 @@ // "cookies.consent.app.description.authentication": "Required for signing you in", "cookies.consent.app.description.authentication": "Erforderlich für Ihre Anmeldung", - // "cookies.consent.app.title.preferences": "Preferences", "cookies.consent.app.title.preferences": "Präferenzen", // "cookies.consent.app.description.preferences": "Required for saving your preferences", "cookies.consent.app.description.preferences": "Erforderlich zum Speichern Ihrer Präferenzen", - - // "cookies.consent.app.title.acknowledgement": "Acknowledgement", "cookies.consent.app.title.acknowledgement": "Bestätigung", // "cookies.consent.app.description.acknowledgement": "Required for saving your acknowledgements and consents", "cookies.consent.app.description.acknowledgement": "Erforderlich für die Speicherung Ihrer Bestätigungen und Einwilligungen", - - // "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": "Gestattet es uns, statistische Daten zu erheben", + // "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": "Wir verwenden den Google reCAPTCHA Service während der Registrierung und Passwortwiederherstellung", // "cookies.consent.purpose.functional": "Functional", "cookies.consent.purpose.functional": "Funktionell", @@ -2085,8 +2459,16 @@ // "cookies.consent.purpose.statistical": "Statistical", "cookies.consent.purpose.statistical": "Statistisch", + // "cookies.consent.purpose.registration-password-recovery": "Registration and Password recovery", + "cookies.consent.purpose.registration-password-recovery": "Registrierung und Passwortwiederherstellung", - // "curation-task.task.checklinks.label": "Check Links in Metadata", + // "cookies.consent.purpose.sharing": "Sharing", + "cookies.consent.purpose.sharing": "Teilen", + + // "curation-task.task.citationpage.label": "Generate Citation Page", + "curation-task.task.citationpage.label": "Zitatseite generieren", + + // "curation-task.task.checklinks.label": "Check Links in Metadata", "curation-task.task.checklinks.label": "Links in Metadaten prüfen", // "curation-task.task.noop.label": "NOOP", @@ -2125,17 +2507,21 @@ // "curation.form.submit.error.content": "An error occured when trying to start the curation task.", "curation.form.submit.error.content": "Beim Versuch, die Datenpflegeroutine zu starten, ist ein Fehler aufgetreten.", + // "curation.form.submit.error.invalid-handle": "Couldn't determine the handle for this object", + "curation.form.submit.error.invalid-handle": "Der Handle für dieses Objekt konnte nicht ermittelt werden", + // "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": "Tipp: Geben Sie [your-handle-prefix]/0 ein, um eine Aufgabe für die ganze Website auszuführen. Nicht alle Aufgaben unterstützen diese Funktion.", - - // "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": "Sehr geehrte:r {{ recipientName }},\nLeider kann ich Ihnen die angeforderte Datei zu meiner Veröffentlichung \"{{ itemUrl }}\" ({{ itemName }}) nicht schicken.\n\nMit freundlichen Grüßen\n{{ authorName }} <{{ authorEmail }}>", + // "deny-request-copy.email.subject": "Request copy of document", + "deny-request-copy.email.subject": "Kopie des Dokuments anfordern", + // "deny-request-copy.error": "An error occurred", "deny-request-copy.error": "Es ist ein Fehler aufgetreten.", @@ -2148,6 +2534,18 @@ // "deny-request-copy.success": "Successfully denied item request", "deny-request-copy.success": "Anfrage abgelehnt", + // "dropdown.clear": "Clear selection", + "dropdown.clear": "Auswahl löschen", + + // "dropdown.clear.tooltip": "Clear the selected option", + "dropdown.clear.tooltip": "Die ausgewählte Option löschen", + + // "dso.name.untitled": "Untitled", + "dso.name.untitled": "Unbenannt", + + // "dso.name.unnamed": "Unnamed", + "dso.name.unnamed": "Unbenannt", + // "dso-selector.create.collection.head": "New collection", "dso-selector.create.collection.head": "Neue Sammlung", @@ -2157,6 +2555,9 @@ // "dso-selector.create.community.head": "New community", "dso-selector.create.community.head": "Neuer Bereich", + // "dso-selector.create.community.or-divider": "or", + "dso-selector.create.community.or-divider": "oder", + // "dso-selector.create.community.sub-level": "Create a new community in", "dso-selector.create.community.sub-level": "Einen neuen Bereich anlegen in", @@ -2181,15 +2582,33 @@ // "dso-selector.edit.item.head": "Edit item", "dso-selector.edit.item.head": "Item bearbeiten", + // "dso-selector.error.title": "An error occurred searching for a {{ type }}", + "dso-selector.error.title": "Bei der Suche nach einem {{ type }} ist ein Fehler aufgetreten", + // "dso-selector.export-metadata.dspaceobject.head": "Export metadata from", "dso-selector.export-metadata.dspaceobject.head": "Exportieren der Metadaten aus", + // "dso-selector.export-batch.dspaceobject.head": "Export Batch (ZIP) from", + "dso-selector.export-batch.dspaceobject.head": "Batch exportieren (ZIP) von", + + // "dso-selector.import-batch.dspaceobject.head": "Import batch from", + "dso-selector.import-batch.dspaceobject.head": "Batch importieren von", + // "dso-selector.no-results": "No {{ type }} found", "dso-selector.no-results": "Kein(e) {{ type }} gefunden", // "dso-selector.placeholder": "Search for a {{ type }}", "dso-selector.placeholder": "Suche nach {{ type }}", + // "dso-selector.placeholder.type.community": "community", + "dso-selector.placeholder.type.community": "Bereich", + + // "dso-selector.placeholder.type.collection": "collection", + "dso-selector.placeholder.type.collection": "Sammlung", + + // "dso-selector.placeholder.type.item": "item", + "dso-selector.placeholder.type.item": "Item", + // "dso-selector.select.collection.head": "Select a collection", "dso-selector.select.collection.head": "Sammlung auswählen", @@ -2199,10 +2618,65 @@ // "dso-selector.set-scope.community.button": "Search all of DSpace", "dso-selector.set-scope.community.button": "Alles durchsuchen", + // "dso-selector.set-scope.community.or-divider": "or", + "dso-selector.set-scope.community.or-divider": "oder", + // "dso-selector.set-scope.community.input-header": "Search for a community or collection", "dso-selector.set-scope.community.input-header": "Suche Bereich oder Sammlung", + // "dso-selector.claim.item.head": "Profile tips", + "dso-selector.claim.item.head": "Tipps zum Profil", + // "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": "Dies sind bestehende Profile, die mit Ihnen in Verbindung stehen könnten. Wenn Sie sich in einem dieser Profile wiedererkennen, wählen Sie es aus und beanspruchen es auf der Detailseite unter den Optionen. Andernfalls können Sie über die Schaltfläche unten ein neues Profil erstellen.", + + // "dso-selector.claim.item.not-mine-label": "None of these are mine", + "dso-selector.claim.item.not-mine-label": "Keines davon ist meins", + + // "dso-selector.claim.item.create-from-scratch": "Create a new one", + "dso-selector.claim.item.create-from-scratch": "Ein neues erstellen", + + // "dso-selector.results-could-not-be-retrieved": "Something went wrong, please refresh again ↻", + "dso-selector.results-could-not-be-retrieved": "Es ist ein Fehler aufgetreten, bitte aktualisieren Sie erneut ↻.", + + // "supervision-group-selector.header": "Supervision Group Selector", + "supervision-group-selector.header": "Auswahl der Beaufsichtigungsgruppe", + + // "supervision-group-selector.select.type-of-order.label": "Select a type of Order", + "supervision-group-selector.select.type-of-order.label": "Wählen Sie eine Art von Anfrage", + + // "supervision-group-selector.select.type-of-order.option.none": "NONE", + "supervision-group-selector.select.type-of-order.option.none": "KEINE", + + // "supervision-group-selector.select.type-of-order.option.editor": "EDITOR", + "supervision-group-selector.select.type-of-order.option.editor": "REDAKTION", + + // "supervision-group-selector.select.type-of-order.option.observer": "OBSERVER", + "supervision-group-selector.select.type-of-order.option.observer": "BEOBACHTER", + + // "supervision-group-selector.select.group.label": "Select a Group", + "supervision-group-selector.select.group.label": "Wählen Sie eine Gruppe", + + // "supervision-group-selector.button.cancel": "Cancel", + "supervision-group-selector.button.cancel": "Abbrechen", + + // "supervision-group-selector.button.save": "Save", + "supervision-group-selector.button.save": "Speichern", + + // "supervision-group-selector.select.type-of-order.error": "Please select a type of order", + "supervision-group-selector.select.type-of-order.error": "Bitte wählen Sie eine Art der Anfrage", + + // "supervision-group-selector.select.group.error": "Please select a group", + "supervision-group-selector.select.group.error": "Bitte wählen Sie eine Gruppe", + + // "supervision-group-selector.notification.create.success.title": "Successfully created supervision order for group {{ name }}", + "supervision-group-selector.notification.create.success.title": "Beaufsichtigungsauftrag für Gruppe {{ name }} erfolgreich erstellt", + + // "supervision-group-selector.notification.create.failure.title": "Error", + "supervision-group-selector.notification.create.failure.title": "Fehler", + + // "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": "Für dieses Item existiert bereits ein Beaufsichtigungsauftrag für die ausgewählte Gruppe", // "confirmation-modal.export-metadata.header": "Export metadata for {{ dsoName }}", "confirmation-modal.export-metadata.header": "Exportieren der Metadaten für {{ dsoName }}", @@ -2216,6 +2690,18 @@ // "confirmation-modal.export-metadata.confirm": "Export", "confirmation-modal.export-metadata.confirm": "Exportieren", + // "confirmation-modal.export-batch.header": "Export batch (ZIP) for {{ dsoName }}", + "confirmation-modal.export-batch.header": "Batch exportieren (ZIP) für {{ dsoName }}", + + // "confirmation-modal.export-batch.info": "Are you sure you want to export batch (ZIP) for {{ dsoName }}", + "confirmation-modal.export-batch.info": "Sind Sie sicher, dass Sie einen Batch (ZIP) für {{ dsoName }} exportieren möchten?", + + // "confirmation-modal.export-batch.cancel": "Cancel", + "confirmation-modal.export-batch.cancel": "Abbrechen", + + // "confirmation-modal.export-batch.confirm": "Export", + "confirmation-modal.export-batch.confirm": "Exportieren", + // "confirmation-modal.delete-eperson.header": "Delete EPerson \"{{ dsoName }}\"", "confirmation-modal.delete-eperson.header": "Person \"{{ dsoName }}\" löschen", @@ -2228,9 +2714,32 @@ // "confirmation-modal.delete-eperson.confirm": "Delete", "confirmation-modal.delete-eperson.confirm": "Löschen", + // "confirmation-modal.delete-community-collection-logo.info": "Are you sure you want to delete the logo?", + "confirmation-modal.delete-community-collection-logo.info": "Sind Sie sicher, dass Sie das Logo löschen wollen?", - // "dso.name.untitled": "Untitled", - "dso.name.untitled": "Unbenannt", + // "confirmation-modal.delete-profile.header": "Delete Profile", + "confirmation-modal.delete-profile.header": "Profil löschen", + + // "confirmation-modal.delete-profile.info": "Are you sure you want to delete your profile", + "confirmation-modal.delete-profile.info": "Sind Sie sicher, dass Sie Ihr Profil löschen möchten?", + + // "confirmation-modal.delete-profile.cancel": "Cancel", + "confirmation-modal.delete-profile.cancel": "Abbrechen", + + // "confirmation-modal.delete-profile.confirm": "Delete", + "confirmation-modal.delete-profile.confirm": "Löschen", + + // "confirmation-modal.delete-subscription.header": "Delete Subscription", + "confirmation-modal.delete-subscription.header": "Abonnement löschen", + + // "confirmation-modal.delete-subscription.info": "Are you sure you want to delete subscription for \"{{ dsoName }}\"", + "confirmation-modal.delete-subscription.info": "Sind Sie sicher, dass Sie das Abonnement für \"{{ dsoName }}\" löschen möchten?", + + // "confirmation-modal.delete-subscription.cancel": "Cancel", + "confirmation-modal.delete-subscription.cancel": "Abbrechen", + + // "confirmation-modal.delete-subscription.confirm": "Delete", + "confirmation-modal.delete-subscription.confirm": "Löschen", // "error.bitstream": "Error fetching bitstream", "error.bitstream": "Die Datei konnte nicht geladen werden.", @@ -2253,9 +2762,6 @@ // "error.default": "Error", "error.default": "Fehler", - // "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": "Ihre Suchanfrage ist ungültig. Weitere Informationen zur Syntax für Solr-Queries finden Sie hier.", - // "error.item": "Error fetching item", "error.item": "Fehler beim Laden des Items", @@ -2271,6 +2777,9 @@ // "error.search-results": "Error fetching search results", "error.search-results": "Fehler beim Laden der Suchergebnisse", + // "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": "Ihre Suchanfrage ist ungültig. Weitere Informationen zur Syntax für Solr-Queries finden Sie hier.", + // "error.sub-collections": "Error fetching sub-collections", "error.sub-collections": "Fehler beim Laden der Teilsammlungen", @@ -2283,15 +2792,6 @@ // "error.top-level-communities": "Error fetching top-level communities", "error.top-level-communities": "Hauptbereich konnte nicht geladen werden", - // "error.validation.NotValidEmail": "This E-mail is not a valid email", - "error.validation.NotValidEmail": "Ungültige E-Mail-Adresse", - - // "error.validation.emailTaken": "This E-mail is already taken", - "error.validation.emailTaken": "Diese E-Mail-Adresse wird schon verwendet.", - - // "error.validation.groupExists": "This group already exists", - "error.validation.groupExists": "Diese Gruppe existiert schon.", - // "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": "Um die Veröffentlichung abzuschließen, müssen Sie die Lizenzbedingungen akzeptieren. Wenn Sie zur Zeit dazu nicht in der Lage sind, können Sie Ihre Arbeit sichern und später dazu zurückkehren, um zuzustimmen oder die Einreichung zu löschen.", @@ -2301,25 +2801,54 @@ // "error.validation.filerequired": "The file upload is mandatory", "error.validation.filerequired": "Das Hochladen einer Datei ist erforderlich.", - - // "error.validation.required": "This field is required", "error.validation.required": "Dieses Feld darf nicht leer bleiben.", + // "error.validation.NotValidEmail": "This is not a valid email", + "error.validation.NotValidEmail": "Das ist keine gültige E-Mail", + + // "error.validation.emailTaken": "This email is already taken", + "error.validation.emailTaken": "Diese E-Mail wird schon verwendet.", + + // "error.validation.groupExists": "This group already exists", + "error.validation.groupExists": "Diese Gruppe existiert schon.", + + // "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": "Dieses Feld darf keine Punkte, Kommas oder Leerzeichen enthalten. Bitte verwenden Sie stattdessen die Felder Element & Qualifier", + + // "error.validation.metadata.name.max-length": "This field may not contain more than 32 characters", + "error.validation.metadata.name.max-length": "Dieses Feld darf nicht mehr als 32 Zeichen enthalten", + + // "error.validation.metadata.namespace.max-length": "This field may not contain more than 256 characters", + "error.validation.metadata.namespace.max-length": "Dieses Feld darf nicht mehr als 256 Zeichen enthalten", + + // "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": "Dieses Feld darf keine Punkte, Kommas oder Leerzeichen enthalten. Bitte verwenden Sie stattdessen das Feld Qualifier", + + // "error.validation.metadata.element.max-length": "This field may not contain more than 64 characters", + "error.validation.metadata.element.max-length": "Dieses Feld darf nicht mehr als 64 Zeichen enthalten", + + // "error.validation.metadata.qualifier.invalid-pattern": "This field cannot contain dots, commas or spaces", + "error.validation.metadata.qualifier.invalid-pattern": "Dieses Feld darf keine Punkte, Kommas oder Leerzeichen enthalten.", + + // "error.validation.metadata.qualifier.max-length": "This field may not contain more than 64 characters", + "error.validation.metadata.qualifier.max-length": "Dieses Feld darf nicht mehr als 64 Zeichen enthalten", + + // "feed.description": "Syndication feed", + "feed.description": "Syndication-Feed", + + // "file-download-link.restricted": "Restricted bitstream", + "file-download-link.restricted": "Eingeschränkte Datei", + // "file-section.error.header": "Error obtaining files for this item", "file-section.error.header": "Fehler beim Abrufen der Dateien für dieses Item", - - // "footer.copyright": "copyright © 2002-{{ year }}", "footer.copyright": "Copyright © 2002-{{ year }}", // "footer.link.dspace": "DSpace software", "footer.link.dspace": "DSpace Software", - // "footer.link.feedback": "Send Feedback", - "footer.link.feedback": "Feedback schicken", - // "footer.link.lyrasis": "LYRASIS", "footer.link.lyrasis": "LYRASIS", @@ -2329,16 +2858,20 @@ // "footer.link.privacy-policy": "Privacy policy", "footer.link.privacy-policy": "Datenschutzbestimmungen", - // "footer.link.end-user-agreement":"End User Agreement", + // "footer.link.end-user-agreement": "End User Agreement", "footer.link.end-user-agreement": "Endnutzervereinbarung", + // "footer.link.feedback": "Send Feedback", + "footer.link.feedback": "Feedback schicken", + // "footer.link.coar-notify-support": "COAR Notify", + "footer.link.coar-notify-support": "COAR Notify", // "forgot-email.form.header": "Forgot Password", "forgot-email.form.header": "Passwort vergessen", - // "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": "Erstellen Sie ein Konto, um neue Einträge in DSpace hochzuladen und per E-Mail über Neuigkeiten informiert zu werden.", + // "forgot-email.form.info": "Enter the email address associated with the account.", + "forgot-email.form.info": "Geben Sie die mit dem Konto verbundene E-Mail-Adresse ein.", // "forgot-email.form.email": "Email Address *", "forgot-email.form.email": "E-Mail-Addresse *", @@ -2346,28 +2879,26 @@ // "forgot-email.form.email.error.required": "Please fill in an email address", "forgot-email.form.email.error.required": "Bitte geben Sie eine E-Mail-Adresse an.", - // "forgot-email.form.email.error.pattern": "Please fill in a valid email address", - "forgot-email.form.email.error.pattern": "Bitte geben Sie eine gültige E-Mail-Adresse an.", + // "forgot-email.form.email.error.not-email-form": "Please fill in a valid email address", + "forgot-email.form.email.error.not-email-form": "Bitte geben Sie eine gültige E-Mail-Adresse ein", - // "forgot-email.form.email.hint": "This address will be verified and used as your login name.", - "forgot-email.form.email.hint": "Diese Adresse wird überprüft und als Ihr Anmeldename verwendet.", + // "forgot-email.form.email.hint": "An email will be sent to this address with a further instructions.", + "forgot-email.form.email.hint": "An diese Adresse wird eine E-Mail mit weiteren Anweisungen geschickt.", - // "forgot-email.form.submit": "Submit", - "forgot-email.form.submit": "Einreichen", + // "forgot-email.form.submit": "Reset password", + "forgot-email.form.submit": "Passwort zurücksetzen", - // "forgot-email.form.success.head": "Verification email sent", - "forgot-email.form.success.head": "Verifizierungs-E-Mail gesendet", + // "forgot-email.form.success.head": "Password reset email sent", + "forgot-email.form.success.head": "E-Mail zum Zurücksetzen des Passworts gesendet", // "forgot-email.form.success.content": "An email has been sent to {{ email }} containing a special URL and further instructions.", "forgot-email.form.success.content": "Eine E-Mail mit weitergehenden Informationen wurde an {{ email }} verschickt.", - // "forgot-email.form.error.head": "Error when trying to register email", - "forgot-email.form.error.head": "Registrierung der E-Mail-Adresse fehlgeschlagen", - - // "forgot-email.form.error.content": "An error occured when registering the following email address: {{ email }}", - "forgot-email.form.error.content": "Bei der Registrierung der E-Mail-Adresse {{ email }} ist ein Fehler aufgetreten.", - + // "forgot-email.form.error.head": "Error when trying to reset password", + "forgot-email.form.error.head": "Fehler beim Versuch, das Passwort zurückzusetzen", + // "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": "Beim Versuch, das Kennwort für das Konto zurückzusetzen, das mit der folgenden E-Mail-Adresse verknüpft ist, ist ein Fehler aufgetreten: {{ email }}", // "forgot-password.title": "Forgot Password", "forgot-password.title": "Passwort vergessen", @@ -2385,7 +2916,7 @@ "forgot-password.form.identification.header": "Identifizieren", // "forgot-password.form.identification.email": "Email address: ", - "forgot-password.form.identification.email": "E-Mail-Addresse: ", + "forgot-password.form.identification.email": "E-Mail-Adresse: ", // "forgot-password.form.label.password": "Password", "forgot-password.form.label.password": "Passwort", @@ -2393,15 +2924,12 @@ // "forgot-password.form.label.passwordrepeat": "Retype to confirm", "forgot-password.form.label.passwordrepeat": "Zum Bestätigen wiederholen", - // "forgot-password.form.error.empty-password": "Please enter a password in the box below.", - "forgot-password.form.error.empty-password": "Bitte geben Sie unten ein Passwort ein.", + // "forgot-password.form.error.empty-password": "Please enter a password in the boxes above.", + "forgot-password.form.error.empty-password": "Bitte geben Sie ein Passwort in die obigen Felder ein.", // "forgot-password.form.error.matching-passwords": "The passwords do not match.", "forgot-password.form.error.matching-passwords": "Die Passwörter stimmen nicht überein.", - // "forgot-password.form.error.password-length": "The password should be at least 6 characters long.", - "forgot-password.form.error.password-length": "Das Passwort sollte mindestens 6 Zeichen lang sein.", - // "forgot-password.form.notification.error.title": "Error when trying to submit new password", "forgot-password.form.notification.error.title": "Fehler beim Versuch, ein neues Passwort zu übermitteln", @@ -2414,10 +2942,8 @@ // "forgot-password.form.submit": "Submit password", "forgot-password.form.submit": "Passwort abschicken", - - - // "form.add": "Add", - "form.add": "Hinzufügen", + // "form.add": "Add more", + "form.add": "Mehr hinzufügen", // "form.add-help": "Click here to add the current entry and to add another one", "form.add-help": "Klicken Sie hier, um den aktuellen Eintrag und einen weiteren hinzuzufügen", @@ -2434,6 +2960,9 @@ // "form.discard": "Discard", "form.discard": "Verwerfen", + // "form.drag": "Drag", + "form.drag": "Ziehen", + // "form.edit": "Edit", "form.edit": "Bearbeiten", @@ -2473,6 +3002,24 @@ // "form.no-value": "No value entered", "form.no-value": "Kein Wert eingegeben", + // "form.other-information.email": "Email", + "form.other-information.email": "E-Mail", + + // "form.other-information.first-name": "First Name", + "form.other-information.first-name": "Vorname", + + // "form.other-information.insolr": "In Solr Index", + "form.other-information.insolr": "Im Solr-Index", + + // "form.other-information.institution": "Institution", + "form.other-information.institution": "Einrichtung", + + // "form.other-information.last-name": "Last Name", + "form.other-information.last-name": "Nachname", + + // "form.other-information.orcid": "ORCID", + "form.other-information.orcid": "ORCID", + // "form.remove": "Remove", "form.remove": "Entfernen", @@ -2488,10 +3035,20 @@ // "form.search-help": "Click here to look for an existing correspondence", "form.search-help": "Klicken Sie hier, um eine Übereinstimmung zu suchen", - // "form.submit": "Submit", - "form.submit": "Abschicken", + // "form.submit": "Save", + "form.submit": "Speichern", + // "form.create": "Create", + "form.create": "Erstellen.", + // "form.number-picker.decrement": "Decrement {{field}}", + "form.number-picker.decrement": "Dekrement {{field}}", + + // "form.number-picker.increment": "Increment {{field}}", + "form.number-picker.increment": "Inkrement {{feld}}", + + // "form.repeatable.sort.tip": "Drop the item in the new position", + "form.repeatable.sort.tip": "Ablegen des Items an der neuen Position", // "grant-deny-request-copy.deny": "Don't send copy", "grant-deny-request-copy.deny": "Anfrage ablehnen", @@ -2499,8 +3056,8 @@ // "grant-deny-request-copy.email.back": "Back", "grant-deny-request-copy.email.back": "Zurück", - // "grant-deny-request-copy.email.message": "Message", - "grant-deny-request-copy.email.message": "Nachricht", + // "grant-deny-request-copy.email.message": "Optional additional message", + "grant-deny-request-copy.email.message": "Optionale zusätzliche Nachricht", // "grant-deny-request-copy.email.message.empty": "Please enter a message", "grant-deny-request-copy.email.message.empty": "Bitte geben Sie eine Nachricht ein.", @@ -2523,14 +3080,95 @@ // "grant-deny-request-copy.grant": "Send copy", "grant-deny-request-copy.grant": "Datei senden", + // "grant-deny-request-copy.header": "Document copy request", + "grant-deny-request-copy.header": "Anfrage einer Dokumentenkopie", + // "grant-deny-request-copy.home-page": "Take me to the home page", "grant-deny-request-copy.home-page": "Zur Startseite", // "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": "Wenn Sie ein:e Autor:in des Dokuments {{ name }} sind, wählen Sie bitte eine der Antwortmöglichkeiten aus#.", - // "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": "Sehr geehrte:r {{ recipientName }}, vielen Dank für Ihre Anfrage. Gerne schicke ich Ihnen die Datei zu meiner Veröffentlichung: \"{{ itemUrl }}\" ({{ itemName }}). \nMit freundlichen Grüßen,\n{{ authorName }} <{{ authorEmail }}>", + // "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": "Nachdem Sie eine Option ausgewählt haben, wird Ihnen ein Vorschlag für eine E-Mail-Antwort angezeigt, den Sie bearbeiten können.", + + // "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": "Diese Anfrage ist bereits bearbeitet worden. Sie können die Schaltfläche unten verwenden, um zur Startseite zurückzukehren.", + + // "grant-request-copy.email.subject": "Request copy of document", + "grant-request-copy.email.subject": "Kopie des Dokuments anfordern", + + // "grant-request-copy.error": "An error occurred", + "grant-request-copy.error": "Es ist ein Fehler aufgetreten", + + // "grant-request-copy.header": "Grant document copy request", + "grant-request-copy.header": "Anforderung von Dokumentkopien gewähren", + + // "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": "Dem Antragsteller wird eine Nachricht über die Anfrage übermittelt. Die angeforderten Dokumente werden beigefügt.", + + // "grant-request-copy.success": "Successfully granted item request", + "grant-request-copy.success": "Itemanfrage erfolgreich gewährt", + + // "health.breadcrumbs": "Health", + "health.breadcrumbs": "Systemgesundheit", + + // "health-page.heading": "Health", + "health-page.heading": "Systemgesundheit", + + // "health-page.info-tab": "Info", + "health-page.info-tab": "Info", + + // "health-page.status-tab": "Status", + "health-page.status-tab": "Status", + + // "health-page.error.msg": "The health check service is temporarily unavailable", + "health-page.error.msg": "Der Gesundheitscheckdienst ist vorübergehend nicht verfügbar", + + // "health-page.property.status": "Status code", + "health-page.property.status": "Statuscode", + + // "health-page.section.db.title": "Database", + "health-page.section.db.title": "Datenbank", + + // "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": "Backend der Anwendung", + + // "health-page.section-info.java.title": "Java", + "health-page.section-info.java.title": "Java", + + // "health-page.status": "Status", + "health-page.status": "Status", + + // "health-page.status.ok.info": "Operational", + "health-page.status.ok.info": "Operativ", + + // "health-page.status.error.info": "Problems detected", + "health-page.status.error.info": "Probleme entdeckt", + + // "health-page.status.warning.info": "Possible issues detected", + "health-page.status.warning.info": "Mögliche Probleme entdeckt", + + // "health-page.title": "Health", + "health-page.title": "Systemgesundheit", + + // "health-page.section.no-issues": "No issues detected", + "health-page.section.no-issues": "Keine Probleme festgestellt", // "home.description": "", "home.description": "", @@ -2550,8 +3188,6 @@ // "home.top-level-communities.help": "Select a community to browse its collections.", "home.top-level-communities.help": "Wählen Sie einen Bereich, um dessen Inhalt anzusehen.", - - // "info.end-user-agreement.accept": "I have read and I agree to the End User Agreement", "info.end-user-agreement.accept": "Ich habe die Endnutzer-Vereinbarung gelesen und stimme ihr zu.", @@ -2576,6 +3212,9 @@ // "info.end-user-agreement.title": "End User Agreement", "info.end-user-agreement.title": "Endnutzer-Vereinbarung", + // "info.end-user-agreement.hosting-country": "the United States", + "info.end-user-agreement.hosting-country": "die Vereinigten Staaten", + // "info.privacy.breadcrumbs": "Privacy Statement", "info.privacy.breadcrumbs": "Datenschutzerklärung", @@ -2624,14 +3263,23 @@ // "info.feedback.page_help": "The page related to your feedback", "info.feedback.page_help": "Dies ist die URL der Seite, auf die sich Ihr Feedback bezieht.", + // "info.coar-notify-support.title": "COAR Notify Support", + "info.coar-notify-support.title": "COAR-Notify-Unterstützung", - // "item.alerts.private": "This item is private", - "item.alerts.private": "Dieses Item ist nicht öffentlich sichtbar.", + // "info.coar-notify-support.breadcrumbs": "COAR Notify Support", + "info.coar-notify-support.breadcrumbs": "COAR-Notify-Unterstützung", + + // "item.alerts.private": "This item is non-discoverable", + "item.alerts.private": "Dieses Item ist nicht auffindbar.", // "item.alerts.withdrawn": "This item has been withdrawn", "item.alerts.withdrawn": "Dieses Item wurde zurückgezogen.", + // "item.alerts.reinstate-request": "Request reinstate", + "item.alerts.reinstate-request": "Wiederherstellung anfragen", + // "quality-assurance.event.table.person-who-requested": "Requested by", + "quality-assurance.event.table.person-who-requested": "Angefragt von", // "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": "Mit diesem Editor können Sie die Richtlinien für Items sowie für einzelne Item-Komponenten (Pakete und Bitstreams) anzeigen und ändern. Ein Item ist ein Container für Pakete, und ein Paket ist ein Container für Bitstreams. Container haben normalerweise ADD/REMOVE/READ/WRITE-Richtlinien, während Bitstreams nur READ/WRITE-Richtlinien haben.", @@ -2639,21 +3287,17 @@ // "item.edit.authorizations.title": "Edit item's Policies", "item.edit.authorizations.title": "Item-Richtlinien bearbeiten", - - - // "item.badge.private": "Private", - "item.badge.private": "Verborgen", + // "item.badge.private": "Non-discoverable", + "item.badge.private": "Nicht auffindbar", // "item.badge.withdrawn": "Withdrawn", "item.badge.withdrawn": "Zurückgezogen", - - // "item.bitstreams.upload.bundle": "Bundle", "item.bitstreams.upload.bundle": "Bündel", - // "item.bitstreams.upload.bundle.placeholder": "Select a bundle", - "item.bitstreams.upload.bundle.placeholder": "Wählen Sie ein Bündel aus", + // "item.bitstreams.upload.bundle.placeholder": "Select a bundle or input new bundle name", + "item.bitstreams.upload.bundle.placeholder": "Wählen Sie ein Bündel oder geben Sie einen neuen Bündelnamen ein", // "item.bitstreams.upload.bundle.new": "Create bundle", "item.bitstreams.upload.bundle.new": "Bündel erstellen", @@ -2682,8 +3326,6 @@ // "item.bitstreams.upload.title": "Upload bitstream", "item.bitstreams.upload.title": "Datei hochladen", - - // "item.edit.bitstreams.bundle.edit.buttons.upload": "Upload", "item.edit.bitstreams.bundle.edit.buttons.upload": "Hochladen", @@ -2774,8 +3416,6 @@ // "item.edit.bitstreams.upload-button": "Upload", "item.edit.bitstreams.upload-button": "Hochladen", - - // "item.edit.delete.cancel": "Cancel", "item.edit.delete.cancel": "Abbrechen", @@ -2800,6 +3440,8 @@ // "item.edit.breadcrumbs": "Edit Item", "item.edit.breadcrumbs": "Item bearbeiten", + // "item.edit.tabs.disabled.tooltip": "You're not authorized to access this tab", + "item.edit.tabs.disabled.tooltip": "Sie sind nicht berechtigt, auf diesen Reiter zuzugreifen", // "item.edit.tabs.mapper.head": "Collection Mapper", "item.edit.tabs.mapper.head": "Spiegeln", @@ -2807,6 +3449,69 @@ // "item.edit.tabs.item-mapper.title": "Item Edit - Collection Mapper", "item.edit.tabs.item-mapper.title": "Item bearbeiten - Spiegeln", + // "item.edit.identifiers.doi.status.UNKNOWN": "Unknown", + "item.edit.identifiers.doi.status.UNKNOWN": "Unbekannt", + + // "item.edit.identifiers.doi.status.TO_BE_REGISTERED": "Queued for registration", + "item.edit.identifiers.doi.status.TO_BE_REGISTERED": "Zur Registrierung vorgemerkt", + + // "item.edit.identifiers.doi.status.TO_BE_RESERVED": "Queued for reservation", + "item.edit.identifiers.doi.status.TO_BE_RESERVED": "Zur Reservierung vorgemerkt", + + // "item.edit.identifiers.doi.status.IS_REGISTERED": "Registered", + "item.edit.identifiers.doi.status.IS_REGISTERED": "Registriert", + + // "item.edit.identifiers.doi.status.IS_RESERVED": "Reserved", + "item.edit.identifiers.doi.status.IS_RESERVED": "Reserviert", + + // "item.edit.identifiers.doi.status.UPDATE_RESERVED": "Reserved (update queued)", + "item.edit.identifiers.doi.status.UPDATE_RESERVED": "Reserviert (Update vorgemerkt)", + + // "item.edit.identifiers.doi.status.UPDATE_REGISTERED": "Registered (update queued)", + "item.edit.identifiers.doi.status.UPDATE_REGISTERED": "Registriert (Update vorgemerkt)", + + // "item.edit.identifiers.doi.status.UPDATE_BEFORE_REGISTRATION": "Queued for update and registration", + "item.edit.identifiers.doi.status.UPDATE_BEFORE_REGISTRATION": "Für Update und Registrierung vorgemerkt", + + // "item.edit.identifiers.doi.status.TO_BE_DELETED": "Queued for deletion", + "item.edit.identifiers.doi.status.TO_BE_DELETED": "Zur Löschung vorgemerkt", + + // "item.edit.identifiers.doi.status.DELETED": "Deleted", + "item.edit.identifiers.doi.status.DELETED": "Gelöscht", + + // "item.edit.identifiers.doi.status.PENDING": "Pending (not registered)", + "item.edit.identifiers.doi.status.PENDING": "Ausstehend (nicht registriert)", + + // "item.edit.identifiers.doi.status.MINTED": "Minted (not registered)", + "item.edit.identifiers.doi.status.MINTED": "Zugeordnet (nicht registriert)", + + // "item.edit.tabs.status.buttons.register-doi.label": "Register a new or pending DOI", + "item.edit.tabs.status.buttons.register-doi.label": "Registrieren eines neuen oder ausstehenden DOI", + + // "item.edit.tabs.status.buttons.register-doi.button": "Register DOI...", + "item.edit.tabs.status.buttons.register-doi.button": "DOI registrieren...", + + // "item.edit.register-doi.header": "Register a new or pending DOI", + "item.edit.register-doi.header": "Registrierung eines neuen oder ausstehenden 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": "Überprüfen Sie alle ausstehenden Identifier und Item-Metadaten unten und klicken Sie auf Bestätigen, um mit der DOI-Registrierung fortzufahren, oder auf Abbrechen, um den Vorgang abzubrechen.", + + // "item.edit.register-doi.confirm": "Confirm", + "item.edit.register-doi.confirm": "Bestätigen", + + // "item.edit.register-doi.cancel": "Cancel", + "item.edit.register-doi.cancel": "Abbrechen", + + // "item.edit.register-doi.success": "DOI queued for registration successfully.", + "item.edit.register-doi.success": "DOI wurde erfolgreich für die Registrierung vorgemerkt.", + + // "item.edit.register-doi.error": "Error registering DOI", + "item.edit.register-doi.error": "Fehler bei der Registrierung des 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": "Der folgende DOI wurde bereits zugeordnet und wird für die Online-Registrierung vorgemerkt", + // "item.edit.item-mapper.buttons.add": "Map item to selected collections", "item.edit.item-mapper.buttons.add": "Item in die gewählte(n) Sammlung(en) spiegeln", @@ -2852,20 +3557,36 @@ // "item.edit.item-mapper.notifications.remove.success.head": "Removal of mapping completed", "item.edit.item-mapper.notifications.remove.success.head": "Entfernen der Spiegelung abgeschlossen", + // "item.edit.item-mapper.search-form.placeholder": "Search collections...", + "item.edit.item-mapper.search-form.placeholder": "Sammlungen durchsuchen...", + // "item.edit.item-mapper.tabs.browse": "Browse mapped collections", "item.edit.item-mapper.tabs.browse": "Gespiegelte Sammlungen anzeigen", // "item.edit.item-mapper.tabs.map": "Map new collections", "item.edit.item-mapper.tabs.map": "Neue Sammlungen spiegeln", - - // "item.edit.metadata.add-button": "Add", "item.edit.metadata.add-button": "Hinzufügen", // "item.edit.metadata.discard-button": "Discard", "item.edit.metadata.discard-button": "Verwerfen", + // "item.edit.metadata.edit.language": "Edit language", + "item.edit.metadata.edit.language": "Sprache bearbeiten", + + // "item.edit.metadata.edit.value": "Edit value", + "item.edit.metadata.edit.value": "Wert bearbeiten", + + // "item.edit.metadata.edit.authority.key": "Edit authority key", + "item.edit.metadata.edit.authority.key": "Authority-Key bearbeiten", + + // "item.edit.metadata.edit.buttons.confirm": "Confirm", + "item.edit.metadata.edit.buttons.confirm": "Bestätigen", + + // "item.edit.metadata.edit.buttons.drag": "Drag to reorder", + "item.edit.metadata.edit.buttons.drag": "Ziehen zum Neuordnen", + // "item.edit.metadata.edit.buttons.edit": "Edit", "item.edit.metadata.edit.buttons.edit": "Bearbeiten", @@ -2878,6 +3599,9 @@ // "item.edit.metadata.edit.buttons.unedit": "Stop editing", "item.edit.metadata.edit.buttons.unedit": "Bearbeitung beenden", + // "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": "Dies ist ein virtueller Metadatenwert, d. h. ein von einer verwandten Entität geerbter Wert. Er kann nicht direkt geändert werden. Fügen Sie die entsprechende Beziehung im Reiter \"Beziehungen\" hinzu oder entfernen Sie sie.", + // "item.edit.metadata.empty": "The item currently doesn't contain any metadata. Click Add to start adding a metadata value.", "item.edit.metadata.empty": "Das Item enthält derzeit keine Metadaten. Klicken Sie auf \"Hinzufügen\", um Metadaten zu ergänzen.", @@ -2893,13 +3617,19 @@ // "item.edit.metadata.headers.value": "Value", "item.edit.metadata.headers.value": "Wert", + // "item.edit.metadata.metadatafield": "Edit field", + "item.edit.metadata.metadatafield": "Feld bearbeiten", + + // "item.edit.metadata.metadatafield.error": "An error occurred validating the metadata field", + "item.edit.metadata.metadatafield.error": "Bei der Validierung des Metadatenfeldes ist ein Fehler aufgetreten", + // "item.edit.metadata.metadatafield.invalid": "Please choose a valid metadata field", "item.edit.metadata.metadatafield.invalid": "Bitte wählen Sie ein gültiges Metadatenfeld", // "item.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", "item.edit.metadata.notifications.discarded.content": "Ihre Änderungen wurden verworfen. Um sie wiederherzustellen, klicken Sie bitte auf \"Rückgängig\".", - // "item.edit.metadata.notifications.discarded.title": "Changed discarded", + // "item.edit.metadata.notifications.discarded.title": "Changes discarded", "item.edit.metadata.notifications.discarded.title": "Änderungen verworfen", // "item.edit.metadata.notifications.error.title": "An error occurred", @@ -2914,8 +3644,8 @@ // "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": "Das Item, an dem Sie gerade arbeiten, wurde von einem anderen Account geändert. Ihre aktuellen Änderungen werden nicht angewandt, um Konflikte zu vermeiden.", - // "item.edit.metadata.notifications.outdated.title": "Changed outdated", - "item.edit.metadata.notifications.outdated.title": "Änderung veraltet", + // "item.edit.metadata.notifications.outdated.title": "Changes outdated", + "item.edit.metadata.notifications.outdated.title": "Änderungen veraltet", // "item.edit.metadata.notifications.saved.content": "Your changes to this item's metadata were saved.", "item.edit.metadata.notifications.saved.content": "Ihre Änderungen an den Metadaten des Items wurden gespeichert.", @@ -2926,10 +3656,20 @@ // "item.edit.metadata.reinstate-button": "Undo", "item.edit.metadata.reinstate-button": "Rückgängig machen", + // "item.edit.metadata.reset-order-button": "Undo reorder", + "item.edit.metadata.reset-order-button": "Neuordnung rückgängig machen", + // "item.edit.metadata.save-button": "Save", "item.edit.metadata.save-button": "Speichern", + // "item.edit.metadata.authority.label": "Authority: ", + "item.edit.metadata.authority.label": "Authority:", + // "item.edit.metadata.edit.buttons.open-authority-edition": "Unlock the authority key value for manual editing", + "item.edit.metadata.edit.buttons.open-authority-edition": "Entsperren Sie den Wert des Authority-Keys für die manuelle Bearbeitung", + + // "item.edit.metadata.edit.buttons.close-authority-edition": "Lock the authority key value for manual editing", + "item.edit.metadata.edit.buttons.close-authority-edition": "Sperren Sie den Wert des Authority-Keys für die manuelle Bearbeitung", // "item.edit.modify.overview.field": "Field", "item.edit.modify.overview.field": "Feld", @@ -2940,10 +3680,14 @@ // "item.edit.modify.overview.value": "Value", "item.edit.modify.overview.value": "Wert", + // "item.edit.move.cancel": "Back", + "item.edit.move.cancel": "Zurück", + // "item.edit.move.save-button": "Save", + "item.edit.move.save-button": "Speichern", - // "item.edit.move.cancel": "Cancel", - "item.edit.move.cancel": "Abbrechen", + // "item.edit.move.discard-button": "Discard", + "item.edit.move.discard-button": "Verwerfen", // "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": "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.", @@ -2960,6 +3704,9 @@ // "item.edit.move.inheritpolicies.description": "Inherit the default policies of the destination collection", "item.edit.move.inheritpolicies.description": "Standardrechte der Zielsammlung erben", + // "item.edit.move.inheritpolicies.tooltip": "Warning: When enabled, the read access policy for the item and any files associated with the item will be replaced by the default read access policy of the collection. This cannot be undone.", + "item.edit.move.inheritpolicies.tooltip": "Warnung: Wenn diese Option aktiviert ist, wird die Lesezugriffsrichtlinie für das Item und alle mit dem Item verbundenen Dateien durch die Standard-Lesezugriffsrichtlinie der Sammlung ersetzt. Dies kann nicht rückgängig gemacht werden.", + // "item.edit.move.move": "Move", "item.edit.move.move": "Verschieben", @@ -2975,47 +3722,41 @@ // "item.edit.move.title": "Move item", "item.edit.move.title": "Item verschieben", - - // "item.edit.private.cancel": "Cancel", "item.edit.private.cancel": "Abbrechen", - // "item.edit.private.confirm": "Make it Private", - "item.edit.private.confirm": "Verbergen", + // "item.edit.private.confirm": "Make it non-discoverable", + "item.edit.private.confirm": "Nicht auffindbar machen", - // "item.edit.private.description": "Are you sure this item should be made private in the archive?", - "item.edit.private.description": "Möchten Sie diesen Eintrag als nicht öffentlich sichtbar markieren?", + // "item.edit.private.description": "Are you sure this item should be made non-discoverable in the archive?", + "item.edit.private.description": "Sind Sie sicher, dass dieses Item im Archiv nicht mehr auffindbar sein soll?", - // "item.edit.private.error": "An error occurred while making the item private", - "item.edit.private.error": "Verbergen des Items fehlgeschlagen", - - // "item.edit.private.header": "Make item private: {{ id }}", - "item.edit.private.header": "Item: {{ id }} verbergen", - - // "item.edit.private.success": "The item is now private", - "item.edit.private.success": "Dieses Items ist nicht öffentlich sichtbar", + // "item.edit.private.error": "An error occurred while making the item non-discoverable", + "item.edit.private.error": "Beim Ausschalten der Auffindbarkeit des Items ist ein Fehler aufgetreten", + // "item.edit.private.header": "Make item non-discoverable: {{ id }}", + "item.edit.private.header": "Item nicht auffindbar machen: {{ id }}", + // "item.edit.private.success": "The item is now non-discoverable", + "item.edit.private.success": "Dieses Items ist nun nicht auffindbar", // "item.edit.public.cancel": "Cancel", "item.edit.public.cancel": "Abbrechen", - // "item.edit.public.confirm": "Make it Public", - "item.edit.public.confirm": "Öffentlich machen", + // "item.edit.public.confirm": "Make it discoverable", + "item.edit.public.confirm": "Es auffindbar machen", - // "item.edit.public.description": "Are you sure this item should be made public in the archive?", - "item.edit.public.description": "Möchten Sie das Item wirklich öffentlich sichtbar machen?", + // "item.edit.public.description": "Are you sure this item should be made discoverable in the archive?", + "item.edit.public.description": "Möchten Sie das Item im Archiv wirklich auffindbar machen?", - // "item.edit.public.error": "An error occurred while making the item public", - "item.edit.public.error": "Veröffentlichung des Items fehlgeschlagen", - - // "item.edit.public.header": "Make item public: {{ id }}", - "item.edit.public.header": "Item: {{ id }} öffentlich sichtbar machen", - - // "item.edit.public.success": "The item is now public", - "item.edit.public.success": "Das Item ist nun öffentlich sichtbar.", + // "item.edit.public.error": "An error occurred while making the item discoverable", + "item.edit.public.error": "Beim Anschalten der Auffindbarkeit des Items ist ein Fehler aufgetreten", + // "item.edit.public.header": "Make item discoverable: {{ id }}", + "item.edit.public.header": "Item auffindbar machen: {{ id }}", + // "item.edit.public.success": "The item is now discoverable", + "item.edit.public.success": "Das Item ist nun auffindbar.", // "item.edit.reinstate.cancel": "Cancel", "item.edit.reinstate.cancel": "Abbrechen", @@ -3035,8 +3776,6 @@ // "item.edit.reinstate.success": "The item was reinstated successfully", "item.edit.reinstate.success": "Das Item wurde wiederhergestellt.", - - // "item.edit.relationships.discard-button": "Discard", "item.edit.relationships.discard-button": "Abbrechen", @@ -3082,7 +3821,8 @@ // "item.edit.relationships.no-entity-type": "Add 'dspace.entity.type' metadata to enable relationships for this item", "item.edit.relationships.no-entity-type": "Fügt den Metadaten 'dspace.entity.type' hinzu, damit Beziehungen für dieses Item angelegt werden können.", - + // "item.edit.return": "Back", + "item.edit.return": "Zurück", // "item.edit.tabs.bitstreams.head": "Bitstreams", "item.edit.tabs.bitstreams.head": "Dateien", @@ -3096,6 +3836,15 @@ // "item.edit.tabs.curate.title": "Item Edit - Curate", "item.edit.tabs.curate.title": "Item bearbeiten - Pflegen", + // "item.edit.curate.title": "Curate Item: {{item}}", + "item.edit.curate.title": "Item kuratieren: {{item}}", + + // "item.edit.tabs.access-control.head": "Access Control", + "item.edit.tabs.access-control.head": "Zugriffskontrolle", + + // "item.edit.tabs.access-control.title": "Item Edit - Access Control", + "item.edit.tabs.access-control.title": "Item bearbeiten - Zugriffskontrolle", + // "item.edit.tabs.metadata.head": "Metadata", "item.edit.tabs.metadata.head": "Metadaten", @@ -3132,17 +3881,17 @@ // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", "item.edit.tabs.status.buttons.move.label": "Item in eine andere Sammlung verschieben", - // "item.edit.tabs.status.buttons.private.button": "Make it private...", - "item.edit.tabs.status.buttons.private.button": "Verbergen", + // "item.edit.tabs.status.buttons.private.button": "Make it non-discoverable...", + "item.edit.tabs.status.buttons.private.button": "Es nicht auffindbar machen...", - // "item.edit.tabs.status.buttons.private.label": "Make item private", - "item.edit.tabs.status.buttons.private.label": "Item verbergen", + // "item.edit.tabs.status.buttons.private.label": "Make item non-discoverable", + "item.edit.tabs.status.buttons.private.label": "Item nicht auffindbar machen", - // "item.edit.tabs.status.buttons.public.button": "Make it public...", - "item.edit.tabs.status.buttons.public.button": "Öffentlich machen...", + // "item.edit.tabs.status.buttons.public.button": "Make it discoverable...", + "item.edit.tabs.status.buttons.public.button": "Es auffindbar machen...", - // "item.edit.tabs.status.buttons.public.label": "Make item public", - "item.edit.tabs.status.buttons.public.label": "Item öffentlich sichtbar machen", + // "item.edit.tabs.status.buttons.public.label": "Make item discoverable", + "item.edit.tabs.status.buttons.public.label": "Item auffindbar machen", // "item.edit.tabs.status.buttons.reinstate.button": "Reinstate...", "item.edit.tabs.status.buttons.reinstate.button": "Wiederherstellen...", @@ -3150,6 +3899,9 @@ // "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", "item.edit.tabs.status.buttons.reinstate.label": "Item im Repositorium wiederherstellen", + // "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", + "item.edit.tabs.status.buttons.unauthorized": "Sie sind nicht berechtigt, diese Aktion durchzuführen", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", "item.edit.tabs.status.buttons.withdraw.button": "Ziehen Sie diesen Artikel zurück", @@ -3192,8 +3944,6 @@ // "item.edit.tabs.view.title": "Item Edit - View", "item.edit.tabs.view.title": "Item bearbeiten - Ansicht", - - // "item.edit.withdraw.cancel": "Cancel", "item.edit.withdraw.cancel": "Abbrechen", @@ -3212,7 +3962,8 @@ // "item.edit.withdraw.success": "The item was withdrawn successfully", "item.edit.withdraw.success": "Das Item wurde zurückgezogen.", - + // "item.orcid.return": "Back", + "item.orcid.return": "Zurück", // "item.listelement.badge": "Item", "item.listelement.badge": "Item", @@ -3241,7 +3992,74 @@ // "item.search.title": "Item Search", "item.search.title": "Item-Suche", + // "item.truncatable-part.show-more": "Show more", + "item.truncatable-part.show-more": "Mehr anzeigen", + // "item.truncatable-part.show-less": "Collapse", + "item.truncatable-part.show-less": "Zusammenklappen", + + // "item.qa-event-notification.check.notification-info": "There are {{num}} pending suggestions related to your account", + "item.qa-event-notification.check.notification-info": "Es gibt {{num}} ausstehende Vorschläge in Bezug auf Ihr Konto", + + // "item.qa-event-notification-info.check.button": "View", + "item.qa-event-notification-info.check.button": "Anzeigen", + + // "mydspace.qa-event-notification.check.notification-info": "There are {{num}} pending suggestions related to your account", + "mydspace.qa-event-notification.check.notification-info": "Es gibt {{num}} ausstehende Vorschläge in Bezug auf Ihr Konto", + + // "mydspace.qa-event-notification-info.check.button": "View", + "mydspace.qa-event-notification-info.check.button": "Anzeigen", + + // "workflow-item.search.result.delete-supervision.modal.header": "Delete Supervision Order", + "workflow-item.search.result.delete-supervision.modal.header": "Beaufsichtigungsauftrag löschen", + + // "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": "Sind Sie sicher, dass Sie den Beaufsichtigungsauftrag löschen möchten?", + + // "workflow-item.search.result.delete-supervision.modal.cancel": "Cancel", + "workflow-item.search.result.delete-supervision.modal.cancel": "Abbrechen", + + // "workflow-item.search.result.delete-supervision.modal.confirm": "Delete", + "workflow-item.search.result.delete-supervision.modal.confirm": "Löschen", + + // "workflow-item.search.result.notification.deleted.success": "Successfully deleted supervision order \"{{name}}\"", + "workflow-item.search.result.notification.deleted.success": "Beaufsichtigungsauftrag \"{{name}}\" erfolgreich gelöscht", + + // "workflow-item.search.result.notification.deleted.failure": "Failed to delete supervision order \"{{name}}\"", + "workflow-item.search.result.notification.deleted.failure": "Beaufsichtigungsauftrag \",{{name}}\" konnte nicht gelöscht werden", + + // "workflow-item.search.result.list.element.supervised-by": "Supervised by:", + "workflow-item.search.result.list.element.supervised-by": "Beaufsichtigt von:", + + // "workflow-item.search.result.list.element.supervised.remove-tooltip": "Remove supervision group", + "workflow-item.search.result.list.element.supervised.remove-tooltip": "Beaufsichtigungsgruppe entfernen", + + // "confidence.indicator.help-text.accepted": "This authority value has been confirmed as accurate by an interactive user", + "confidence.indicator.help-text.accepted": "Dieser Authority-Wert wurde von einem interaktiven Benutzer als korrekt bestätigt", + + // "confidence.indicator.help-text.uncertain": "Value is singular and valid but has not been seen and accepted by a human so it is still uncertain", + "confidence.indicator.help-text.uncertain": "Der Wert ist einzigartig und gültig, aber er wurde noch nicht von einem Menschen gesehen und akzeptiert und ist daher noch ungesichert.", + + // "confidence.indicator.help-text.ambiguous": "There are multiple matching authority values of equal validity", + "confidence.indicator.help-text.ambiguous": "Es gibt mehrere übereinstimmende Authority-Werte von gleicher Gültigkeit", + + // "confidence.indicator.help-text.notfound": "There are no matching answers in the authority", + "confidence.indicator.help-text.notfound": "Es gibt keine übereinstimmenden Antworten in der Authority", + + // "confidence.indicator.help-text.failed": "The authority encountered an internal failure", + "confidence.indicator.help-text.failed": "Die Authority ist auf einen internen Fehler gestoßen", + + // "confidence.indicator.help-text.rejected": "The authority recommends this submission be rejected", + "confidence.indicator.help-text.rejected": "Die Authority empfiehlt, diese Einreichung abzulehnen.", + + // "confidence.indicator.help-text.novalue": "No reasonable confidence value was returned from the authority", + "confidence.indicator.help-text.novalue": "Von der Authority wurde kein angemessener Confidence-Wert zurückgegeben", + + // "confidence.indicator.help-text.unset": "Confidence was never recorded for this value", + "confidence.indicator.help-text.unset": "Für diesen Wert wurde nie eine Confidence erfasst", + + // "confidence.indicator.help-text.unknown": "Unknown confidence value", + "confidence.indicator.help-text.unknown": "Unbekannter Confidence-Wert", // "item.page.abstract": "Abstract", "item.page.abstract": "Zusammenfassung", @@ -3255,6 +4073,12 @@ // "item.page.collections": "Collections", "item.page.collections": "Sammlungen", + // "item.page.collections.loading": "Loading...", + "item.page.collections.loading": "Laden...", + + // "item.page.collections.load-more": "Load more", + "item.page.collections.load-more": "Mehr laden", + // "item.page.date": "Date", "item.page.date": "Datum", @@ -3288,6 +4112,12 @@ // "item.page.link.simple": "Simple item page", "item.page.link.simple": "Kurzanzeige", + // "item.page.orcid.title": "ORCID", + "item.page.orcid.title": "ORCID", + + // "item.page.orcid.tooltip": "Open ORCID setting page", + "item.page.orcid.tooltip": "ORCID-Einstellungsseite öffnen", + // "item.page.person.search.title": "Articles by this author", "item.page.person.search.title": "Veröffentlichungen dieses:dieser Autor:in", @@ -3298,7 +4128,7 @@ "item.page.related-items.view-less": "{{ amount }} weniger anzeigen", // "item.page.relationships.isAuthorOfPublication": "Publications", - "item.page.relationships.isAuthorOfPublication": "Veröffentichungen", + "item.page.relationships.isAuthorOfPublication": "Veröffentlichungen", // "item.page.relationships.isJournalOfPublication": "Publications", "item.page.relationships.isJournalOfPublication": "Veröffentlichungen", @@ -3321,14 +4151,41 @@ // "item.page.bitstreams.collapse": "Collapse", "item.page.bitstreams.collapse": "Zuklappen", - // "item.page.filesection.original.bundle" : "Original bundle", + // "item.page.bitstreams.primary": "Primary", + "item.page.bitstreams.primary": "Primäre", + + // "item.page.filesection.original.bundle": "Original bundle", "item.page.filesection.original.bundle": "Originalbündel", - // "item.page.filesection.license.bundle" : "License bundle", + // "item.page.filesection.license.bundle": "License bundle", "item.page.filesection.license.bundle": "Lizenzbündel", + // "item.page.return": "Back", + "item.page.return": "Zurück", + + // "item.page.version.create": "Create new version", + "item.page.version.create": "Neue Version erstellen", + + // "item.page.withdrawn": "Request a withdrawal for this item", + "item.page.withdrawn": "Antrag auf Rücknahme für dieses Item", + + // "item.page.reinstate": "Request reinstatement", + "item.page.reinstate": "Antrag auf Wiederherstellung", + + // "item.page.version.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", + "item.page.version.hasDraft": "Eine neue Version kann nicht erstellt werden, da in der Versionshistorie eine laufende Einreichung vorhanden ist", + + // "item.page.claim.button": "Claim", + "item.page.claim.button": "Beanspruchen", + + // "item.page.claim.tooltip": "Claim this item as profile", + "item.page.claim.tooltip": "Dieses Item als Profil beanspruchen", + + // "item.page.image.alt.ROR": "ROR logo", + "item.page.image.alt.ROR": "ROR-Logo", + // "item.preview.dc.identifier.uri": "Identifier:", - "item.preview.dc.identifier.uri": "Identifikator:", + "item.preview.dc.identifier.uri": "Identifier:", // "item.preview.dc.contributor.author": "Authors:", "item.preview.dc.contributor.author": "Autor:innen:", @@ -3351,6 +4208,33 @@ // "item.preview.dc.title": "Title:", "item.preview.dc.title": "Titel:", + // "item.preview.dc.type": "Type:", + "item.preview.dc.type": "Typ:", + + // "item.preview.oaire.citation.issue": "Issue", + "item.preview.oaire.citation.issue": "Ausgabe/Heft", + + // "item.preview.oaire.citation.volume": "Volume", + "item.preview.oaire.citation.volume": "Band/Jahrgang", + + // "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": "Identifier:", + "item.preview.dc.identifier": "Identifier:", + + // "item.preview.dc.relation.ispartof": "Journal or Series", + "item.preview.dc.relation.ispartof": "Zeitschrift oder Schriftenreihe", + + // "item.preview.dc.identifier.doi": "DOI", + "item.preview.dc.identifier.doi": "DOI", + + // "item.preview.dc.publisher": "Publisher:", + "item.preview.dc.publisher": "Verlag:", + // "item.preview.person.familyName": "Surname:", "item.preview.person.familyName": "Nachname:", @@ -3360,6 +4244,47 @@ // "item.preview.person.identifier.orcid": "ORCID:", "item.preview.person.identifier.orcid": "ORCID:", + // "item.preview.project.funder.name": "Funder:", + "item.preview.project.funder.name": "Förderer:", + + // "item.preview.project.funder.identifier": "Funder Identifier:", + "item.preview.project.funder.identifier": "Identifier des Förderers:", + + // "item.preview.oaire.awardNumber": "Funding ID:", + "item.preview.oaire.awardNumber": "Förder-ID:", + + // "item.preview.dc.title.alternative": "Acronym:", + "item.preview.dc.title.alternative": "Akronym:", + + // "item.preview.dc.coverage.spatial": "Jurisdiction:", + "item.preview.dc.coverage.spatial": "Zuständigkeit:", + + // "item.preview.oaire.fundingStream": "Funding Stream:", + "item.preview.oaire.fundingStream": "Förderprogramm:", + + // "item.preview.oairecerif.identifier.url": "URL", + "item.preview.oairecerif.identifier.url": "URL", + + // "item.preview.organization.address.addressCountry": "Country", + "item.preview.organization.address.addressCountry": "Land", + + // "item.preview.organization.foundingDate": "Founding Date", + "item.preview.organization.foundingDate": "Gründungsdatum", + + // "item.preview.organization.identifier.crossrefid": "Crossref ID", + "item.preview.organization.identifier.crossrefid": "Crossref-ID", + + // "item.preview.organization.identifier.isni": "ISNI", + "item.preview.organization.identifier.isni": "ISNI", + + // "item.preview.organization.identifier.ror": "ROR ID", + "item.preview.organization.identifier.ror": "ROR-ID", + + // "item.preview.organization.legalName": "Legal Name", + "item.preview.organization.legalName": "Juristischer Name", + + // "item.preview.dspace.entity.type": "Entity Type:", + "item.preview.dspace.entity.type": "Entitätstyp:", // "item.select.confirm": "Confirm selected", "item.select.confirm": "Auswahl bestätigen", @@ -3367,6 +4292,15 @@ // "item.select.empty": "No items to show", "item.select.empty": "Es gibt keine Items, die angezeigt werden können.", + // "item.select.table.selected": "Selected items", + "item.select.table.selected": "Ausgewählte Items", + + // "item.select.table.select": "Select item", + "item.select.table.select": "Item auswählen", + + // "item.select.table.deselect": "Deselect item", + "item.select.table.deselect": "Itemauswahl zurücknehmen", + // "item.select.table.author": "Author", "item.select.table.author": "Autor:in", @@ -3376,19 +4310,21 @@ // "item.select.table.title": "Title", "item.select.table.title": "Titel", - // "item.version.history.empty": "There are no other versions for this item yet.", "item.version.history.empty": "Dieses Item hat noch keine anderen Versionen.", // "item.version.history.head": "Version History", "item.version.history.head": "Versionsgeschichte", - // "item.version.history.return": "Return", + // "item.version.history.return": "Back", "item.version.history.return": "Zurück", // "item.version.history.selected": "Selected version", "item.version.history.selected": "Ausgewählte Version", + // "item.version.history.selected.alert": "You are currently viewing version {{version}} of the item.", + "item.version.history.selected.alert": "Sie sehen gerade die Version {{version}} des Item.", + // "item.version.history.table.version": "Version", "item.version.history.table.version": "Version", @@ -3404,12 +4340,251 @@ // "item.version.history.table.summary": "Summary", "item.version.history.table.summary": "Zusammenfassung", + // "item.version.history.table.workspaceItem": "Workspace item", + "item.version.history.table.workspaceItem": "Arbeitsbereich-Item", + // "item.version.history.table.workflowItem": "Workflow item", + "item.version.history.table.workflowItem": "Workflow-Item", + + // "item.version.history.table.actions": "Action", + "item.version.history.table.actions": "Aktion", + + // "item.version.history.table.action.editWorkspaceItem": "Edit workspace item", + "item.version.history.table.action.editWorkspaceItem": "Arbeitsbereich-Item bearbeiten", + + // "item.version.history.table.action.editSummary": "Edit summary", + "item.version.history.table.action.editSummary": "Zusammenfassung bearbeiten", + + // "item.version.history.table.action.saveSummary": "Save summary edits", + "item.version.history.table.action.saveSummary": "Änderungen an der Zusammenfassung speichern", + + // "item.version.history.table.action.discardSummary": "Discard summary edits", + "item.version.history.table.action.discardSummary": "Änderungen an der Zusammenfassung verwerfen", + + // "item.version.history.table.action.newVersion": "Create new version from this one", + "item.version.history.table.action.newVersion": "Neue Version aus dieser Version erstellen", + + // "item.version.history.table.action.deleteVersion": "Delete version", + "item.version.history.table.action.deleteVersion": "Version löschen", + + // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", + "item.version.history.table.action.hasDraft": "Eine neue Version kann nicht erstellt werden, da in der Versionshistorie eine laufende Einreichung vorhanden ist", // "item.version.notice": "This is not the latest version of this item. The latest version can be found here.", "item.version.notice": "Dies ist nicht die neueste Version dieses Items. Die neueste Version finden Sie unter hier.", + // "item.version.create.modal.header": "New version", + "item.version.create.modal.header": "Neue Version", + // "item.qa.withdrawn.modal.header": "Request withdrawal", + "item.qa.withdrawn.modal.header": "Antrag auf Widerruf", + + // "item.qa.reinstate.modal.header": "Request reinstate", + "item.qa.reinstate.modal.header": "Antrag auf Wiederherstellung", + + // "item.qa.reinstate.create.modal.header": "New version", + "item.qa.reinstate.create.modal.header": "Neue Version", + + // "item.version.create.modal.text": "Create a new version for this item", + "item.version.create.modal.text": "Erstellen Sie eine neue Version für dieses Item", + + // "item.version.create.modal.text.startingFrom": "starting from version {{version}}", + "item.version.create.modal.text.startingFrom": "ausgehend von der Version {{version}}", + + // "item.version.create.modal.button.confirm": "Create", + "item.version.create.modal.button.confirm": "Erstellen.", + + // "item.version.create.modal.button.confirm.tooltip": "Create new version", + "item.version.create.modal.button.confirm.tooltip": "Neue Version erstellen", + + // "item.qa.withdrawn-reinstate.modal.button.confirm.tooltip": "Send request", + "item.qa.withdrawn-reinstate.modal.button.confirm.tooltip": "Anfrage senden", + + // "qa-withdrown.create.modal.button.confirm": "Withdraw", + "qa-withdrown.create.modal.button.confirm": "Widerruf", + + // "qa-reinstate.create.modal.button.confirm": "Reinstate", + "qa-reinstate.create.modal.button.confirm": "Wiederherstellen", + + // "item.version.create.modal.button.cancel": "Cancel", + "item.version.create.modal.button.cancel": "Abbrechen", + + // "item.qa.withdrawn-reinstate.create.modal.button.cancel": "Cancel", + "item.qa.withdrawn-reinstate.create.modal.button.cancel": "Abbrechen", + + // "item.version.create.modal.button.cancel.tooltip": "Do not create new version", + "item.version.create.modal.button.cancel.tooltip": "Keine neue Version erstellen", + + // "item.qa.withdrawn-reinstate.create.modal.button.cancel.tooltip": "Do not send request", + "item.qa.withdrawn-reinstate.create.modal.button.cancel.tooltip": "Anfrage nicht senden", + + // "item.version.create.modal.form.summary.label": "Summary", + "item.version.create.modal.form.summary.label": "Zusammenfassung", + + // "qa-withdrawn.create.modal.form.summary.label": "You are requesting to withdraw this item", + "qa-withdrawn.create.modal.form.summary.label": "Sie beantragen, dieses Item zu widerrufen", + + // "qa-withdrawn.create.modal.form.summary2.label": "Please enter the reason for the withdrawal", + "qa-withdrawn.create.modal.form.summary2.label": "Bitte geben Sie den Grund für den Widerruf an", + + // "qa-reinstate.create.modal.form.summary.label": "You are requesting to reinstate this item", + "qa-reinstate.create.modal.form.summary.label": "Sie beantragen die Wiederherstellung dieses Items", + + // "qa-reinstate.create.modal.form.summary2.label": "Please enter the reason for the reinstatment", + "qa-reinstate.create.modal.form.summary2.label": "Bitte geben Sie den Grund für die Wiederherstellung an", + + // "item.version.create.modal.form.summary.placeholder": "Insert the summary for the new version", + "item.version.create.modal.form.summary.placeholder": "Fügen Sie die Zusammenfassung für die neue Version ein", + + // "qa-withdrown.modal.form.summary.placeholder": "Enter the reason for the withdrawal", + "qa-withdrown.modal.form.summary.placeholder": "Geben Sie den Grund für den Widerruf an", + + // "qa-reinstate.modal.form.summary.placeholder": "Enter the reason for the reinstatement", + "qa-reinstate.modal.form.summary.placeholder": "Geben Sie den Grund für die Wiederherstellung an", + + // "item.version.create.modal.submitted.header": "Creating new version...", + "item.version.create.modal.submitted.header": "Neue Version erstellen...", + + // "item.qa.withdrawn.modal.submitted.header": "Sending withdrawn request...", + "item.qa.withdrawn.modal.submitted.header": "Widerruf-Anfrage senden...", + + // "correction-type.manage-relation.action.notification.reinstate": "Reinstate request sent.", + "correction-type.manage-relation.action.notification.reinstate": "Wiederherstellungsantrag gesendet.", + + // "correction-type.manage-relation.action.notification.withdrawn": "Withdraw request sent.", + "correction-type.manage-relation.action.notification.withdrawn": "Widerruf-Anfrage gesendet.", + + // "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": "Die neue Version wird gerade erstellt. Dies kann einige Zeit dauern, wenn das Item viele Beziehungen hat.", + + // "item.version.create.notification.success": "New version has been created with version number {{version}}", + "item.version.create.notification.success": "Es wurde eine neue Version mit der Versionsnummer {{version}} erstellt", + + // "item.version.create.notification.failure": "New version has not been created", + "item.version.create.notification.failure": "Neue Version wurde nicht erstellt", + + // "item.version.create.notification.inProgress": "A new version cannot be created because there is an in-progress submission in the version history", + "item.version.create.notification.inProgress": "Eine neue Version kann nicht erstellt werden, da in der Versionshistorie eine laufende Einreichung vorhanden ist", + + // "item.version.delete.modal.header": "Delete version", + "item.version.delete.modal.header": "Version löschen", + + // "item.version.delete.modal.text": "Do you want to delete version {{version}}?", + "item.version.delete.modal.text": "Möchten Sie die Version {{version}} löschen?", + + // "item.version.delete.modal.button.confirm": "Delete", + "item.version.delete.modal.button.confirm": "Löschen", + + // "item.version.delete.modal.button.confirm.tooltip": "Delete this version", + "item.version.delete.modal.button.confirm.tooltip": "Diese Version löschen", + + // "item.version.delete.modal.button.cancel": "Cancel", + "item.version.delete.modal.button.cancel": "Abbrechen", + + // "item.version.delete.modal.button.cancel.tooltip": "Do not delete this version", + "item.version.delete.modal.button.cancel.tooltip": "Diese Version nicht löschen", + + // "item.version.delete.notification.success": "Version number {{version}} has been deleted", + "item.version.delete.notification.success": "Versionsnummer {{version}} wurde gelöscht", + + // "item.version.delete.notification.failure": "Version number {{version}} has not been deleted", + "item.version.delete.notification.failure": "Versionsnummer {{version}} wurde nicht gelöscht", + + // "item.version.edit.notification.success": "The summary of version number {{version}} has been changed", + "item.version.edit.notification.success": "Die Zusammenfassung der Versionsnummer {{version}} wurde geändert", + + // "item.version.edit.notification.failure": "The summary of version number {{version}} has not been changed", + "item.version.edit.notification.failure": "Die Zusammenfassung der Versionsnummer {{version}} wurde nicht geändert", + + // "itemtemplate.edit.metadata.add-button": "Add", + "itemtemplate.edit.metadata.add-button": "Hinzufügen", + + // "itemtemplate.edit.metadata.discard-button": "Discard", + "itemtemplate.edit.metadata.discard-button": "Verwerfen", + + // "itemtemplate.edit.metadata.edit.language": "Edit language", + "itemtemplate.edit.metadata.edit.language": "Sprache bearbeiten", + + // "itemtemplate.edit.metadata.edit.value": "Edit value", + "itemtemplate.edit.metadata.edit.value": "Wert bearbeiten", + + // "itemtemplate.edit.metadata.edit.buttons.confirm": "Confirm", + "itemtemplate.edit.metadata.edit.buttons.confirm": "Bestätigen", + + // "itemtemplate.edit.metadata.edit.buttons.drag": "Drag to reorder", + "itemtemplate.edit.metadata.edit.buttons.drag": "Ziehen zum Neuordnen", + + // "itemtemplate.edit.metadata.edit.buttons.edit": "Edit", + "itemtemplate.edit.metadata.edit.buttons.edit": "Bearbeiten", + + // "itemtemplate.edit.metadata.edit.buttons.remove": "Remove", + "itemtemplate.edit.metadata.edit.buttons.remove": "Entfernen", + + // "itemtemplate.edit.metadata.edit.buttons.undo": "Undo changes", + "itemtemplate.edit.metadata.edit.buttons.undo": "Änderungen rückgängig machen", + + // "itemtemplate.edit.metadata.edit.buttons.unedit": "Stop editing", + "itemtemplate.edit.metadata.edit.buttons.unedit": "Bearbeitung beenden", + + // "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": "Die Itemvorlage enthält derzeit keine Metadaten. Klicken Sie auf Hinzufügen, um einen Metadatenwert hinzuzufügen.", + + // "itemtemplate.edit.metadata.headers.edit": "Edit", + "itemtemplate.edit.metadata.headers.edit": "Bearbeiten", + + // "itemtemplate.edit.metadata.headers.field": "Field", + "itemtemplate.edit.metadata.headers.field": "Feld", + + // "itemtemplate.edit.metadata.headers.language": "Lang", + "itemtemplate.edit.metadata.headers.language": "Sprache", + + // "itemtemplate.edit.metadata.headers.value": "Value", + "itemtemplate.edit.metadata.headers.value": "Wert", + + // "itemtemplate.edit.metadata.metadatafield": "Edit field", + "itemtemplate.edit.metadata.metadatafield": "Feld bearbeiten", + + // "itemtemplate.edit.metadata.metadatafield.error": "An error occurred validating the metadata field", + "itemtemplate.edit.metadata.metadatafield.error": "Bei der Validierung des Metadatenfeldes ist ein Fehler aufgetreten", + + // "itemtemplate.edit.metadata.metadatafield.invalid": "Please choose a valid metadata field", + "itemtemplate.edit.metadata.metadatafield.invalid": "Bitte wählen Sie ein gültiges Metadatenfeld", + + // "itemtemplate.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", + "itemtemplate.edit.metadata.notifications.discarded.content": "Ihre Änderungen wurden verworfen. Um Ihre Änderungen wiederherzustellen, klicken Sie auf die Schaltfläche \"Rückgängig\"", + + // "itemtemplate.edit.metadata.notifications.discarded.title": "Changes discarded", + "itemtemplate.edit.metadata.notifications.discarded.title": "Verworfene Änderungen", + + // "itemtemplate.edit.metadata.notifications.error.title": "An error occurred", + "itemtemplate.edit.metadata.notifications.error.title": "Es ist ein Fehler aufgetreten", + + // "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": "Ihre Änderungen wurden nicht gespeichert. Bitte stellen Sie sicher, dass alle Felder gültig sind, bevor Sie speichern.", + + // "itemtemplate.edit.metadata.notifications.invalid.title": "Metadata invalid", + "itemtemplate.edit.metadata.notifications.invalid.title": "Metadaten ungültig", + + // "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": "Die Itemvorlage, an der Sie gerade arbeiten, wurde von einem anderen Benutzer geändert. Ihre aktuellen Änderungen werden verworfen, um Konflikte zu vermeiden.", + + // "itemtemplate.edit.metadata.notifications.outdated.title": "Changes outdated", + "itemtemplate.edit.metadata.notifications.outdated.title": "Überholte Änderungen", + + // "itemtemplate.edit.metadata.notifications.saved.content": "Your changes to this item template's metadata were saved.", + "itemtemplate.edit.metadata.notifications.saved.content": "Ihre Änderungen an den Metadaten dieser Itemvorlage wurden gespeichert.", + + // "itemtemplate.edit.metadata.notifications.saved.title": "Metadata saved", + "itemtemplate.edit.metadata.notifications.saved.title": "Metadaten gespeichert", + + // "itemtemplate.edit.metadata.reinstate-button": "Undo", + "itemtemplate.edit.metadata.reinstate-button": "Rückgängig", + + // "itemtemplate.edit.metadata.reset-order-button": "Undo reorder", + "itemtemplate.edit.metadata.reset-order-button": "Neuordnung rückgängig machen", + + // "itemtemplate.edit.metadata.save-button": "Save", + "itemtemplate.edit.metadata.save-button": "Speichern", // "journal.listelement.badge": "Journal", "journal.listelement.badge": "Zeitschrift", @@ -3435,11 +4610,12 @@ // "journal.search.results.head": "Journal Search Results", "journal.search.results.head": "Suchergebnisse für Zeitschriften", + // "journal-relationships.search.results.head": "Journal Search Results", + "journal-relationships.search.results.head": "Suchergebnisse für Zeitschriften", + // "journal.search.title": "Journal Search", "journal.search.title": "Zeitschriftensuche", - - // "journalissue.listelement.badge": "Journal Issue", "journalissue.listelement.badge": "Zeitschriftenheft", @@ -3467,7 +4643,8 @@ // "journalissue.page.titleprefix": "Journal Issue: ", "journalissue.page.titleprefix": "Zeitschriftenheft:", - + // "journalissue.search.results.head": "Journal Issue Search Results", + "journalissue.search.results.head": "Suchergebnisse für Zeitschriftenhefte", // "journalvolume.listelement.badge": "Journal Volume", "journalvolume.listelement.badge": "Zeitschriftenband", @@ -3487,7 +4664,41 @@ // "journalvolume.page.volume": "Volume", "journalvolume.page.volume": "Band", + // "journalvolume.search.results.head": "Journal Volume Search Results", + "journalvolume.search.results.head": "Suchergebnisse für Zeitschriftenbände", + // "iiifsearchable.listelement.badge": "Document Media", + "iiifsearchable.listelement.badge": "Dokument-Medien", + + // "iiifsearchable.page.titleprefix": "Document: ", + "iiifsearchable.page.titleprefix": "Dokument:", + + // "iiifsearchable.page.doi": "Permanent Link: ", + "iiifsearchable.page.doi": "Permanenter Link:", + + // "iiifsearchable.page.issue": "Issue: ", + "iiifsearchable.page.issue": "Ausgabe:", + + // "iiifsearchable.page.description": "Description: ", + "iiifsearchable.page.description": "Beschreibung:", + + // "iiifviewer.fullscreen.notice": "Use full screen for better viewing.", + "iiifviewer.fullscreen.notice": "Verwenden Sie den Vollbildmodus für eine bessere Darstellung.", + + // "iiif.listelement.badge": "Image Media", + "iiif.listelement.badge": "Bildmedien", + + // "iiif.page.titleprefix": "Image: ", + "iiif.page.titleprefix": "Bild:", + + // "iiif.page.doi": "Permanent Link: ", + "iiif.page.doi": "Permanenter Link:", + + // "iiif.page.issue": "Issue: ", + "iiif.page.issue": "Ausgabe:", + + // "iiif.page.description": "Description: ", + "iiif.page.description": "Beschreibung:", // "loading.bitstream": "Loading bitstream...", "loading.bitstream": "Lade Datei...", @@ -3543,8 +4754,6 @@ // "loading.top-level-communities": "Loading top-level communities...", "loading.top-level-communities": "Lade Hauptbereiche...", - - // "login.form.email": "Email address", "login.form.email": "E-Mail-Adresse", @@ -3557,8 +4766,11 @@ // "login.form.new-user": "New user? Click here to register.", "login.form.new-user": "Neu hier? Klicken Sie hier, um sich zu registrieren.", - // "login.form.or-divider": "or", - "login.form.or-divider": "oder", + // "login.form.oidc": "Log in with OIDC", + "login.form.oidc": "Mit OIDC anmelden", + + // "login.form.orcid": "Log in with ORCID", + "login.form.orcid": "Mit ORCID anmelden", // "login.form.password": "Password", "login.form.password": "Passwort", @@ -3575,8 +4787,6 @@ // "login.breadcrumbs": "Login", "login.breadcrumbs": "Anmelden", - - // "logout.form.header": "Log out from DSpace", "logout.form.header": "Abmelden", @@ -3586,15 +4796,17 @@ // "logout.title": "Logout", "logout.title": "Abmelden", + // "menu.header.nav.description": "Admin navigation bar", + "menu.header.nav.description": "Admin-Navigationsleiste", - - // "menu.header.admin": "Admin", - "menu.header.admin": "Administration", + // "menu.header.admin": "Management", + "menu.header.admin": "Management", // "menu.header.image.logo": "Repository logo", "menu.header.image.logo": "Logo des Repositoriums", - + // "menu.header.admin.description": "Management menu", + "menu.header.admin.description": "Management-Menü", // "menu.section.access_control": "Access Control", "menu.section.access_control": "Zugriffskontrolle", @@ -3602,14 +4814,15 @@ // "menu.section.access_control_authorizations": "Authorizations", "menu.section.access_control_authorizations": "Rechte", + // "menu.section.access_control_bulk": "Bulk Access Management", + "menu.section.access_control_bulk": "Bulk-Access-Management", + // "menu.section.access_control_groups": "Groups", "menu.section.access_control_groups": "Gruppen", // "menu.section.access_control_people": "People", "menu.section.access_control_people": "Personen", - - // "menu.section.reports": "Reports", "menu.section.reports": "Berichte", @@ -3622,8 +4835,6 @@ // "menu.section.admin_search": "Admin Search", "menu.section.admin_search": "Admin-Suche", - - // "menu.section.browse_community": "This Community", "menu.section.browse_community": "Dieser Bereich", @@ -3648,22 +4859,24 @@ // "menu.section.browse_global_by_subject": "By Subject", "menu.section.browse_global_by_subject": "Nach Schlagwort", + // "menu.section.browse_global_by_srsc": "By Subject Category", + "menu.section.browse_global_by_srsc": "Nach Themenkategorie", + + // "menu.section.browse_global_by_nsi": "By Norwegian Science Index", + "menu.section.browse_global_by_nsi": "Nach Norwegian Science Index", + // "menu.section.browse_global_by_title": "By Title", "menu.section.browse_global_by_title": "Nach Titel", // "menu.section.browse_global_communities_and_collections": "Communities & Collections", "menu.section.browse_global_communities_and_collections": "Bereiche & Sammlungen", - - // "menu.section.control_panel": "Control Panel", "menu.section.control_panel": "Kontrollfeld", // "menu.section.curation_task": "Curation Task", "menu.section.curation_task": "Datenpflegeroutinen", - - // "menu.section.edit": "Edit", "menu.section.edit": "Bearbeiten", @@ -3676,8 +4889,6 @@ // "menu.section.edit_item": "Item", "menu.section.edit_item": "Item", - - // "menu.section.export": "Export", "menu.section.export": "Export", @@ -3693,14 +4904,14 @@ // "menu.section.export_metadata": "Metadata", "menu.section.export_metadata": "Metadaten", - + // "menu.section.export_batch": "Batch Export (ZIP)", + "menu.section.export_batch": "Batch-Export (ZIP)", // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": "Menübereich Zugriffskontrolle", - //"menu.section.icon.reports": "Reports menu section", - // TODO New key - Add a translation - "menu.section.icon.reports": "Reports menu section", + // "menu.section.icon.reports": "Reports menu section", + "menu.section.icon.reports": "Menüabschnitt Berichte", // "menu.section.icon.admin_search": "Admin search menu section", "menu.section.icon.admin_search": "Menüabschnitt (Admin-Suche)", @@ -3708,8 +4919,8 @@ // "menu.section.icon.control_panel": "Control Panel menu section", "menu.section.icon.control_panel": "Menübereich Kontrollfeld", - // "menu.section.icon.curation_task": "Curation Task menu section", - "menu.section.icon.curation_task": "Menübereich Datepflegeroutinen", + // "menu.section.icon.curation_tasks": "Curation Task menu section", + "menu.section.icon.curation_tasks": "Menüabschnitt Curation Task", // "menu.section.icon.edit": "Edit menu section", "menu.section.icon.edit": "Menübereich bearbeiten", @@ -3720,6 +4931,9 @@ // "menu.section.icon.find": "Find menu section", "menu.section.icon.find": "Menübereich Suche", + // "menu.section.icon.health": "Health check menu section", + "menu.section.icon.health": "Menüpunkt Systemgesundheitscheck", + // "menu.section.icon.import": "Import menu section", "menu.section.icon.import": "Menübereich Import", @@ -3729,8 +4943,8 @@ // "menu.section.icon.pin": "Pin sidebar", "menu.section.icon.pin": "Seitenleiste Anheften", - // "menu.section.icon.processes": "Processes menu section", - "menu.section.icon.processes": "Menübereich Prozesse", + // "menu.section.icon.processes": "Processes Health", + "menu.section.icon.processes": "Prozesse zur Systemgesundheit", // "menu.section.icon.registries": "Registries menu section", "menu.section.icon.registries": "Menübereich Referenzlisten", @@ -3738,10 +4952,14 @@ // "menu.section.icon.statistics_task": "Statistics Task menu section", "menu.section.icon.statistics_task": "Menübereich Statistikaufgaben", + // "menu.section.icon.workflow": "Administer workflow menu section", + "menu.section.icon.workflow": "Workflow-Menüabschnitt verwalten", + // "menu.section.icon.unpin": "Unpin sidebar", "menu.section.icon.unpin": "Seitenbereich loslösen", - + // "menu.section.icon.notifications": "Notifications menu section", + "menu.section.icon.notifications": "Menüabschnitt Benachrichtigungen", // "menu.section.import": "Import", "menu.section.import": "Import", @@ -3752,8 +4970,6 @@ // "menu.section.import_metadata": "Metadata", "menu.section.import_metadata": "Metadaten", - - // "menu.section.new": "New", "menu.section.new": "Neu", @@ -3772,7 +4988,14 @@ // "menu.section.new_process": "Process", "menu.section.new_process": "Prozess", + // "menu.section.notifications": "Notifications", + "menu.section.notifications": "Benachrichtigungen", + // "menu.section.quality-assurance": "Quality Assurance", + "menu.section.quality-assurance": "Qualitätssicherung", + + // "menu.section.notifications_publication-claim": "Publication Claim", + "menu.section.notifications_publication-claim": "Beanspruchung der Veröffentlichung", // "menu.section.pin": "Pin sidebar", "menu.section.pin": "Seitenleiste anheften", @@ -3780,12 +5003,11 @@ // "menu.section.unpin": "Unpin sidebar", "menu.section.unpin": "Seitenleiste loslösen", - - // "menu.section.processes": "Processes", "menu.section.processes": "Prozesse", - + // "menu.section.health": "Health", + "menu.section.health": "Systemgesundheit", // "menu.section.registries": "Registries", "menu.section.registries": "Referenzlisten", @@ -3796,22 +5018,18 @@ // "menu.section.registries_metadata": "Metadata", "menu.section.registries_metadata": "Metadaten", - - // "menu.section.statistics": "Statistics", "menu.section.statistics": "Statistiken", // "menu.section.statistics_task": "Statistics Task", "menu.section.statistics_task": "Statistikaufgaben", - - //"menu.section.toggle.reports": "Toggle Reports section", - // TODO New key - Add a translation - "menu.section.toggle.reports": "Toggle Reports section", - // "menu.section.toggle.access_control": "Toggle Access Control section", "menu.section.toggle.access_control": "Bereich Zugriffskontrolle umschalten", + // "menu.section.toggle.reports": "Toggle Reports section", + "menu.section.toggle.reports": "Berichtsabschnitt umschalten", + // "menu.section.toggle.control_panel": "Toggle Control Panel section", "menu.section.toggle.control_panel": "Bereich Kontrollfeld umschalten", @@ -3839,17 +5057,24 @@ // "menu.section.toggle.statistics_task": "Toggle Statistics Task section", "menu.section.toggle.statistics_task": "Bereich Statistikaufgaben umschalten", - // "menu.section.workflow": "Administer Workflow", "menu.section.workflow": "Geschäftsgänge verwalten", + // "metadata-export-search.tooltip": "Export search results as CSV", + "metadata-export-search.tooltip": "Suchergebnisse als CSV exportieren", + + // "metadata-export-search.submit.success": "The export was started successfully", + "metadata-export-search.submit.success": "Der Export wurde erfolgreich gestartet", + + // "metadata-export-search.submit.error": "Starting the export has failed", + "metadata-export-search.submit.error": "Der Start des Exports ist fehlgeschlagen", + + // "mydspace.breadcrumbs": "MyDSpace", + "mydspace.breadcrumbs": "MeinDSpace", // "mydspace.description": "", "mydspace.description": "", - // "mydspace.general.text-here": "here", - "mydspace.general.text-here": "hier", - // "mydspace.messages.controller-help": "Select this option to send a message to item's submitter.", "mydspace.messages.controller-help": "Wählen Sie diese Option, um der Person eine Nachricht zu schicken, die das Item eingereicht hat.", @@ -3922,14 +5147,20 @@ // "mydspace.results.no-title": "No title", "mydspace.results.no-title": "Kein Titel", - // "mydspace.results.no-uri": "No Uri", - "mydspace.results.no-uri": "Keine URI", + // "mydspace.results.no-uri": "No URI", + "mydspace.results.no-uri": "Kein URI", - // "mydspace.show.workflow": "All tasks", - "mydspace.show.workflow": "Alle Aufgaben", + // "mydspace.search-form.placeholder": "Search in MyDSpace...", + "mydspace.search-form.placeholder": "Suche in MeinDSpace...", - // "mydspace.show.workspace": "Your Submissions", - "mydspace.show.workspace": "Ihre Veröffentlichungen", + // "mydspace.show.workflow": "Workflow tasks", + "mydspace.show.workflow": "Workflow-Aufgaben", + + // "mydspace.show.workspace": "Your submissions", + "mydspace.show.workspace": "Ihre Einreichungen", + + // "mydspace.show.supervisedWorkspace": "Supervised items", + "mydspace.show.supervisedWorkspace": "Beaufsichtigte Items", // "mydspace.status.mydspaceArchived": "Archived", "mydspace.status.mydspaceArchived": "Archiviert", @@ -3961,13 +5192,20 @@ // "mydspace.upload.upload-multiple-successful": "{{qty}} new workspace items created.", "mydspace.upload.upload-multiple-successful": "{{qty}} neue(s) Arbeitsbereichsitem(s) angelegt.", - // "mydspace.upload.upload-successful": "New workspace item created. Click {{here}} for edit it.", - "mydspace.upload.upload-successful": "Das Workspace-Item wurde neu angelegt. Klicken Sie {{here}}, um es zu bearbeiten.", - // "mydspace.view-btn": "View", "mydspace.view-btn": "Anzeige", + // "nav.expandable-navbar-section-suffix": "(submenu)", + "nav.expandable-navbar-section-suffix": "(Untermenü)", + // "notification.suggestion": "We found {{count}} publications in the {{source}} that seems to be related to your profile.
    ", + "notification.suggestion": "Wir haben {{count}} Veröffentlichungen in der {{source}} gefunden, die mit Ihrem Profil in Verbindung zu stehen scheinen.
    ", + + // "notification.suggestion.review": "review the suggestions", + "notification.suggestion.review": "Überprüfen der Vorschläge", + + // "notification.suggestion.please": "Please", + "notification.suggestion.please": "Bitte", // "nav.browse.header": "All of DSpace", "nav.browse.header": "Das gesamte Repositorium", @@ -3975,15 +5213,24 @@ // "nav.community-browse.header": "By Community", "nav.community-browse.header": "Nach Bereich", + // "nav.context-help-toggle": "Toggle context help", + "nav.context-help-toggle": "Umschalten der Kontexthilfe", + // "nav.language": "Language switch", "nav.language": "Sprachumschalter", // "nav.login": "Log In", "nav.login": "Anmelden", + // "nav.user-profile-menu-and-logout": "User profile menu and log out", + "nav.user-profile-menu-and-logout": "Benutzerprofil-Menü und Abmeldung", + // "nav.logout": "Log Out", "nav.logout": "Abmelden", + // "nav.main.description": "Main navigation bar", + "nav.main.description": "Hauptnavigationsleiste", + // "nav.mydspace": "MyDSpace", "nav.mydspace": "Mein DSpace", @@ -3993,17 +5240,243 @@ // "nav.search": "Search", "nav.search": "Suche", + // "nav.search.button": "Submit search", + "nav.search.button": "Suche abschicken", + // "nav.statistics.header": "Statistics", "nav.statistics.header": "Statistiken", // "nav.stop-impersonating": "Stop impersonating EPerson", "nav.stop-impersonating": "Als Person ausloggen", + // "nav.subscriptions": "Subscriptions", + "nav.subscriptions": "Abonnements", + // "nav.toggle": "Toggle navigation", + "nav.toggle": "Navigation umschalten", + + // "nav.user.description": "User profile bar", + "nav.user.description": "Benutzerprofil-Leiste", + + // "none.listelement.badge": "Item", + "none.listelement.badge": "Item", + + // "quality-assurance.title": "Quality Assurance", + "quality-assurance.title": "Qualitätssicherung", + + // "quality-assurance.topics.description": "Below you can see all the topics received from the subscriptions to {{source}}.", + "quality-assurance.topics.description": "Unten sehen Sie alle Themen, die von den Abonnenten von {{source}} erhalten wurden.", + + // "quality-assurance.source.description": "Below you can see all the notification's sources.", + "quality-assurance.source.description": "Nachstehend finden Sie alle Quellen der Benachrichtigung.", + + // "quality-assurance.topics": "Current Topics", + "quality-assurance.topics": "Aktuelle Themen", + + // "quality-assurance.source": "Current Sources", + "quality-assurance.source": "Aktuelle Quellen", + + // "quality-assurance.table.topic": "Topic", + "quality-assurance.table.topic": "Thema", + + // "quality-assurance.table.source": "Source", + "quality-assurance.table.source": "Quelle", + + // "quality-assurance.table.last-event": "Last Event", + "quality-assurance.table.last-event": "Letzte Veranstaltung", + + // "quality-assurance.table.actions": "Actions", + "quality-assurance.table.actions": "Aktionen", + + // "quality-assurance.source-list.button.detail": "Show topics for {{param}}", + "quality-assurance.source-list.button.detail": "Themen für {{param}} anzeigen", + + // "quality-assurance.topics-list.button.detail": "Show suggestions for {{param}}", + "quality-assurance.topics-list.button.detail": "Vorschläge für {{param}} anzeigen", + + // "quality-assurance.noTopics": "No topics found.", + "quality-assurance.noTopics": "Keine Themen gefunden.", + + // "quality-assurance.noSource": "No sources found.", + "quality-assurance.noSource": "Keine Quellen gefunden.", + + // "notifications.events.title": "Quality Assurance Suggestions", + "notifications.events.title": "Vorschläge für die Qualitätssicherung", + + // "quality-assurance.topic.error.service.retrieve": "An error occurred while loading the Quality Assurance topics", + "quality-assurance.topic.error.service.retrieve": "Beim Laden der Qualitätssicherungs-Themen ist ein Fehler aufgetreten", + + // "quality-assurance.source.error.service.retrieve": "An error occurred while loading the Quality Assurance source", + "quality-assurance.source.error.service.retrieve": "Beim Laden der Qualitätssicherungs-Quelle ist ein Fehler aufgetreten", + + // "quality-assurance.loading": "Loading ...", + "quality-assurance.loading": "Laden ...", + + // "quality-assurance.events.topic": "Topic:", + "quality-assurance.events.topic": "Thema:", + + // "quality-assurance.noEvents": "No suggestions found.", + "quality-assurance.noEvents": "Keine Vorschläge gefunden.", + + // "quality-assurance.event.table.trust": "Trust", + "quality-assurance.event.table.trust": "Vertrauen", + + // "quality-assurance.event.table.publication": "Publication", + "quality-assurance.event.table.publication": "Veröffentlichung", + + // "quality-assurance.event.table.details": "Details", + "quality-assurance.event.table.details": "Details", + + // "quality-assurance.event.table.project-details": "Project details", + "quality-assurance.event.table.project-details": "Projektdetails", + + // "quality-assurance.event.table.reasons": "Reasons", + "quality-assurance.event.table.reasons": "Gründe", + + // "quality-assurance.event.table.actions": "Actions", + "quality-assurance.event.table.actions": "Aktionen", + + // "quality-assurance.event.action.accept": "Accept suggestion", + "quality-assurance.event.action.accept": "Vorschlag annehmen", + + // "quality-assurance.event.action.ignore": "Ignore suggestion", + "quality-assurance.event.action.ignore": "Vorschlag ignorieren", + + // "quality-assurance.event.action.undo": "Delete", + "quality-assurance.event.action.undo": "Löschen", + + // "quality-assurance.event.action.reject": "Reject suggestion", + "quality-assurance.event.action.reject": "Vorschlag ablehnen", + + // "quality-assurance.event.action.import": "Import project and accept suggestion", + "quality-assurance.event.action.import": "Projekt importieren und Vorschlag akzeptieren", + + // "quality-assurance.event.table.pidtype": "PID Type:", + "quality-assurance.event.table.pidtype": "PID-Typ:", + + // "quality-assurance.event.table.pidvalue": "PID Value:", + "quality-assurance.event.table.pidvalue": "PID-Wert:", + + // "quality-assurance.event.table.subjectValue": "Subject Value:", + "quality-assurance.event.table.subjectValue": "Themen-Wert:", + + // "quality-assurance.event.table.abstract": "Abstract:", + "quality-assurance.event.table.abstract": "Zusammenfassung:", + + // "quality-assurance.event.table.suggestedProject": "OpenAIRE Suggested Project data", + "quality-assurance.event.table.suggestedProject": "OpenAIRE Vorgeschlagene Projektdaten", + + // "quality-assurance.event.table.project": "Project title:", + "quality-assurance.event.table.project": "Projekttitel:", + + // "quality-assurance.event.table.acronym": "Acronym:", + "quality-assurance.event.table.acronym": "Akronym:", + + // "quality-assurance.event.table.code": "Code:", + "quality-assurance.event.table.code": "Code:", + + // "quality-assurance.event.table.funder": "Funder:", + "quality-assurance.event.table.funder": "Förderer:", + + // "quality-assurance.event.table.fundingProgram": "Funding program:", + "quality-assurance.event.table.fundingProgram": "Förderungsprogramm:", + + // "quality-assurance.event.table.jurisdiction": "Jurisdiction:", + "quality-assurance.event.table.jurisdiction": "Zuständigkeit:", + + // "quality-assurance.events.back": "Back to topics", + "quality-assurance.events.back": "Zurück zu den Themen", + + // "quality-assurance.events.back-to-sources": "Back to sources", + "quality-assurance.events.back-to-sources": "Zurück zu den Quellen", + + // "quality-assurance.event.table.less": "Show less", + "quality-assurance.event.table.less": "Weniger anzeigen", + + // "quality-assurance.event.table.more": "Show more", + "quality-assurance.event.table.more": "Mehr anzeigen", + + // "quality-assurance.event.project.found": "Bound to the local record:", + "quality-assurance.event.project.found": "Gebunden an den lokalen Datensatz:", + + // "quality-assurance.event.project.notFound": "No local record found", + "quality-assurance.event.project.notFound": "Kein lokaler Datensatz gefunden", + + // "quality-assurance.event.sure": "Are you sure?", + "quality-assurance.event.sure": "Sind Sie sicher?", + + // "quality-assurance.event.ignore.description": "This operation can't be undone. Ignore this suggestion?", + "quality-assurance.event.ignore.description": "Dieser Vorgang kann nicht rückgängig gemacht werden. Diesen Vorschlag ignorieren?", + + // "quality-assurance.event.undo.description": "This operation can't be undone!", + "quality-assurance.event.undo.description": "Diese Operation kann nicht rückgängig gemacht werden!", + + // "quality-assurance.event.reject.description": "This operation can't be undone. Reject this suggestion?", + "quality-assurance.event.reject.description": "Dieser Vorgang kann nicht rückgängig gemacht werden. Diesen Vorschlag ablehnen?", + + // "quality-assurance.event.accept.description": "No DSpace project selected. A new project will be created based on the suggestion data.", + "quality-assurance.event.accept.description": "Kein DSpace-Projekt ausgewählt. Es wird ein neues Projekt auf der Grundlage der Vorschlagsdaten erstellt.", + + // "quality-assurance.event.action.cancel": "Cancel", + "quality-assurance.event.action.cancel": "Abbrechen", + + // "quality-assurance.event.action.saved": "Your decision has been saved successfully.", + "quality-assurance.event.action.saved": "Ihre Entscheidung wurde erfolgreich gespeichert.", + + // "quality-assurance.event.action.error": "An error has occurred. Your decision has not been saved.", + "quality-assurance.event.action.error": "Es ist ein Fehler aufgetreten. Ihre Entscheidung wurde nicht gespeichert.", + + // "quality-assurance.event.modal.project.title": "Choose a project to bound", + "quality-assurance.event.modal.project.title": "Wählen Sie ein zu bindendes Projekt", + + // "quality-assurance.event.modal.project.publication": "Publication:", + "quality-assurance.event.modal.project.publication": "Veröffentlichung:", + + // "quality-assurance.event.modal.project.bountToLocal": "Bound to the local record:", + "quality-assurance.event.modal.project.bountToLocal": "Gebunden an den lokalen Datensatz:", + + // "quality-assurance.event.modal.project.select": "Project search", + "quality-assurance.event.modal.project.select": "Projekt-Suche", + + // "quality-assurance.event.modal.project.search": "Search", + "quality-assurance.event.modal.project.search": "Suche", + + // "quality-assurance.event.modal.project.clear": "Clear", + "quality-assurance.event.modal.project.clear": "Leeren", + + // "quality-assurance.event.modal.project.cancel": "Cancel", + "quality-assurance.event.modal.project.cancel": "Abbrechen", + + // "quality-assurance.event.modal.project.bound": "Bound project", + "quality-assurance.event.modal.project.bound": "Gebundenes Projekt", + + // "quality-assurance.event.modal.project.remove": "Remove", + "quality-assurance.event.modal.project.remove": "Entfernen", + + // "quality-assurance.event.modal.project.placeholder": "Enter a project name", + "quality-assurance.event.modal.project.placeholder": "Geben Sie einen Projektnamen ein", + + // "quality-assurance.event.modal.project.notFound": "No project found.", + "quality-assurance.event.modal.project.notFound": "Kein Projekt gefunden.", + + // "quality-assurance.event.project.bounded": "The project has been linked successfully.", + "quality-assurance.event.project.bounded": "Das Projekt wurde erfolgreich verknüpft.", + + // "quality-assurance.event.project.removed": "The project has been successfully unlinked.", + "quality-assurance.event.project.removed": "Das Projekt ist erfolgreich getrennt worden.", + + // "quality-assurance.event.project.error": "An error has occurred. No operation performed.", + "quality-assurance.event.project.error": "Es ist ein Fehler aufgetreten. Keine Operation durchgeführt.", + + // "quality-assurance.event.reason": "Reason", + "quality-assurance.event.reason": "Grund", // "orgunit.listelement.badge": "Organizational Unit", "orgunit.listelement.badge": "Organisationseinheit", + // "orgunit.listelement.no-title": "Untitled", + "orgunit.listelement.no-title": "Unbenannt", + // "orgunit.page.city": "City", "orgunit.page.city": "Stadt", @@ -4025,7 +5498,14 @@ // "orgunit.page.titleprefix": "Organizational Unit: ", "orgunit.page.titleprefix": "Organisationseinheit: ", + // "orgunit.page.ror": "ROR Identifier", + "orgunit.page.ror": "ROR-Identifier", + // "orgunit.search.results.head": "Organizational Unit Search Results", + "orgunit.search.results.head": "Suchergebnisse für Organisationseinheiten", + + // "pagination.options.description": "Pagination options", + "pagination.options.description": "Optionen für die Seitennummerierung", // "pagination.results-per-page": "Results Per Page", "pagination.results-per-page": "Treffer pro Seite", @@ -4039,8 +5519,6 @@ // "pagination.sort-direction": "Sort Options", "pagination.sort-direction": "Sortieroptionen", - - // "person.listelement.badge": "Person", "person.listelement.badge": "Person", @@ -4065,6 +5543,9 @@ // "person.page.lastname": "Last Name", "person.page.lastname": "Nachname", + // "person.page.name": "Name", + "person.page.name": "Name", + // "person.page.link.full": "Show all metadata", "person.page.link.full": "Alle Metadaten anzeigen", @@ -4080,19 +5561,32 @@ // "person.search.results.head": "Person Search Results", "person.search.results.head": "Ergebnisse der Personensuche", + // "person-relationships.search.results.head": "Person Search Results", + "person-relationships.search.results.head": "Suchergebnisse für Personen", + // "person.search.title": "Person Search", "person.search.title": "Personensuche", - - // "process.new.select-parameters": "Parameters", "process.new.select-parameters": "Parameter", + // "process.new.select-parameter": "Select parameter", + "process.new.select-parameter": "Parameter auswählen", + + // "process.new.add-parameter": "Add a parameter...", + "process.new.add-parameter": "Einen Parameter hinzufügen...", + + // "process.new.delete-parameter": "Delete parameter", + "process.new.delete-parameter": "Parameter löschen", + + // "process.new.parameter.label": "Parameter value", + "process.new.parameter.label": "Parameterwert", + // "process.new.cancel": "Cancel", "process.new.cancel": "Abbrechen", - // "process.new.submit": "Submit", - "process.new.submit": "Eingabe", + // "process.new.submit": "Save", + "process.new.submit": "Speichern", // "process.new.select-script": "Script", "process.new.select-script": "Skript", @@ -4133,6 +5627,9 @@ // "process.new.notification.error.content": "An error occurred while creating this process", "process.new.notification.error.content": "Beim Erstellen dieses Prozesses ist ein Fehler aufgetreten", + // "process.new.notification.error.max-upload.content": "The file exceeds the maximum upload size", + "process.new.notification.error.max-upload.content": "Die Datei überschreitet die maximale Upload-Größe", + // "process.new.header": "Create a new process", "process.new.header": "Einen neuen Prozess erstellen", @@ -4142,18 +5639,16 @@ // "process.new.breadcrumbs": "Create a new process", "process.new.breadcrumbs": "Einen neuen Prozess erstellen", + // "process.detail.arguments": "Arguments", + "process.detail.arguments": "Argumente", + // "process.detail.arguments.empty": "This process doesn't contain any arguments", + "process.detail.arguments.empty": "Dieser Prozess beinhaltet keine Argumente", - // "process.detail.arguments" : "Arguments", - "process.detail.arguments": "Parameter", - - // "process.detail.arguments.empty" : "This process doesn't contain any arguments", - "process.detail.arguments.empty": "Dieser Prozess beinhaltet keine Parameter", - - // "process.detail.back" : "Back", + // "process.detail.back": "Back", "process.detail.back": "Zurück", - // "process.detail.output" : "Process Output", + // "process.detail.output": "Process Output", "process.detail.output": "Prozessausgabe", // "process.detail.logs.button": "Retrieve process output", @@ -4165,42 +5660,94 @@ // "process.detail.logs.none": "This process has no output", "process.detail.logs.none": "Dieser Prozess gibt nichts aus.", - // "process.detail.output-files" : "Output Files", + // "process.detail.output-files": "Output Files", "process.detail.output-files": "Ausgabedateien", - // "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": "Dieser Prozess enthält keine Ausgabedateien", - // "process.detail.script" : "Script", + // "process.detail.script": "Script", "process.detail.script": "Skript", - // "process.detail.title" : "Process: {{ id }} - {{ name }}", + // "process.detail.title": "Process: {{ id }} - {{ name }}", "process.detail.title": "Prozess: {{ id }} - {{ name }}", - // "process.detail.start-time" : "Start time", + // "process.detail.start-time": "Start time", "process.detail.start-time": "Startzeit", - // "process.detail.end-time" : "Finish time", + // "process.detail.end-time": "Finish time", "process.detail.end-time": "Schlusszeit", - // "process.detail.status" : "Status", + // "process.detail.status": "Status", "process.detail.status": "Status", - // "process.detail.create" : "Create similar process", + // "process.detail.create": "Create similar process", "process.detail.create": "Erstelle ähnlichen Prozess", + // "process.detail.actions": "Actions", + "process.detail.actions": "Aktionen", + // "process.detail.delete.button": "Delete process", + "process.detail.delete.button": "Prozess löschen", - // "process.overview.table.finish": "Finish time", + // "process.detail.delete.header": "Delete process", + "process.detail.delete.header": "Prozess löschen", + + // "process.detail.delete.body": "Are you sure you want to delete the current process?", + "process.detail.delete.body": "Sind Sie sicher, dass Sie den aktuellen Prozess löschen wollen?", + + // "process.detail.delete.cancel": "Cancel", + "process.detail.delete.cancel": "Abbrechen", + + // "process.detail.delete.confirm": "Delete process", + "process.detail.delete.confirm": "Vorgang löschen", + + // "process.detail.delete.success": "The process was successfully deleted.", + "process.detail.delete.success": "Der Prozess wurde erfolgreich gelöscht.", + + // "process.detail.delete.error": "Something went wrong when deleting the process", + "process.detail.delete.error": "Beim Löschen des Prozesses ist etwas schief gelaufen", + + // "process.detail.refreshing": "Auto-refreshing…", + "process.detail.refreshing": "Automatische Aktualisierung...", + + // "process.overview.table.completed.info": "Finish time (UTC)", + "process.overview.table.completed.info": "Schlusszeit (UTC)", + + // "process.overview.table.completed.title": "Succeeded processes", + "process.overview.table.completed.title": "Erfolgreiche Prozesse", + + // "process.overview.table.empty": "No matching processes found.", + "process.overview.table.empty": "Keine übereinstimmenden Prozesse gefunden.", + + // "process.overview.table.failed.info": "Finish time (UTC)", + "process.overview.table.failed.info": "Schlusszeit (UTC)", + + // "process.overview.table.failed.title": "Failed processes", + "process.overview.table.failed.title": "Gescheiterte Prozesse", + + // "process.overview.table.finish": "Finish time (UTC)", "process.overview.table.finish": "Schlusszeit", // "process.overview.table.id": "Process ID", - "process.overview.table.id": "Prozess ID", + "process.overview.table.id": "Prozess-ID", // "process.overview.table.name": "Name", "process.overview.table.name": "Name", - // "process.overview.table.start": "Start time", + // "process.overview.table.running.info": "Start time (UTC)", + "process.overview.table.running.info": "Startzeit (UTC)", + + // "process.overview.table.running.title": "Running processes", + "process.overview.table.running.title": "Laufende Prozesse", + + // "process.overview.table.scheduled.info": "Creation time (UTC)", + "process.overview.table.scheduled.info": "Erstellungszeit (UTC)", + + // "process.overview.table.scheduled.title": "Scheduled processes", + "process.overview.table.scheduled.title": "Geplante Prozesse", + + // "process.overview.table.start": "Start time (UTC)", "process.overview.table.start": "Startzeit", // "process.overview.table.status": "Status", @@ -4222,22 +5769,22 @@ "process.overview.table.actions": "Aktionen", // "process.overview.delete": "Delete {{count}} processes", - "process.overview.delete": "Lösche {{count}} Prozesse", + "process.overview.delete": "{{count}} Prozesse löschen", // "process.overview.delete-process": "Delete process", - "process.overview.delete-process": "Lösche Prozess", + "process.overview.delete-process": "Prozess löschen", // "process.overview.delete.clear": "Clear delete selection", - "process.overview.delete.clear": "Auswahl aufheben", + "process.overview.delete.clear": "Leeren der Auswahl", // "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": "Es werden {{count}} Prozesse gelöscht. Diese Aktion kann einige Zeit dauern. Bitte warten Sie bis zum Abschluss der Aktion.", + "process.overview.delete.processing": "{{count}} Prozess(e) werden gelöscht. Bitte warten Sie, bis die Löschung vollständig abgeschlossen ist. Beachten Sie, dass dies eine Weile dauern kann.", // "process.overview.delete.body": "Are you sure you want to delete {{count}} process(es)?", - "process.overview.delete.body": "Wollen Sie tatsächlich {{count}} Prozesse löschen?", + "process.overview.delete.body": "Sind Sie sicher, dass Sie {{count}} Prozess(e) löschen wollen?", // "process.overview.delete.header": "Delete processes", - "process.overview.delete.header": "Prozess löschen", + "process.overview.delete.header": "Prozesse löschen", // "process.overview.unknown.user": "Unknown", "process.overview.unknown.user": "Unbekannt", @@ -4245,13 +5792,11 @@ // "process.bulk.delete.error.head": "Error on deleteing process", "process.bulk.delete.error.head": "Fehler beim Löschen des Prozesses", - // "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": "Der Prozess mit ID {{processId}} konnte nicht gelöscht werden. Es wird versucht, die verbleibenden Prozesse zu löschen.", + // "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": "Der Prozess mit der ID {{processId}} konnte nicht gelöscht werden. Die verbleibenden Prozesse werden weiterhin gelöscht.", // "process.bulk.delete.success": "{{count}} process(es) have been succesfully deleted", - "process.bulk.delete.success": "Es wurden {{count}} Prozesse erfolgreich gelöscht.", - - + "process.bulk.delete.success": "{{count}} Prozess(e) wurden erfolgreich gelöscht", // "profile.breadcrumbs": "Update Profile", "profile.breadcrumbs": "Profil aktualisieren", @@ -4262,14 +5807,14 @@ // "profile.card.security": "Security", "profile.card.security": "Sicherheit", - // "profile.form.submit": "Update Profile", - "profile.form.submit": "Profil aktualisieren", + // "profile.form.submit": "Save", + "profile.form.submit": "Speichern", // "profile.groups.head": "Authorization groups you belong to", "profile.groups.head": "Berechtigungsgruppen, denen Sie angehören", - // "profile.head": "Update Profile", - "profile.head": "Profil aktualisieren", + // "profile.special.groups.head": "Authorization special groups you belong to", + "profile.special.groups.head": "Spezielle Berechtigungsgruppen, denen Sie angehören", // "profile.metadata.form.error.firstname.required": "First Name is required", "profile.metadata.form.error.firstname.required": "Vorname muss angegeben werden", @@ -4328,9 +5873,6 @@ // "profile.security.form.notifications.error.title": "Error changing passwords", "profile.security.form.notifications.error.title": "Fehler beim Ändern von Passwörtern", - // "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": "Das Passwort sollte mindestens 6 Zeichen lang sein.", - // "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": "Es ist ein Fehler beim Ändern des Passworts aufgetreten. Bitte überprüfen Sie, ob Ihr aktuelles Passwort korrekt eingegeben wurde.", @@ -4343,7 +5885,8 @@ // "profile.title": "Update Profile", "profile.title": "Profil aktualisieren", - + // "profile.card.researcher": "Researcher Profile", + "profile.card.researcher": "Forscherprofil", // "project.listelement.badge": "Research Project", "project.listelement.badge": "Forschungsprojekt", @@ -4378,7 +5921,8 @@ // "project.search.results.head": "Project Search Results", "project.search.results.head": "Suchergebnisse für Projekte", - + // "project-relationships.search.results.head": "Project Search Results", + "project-relationships.search.results.head": "Suchergebnisse für Projekte", // "publication.listelement.badge": "Publication", "publication.listelement.badge": "Veröffentlichung", @@ -4407,9 +5951,119 @@ // "publication.search.results.head": "Publication Search Results", "publication.search.results.head": "Suchergebnisse Publikationen", + // "publication-relationships.search.results.head": "Publication Search Results", + "publication-relationships.search.results.head": "Suchergebnisse für Publikationen", + // "publication.search.title": "Publication Search", "publication.search.title": "Publikationssuche", + // "media-viewer.next": "Next", + "media-viewer.next": "Weiter", + + // "media-viewer.previous": "Previous", + "media-viewer.previous": "Vorherige", + + // "media-viewer.playlist": "Playlist", + "media-viewer.playlist": "Wiedergabeliste", + + // "suggestion.loading": "Loading ...", + "suggestion.loading": "Laden ...", + + // "suggestion.title": "Publication Claim", + "suggestion.title": "Publikationen-Beanspruchung", + + // "suggestion.title.breadcrumbs": "Publication Claim", + "suggestion.title.breadcrumbs": "Publikationen-Beanspruchung", + + // "suggestion.targets.description": "Below you can see all the suggestions ", + "suggestion.targets.description": "Unten sehen Sie alle Vorschläge ", + + // "suggestion.targets": "Current Suggestions", + "suggestion.targets": "Aktuelle Vorschläge", + + // "suggestion.table.name": "Researcher Name", + "suggestion.table.name": "Name des Researchers", + + // "suggestion.table.actions": "Actions", + "suggestion.table.actions": "Aktionen", + + // "suggestion.button.review": "Review {{ total }} suggestion(s)", + "suggestion.button.review": "Überprüfe {{ total }} Vorschläge", + + // "suggestion.button.review.title": "Review {{ total }} suggestion(s) for ", + "suggestion.button.review.title": "Überprüfe {{ total }} Vorschläge für ", + + // "suggestion.noTargets": "No target found.", + "suggestion.noTargets": "Kein Ziel gefunden.", + + // "suggestion.target.error.service.retrieve": "An error occurred while loading the Suggestion targets", + "suggestion.target.error.service.retrieve": "Beim Laden der Vorschlagsziele ist ein Fehler aufgetreten", + + // "suggestion.evidence.type": "Type", + "suggestion.evidence.type": "Typ", + + // "suggestion.evidence.score": "Score", + "suggestion.evidence.score": "Ergebnis", + + // "suggestion.evidence.notes": "Notes", + "suggestion.evidence.notes": "Anmerkungen", + + // "suggestion.approveAndImport": "Approve & import", + "suggestion.approveAndImport": "Genehmigen & importieren", + + // "suggestion.approveAndImport.success": "The suggestion has been imported successfully. View.", + "suggestion.approveAndImport.success": "Der Vorschlag wurde erfolgreich importiert. Ansicht.", + + // "suggestion.approveAndImport.bulk": "Approve & import Selected", + "suggestion.approveAndImport.bulk": "Genehmigen & importieren der Auswahl", + + // "suggestion.approveAndImport.bulk.success": "{{ count }} suggestions have been imported successfully ", + "suggestion.approveAndImport.bulk.success": "{{ count }} Vorschläge wurden erfolgreich importiert.", + + // "suggestion.approveAndImport.bulk.error": "{{ count }} suggestions haven't been imported due to unexpected server errors", + "suggestion.approveAndImport.bulk.error": "{{ count }} Vorschläge wurden aufgrund eines unerwarteten Serverfehlers nicht importiert", + + // "suggestion.ignoreSuggestion": "Ignore Suggestion", + "suggestion.ignoreSuggestion": "Vorschlag ignorieren", + + // "suggestion.ignoreSuggestion.success": "The suggestion has been discarded", + "suggestion.ignoreSuggestion.success": "Der Vorschlag wurde verworfen", + + // "suggestion.ignoreSuggestion.bulk": "Ignore Suggestion Selected", + "suggestion.ignoreSuggestion.bulk": "Ausgewählten Vorschlag ignorieren", + + // "suggestion.ignoreSuggestion.bulk.success": "{{ count }} suggestions have been discarded ", + "suggestion.ignoreSuggestion.bulk.success": "{{ count }} Vorschläge wurden verworfen.", + + // "suggestion.ignoreSuggestion.bulk.error": "{{ count }} suggestions haven't been discarded due to unexpected server errors", + "suggestion.ignoreSuggestion.bulk.error": "{{ count }} Vorschläge wurden aufgrund von unerwarteten Serverfehlern nicht verworfen", + + // "suggestion.seeEvidence": "See evidence", + "suggestion.seeEvidence": "Nachweis sehen", + + // "suggestion.hideEvidence": "Hide evidence", + "suggestion.hideEvidence": "Nachweis verbergen", + + // "suggestion.suggestionFor": "Suggestions for", + "suggestion.suggestionFor": "Vorschläge für", + + // "suggestion.suggestionFor.breadcrumb": "Suggestions for {{ name }}", + "suggestion.suggestionFor.breadcrumb": "Vorschläge für {{ name }}", + + // "suggestion.source.openaire": "OpenAIRE Graph", + "suggestion.source.openaire": "OpenAIRE-Graph", + + // "suggestion.from.source": "from the ", + "suggestion.from.source": "von der ", + + // "suggestion.count.missing": "You have no publication claims left", + "suggestion.count.missing": "Sie haben keine übrigen Beanspruchungen von Publikationen", + + // "suggestion.totalScore": "Total Score", + "suggestion.totalScore": "Gesamtpunktzahl", + + // "suggestion.type.openaire": "OpenAIRE", + "suggestion.type.openaire": "OpenAIRE", // "register-email.title": "New user registration", "register-email.title": "Neu registrieren", @@ -4459,9 +6113,6 @@ // "register-page.create-profile.security.error.matching-passwords": "The passwords do not match.", "register-page.create-profile.security.error.matching-passwords": "Die Passwörter stimmen nicht überein.", - // "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": "Das Passwort sollte mindestens 6 Zeichen lang sein.", - // "register-page.create-profile.submit": "Complete Registration", "register-page.create-profile.submit": "Vollständige Registrierung", @@ -4477,7 +6128,6 @@ // "register-page.create-profile.submit.success.head": "Registration completed", "register-page.create-profile.submit.success.head": "Registrierung abgeschlossen", - // "register-page.registration.header": "New user registration", "register-page.registration.header": "Neues Konto anlegen", @@ -4490,8 +6140,11 @@ // "register-page.registration.email.error.required": "Please fill in an email address", "register-page.registration.email.error.required": "Bitte geben Sie eine E-Mail Adresse an", - // "register-page.registration.email.error.pattern": "Please fill in a valid email address", - "register-page.registration.email.error.pattern": "Bitte geben Sie eine gültige E-Mail Adresse an", + // "register-page.registration.email.error.not-email-form": "Please fill in a valid email address.", + "register-page.registration.email.error.not-email-form": "Bitte geben Sie eine gültige E-Mail-Adresse ein.", + + // "register-page.registration.email.error.not-valid-domain": "Use email with allowed domains: {{ domains }}", + "register-page.registration.email.error.not-valid-domain": "Verwenden Sie eine E-Mail mit erlaubten Domains: {{ domains }}", // "register-page.registration.email.hint": "This address will be verified and used as your login name.", "register-page.registration.email.hint": "Diese Adresse wird überprüft und als Ihr Accountname verwendet..", @@ -4511,7 +6164,29 @@ // "register-page.registration.error.content": "An error occured when registering the following email address: {{ email }}", "register-page.registration.error.content": "Bei der Registrierung der folgenden E-Mail-Adresse ist ein Fehler aufgetreten: {{ email }}", + // "register-page.registration.error.recaptcha": "Error when trying to authenticate with recaptcha", + "register-page.registration.error.recaptcha": "Fehler beim Versuch der Authentifizierung mit 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": "Um sich zu registrieren, müssen Sie die Cookies für die Registrierung und Passwortwiederherstellung (Google reCaptcha) akzeptieren.", + + // "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": "Diese E-Mail-Adresse steht nicht auf der Liste der Domains, die sich registrieren können. Erlaubte Domains sind {{ domains }}", + + // "register-page.registration.google-recaptcha.open-cookie-settings": "Open cookie settings", + "register-page.registration.google-recaptcha.open-cookie-settings": "Cookie-Einstellungen öffnen", + + // "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": "Bei der reCaptcha-Überprüfung ist ein Fehler aufgetreten", + + // "register-page.registration.google-recaptcha.notification.message.expired": "Verification expired. Please verify again.", + "register-page.registration.google-recaptcha.notification.message.expired": "Die Verifizierung ist abgelaufen. Bitte verifizieren Sie sich erneut.", + + // "register-page.registration.info.maildomain": "Accounts can be registered for mail addresses of the domains", + "register-page.registration.info.maildomain": "Konten können für Mailadressen der Domains registriert werden", // "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": "Für den Beziehungstyp {{ type }} zwischen den beiden Items konnte keine passende Übereinstimmung gefunden werden", @@ -4534,12 +6209,18 @@ // "relationships.isIssueOf": "Journal Issues", "relationships.isIssueOf": "Zeitschriftenhefte", + // "relationships.isIssueOf.JournalIssue": "Journal Issue", + "relationships.isIssueOf.JournalIssue": "Zeitschriftenheft", + // "relationships.isJournalIssueOf": "Journal Issue", "relationships.isJournalIssueOf": "Zeitschriftenheft", // "relationships.isJournalOf": "Journals", "relationships.isJournalOf": "Zeitschriften", + // "relationships.isJournalVolumeOf": "Journal Volume", + "relationships.isJournalVolumeOf": "Zeitschriftenband", + // "relationships.isOrgUnitOf": "Organizational Units", "relationships.isOrgUnitOf": "Organisationseinheiten", @@ -4564,6 +6245,9 @@ // "relationships.isVolumeOf": "Journal Volumes", "relationships.isVolumeOf": "Zeitschriftenbände", + // "relationships.isVolumeOf.JournalVolume": "Journal Volume", + "relationships.isVolumeOf.JournalVolume": "Zeitschriftenband", + // "relationships.isContributorOf": "Contributors", "relationships.isContributorOf": "Beteiligte", @@ -4576,16 +6260,14 @@ // "relationships.isFundingAgencyOf.OrgUnit": "Funder", "relationships.isFundingAgencyOf.OrgUnit": "Förderer", - // "repository.image.logo": "Repository logo", "repository.image.logo": "Repository Logo", - // "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": "DSpace-Repositorium", + // "repository.title.prefix": "DSpace Repository :: ", + "repository.title.prefix": "DSpace Repositorium :: ", // "resource-policies.add.button": "Add", "resource-policies.add.button": "Hinzufügen", @@ -4638,6 +6320,12 @@ // "resource-policies.edit.page.failure.content": "An error occurred while editing the resource policy.", "resource-policies.edit.page.failure.content": "Beim Bearbeiten der Ressourcen-Richtlinie ist ein Fehler aufgetreten.", + // "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": "Beim Bearbeiten des Ziels (ePerson oder Gruppe) der Ressourcen-Richtlinie ist ein Fehler aufgetreten.", + + // "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": "Bei der Bearbeitung der Ressourcen-Richtlinie ist ein Fehler aufgetreten. Das Ziel (ePerson oder Gruppe) wurde erfolgreich aktualisiert.", + // "resource-policies.edit.page.success.content": "Operation successful", "resource-policies.edit.page.success.content": "Vorgang erfolgreich", @@ -4671,6 +6359,21 @@ // "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.modal.header": "Cannot change type", + "resource-policies.form.eperson-group-list.modal.header": "Kann Typ nicht ändern", + + // "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": "Es ist nicht möglich, eine ePerson durch eine Gruppe zu ersetzen.", + + // "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": "Es ist nicht möglich, eine Gruppe durch eine ePerson zu ersetzen.", + + // "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": "Löschen Sie die aktuelle Ressourcen-Richtlinie und erstellen Sie eine neue Richtlinie mit dem gewünschten Typ.", + + // "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": "Enddatum", @@ -4683,7 +6386,7 @@ // "resource-policies.form.name.label": "Name", "resource-policies.form.name.label": "Name", - //"resource-policies.form.name.hint": "Max 30 characters", + // "resource-policies.form.name.hint": "Max 30 characters", "resource-policies.form.name.hint": "Maximal 30 Zeichen", // "resource-policies.form.policy-type.label": "Select the policy type", @@ -4716,6 +6419,18 @@ // "resource-policies.table.headers.group": "Group", "resource-policies.table.headers.group": "Gruppe", + // "resource-policies.table.headers.select-all": "Select all", + "resource-policies.table.headers.select-all": "Alle auswählen", + + // "resource-policies.table.headers.deselect-all": "Deselect all", + "resource-policies.table.headers.deselect-all": "Auswahl zurücknehmen", + + // "resource-policies.table.headers.select": "Select", + "resource-policies.table.headers.select": "Auswählen", + + // "resource-policies.table.headers.deselect": "Deselect", + "resource-policies.table.headers.deselect": "Auswahl zurücknehmen", + // "resource-policies.table.headers.id": "ID", "resource-policies.table.headers.id": "ID", @@ -4740,14 +6455,12 @@ // "resource-policies.table.headers.title.for.collection": "Policies for Collection", "resource-policies.table.headers.title.for.collection": "Richtlinien für Sammlungen", - + // "root.skip-to-content": "Skip to main content", + "root.skip-to-content": "Zum Hauptinhalt springen", // "search.description": "", "search.description": "", - // "search.filters.filter.birthDate.label": "Search birth date", - "search.filters.filter.birthDate.label": "Geburtsdatum suchen", - // "search.switch-configuration.title": "Show", "search.switch-configuration.title": "Zeige", @@ -4760,6 +6473,12 @@ // "search.search-form.placeholder": "Search the repository ...", "search.search-form.placeholder": "Durchsuche Repositorium", + // "search.filters.remove": "Remove filter of type {{ type }} with value {{ value }}", + "search.filters.remove": "Filter des Typs {{ type }} mit dem Wert {{ value }} entfernen", + + // "search.filters.applied.f.title": "Title", + "search.filters.applied.f.title": "Titel", + // "search.filters.applied.f.author": "Author", "search.filters.applied.f.author": "Autor:in", @@ -4772,8 +6491,8 @@ // "search.filters.applied.f.dateSubmitted": "Date submitted", "search.filters.applied.f.dateSubmitted": "Datum der Einreichung", - // "search.filters.applied.f.discoverable": "Private", - "search.filters.applied.f.discoverable": "Verborgen", + // "search.filters.applied.f.discoverable": "Non-discoverable", + "search.filters.applied.f.discoverable": "Nicht auffindbar", // "search.filters.applied.f.entityType": "Item Type", "search.filters.applied.f.entityType": "Item-Typ", @@ -4781,6 +6500,12 @@ // "search.filters.applied.f.has_content_in_original_bundle": "Has files", "search.filters.applied.f.has_content_in_original_bundle": "Dateien dazu vorhanden?", + // "search.filters.applied.f.original_bundle_filenames": "File name", + "search.filters.applied.f.original_bundle_filenames": "Dateiname", + + // "search.filters.applied.f.original_bundle_descriptions": "File description", + "search.filters.applied.f.original_bundle_descriptions": "Beschreibung der Datei", + // "search.filters.applied.f.itemtype": "Type", "search.filters.applied.f.itemtype": "Typ", @@ -4802,10 +6527,38 @@ // "search.filters.applied.f.birthDate.min": "Start birth date", "search.filters.applied.f.birthDate.min": "Geburtsdatum (von)", + // "search.filters.applied.f.supervisedBy": "Supervised by", + "search.filters.applied.f.supervisedBy": "Beaufsichtigt von", + // "search.filters.applied.f.withdrawn": "Withdrawn", "search.filters.applied.f.withdrawn": "Zurückgezogen", + // "search.filters.applied.operator.equals": "", + // "search.filters.applied.operator.notequals": " not equals", + "search.filters.applied.operator.notequals": " nicht gleich", + + // "search.filters.applied.operator.authority": "", + + // "search.filters.applied.operator.notauthority": " not authority", + "search.filters.applied.operator.notauthority": " nicht Authority", + + // "search.filters.applied.operator.contains": " contains", + "search.filters.applied.operator.contains": " enthält", + + // "search.filters.applied.operator.notcontains": " not contains", + "search.filters.applied.operator.notcontains": " enthält nicht", + + // "search.filters.applied.operator.query": "", + + // "search.filters.filter.title.head": "Title", + "search.filters.filter.title.head": "Titel", + + // "search.filters.filter.title.placeholder": "Title", + "search.filters.filter.title.placeholder": "Titel", + + // "search.filters.filter.title.label": "Search Title", + "search.filters.filter.title.label": "Titel suchen", // "search.filters.filter.author.head": "Author", "search.filters.filter.author.head": "Autor:in", @@ -4822,38 +6575,62 @@ // "search.filters.filter.birthDate.placeholder": "Birth Date", "search.filters.filter.birthDate.placeholder": "Geburtsdatum", + // "search.filters.filter.birthDate.label": "Search birth date", + "search.filters.filter.birthDate.label": "Geburtsdatum suchen", + + // "search.filters.filter.collapse": "Collapse filter", + "search.filters.filter.collapse": "Filter zusammenklappen", + // "search.filters.filter.creativeDatePublished.head": "Date Published", "search.filters.filter.creativeDatePublished.head": "Erscheinungsdatum", // "search.filters.filter.creativeDatePublished.placeholder": "Date Published", "search.filters.filter.creativeDatePublished.placeholder": "Erscheinungsdatum", + // "search.filters.filter.creativeDatePublished.label": "Search date published", + "search.filters.filter.creativeDatePublished.label": "Datum der Veröffentlichung suchen", + // "search.filters.filter.creativeWorkEditor.head": "Editor", "search.filters.filter.creativeWorkEditor.head": "Herausgeber:in", // "search.filters.filter.creativeWorkEditor.placeholder": "Editor", "search.filters.filter.creativeWorkEditor.placeholder": "Herausgeber:in", + // "search.filters.filter.creativeWorkEditor.label": "Search editor", + "search.filters.filter.creativeWorkEditor.label": "Herausgeber:in suchen", + // "search.filters.filter.creativeWorkKeywords.head": "Subject", "search.filters.filter.creativeWorkKeywords.head": "Thema", // "search.filters.filter.creativeWorkKeywords.placeholder": "Subject", "search.filters.filter.creativeWorkKeywords.placeholder": "Thema", + // "search.filters.filter.creativeWorkKeywords.label": "Search subject", + "search.filters.filter.creativeWorkKeywords.label": "Thema suchen", + // "search.filters.filter.creativeWorkPublisher.head": "Publisher", "search.filters.filter.creativeWorkPublisher.head": "Verlag", // "search.filters.filter.creativeWorkPublisher.placeholder": "Publisher", "search.filters.filter.creativeWorkPublisher.placeholder": "Verlag", + // "search.filters.filter.creativeWorkPublisher.label": "Search publisher", + "search.filters.filter.creativeWorkPublisher.label": "Verlag suchen", + // "search.filters.filter.dateIssued.head": "Date", "search.filters.filter.dateIssued.head": "Datum", - // "search.filters.filter.dateIssued.max.placeholder": "Minimum Date", - "search.filters.filter.dateIssued.max.placeholder": "Ältestes Datum", + // "search.filters.filter.dateIssued.max.placeholder": "Maximum Date", + "search.filters.filter.dateIssued.max.placeholder": "Max. Datum", - // "search.filters.filter.dateIssued.min.placeholder": "Maximum Date", - "search.filters.filter.dateIssued.min.placeholder": "Jüngstes Datum", + // "search.filters.filter.dateIssued.max.label": "End", + "search.filters.filter.dateIssued.max.label": "Ende", + + // "search.filters.filter.dateIssued.min.placeholder": "Minimum Date", + "search.filters.filter.dateIssued.min.placeholder": "Min. Datum", + + // "search.filters.filter.dateIssued.min.label": "Start", + "search.filters.filter.dateIssued.min.label": "Start", // "search.filters.filter.dateSubmitted.head": "Date submitted", "search.filters.filter.dateSubmitted.head": "Datum der Einreichung", @@ -4861,8 +6638,11 @@ // "search.filters.filter.dateSubmitted.placeholder": "Date submitted", "search.filters.filter.dateSubmitted.placeholder": "Datum der Einreichung", - // "search.filters.filter.discoverable.head": "Private", - "search.filters.filter.discoverable.head": "Verborgen", + // "search.filters.filter.dateSubmitted.label": "Search date submitted", + "search.filters.filter.dateSubmitted.label": "Datum der Einreichung suchen", + + // "search.filters.filter.discoverable.head": "Non-discoverable", + "search.filters.filter.discoverable.head": "Nicht auffindbar", // "search.filters.filter.withdrawn.head": "Withdrawn", "search.filters.filter.withdrawn.head": "Zurückgezogen", @@ -4873,63 +6653,114 @@ // "search.filters.filter.entityType.placeholder": "Item Type", "search.filters.filter.entityType.placeholder": "Item-Typ", + // "search.filters.filter.entityType.label": "Search item type", + "search.filters.filter.entityType.label": "Itemtyp suchen", + + // "search.filters.filter.expand": "Expand filter", + "search.filters.filter.expand": "Erweitern Sie den Filter", + // "search.filters.filter.has_content_in_original_bundle.head": "Has files", "search.filters.filter.has_content_in_original_bundle.head": "Enthält Dateien", + // "search.filters.filter.original_bundle_filenames.head": "File name", + "search.filters.filter.original_bundle_filenames.head": "Dateiname", + + // "search.filters.filter.original_bundle_filenames.placeholder": "File name", + "search.filters.filter.original_bundle_filenames.placeholder": "Dateiname", + + // "search.filters.filter.original_bundle_filenames.label": "Search File name", + "search.filters.filter.original_bundle_filenames.label": "Dateinamen suchen", + + // "search.filters.filter.original_bundle_descriptions.head": "File description", + "search.filters.filter.original_bundle_descriptions.head": "Beschreibung der Datei", + + // "search.filters.filter.original_bundle_descriptions.placeholder": "File description", + "search.filters.filter.original_bundle_descriptions.placeholder": "Beschreibung der Datei", + + // "search.filters.filter.original_bundle_descriptions.label": "Search File description", + "search.filters.filter.original_bundle_descriptions.label": "Dateibeschreibung suchen", + // "search.filters.filter.itemtype.head": "Type", "search.filters.filter.itemtype.head": "Typ", // "search.filters.filter.itemtype.placeholder": "Type", "search.filters.filter.itemtype.placeholder": "Typ", + // "search.filters.filter.itemtype.label": "Search type", + "search.filters.filter.itemtype.label": "Typ suchen", + // "search.filters.filter.jobTitle.head": "Job Title", "search.filters.filter.jobTitle.head": "Berufsbezeichnung", // "search.filters.filter.jobTitle.placeholder": "Job Title", "search.filters.filter.jobTitle.placeholder": "Berufsbezeichnung", + // "search.filters.filter.jobTitle.label": "Search job title", + "search.filters.filter.jobTitle.label": "Berufsbezeichnung suchen", + // "search.filters.filter.knowsLanguage.head": "Known language", "search.filters.filter.knowsLanguage.head": "Bekannte Sprache", // "search.filters.filter.knowsLanguage.placeholder": "Known language", "search.filters.filter.knowsLanguage.placeholder": "Bekannte Sprache", + // "search.filters.filter.knowsLanguage.label": "Search known language", + "search.filters.filter.knowsLanguage.label": "Suche nach Sprachkenntnissen", + // "search.filters.filter.namedresourcetype.head": "Status", "search.filters.filter.namedresourcetype.head": "Status", // "search.filters.filter.namedresourcetype.placeholder": "Status", "search.filters.filter.namedresourcetype.placeholder": "Status", + // "search.filters.filter.namedresourcetype.label": "Search status", + "search.filters.filter.namedresourcetype.label": "Status der Suche", + // "search.filters.filter.objectpeople.head": "People", "search.filters.filter.objectpeople.head": "Personen", // "search.filters.filter.objectpeople.placeholder": "People", "search.filters.filter.objectpeople.placeholder": "Personen", + // "search.filters.filter.objectpeople.label": "Search people", + "search.filters.filter.objectpeople.label": "Personen suchen", + // "search.filters.filter.organizationAddressCountry.head": "Country", "search.filters.filter.organizationAddressCountry.head": "Land", // "search.filters.filter.organizationAddressCountry.placeholder": "Country", "search.filters.filter.organizationAddressCountry.placeholder": "Land", + // "search.filters.filter.organizationAddressCountry.label": "Search country", + "search.filters.filter.organizationAddressCountry.label": "Land suchen", + // "search.filters.filter.organizationAddressLocality.head": "City", "search.filters.filter.organizationAddressLocality.head": "Stadt", // "search.filters.filter.organizationAddressLocality.placeholder": "City", "search.filters.filter.organizationAddressLocality.placeholder": "Stadt", + // "search.filters.filter.organizationAddressLocality.label": "Search city", + "search.filters.filter.organizationAddressLocality.label": "Stadt suchen", + // "search.filters.filter.organizationFoundingDate.head": "Date Founded", "search.filters.filter.organizationFoundingDate.head": "Gründungsdatum", // "search.filters.filter.organizationFoundingDate.placeholder": "Date Founded", "search.filters.filter.organizationFoundingDate.placeholder": "Gründungsdatum", + // "search.filters.filter.organizationFoundingDate.label": "Search date founded", + "search.filters.filter.organizationFoundingDate.label": "Gründungsdatum suchen", + // "search.filters.filter.scope.head": "Scope", "search.filters.filter.scope.head": "Bereich", // "search.filters.filter.scope.placeholder": "Scope filter", "search.filters.filter.scope.placeholder": "Bereichsfilter", + // "search.filters.filter.scope.label": "Search scope filter", + "search.filters.filter.scope.label": "Filter für den Suchbereich", + // "search.filters.filter.show-less": "Collapse", "search.filters.filter.show-less": "Zusammenklappen", @@ -4942,13 +6773,35 @@ // "search.filters.filter.subject.placeholder": "Subject", "search.filters.filter.subject.placeholder": "Thema", + // "search.filters.filter.subject.label": "Search subject", + "search.filters.filter.subject.label": "Thema suchen", + // "search.filters.filter.submitter.head": "Submitter", "search.filters.filter.submitter.head": "Einreichende:r", // "search.filters.filter.submitter.placeholder": "Submitter", "search.filters.filter.submitter.placeholder": "Einreichende:r", + // "search.filters.filter.submitter.label": "Search submitter", + "search.filters.filter.submitter.label": "Einreichende suchen", + // "search.filters.filter.show-tree": "Browse {{ name }} tree", + "search.filters.filter.show-tree": "{{ name }} Baum durchsuchen", + + // "search.filters.filter.funding.head": "Funding", + "search.filters.filter.funding.head": "Förderung", + + // "search.filters.filter.funding.placeholder": "Funding", + "search.filters.filter.funding.placeholder": "Förderung", + + // "search.filters.filter.supervisedBy.head": "Supervised By", + "search.filters.filter.supervisedBy.head": "Beaufsichtigt von", + + // "search.filters.filter.supervisedBy.placeholder": "Supervised By", + "search.filters.filter.supervisedBy.placeholder": "Beaufsichtigt von", + + // "search.filters.filter.supervisedBy.label": "Search Supervised By", + "search.filters.filter.supervisedBy.label": "Beaufsichtigende suchen", // "search.filters.entityType.JournalIssue": "Journal Issue", "search.filters.entityType.JournalIssue": "Zeitschriftenheft", @@ -4959,6 +6812,15 @@ // "search.filters.entityType.OrgUnit": "Organizational Unit", "search.filters.entityType.OrgUnit": "Organisationseinheit", + // "search.filters.entityType.Person": "Person", + "search.filters.entityType.Person": "Person", + + // "search.filters.entityType.Project": "Project", + "search.filters.entityType.Project": "Projekt", + + // "search.filters.entityType.Publication": "Publication", + "search.filters.entityType.Publication": "Publikation", + // "search.filters.has_content_in_original_bundle.true": "Yes", "search.filters.has_content_in_original_bundle.true": "Ja", @@ -4977,8 +6839,8 @@ // "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.Waiting for Controller": "Waiting for reviewer", + "search.filters.namedresourcetype.Waiting for Controller": "Auf Überprüfung warten", // "search.filters.namedresourcetype.Workflow": "Workflow", "search.filters.namedresourcetype.Workflow": "Geschäftsgang", @@ -4992,28 +6854,45 @@ // "search.filters.withdrawn.false": "No", "search.filters.withdrawn.false": "Nein", - // "search.filters.head": "Filters", "search.filters.head": "Filter", // "search.filters.reset": "Reset filters", "search.filters.reset": "Filter zurücksetzen", + // "search.filters.search.submit": "Submit", + "search.filters.search.submit": "Einreichen", + // "search.filters.operator.equals.text": "Equals", + "search.filters.operator.equals.text": "Entspricht", + + // "search.filters.operator.notequals.text": "Not Equals", + "search.filters.operator.notequals.text": "Entspricht nicht", + + // "search.filters.operator.authority.text": "Authority", + "search.filters.operator.authority.text": "Authority", + + // "search.filters.operator.notauthority.text": "Not Authority", + "search.filters.operator.notauthority.text": "Keine Authority", + + // "search.filters.operator.contains.text": "Contains", + "search.filters.operator.contains.text": "Enthält", + + // "search.filters.operator.notcontains.text": "Not Contains", + "search.filters.operator.notcontains.text": "Enthält nicht", + + // "search.filters.operator.query.text": "Query", + "search.filters.operator.query.text": "Abfrage", // "search.form.search": "Search", "search.form.search": "Suche", - // "search.form.search_dspace": "Search DSpace", - "search.form.search_dspace": "Suche in DSpace", - - // "search.form.search_mydspace": "Search MyDSpace", - "search.form.search_mydspace": "Suche im persönlichen Arbeitsbereich", + // "search.form.search_dspace": "All repository", + "search.form.search_dspace": "Das gesamte Repositorium", // "search.form.scope.all": "All of DSpace", "search.form.scope.all": "Alles durchsuchen", - // "search.results.head": "Search Results", "search.results.head": "Suchergebnisse", @@ -5029,9 +6908,15 @@ // "search.results.view-result": "View", "search.results.view-result": "Anzeigen", + // "search.results.response.500": "An error occurred during query execution, please try again later", + "search.results.response.500": "Bei der Ausführung der Abfrage ist ein Fehler aufgetreten, bitte versuchen Sie es später noch einmal", + // "default.search.results.head": "Search Results", "default.search.results.head": "Suchergebnisse", + // "default-relationships.search.results.head": "Search Results", + "default-relationships.search.results.head": "Suchergebnisse", + // "search.sidebar.close": "Back to results", "search.sidebar.close": "Zurück zu den Ergebnissen", @@ -5050,11 +6935,24 @@ // "search.sidebar.settings.sort-by": "Sort By", "search.sidebar.settings.sort-by": "Sortieren nach", + // "search.sidebar.advanced-search.title": "Advanced Search", + "search.sidebar.advanced-search.title": "Erweiterte Suche", + + // "search.sidebar.advanced-search.filter-by": "Filter by", + "search.sidebar.advanced-search.filter-by": "Filtern nach", + + // "search.sidebar.advanced-search.filters": "Filters", + "search.sidebar.advanced-search.filters": "Filter", + + // "search.sidebar.advanced-search.operators": "Operators", + "search.sidebar.advanced-search.operators": "Operatoren", + + // "search.sidebar.advanced-search.add": "Add", + "search.sidebar.advanced-search.add": "Hinzufügen", + // "search.sidebar.settings.title": "Settings", "search.sidebar.settings.title": "Einstellungen", - - // "search.view-switch.show-detail": "Show detail", "search.view-switch.show-detail": "Detailanzeige", @@ -5064,7 +6962,11 @@ // "search.view-switch.show-list": "Show as list", "search.view-switch.show-list": "Als Liste anzeigen", + // "selectable-list-item-control.deselect": "Deselect item", + "selectable-list-item-control.deselect": "Itemauswahl zurücknehmen", + // "selectable-list-item-control.select": "Select item", + "selectable-list-item-control.select": "Item auswählen", // "sorting.ASC": "Ascending", "sorting.ASC": "Aufsteigend", @@ -5102,6 +7004,24 @@ // "sorting.lastModified.DESC": "Last modified Descending", "sorting.lastModified.DESC": "Änderungsdatum absteigend", + // "sorting.person.familyName.ASC": "Surname Ascending", + "sorting.person.familyName.ASC": "Nachname aufsteigend", + + // "sorting.person.familyName.DESC": "Surname Descending", + "sorting.person.familyName.DESC": "Nachname absteigend", + + // "sorting.person.givenName.ASC": "Name Ascending", + "sorting.person.givenName.ASC": "Name aufsteigend", + + // "sorting.person.givenName.DESC": "Name Descending", + "sorting.person.givenName.DESC": "Name absteigend", + + // "sorting.person.birthDate.ASC": "Birth Date Ascending", + "sorting.person.birthDate.ASC": "Geburtsdatum aufsteigend", + + // "sorting.person.birthDate.DESC": "Birth Date Descending", + "sorting.person.birthDate.DESC": "Geburtsdatum Absteigend", + // "statistics.title": "Statistics", "statistics.title": "Statistiken", @@ -5135,6 +7055,8 @@ // "statistics.table.header.views": "Views", "statistics.table.header.views": "Aufrufe", + // "statistics.table.no-name": "(object name could not be loaded)", + "statistics.table.no-name": "(Objektname konnte nicht geladen werden)", // "submission.edit.breadcrumbs": "Edit Submission", "submission.edit.breadcrumbs": "Einreichung bearbeiten", @@ -5142,7 +7064,10 @@ // "submission.edit.title": "Edit Submission", "submission.edit.title": "Einreichung bearbeiten", - // "submission.general.cannot_submit": "You have not the privilege to make a new submission.", + // "submission.general.cancel": "Cancel", + "submission.general.cancel": "Abbrechen", + + // "submission.general.cannot_submit": "You don't have permission to make a new submission.", "submission.general.cannot_submit": "Sie verfügen nicht über die Rechte, eine neue Einreichung zu machen.", // "submission.general.deposit": "Deposit", @@ -5163,6 +7088,9 @@ // "submission.general.discard.submit": "Discard", "submission.general.discard.submit": "Verwerfen", + // "submission.general.back.submit": "Back", + "submission.general.back.submit": "Zurück", + // "submission.general.info.saved": "Saved", "submission.general.info.saved": "Gespeichert", @@ -5175,13 +7103,36 @@ // "submission.general.save-later": "Save for later", "submission.general.save-later": "Für später speichern", - // "submission.import-external.page.title": "Import metadata from an external source", "submission.import-external.page.title": "Importieren von Metadaten aus einer externen Quelle", // "submission.import-external.title": "Import metadata from an external source", "submission.import-external.title": "Importieren von Metadaten aus einer externen Quelle", + // "submission.import-external.title.Journal": "Import a journal from an external source", + "submission.import-external.title.Journal": "Importieren einer Zeitschrift aus einer externen Quelle", + + // "submission.import-external.title.JournalIssue": "Import a journal issue from an external source", + "submission.import-external.title.JournalIssue": "Importieren eines Zeitschriftenhefts aus einer externen Quelle", + + // "submission.import-external.title.JournalVolume": "Import a journal volume from an external source", + "submission.import-external.title.JournalVolume": "Importieren eines Zeitschriftenbands aus einer externen Quelle", + + // "submission.import-external.title.OrgUnit": "Import a publisher from an external source", + "submission.import-external.title.OrgUnit": "Importieren eines Verlags aus einer externen Quelle", + + // "submission.import-external.title.Person": "Import a person from an external source", + "submission.import-external.title.Person": "Importieren einer Person aus einer externen Quelle", + + // "submission.import-external.title.Project": "Import a project from an external source", + "submission.import-external.title.Project": "Importieren eines Projekts aus einer externen Quelle", + + // "submission.import-external.title.Publication": "Import a publication from an external source", + "submission.import-external.title.Publication": "Importieren einer Publikation aus einer externen Quelle", + + // "submission.import-external.title.none": "Import metadata from an external source", + "submission.import-external.title.none": "Importieren von Metadaten aus einer externen Quelle", + // "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": "Geben Sie oben eine Abfrage ein, um Items aus dem Internet zu finden, die in DSpace importiert werden sollen.", @@ -5203,27 +7154,96 @@ // "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.doi": "DOI", + "submission.import-external.source.doi": "DOI", + + // "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": "Laden ...", // "submission.import-external.source.sherpaJournal": "SHERPA Journals", "submission.import-external.source.sherpaJournal": "SHERPA Zeitschriften", + // "submission.import-external.source.sherpaJournalIssn": "SHERPA Journals by ISSN", + "submission.import-external.source.sherpaJournalIssn": "SHERPA-Zeitschriften nach ISSN", + // "submission.import-external.source.sherpaPublisher": "SHERPA Publishers", "submission.import-external.source.sherpaPublisher": "SHERPA Verlage", + // "submission.import-external.source.openaire": "OpenAIRE Search by Authors", + "submission.import-external.source.openaire": "OpenAIRE-Suche nach Autor:innen", + + // "submission.import-external.source.openaireTitle": "OpenAIRE Search by Title", + "submission.import-external.source.openaireTitle": "OpenAIRE-Suche nach Titel", + + // "submission.import-external.source.openaireFunding": "OpenAIRE Search by Funder", + "submission.import-external.source.openaireFunding": "OpenAIRE-Suche nach Förderer", + // "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": "Library of Congress Names", + // "submission.import-external.source.ror": "Research Organization Registry (ROR)", + "submission.import-external.source.ror": "Research Organization Registry (ROR)", + // "submission.import-external.preview.title": "Item Preview", "submission.import-external.preview.title": "Item-Vorschau", + // "submission.import-external.preview.title.Publication": "Publication Preview", + "submission.import-external.preview.title.Publication": "Vorschau der Publikation", + + // "submission.import-external.preview.title.none": "Item Preview", + "submission.import-external.preview.title.none": "Vorschau des Items", + + // "submission.import-external.preview.title.Journal": "Journal Preview", + "submission.import-external.preview.title.Journal": "Vorschau der Zeitschrift", + + // "submission.import-external.preview.title.OrgUnit": "Organizational Unit Preview", + "submission.import-external.preview.title.OrgUnit": "Vorschau der Organisationseinheit", + + // "submission.import-external.preview.title.Person": "Person Preview", + "submission.import-external.preview.title.Person": "Vorschau der Person", + + // "submission.import-external.preview.title.Project": "Project Preview", + "submission.import-external.preview.title.Project": "Vorschau des Projekts", + // "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": "Die folgenden Metadaten wurden aus einer externen Quelle importiert. Sie werden vorausgefüllt, wenn Sie die Eingabe starten.", @@ -5254,11 +7274,44 @@ // "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": "Zeitschriftenband importieren", + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Project", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Projekt", + // "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": "Item importieren", + // "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": "Veranstaltung importieren", + + // "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": "Produkt importieren", + + // "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": "Equipment importieren", + + // "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": "Organisationseinheit importieren", + + // "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": "Förderung importieren", + + // "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": "Person importieren", + + // "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": "Patent importieren", + + // "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": "Projekt importieren", + // "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": "Metadaten der Publikation importieren", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Publikation importieren", + + // "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": "Neue Entität hinzugefügt!", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Project", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Projekt", // "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": "Importiere Autor:innen-Metadaten", @@ -5293,6 +7346,15 @@ // "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": "Von ORCID importieren", + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openaire": "Importing from OpenAIRE", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openaire": "Importieren aus OpenAIRE", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openaireTitle": "Importing from OpenAIRE", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openaireTitle": "Importieren aus OpenAIRE", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openaireFunding": "Importing from OpenAIRE", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openaireFunding": "Importieren aus OpenAIRE", + // "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": "Von Sherpa Zeitschriften importieren", @@ -5305,6 +7367,9 @@ // "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": "Importieren aus arXiv", + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.ror": "Import from ROR", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.ror": "Import aus ROR", + // "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Import", "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Import", @@ -5338,6 +7403,15 @@ // "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Select a local match:", "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Wählen Sie einen lokalen Treffer aus:", + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isOrgUnitOfProject.title": "Import Remote Organization", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isOrgUnitOfProject.title": "Externe Organisation importieren", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isOrgUnitOfProject.added.local-entity": "Successfully added local organization to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isOrgUnitOfProject.added.local-entity": "Lokale Organisation wurde erfolgreich zur Auswahl hinzugefügt", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isOrgUnitOfProject.added.new-entity": "Successfully imported and added external organization to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isOrgUnitOfProject.added.new-entity": "Externe Organisation erfolgreich importiert und zur Auswahl hinzugefügt", + // "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Deselect all", "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Nichts auswählen", @@ -5353,6 +7427,9 @@ // "submission.sections.describe.relationship-lookup.search-tab.search": "Go", "submission.sections.describe.relationship-lookup.search-tab.search": "Los", + // "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Search...", + "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Suche...", + // "submission.sections.describe.relationship-lookup.search-tab.select-all": "Select all", "submission.sections.describe.relationship-lookup.search-tab.select-all": "Alles auswählen", @@ -5372,7 +7449,7 @@ "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Lokale Projekte ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Local Publications ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Lokale Publicationen ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Lokale Publikationen ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Local Authors ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Lokale Autor:innen ({{ count }})", @@ -5419,6 +7496,30 @@ // "submission.sections.describe.relationship-lookup.search-tab.tab-title.arxiv": "arXiv ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.arxiv": "arXiv ({{ count }})", + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.ror": "ROR ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.ror": "ROR ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcidWorks": "ORCID ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcidWorks": "ORCID ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.crossref": "Crossref ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.crossref": "Crossref ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.scopus": "Scopus ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.scopus": "Scopus ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.openaire": "OpenAIRE Search by Authors ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.openaire": "OpenAIRE-Suche nach Autor:innen ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.openaireTitle": "OpenAIRE Search by Title ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.openaireTitle": "OpenAIRE-Suche nach Titel ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.openaireFunding": "OpenAIRE Search by Funder ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.openaireFunding": "OpenAIRE-Suche nach Förderer ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournalIssn": "Sherpa Journals by ISSN ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournalIssn": "Sherpa-Zeitschriften nach ISSN ({{ 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": "Suche nach Fördereinrichtungen", @@ -5428,16 +7529,45 @@ // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Search for Organizational Units", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Suche nach Organisationseinheiten", + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projects", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projekte", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Funder of the Project", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Förderer des Projekts", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor": "Publication of the Author", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor": "Publikation des Autors/der Autorin", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isOrgUnitOfProject": "OrgUnit of the Project", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isOrgUnitOfProject": "OrgEinheit des Projekts", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Project", + "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Projekt", + + // "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projects", + "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projekte", + + // "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Funder of the Project", + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Förderer des Projekts", + + // "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Search...", + "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Suche...", + // "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Current Selection ({{ count }})", "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Aktuelle Auswahl ({{ count }})", + // "submission.sections.describe.relationship-lookup.title.Journal": "Journal", + "submission.sections.describe.relationship-lookup.title.Journal": "Zeitschrift", + // "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Journal Issues", "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Zeitschriftenhefte", + // "submission.sections.describe.relationship-lookup.title.JournalIssue": "Journal Issues", "submission.sections.describe.relationship-lookup.title.JournalIssue": "Zeitschriftenhefte", // "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Journal Volumes", "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Zeitschriftenbände", + // "submission.sections.describe.relationship-lookup.title.JournalVolume": "Journal Volumes", "submission.sections.describe.relationship-lookup.title.JournalVolume": "Zeitschriftenbände", @@ -5449,6 +7579,7 @@ // "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Funding Agency", "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Fördereinrichtung", + // "submission.sections.describe.relationship-lookup.title.Project": "Projects", "submission.sections.describe.relationship-lookup.title.Project": "Projekte", @@ -5474,7 +7605,13 @@ "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Förderung", // "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Parent Organizational Unit", - "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Übergeordnete Organisationeinheit", + "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Übergeordnete Organisationseinheit", + + // "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor": "Publication", + "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor": "Publikation", + + // "submission.sections.describe.relationship-lookup.title.isOrgUnitOfProject": "OrgUnit", + "submission.sections.describe.relationship-lookup.title.isOrgUnitOfProject": "OrgEinheit", // "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Toggle dropdown", "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Liste umschalten", @@ -5545,6 +7682,15 @@ // "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Suchergebnisse", + // "submission.sections.describe.relationship-lookup.selection-tab.title.openaire": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.openaire": "Suchergebnisse", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.openaireTitle": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.openaireTitle": "Suchergebnisse", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.openaireFundin": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.openaireFundin": "Suchergebnisse", + // "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Suchergebnisse", @@ -5554,6 +7700,27 @@ // "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Suchergebnisse", + // "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Suchergebnisse", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.epo": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.epo": "Suchergebnisse", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.scopus": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.scopus": "Suchergebnisse", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.scielo": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.scielo": "Suchergebnisse", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Suchergebnisse", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.ror": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.ror": "Suchergebnisse", + + // "submission.sections.describe.relationship-lookup.selection-tab.title": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title": "Suchergebnisse", + // "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": "Möchten Sie die Namensvariante \"{{ value }}\" speichern, damit sie bei zukünftigen Veröffentlichungen erneut verwendet werden kann? Sie können die Variante bei dieser Veröffentlichung auch verwenden, ohne sie zu speichern.", @@ -5587,6 +7754,9 @@ // "submission.sections.general.add-more": "Add more", "submission.sections.general.add-more": "Mehr Hinzufügen", + // "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": "Die Einreichung kann aufgrund von Fehlern im Formular nicht abgeschlossen werden.
    Bitte füllen Sie alle erforderlichen Felder aus, um die Einreichung abzuschließen.", + // "submission.sections.general.collection": "Collection", "submission.sections.general.collection": "Sammlung", @@ -5611,6 +7781,9 @@ // "submission.sections.general.no-collection": "No collection found", "submission.sections.general.no-collection": "Keine Sammlung gefunden", + // "submission.sections.general.no-entity": "No entity types found", + "submission.sections.general.no-entity": "Keine Entitätstypen gefunden", + // "submission.sections.general.no-sections": "No options available", "submission.sections.general.no-sections": "Es stehen keine Optionen zur Verfügung", @@ -5626,7 +7799,26 @@ // "submission.sections.general.sections_not_valid": "There are incomplete sections.", "submission.sections.general.sections_not_valid": "Es gibt unvollständige Abschnitte.", + // "submission.sections.identifiers.info": "The following identifiers will be created for your item:", + "submission.sections.identifiers.info": "Die folgenden Identifier werden für Ihr Item erstellt:", + // "submission.sections.identifiers.no_handle": "No handles have been minted for this item.", + "submission.sections.identifiers.no_handle": "Diesem Item wurden keine Handles zugeordnet.", + + // "submission.sections.identifiers.no_doi": "No DOIs have been minted for this item.", + "submission.sections.identifiers.no_doi": "Diesem Item wurden keine DOIs zugeordnet.", + + // "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": "Andere Identifier:", + + // "submission.sections.submit.progressbar.accessCondition": "Item access conditions", + "submission.sections.submit.progressbar.accessCondition": "Item-Zugriffsbedingungen", // "submission.sections.submit.progressbar.CClicense": "Creative commons license", "submission.sections.submit.progressbar.CClicense": "Creative commons license", @@ -5643,16 +7835,68 @@ // "submission.sections.submit.progressbar.describe.steptwo": "Describe", "submission.sections.submit.progressbar.describe.steptwo": "Beschreiben", - // "submission.sections.submit.progressbar.detect-duplicate": "Potential duplicates", - "submission.sections.submit.progressbar.detect-duplicate": "Doppelter Eintrag?", + // "submission.sections.submit.progressbar.duplicates": "Potential duplicates", + "submission.sections.submit.progressbar.duplicates": "Potenzielle Dubletten", + + // "submission.sections.submit.progressbar.identifiers": "Identifiers", + "submission.sections.submit.progressbar.identifiers": "Identifier", // "submission.sections.submit.progressbar.license": "Deposit license", "submission.sections.submit.progressbar.license": "Einreichlizenz", + // "submission.sections.submit.progressbar.sherpapolicy": "Sherpa policies", + "submission.sections.submit.progressbar.sherpapolicy": "Sherpa-Richtlinien", + // "submission.sections.submit.progressbar.upload": "Upload files", "submission.sections.submit.progressbar.upload": "Hochgeladene Dateien", + // "submission.sections.submit.progressbar.sherpaPolicies": "Publisher open access policy information", + "submission.sections.submit.progressbar.sherpaPolicies": "Informationen zur Open-Access-Richtlinie des Verlags", + // "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": "Keine Informationen zur Verlagsrichtlinie verfügbar. Wenn Ihr Werk eine zugehörige ISSN hat, geben Sie diese bitte oben ein, um die entsprechenden Open-Access-Richtlinien des Verlags anzuzeigen.", + + // "submission.sections.status.errors.title": "Errors", + "submission.sections.status.errors.title": "Fehler", + + // "submission.sections.status.valid.title": "Valid", + "submission.sections.status.valid.title": "Gültig", + + // "submission.sections.status.warnings.title": "Warnings", + "submission.sections.status.warnings.title": "Warnungen", + + // "submission.sections.status.errors.aria": "has errors", + "submission.sections.status.errors.aria": "hat Fehler", + + // "submission.sections.status.valid.aria": "is valid", + "submission.sections.status.valid.aria": "ist gültig", + + // "submission.sections.status.warnings.aria": "has warnings", + "submission.sections.status.warnings.aria": "hat Warnungen", + + // "submission.sections.status.info.title": "Additional Information", + "submission.sections.status.info.title": "Zusätzliche Informationen", + + // "submission.sections.status.info.aria": "Additional Information", + "submission.sections.status.info.aria": "Zusätzliche Informationen", + + // "submission.sections.toggle.open": "Open section", + "submission.sections.toggle.open": "Abschnitt öffnen", + + // "submission.sections.toggle.close": "Close section", + "submission.sections.toggle.close": "Abschnitt schließen", + + // "submission.sections.toggle.aria.open": "Expand {{sectionHeader}} section", + "submission.sections.toggle.aria.open": "Abschnitt {{sectionHeader}} erweitern", + + // "submission.sections.toggle.aria.close": "Collapse {{sectionHeader}} section", + "submission.sections.toggle.aria.close": "Abschnitt {{sectionHeader}} zusammenklappen", + + // "submission.sections.upload.primary.make": "Make {{fileName}} the primary bitstream", + "submission.sections.upload.primary.make": "{{fileName}} zur primären Datei machen", + + // "submission.sections.upload.primary.remove": "Remove {{fileName}} as the primary bitstream", + "submission.sections.upload.primary.remove": "{{fileName}} als primäre Datei entfernen", // "submission.sections.upload.delete.confirm.cancel": "Cancel", "submission.sections.upload.delete.confirm.cancel": "Abbrechen", @@ -5669,18 +7913,36 @@ // "submission.sections.upload.delete.submit": "Delete", "submission.sections.upload.delete.submit": "Löschen", + // "submission.sections.upload.download.title": "Download bitstream", + "submission.sections.upload.download.title": "Datei herunterladen", + // "submission.sections.upload.drop-message": "Drop files to attach them to the item", "submission.sections.upload.drop-message": "Dateien herüberziehen, um sie dem Item hinzuzufügen", + // "submission.sections.upload.edit.title": "Edit bitstream", + "submission.sections.upload.edit.title": "Datei bearbeiten", + // "submission.sections.upload.form.access-condition-label": "Access condition type", "submission.sections.upload.form.access-condition-label": "Zugriffsbedingung Typ", + // "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": "Wählen Sie eine Zugriffsbedingung, die auf die Datei angewendet werden soll, sobald das Item eingereicht ist", + // "submission.sections.upload.form.date-required": "Date is required.", "submission.sections.upload.form.date-required": "Datum erforderlich.", + // "submission.sections.upload.form.date-required-from": "Grant access from date is required.", + "submission.sections.upload.form.date-required-from": "Zugriff ab Datum muss angegeben werden.", + + // "submission.sections.upload.form.date-required-until": "Grant access until date is required.", + "submission.sections.upload.form.date-required-until": "Zugriff bis Datum muss angegeben werden.", + // "submission.sections.upload.form.from-label": "Grant access from", "submission.sections.upload.form.from-label": "Zugriff gewährt ab", + // "submission.sections.upload.form.from-hint": "Select the date from which the related access condition is applied", + "submission.sections.upload.form.from-hint": "Wählen Sie das Datum aus, ab dem die betreffende Zugriffsbedingung angewendet wird", + // "submission.sections.upload.form.from-placeholder": "From", "submission.sections.upload.form.from-placeholder": "Ab", @@ -5693,6 +7955,9 @@ // "submission.sections.upload.form.until-label": "Grant access until", "submission.sections.upload.form.until-label": "Zugriff gewährt bis", + // "submission.sections.upload.form.until-hint": "Select the date until which the related access condition is applied", + "submission.sections.upload.form.until-hint": "Wählen Sie das Datum, bis zu dem die betreffende Zugriffsbedingung gilt", + // "submission.sections.upload.form.until-placeholder": "Until", "submission.sections.upload.form.until-placeholder": "Bis", @@ -5700,7 +7965,7 @@ "submission.sections.upload.header.policy.default.nolist": "In diese Sammlung {{collectionName}} hochgeladene Dateien werden für folgende(n) Gruppe(n) zugänglich sein:", // "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": "Bitte beachten Sie, dass in diese Sammlung {{collectionName}} hochgeladene Dateien zugüglich zu dem, was für einzelne Dateien entschieden wurde, für folgende Gruppe(n) zugänglich sein:", + "submission.sections.upload.header.policy.default.withlist": "Bitte beachten Sie, dass in diese Sammlung {{collectionName}} hochgeladene Dateien zuzüglich zu dem, was für einzelne Dateien entschieden wurde, für folgende Gruppe(n) zugänglich sein:", // "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": "Hier finden Sie alle Dateien, die aktuell zum Item gehören. Sie können ihre Metadaten und Zugriffsrechte bearbeiten oder weitere Dateien per Drag & Drop hinzufügen.", @@ -5723,18 +7988,161 @@ // "submission.sections.upload.upload-successful": "Upload successful", "submission.sections.upload.upload-successful": "Hochladen erfolgreich", + // "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": "Wenn ausgewählt, kann das Item in der Suche/im Browsing gefunden werden. Wenn nicht ausgewählt, ist das Item nur über einen direkten Link aufrufbar und erscheint nie in der Suche/im Browsing.", + // "submission.sections.accesses.form.discoverable-label": "Discoverable", + "submission.sections.accesses.form.discoverable-label": "Auffindbar", - // "submission.submit.title": "Submission", - "submission.submit.title": "Einreichung", + // "submission.sections.accesses.form.access-condition-label": "Access condition type", + "submission.sections.accesses.form.access-condition-label": "Art der Zugriffsbedingung", + // "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": "Wählen Sie eine Zugriffsbedingung aus, die auf das Item angewendet werden soll, sobald es eingereicht ist", + // "submission.sections.accesses.form.date-required": "Date is required.", + "submission.sections.accesses.form.date-required": "Datum ist erforderlich.", + + // "submission.sections.accesses.form.date-required-from": "Grant access from date is required.", + "submission.sections.accesses.form.date-required-from": "Zugang ab Datum muss angegeben werden.", + + // "submission.sections.accesses.form.date-required-until": "Grant access until date is required.", + "submission.sections.accesses.form.date-required-until": "Zugang bis Datum muss angegeben werden.", + + // "submission.sections.accesses.form.from-label": "Grant access from", + "submission.sections.accesses.form.from-label": "Zugang gewähren von", + + // "submission.sections.accesses.form.from-hint": "Select the date from which the related access condition is applied", + "submission.sections.accesses.form.from-hint": "Wählen Sie das Datum aus, ab dem die betreffende Zugriffsbedingung angewendet wird", + + // "submission.sections.accesses.form.from-placeholder": "From", + "submission.sections.accesses.form.from-placeholder": "Von", + + // "submission.sections.accesses.form.group-label": "Group", + "submission.sections.accesses.form.group-label": "Gruppe", + + // "submission.sections.accesses.form.group-required": "Group is required.", + "submission.sections.accesses.form.group-required": "Gruppe ist erforderlich.", + + // "submission.sections.accesses.form.until-label": "Grant access until", + "submission.sections.accesses.form.until-label": "Zugriff gewähren bis", + + // "submission.sections.accesses.form.until-hint": "Select the date until which the related access condition is applied", + "submission.sections.accesses.form.until-hint": "Wählen Sie das Datum, bis zu dem die betreffende Zugriffsbedingung gilt", + + // "submission.sections.accesses.form.until-placeholder": "Until", + "submission.sections.accesses.form.until-placeholder": "Bis", + + // "submission.sections.duplicates.none": "No duplicates were detected.", + "submission.sections.duplicates.none": "Es wurden keine Dubletten entdeckt.", + + // "submission.sections.duplicates.detected": "Potential duplicates were detected. Please review the list below.", + "submission.sections.duplicates.detected": "Es wurden mögliche Dubletten entdeckt. Bitte prüfen Sie die Liste unten.", + + // "submission.sections.duplicates.in-workspace": "This item is in workspace", + "submission.sections.duplicates.in-workspace": "Dieses Item befindet sich im Arbeitsbereich", + + // "submission.sections.duplicates.in-workflow": "This item is in workflow", + "submission.sections.duplicates.in-workflow": "Dieses Item befindet sich im Workflow", + + // "submission.sections.license.granted-label": "I confirm the license above", + "submission.sections.license.granted-label": "Ich bestätige die obige Lizenz", + + // "submission.sections.license.required": "You must accept the license", + "submission.sections.license.required": "Sie müssen die Lizenz akzeptieren", + + // "submission.sections.license.notgranted": "You must accept the license", + "submission.sections.license.notgranted": "Sie müssen die Lizenz akzeptieren", + + // "submission.sections.sherpa.publication.information": "Publication information", + "submission.sections.sherpa.publication.information": "Informationen zur Publikation", + + // "submission.sections.sherpa.publication.information.title": "Title", + "submission.sections.sherpa.publication.information.title": "Titel", + + // "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": "Verlag", + + // "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": "Verlagsrichtlinie", + + // "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": "Die folgenden Informationen wurden über Sherpa Romeo gefunden. Je nach den Richtlinien Ihres Verlags geben sie Hinweise darauf, ob ein Embargo erforderlich ist und/oder welche Dateien Sie hochladen dürfen. Wenn Sie Fragen haben, wenden Sie sich bitte über das Feedback-Formular in der Fußzeile an Ihren Website-Administrator.", + + // "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": "Die nach den Richtlinien dieser Zeitschrift zulässigen Open-Access-Wege sind nachstehend nach Artikelversionen aufgeführt. Klicken Sie auf einen Weg, um eine detailliertere Ansicht zu erhalten", + + // "submission.sections.sherpa.publisher.policy.more.information": "For more information, please see the following links:", + "submission.sections.sherpa.publisher.policy.more.information": "Weitere Informationen finden Sie unter den folgenden Links:", + + // "submission.sections.sherpa.publisher.policy.version": "Version", + "submission.sections.sherpa.publisher.policy.version": "Version", + + // "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": "Kein Embargo", + + // "submission.sections.sherpa.publisher.policy.nolocation": "None", + "submission.sections.sherpa.publisher.policy.nolocation": "Kein", + + // "submission.sections.sherpa.publisher.policy.license": "License", + "submission.sections.sherpa.publisher.policy.license": "Lizenz", + + // "submission.sections.sherpa.publisher.policy.prerequisites": "Prerequisites", + "submission.sections.sherpa.publisher.policy.prerequisites": "Voraussetzungen", + + // "submission.sections.sherpa.publisher.policy.location": "Location", + "submission.sections.sherpa.publisher.policy.location": "Standort", + + // "submission.sections.sherpa.publisher.policy.conditions": "Conditions", + "submission.sections.sherpa.publisher.policy.conditions": "Bedingungen", + + // "submission.sections.sherpa.publisher.policy.refresh": "Refresh", + "submission.sections.sherpa.publisher.policy.refresh": "Aktualisieren", + + // "submission.sections.sherpa.record.information": "Record Information", + "submission.sections.sherpa.record.information": "Datensatz-Informationen", + + // "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": "Datum der Erstellung", + + // "submission.sections.sherpa.record.information.date.modified": "Last Modified", + "submission.sections.sherpa.record.information.date.modified": "Zuletzt verändert", + + // "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": "Es ist ein Fehler beim Abrufen von Sherpa-Informationen aufgetreten", + + // "submission.submit.breadcrumbs": "New submission", + "submission.submit.breadcrumbs": "Neue Einreichung", + + // "submission.submit.title": "New submission", + "submission.submit.title": "Neue Einreichung", // "submission.workflow.generic.delete": "Delete", "submission.workflow.generic.delete": "Löschen", - // "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": "Wenn Sie dieses Item verwerfen möchten, wählen Sie bitte \"Löschen\". Sie werden danach um Bestätigung gebeten.", + // "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": "Wenn Sie diese Option, um das Item zu verwerfen. Sie werden danach um Bestätigung gebeten.", // "submission.workflow.generic.edit": "Edit", "submission.workflow.generic.edit": "Bearbeiten", @@ -5748,7 +8156,15 @@ // "submission.workflow.generic.view-help": "Select this option to view the item's metadata.", "submission.workflow.generic.view-help": "Wählen Sie diese Option, um die Metadaten des Items anzuzeigen.", + // "submission.workflow.generic.submit_select_reviewer": "Select Reviewer", + "submission.workflow.generic.submit_select_reviewer": "Prüfer:in auswählen", + // "submission.workflow.generic.submit_select_reviewer-help": "", + + // "submission.workflow.generic.submit_score": "Rate", + "submission.workflow.generic.submit_score": "Bewerten", + + // "submission.workflow.generic.submit_score-help": "", // "submission.workflow.tasks.claimed.approve": "Approve", "submission.workflow.tasks.claimed.approve": "Zustimmen", @@ -5762,6 +8178,11 @@ // "submission.workflow.tasks.claimed.edit_help": "Select this option to change the item's metadata.", "submission.workflow.tasks.claimed.edit_help": "Wählen Sie diese Option, um die Metadaten des Items zu bearbeiten.", + // "submission.workflow.tasks.claimed.decline": "Decline", + "submission.workflow.tasks.claimed.decline": "Ablehnen", + + // "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": "Bitte geben Sie unten den Grund für Ihre Ablehnung und Änderungswünsche für eine erneute Einreichung an.", @@ -5786,8 +8207,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": "Aufgabe in den Aufgabenpool zurückgeben, so dass jemand Anderes die Aufgabe übernehmen kann", - - // "submission.workflow.tasks.generic.error": "Error occurred during operation...", "submission.workflow.tasks.generic.error": "Ein Fehler ist aufgetreten...", @@ -5800,8 +8219,6 @@ // "submission.workflow.tasks.generic.success": "Operation successful", "submission.workflow.tasks.generic.success": "Aktion erfolgreich", - - // "submission.workflow.tasks.pool.claim": "Claim", "submission.workflow.tasks.pool.claim": "Übernehmen", @@ -5814,13 +8231,122 @@ // "submission.workflow.tasks.pool.show-detail": "Show detail", "submission.workflow.tasks.pool.show-detail": "Details anzeigen", + // "submission.workflow.tasks.duplicates": "potential duplicates were detected for this item. Claim and edit this item to see details.", + "submission.workflow.tasks.duplicates": "Für dieses Item wurden mögliche Dubletten gefunden. Beanspruchen und bearbeiten Sie dieses Item, um Details zu sehen.", + // "submission.workspace.generic.view": "View", "submission.workspace.generic.view": "Anzeige", // "submission.workspace.generic.view-help": "Select this option to view the item's metadata.", "submission.workspace.generic.view-help": "Wählen Sie diese Option, um die Metadaten des Items anzuzeigen.", + // "submitter.empty": "N/A", + "submitter.empty": "N/A", + // "subscriptions.title": "Subscriptions", + "subscriptions.title": "Abonnements", + + // "subscriptions.item": "Subscriptions for items", + "subscriptions.item": "Abonnements für Item", + + // "subscriptions.collection": "Subscriptions for collections", + "subscriptions.collection": "Abonnements für Sammlungen", + + // "subscriptions.community": "Subscriptions for communities", + "subscriptions.community": "Abonnements für Bereiche", + + // "subscriptions.subscription_type": "Subscription type", + "subscriptions.subscription_type": "Art des Abonnements", + + // "subscriptions.frequency": "Subscription frequency", + "subscriptions.frequency": "Frequenz der Abonnements", + + // "subscriptions.frequency.D": "Daily", + "subscriptions.frequency.D": "Täglich", + + // "subscriptions.frequency.M": "Monthly", + "subscriptions.frequency.M": "Monatlich", + + // "subscriptions.frequency.W": "Weekly", + "subscriptions.frequency.W": "Wöchentlich", + + // "subscriptions.tooltip": "Subscribe", + "subscriptions.tooltip": "Abonnieren", + + // "subscriptions.modal.title": "Subscriptions", + "subscriptions.modal.title": "Abonnements", + + // "subscriptions.modal.type-frequency": "Type and frequency", + "subscriptions.modal.type-frequency": "Art und Frequenz", + + // "subscriptions.modal.close": "Close", + "subscriptions.modal.close": "Schließen", + + // "subscriptions.modal.delete-info": "To remove this subscription, please visit the \"Subscriptions\" page under your user profile", + "subscriptions.modal.delete-info": "Um dieses Abonnement zu entfernen, besuchen Sie bitte die Seite \"Subscriptions\" unter Ihrem Benutzerprofil", + + // "subscriptions.modal.new-subscription-form.type.content": "Content", + "subscriptions.modal.new-subscription-form.type.content": "Inhalt", + + // "subscriptions.modal.new-subscription-form.frequency.D": "Daily", + "subscriptions.modal.new-subscription-form.frequency.D": "Täglich", + + // "subscriptions.modal.new-subscription-form.frequency.W": "Weekly", + "subscriptions.modal.new-subscription-form.frequency.W": "Wöchentlich", + + // "subscriptions.modal.new-subscription-form.frequency.M": "Monthly", + "subscriptions.modal.new-subscription-form.frequency.M": "Monatlich", + + // "subscriptions.modal.new-subscription-form.submit": "Submit", + "subscriptions.modal.new-subscription-form.submit": "Einreichen", + + // "subscriptions.modal.new-subscription-form.processing": "Processing...", + "subscriptions.modal.new-subscription-form.processing": "Verarbeitung...", + + // "subscriptions.modal.create.success": "Subscribed to {{ type }} successfully.", + "subscriptions.modal.create.success": "{{ type }} erfolgreich abonniert.", + + // "subscriptions.modal.delete.success": "Subscription deleted successfully", + "subscriptions.modal.delete.success": "Abonnement erfolgreich gelöscht", + + // "subscriptions.modal.update.success": "Subscription to {{ type }} updated successfully", + "subscriptions.modal.update.success": "Abonnement von {{ type }} erfolgreich aktualisiert", + + // "subscriptions.modal.create.error": "An error occurs during the subscription creation", + "subscriptions.modal.create.error": "Bei der Erstellung des Abonnements ist ein Fehler aufgetreten", + + // "subscriptions.modal.delete.error": "An error occurs during the subscription delete", + "subscriptions.modal.delete.error": "Beim Löschen des Abonnements ist ein Fehler aufgetreten", + + // "subscriptions.modal.update.error": "An error occurs during the subscription update", + "subscriptions.modal.update.error": "Während der Aktualisierung des Abonnements ist ein Fehler aufgetreten", + + // "subscriptions.table.dso": "Subject", + "subscriptions.table.dso": "Thema", + + // "subscriptions.table.subscription_type": "Subscription Type", + "subscriptions.table.subscription_type": "Abonnement-Typ", + + // "subscriptions.table.subscription_frequency": "Subscription Frequency", + "subscriptions.table.subscription_frequency": "Abonnement-Frequenz", + + // "subscriptions.table.action": "Action", + "subscriptions.table.action": "Aktion", + + // "subscriptions.table.edit": "Edit", + "subscriptions.table.edit": "Bearbeiten", + + // "subscriptions.table.delete": "Delete", + "subscriptions.table.delete": "Löschen", + + // "subscriptions.table.not-available": "Not available", + "subscriptions.table.not-available": "Nicht verfügbar", + + // "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": "Das abonnierte Item wurde gelöscht, oder Sie haben derzeit nicht die Berechtigung, es anzusehen", + + // "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": "Sie haben zur Zeit keine Abonnements. Um E-Mail-Updates für einen Bereich oder eine Sammlung zu abonnieren, verwenden Sie die Abonnement-Schaltfläche auf der Seite des jeweiligen Objekts.", // "thumbnail.default.alt": "Thumbnail Image", "thumbnail.default.alt": "Vorschaubild", @@ -5846,12 +8372,9 @@ // "thumbnail.person.placeholder": "No Profile Picture Available", "thumbnail.person.placeholder": "Profilbild nicht verfügbar", - // "title": "DSpace", "title": "DSpace", - - // "vocabulary-treeview.header": "Hierarchical tree view", "vocabulary-treeview.header": "Hierarchische Baumansicht", @@ -5864,6 +8387,9 @@ // "vocabulary-treeview.search.form.search": "Search", "vocabulary-treeview.search.form.search": "Suche", + // "vocabulary-treeview.search.form.search-placeholder": "Filter results by typing the first few letters", + "vocabulary-treeview.search.form.search-placeholder": "Ergebnisse durch Eingabe der ersten Buchstaben filtern", + // "vocabulary-treeview.search.no-result": "There were no items to show", "vocabulary-treeview.search.no-result": "Keine passenden Items vorhanden", @@ -5873,7 +8399,8 @@ // "vocabulary-treeview.tree.description.srsc": "Research Subject Categories", "vocabulary-treeview.tree.description.srsc": "Forschungsthemen-Kategorien", - + // "vocabulary-treeview.info": "Select a subject to add as search filter", + "vocabulary-treeview.info": "Wählen Sie ein Thema, um es als Suchfilter hinzuzufügen", // "uploader.browse": "browse", "uploader.browse": "stöbern", @@ -5881,12 +8408,14 @@ // "uploader.drag-message": "Drag & Drop your files here", "uploader.drag-message": "Bitte ziehen Sie Ihre Dateien hierhin.", + // "uploader.delete.btn-title": "Delete", + "uploader.delete.btn-title": "Löschen", + // "uploader.or": ", or ", "uploader.or": ", oder", // "uploader.processing": "Processing uploaded file(s)... (it's now safe to close this page)", - // TODO Source message changed - Revise the translation - "uploader.processing": "In Arbeit...", + "uploader.processing": "Verarbeitung der hochgeladenen Datei(en)... (Sie können diese Seite jetzt schließen)", // "uploader.queue-length": "Queue length", "uploader.queue-length": "Länge der Warteschlange", @@ -5900,6 +8429,8 @@ // "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": "Wählen Sie die Items aus, deren virtuelle Metadaten Sie als echte Metadaten speichern möchten.", + // "supervisedWorkspace.search.results.head": "Supervised Items", + "supervisedWorkspace.search.results.head": "Beaufsichtigte Items", // "workspace.search.results.head": "Your submissions", "workspace.search.results.head": "Ihre Veröffentlichungen", @@ -5910,6 +8441,14 @@ // "workflow.search.results.head": "Workflow tasks", "workflow.search.results.head": "Workflow-Aufgaben", + // "supervision.search.results.head": "Workflow and Workspace tasks", + "supervision.search.results.head": "Workflow- und Arbeitsbereichsaufgaben", + + // "workflow-item.edit.breadcrumbs": "Edit workflowitem", + "workflow-item.edit.breadcrumbs": "Workflow-Item bearbeiten", + + // "workflow-item.edit.title": "Edit workflowitem", + "workflow-item.edit.title": "Workflow-Item bearbeiten", // "workflow-item.delete.notification.success.title": "Deleted", "workflow-item.delete.notification.success.title": "Gelöscht", @@ -5935,7 +8474,6 @@ // "workflow-item.delete.button.confirm": "Delete", "workflow-item.delete.button.confirm": "Löschen", - // "workflow-item.send-back.notification.success.title": "Sent back to submitter", "workflow-item.send-back.notification.success.title": "An die:den Einreichende:n zurückgeschickt", @@ -5957,23 +8495,23 @@ // "workflow-item.send-back.button.cancel": "Cancel", "workflow-item.send-back.button.cancel": "Abbrechen", - // "workflow-item.send-back.button.confirm": "Send back" + // "workflow-item.send-back.button.confirm": "Send back", "workflow-item.send-back.button.confirm": "Zurücksenden", // "workflow-item.view.breadcrumbs": "Workflow View", "workflow-item.view.breadcrumbs": "Workflow-Ansicht", // "workspace-item.view.breadcrumbs": "Workspace View", - "workspace-item.view.breadcrumbs": "Workspace-Ansicht", + "workspace-item.view.breadcrumbs": "Arbeitsbereich-Ansicht", // "workspace-item.view.title": "Workspace View", - "workspace-item.view.title": "Workspace-Ansicht", + "workspace-item.view.title": "Arbeitsbereich-Ansicht", // "workspace-item.delete.breadcrumbs": "Workspace Delete", - "workspace-item.delete.breadcrumbs": "Workspace-Item löschen", + "workspace-item.delete.breadcrumbs": "Arbeitsbereich Löschen", // "workspace-item.delete.header": "Delete workspace item", - "workspace-item.delete.header": "Workspace-Item löschen", + "workspace-item.delete.header": "Arbeitsbereich-Item löschen", // "workspace-item.delete.button.confirm": "Delete", "workspace-item.delete.button.confirm": "Löschen", @@ -5985,14 +8523,1750 @@ "workspace-item.delete.notification.success.title": "Gelöscht", // "workspace-item.delete.title": "This workspace item was successfully deleted", - "workspace-item.delete.title": "Dieses Workspace-Item wurde erfolgreich gelöscht.", + "workspace-item.delete.title": "Dieses Arbeitsbereich-Item wurde erfolgreich gelöscht", // "workspace-item.delete.notification.error.title": "Something went wrong", - "workspace-item.delete.notification.error.title": "Das hat leider nicht funktioniert.", + "workspace-item.delete.notification.error.title": "Etwas ist schief gelaufen", // "workspace-item.delete.notification.error.content": "The workspace item could not be deleted", - "workspace-item.delete.notification.error.content": "Das Workspace-Item konnte nicht gelöscht werden.", + "workspace-item.delete.notification.error.content": "Das Arbeitsbereich-Item konnte nicht gelöscht werden", + // "workflow-item.advanced.title": "Advanced workflow", + "workflow-item.advanced.title": "Erweiterter Workflow", + + // "workflow-item.selectrevieweraction.notification.success.title": "Selected reviewer", + "workflow-item.selectrevieweraction.notification.success.title": "Ausgewählte Prüfer:innen", + + // "workflow-item.selectrevieweraction.notification.success.content": "The reviewer for this workflow item has been successfully selected", + "workflow-item.selectrevieweraction.notification.success.content": "Der Prüfer für dieses Workflow-Item wurde erfolgreich ausgewählt", + + // "workflow-item.selectrevieweraction.notification.error.title": "Something went wrong", + "workflow-item.selectrevieweraction.notification.error.title": "Etwas ist schief gelaufen", + + // "workflow-item.selectrevieweraction.notification.error.content": "Couldn't select the reviewer for this workflow item", + "workflow-item.selectrevieweraction.notification.error.content": "Der Prüfer für dieses Workflow-Item konnte nicht ausgewählt werden", + + // "workflow-item.selectrevieweraction.title": "Select Reviewer", + "workflow-item.selectrevieweraction.title": "Prüfer:innen auswählen", + + // "workflow-item.selectrevieweraction.header": "Select Reviewer", + "workflow-item.selectrevieweraction.header": "Prüfer:innen auswählen", + + // "workflow-item.selectrevieweraction.button.cancel": "Cancel", + "workflow-item.selectrevieweraction.button.cancel": "Abbrechen", + + // "workflow-item.selectrevieweraction.button.confirm": "Confirm", + "workflow-item.selectrevieweraction.button.confirm": "Bestätigen", + + // "workflow-item.scorereviewaction.notification.success.title": "Rating review", + "workflow-item.scorereviewaction.notification.success.title": "Bewerten der Review", + + // "workflow-item.scorereviewaction.notification.success.content": "The rating for this item workflow item has been successfully submitted", + "workflow-item.scorereviewaction.notification.success.content": "Die Bewertung für dieses Workflow-Item wurde erfolgreich übermittelt", + + // "workflow-item.scorereviewaction.notification.error.title": "Something went wrong", + "workflow-item.scorereviewaction.notification.error.title": "Etwas ist schief gelaufen", + + // "workflow-item.scorereviewaction.notification.error.content": "Couldn't rate this item", + "workflow-item.scorereviewaction.notification.error.content": "Item konnte nicht bewertet werden", + + // "workflow-item.scorereviewaction.title": "Rate this item", + "workflow-item.scorereviewaction.title": "Dieses Item bewerten", + + // "workflow-item.scorereviewaction.header": "Rate this item", + "workflow-item.scorereviewaction.header": "Dieses Item bewerten", + + // "workflow-item.scorereviewaction.button.cancel": "Cancel", + "workflow-item.scorereviewaction.button.cancel": "Abbrechen", + + // "workflow-item.scorereviewaction.button.confirm": "Confirm", + "workflow-item.scorereviewaction.button.confirm": "Bestätigen", + + // "idle-modal.header": "Session will expire soon", + "idle-modal.header": "Sitzung läuft demnächst aus", + + // "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": "Aus Sicherheitsgründen laufen Benutzersitzungen nach {{ timeToExpire }} Minuten der Inaktivität ab. Ihre Sitzung wird bald ablaufen. Möchten Sie sie verlängern oder sich abmelden?", + + // "idle-modal.log-out": "Log out", + "idle-modal.log-out": "Abmelden", + + // "idle-modal.extend-session": "Extend session", + "idle-modal.extend-session": "Sitzung verlängern", + + // "researcher.profile.action.processing": "Processing...", + "researcher.profile.action.processing": "Verarbeitung...", + + // "researcher.profile.associated": "Researcher profile associated", + "researcher.profile.associated": "Forscherprofil zugeordnet", + + // "researcher.profile.change-visibility.fail": "An unexpected error occurs while changing the profile visibility", + "researcher.profile.change-visibility.fail": "Beim Ändern der Profilsichtbarkeit tritt ein unerwarteter Fehler auf", + + // "researcher.profile.create.new": "Create new", + "researcher.profile.create.new": "Neu erstellen", + + // "researcher.profile.create.success": "Researcher profile created successfully", + "researcher.profile.create.success": "Forscherprofil erfolgreich erstellt", + + // "researcher.profile.create.fail": "An error occurs during the researcher profile creation", + "researcher.profile.create.fail": "Bei der Erstellung des Forscherprofils ist ein Fehler aufgetreten", + + // "researcher.profile.delete": "Delete", + "researcher.profile.delete": "Löschen", + + // "researcher.profile.expose": "Expose", + "researcher.profile.expose": "Veröffentlichen", + + // "researcher.profile.hide": "Hide", + "researcher.profile.hide": "Verbergen", + + // "researcher.profile.not.associated": "Researcher profile not yet associated", + "researcher.profile.not.associated": "Forscherprofil noch nicht zugeordnet", + + // "researcher.profile.view": "View", + "researcher.profile.view": "Ansicht", + + // "researcher.profile.private.visibility": "PRIVATE", + "researcher.profile.private.visibility": "PRIVAT", + + // "researcher.profile.public.visibility": "PUBLIC", + "researcher.profile.public.visibility": "ÖFFENTLICH", + + // "researcher.profile.status": "Status:", + "researcher.profile.status": "Status:", + + // "researcherprofile.claim.not-authorized": "You are not authorized to claim this item. For more details contact the administrator(s).", + "researcherprofile.claim.not-authorized": "Sie sind nicht berechtigt, dieses Item zu beanspruchen. Für weitere Details kontaktieren Sie die Administrator:innen.", + + // "researcherprofile.error.claim.body": "An error occurred while claiming the profile, please try again later", + "researcherprofile.error.claim.body": "Beim Beanspruchen des Profils ist ein Fehler aufgetreten. Bitte versuchen Sie es später noch einmal.", + + // "researcherprofile.error.claim.title": "Error", + "researcherprofile.error.claim.title": "Fehler", + + // "researcherprofile.success.claim.body": "Profile claimed with success", + "researcherprofile.success.claim.body": "Profil erfolgreich beansprucht", + + // "researcherprofile.success.claim.title": "Success", + "researcherprofile.success.claim.title": "Erfolg", + + // "person.page.orcid.create": "Create an ORCID ID", + "person.page.orcid.create": "Eine ORCID-ID erstellen", + + // "person.page.orcid.granted-authorizations": "Granted authorizations", + "person.page.orcid.granted-authorizations": "Erteilte Berechtigungen", + + // "person.page.orcid.grant-authorizations": "Grant authorizations", + "person.page.orcid.grant-authorizations": "Berechtigungen erteilen", + + // "person.page.orcid.link": "Connect to ORCID ID", + "person.page.orcid.link": "Mit ORCID-ID verbinden", + + // "person.page.orcid.link.processing": "Linking profile to ORCID...", + "person.page.orcid.link.processing": "Profil mit ORCID verknüpfen...", + + // "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": "Beim Verbinden des Profils mit ORCID ist ein Fehler aufgetreten. Wenn das Problem bestehen bleibt, kontaktieren Sie die Administrator:innen.", + + // "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": "Die ORCID-iD dieses Profils ({{ orcid }}) wurde noch nicht mit einem Konto im ORCID-Register verbunden oder die Verbindung ist abgelaufen.", + + // "person.page.orcid.unlink": "Disconnect from ORCID", + "person.page.orcid.unlink": "Verbindung zu ORCID trennen", + + // "person.page.orcid.unlink.processing": "Processing...", + "person.page.orcid.unlink.processing": "Verarbeitung...", + + // "person.page.orcid.missing-authorizations": "Missing authorizations", + "person.page.orcid.missing-authorizations": "Fehlende Berechtigungen", + + // "person.page.orcid.missing-authorizations-message": "The following authorizations are missing:", + "person.page.orcid.missing-authorizations-message": "Es fehlen die folgenden Berechtigungen:", + + // "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": "Sehr gut! Dieses Feld ist leer, d.h. Sie haben alle Zugriffsrechte zur Nutzung aller von Ihrer Einrichtung angebotenen Funktionen erteilt.", + + // "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": "Noch keine ORCID-iD zugeordnet. Durch Klicken auf die Schaltfläche unten ist es möglich, dieses Profil mit einem ORCID-Konto zu verknüpfen.", + + // "person.page.orcid.profile-preferences": "Profile preferences", + "person.page.orcid.profile-preferences": "Profil-Einstellungen", + + // "person.page.orcid.funding-preferences": "Funding preferences", + "person.page.orcid.funding-preferences": "Einstellungen zu Förderungen", + + // "person.page.orcid.publications-preferences": "Publication preferences", + "person.page.orcid.publications-preferences": "Einstellungen zu Publikationen", + + // "person.page.orcid.remove-orcid-message": "If you need to remove your ORCID, please contact the repository administrator", + "person.page.orcid.remove-orcid-message": "Wenn Sie Ihre ORCID entfernen müssen, wenden Sie sich bitte an die Repositoriums-Administrator:innen", + + // "person.page.orcid.save.preference.changes": "Update settings", + "person.page.orcid.save.preference.changes": "Einstellungen aktualisieren", + + // "person.page.orcid.sync-profile.affiliation": "Affiliation", + "person.page.orcid.sync-profile.affiliation": "Zugehörigkeit", + + // "person.page.orcid.sync-profile.biographical": "Biographical data", + "person.page.orcid.sync-profile.biographical": "Biographische Daten", + + // "person.page.orcid.sync-profile.education": "Education", + "person.page.orcid.sync-profile.education": "Bildung", + + // "person.page.orcid.sync-profile.identifiers": "Identifiers", + "person.page.orcid.sync-profile.identifiers": "Identifier", + + // "person.page.orcid.sync-fundings.all": "All fundings", + "person.page.orcid.sync-fundings.all": "Alle Förderungen", + + // "person.page.orcid.sync-fundings.mine": "My fundings", + "person.page.orcid.sync-fundings.mine": "Meine Förderungen", + + // "person.page.orcid.sync-fundings.my_selected": "Selected fundings", + "person.page.orcid.sync-fundings.my_selected": "Ausgewählte Förderungen", + + // "person.page.orcid.sync-fundings.disabled": "Disabled", + "person.page.orcid.sync-fundings.disabled": "Deaktiviert", + + // "person.page.orcid.sync-publications.all": "All publications", + "person.page.orcid.sync-publications.all": "Alle Publikationen", + + // "person.page.orcid.sync-publications.mine": "My publications", + "person.page.orcid.sync-publications.mine": "Meine Publikationen", + + // "person.page.orcid.sync-publications.my_selected": "Selected publications", + "person.page.orcid.sync-publications.my_selected": "Ausgewählte Publikationen", + + // "person.page.orcid.sync-publications.disabled": "Disabled", + "person.page.orcid.sync-publications.disabled": "Deaktiviert", + + // "person.page.orcid.sync-queue.discard": "Discard the change and do not synchronize with the ORCID registry", + "person.page.orcid.sync-queue.discard": "Verwerfen Sie die Änderung und synchronisieren Sie sie nicht mit dem ORCID-Register", + + // "person.page.orcid.sync-queue.discard.error": "The discarding of the ORCID queue record failed", + "person.page.orcid.sync-queue.discard.error": "Das Verwerfen des ORCID-Datensatzes in Warteschlange ist fehlgeschlagen", + + // "person.page.orcid.sync-queue.discard.success": "The ORCID queue record have been discarded successfully", + "person.page.orcid.sync-queue.discard.success": "Der ORCID-Datensatz in Warteschlange wurde erfolgreich verworfen", + + // "person.page.orcid.sync-queue.empty-message": "The ORCID queue registry is empty", + "person.page.orcid.sync-queue.empty-message": "Die Warteschlange zur ORCID-Registrierung ist leer", + + // "person.page.orcid.sync-queue.table.header.type": "Type", + "person.page.orcid.sync-queue.table.header.type": "Typ", + + // "person.page.orcid.sync-queue.table.header.description": "Description", + "person.page.orcid.sync-queue.table.header.description": "Beschreibung", + + // "person.page.orcid.sync-queue.table.header.action": "Action", + "person.page.orcid.sync-queue.table.header.action": "Aktion", + + // "person.page.orcid.sync-queue.description.affiliation": "Affiliations", + "person.page.orcid.sync-queue.description.affiliation": "Zugehörigkeiten", + + // "person.page.orcid.sync-queue.description.country": "Country", + "person.page.orcid.sync-queue.description.country": "Land", + + // "person.page.orcid.sync-queue.description.education": "Educations", + "person.page.orcid.sync-queue.description.education": "Ausbildungen", + + // "person.page.orcid.sync-queue.description.external_ids": "External ids", + "person.page.orcid.sync-queue.description.external_ids": "Externe IDs", + + // "person.page.orcid.sync-queue.description.other_names": "Other names", + "person.page.orcid.sync-queue.description.other_names": "Andere Namen", + + // "person.page.orcid.sync-queue.description.qualification": "Qualifications", + "person.page.orcid.sync-queue.description.qualification": "Qualifikationen", + + // "person.page.orcid.sync-queue.description.researcher_urls": "Researcher urls", + "person.page.orcid.sync-queue.description.researcher_urls": "Forscher-URLs", + + // "person.page.orcid.sync-queue.description.keywords": "Keywords", + "person.page.orcid.sync-queue.description.keywords": "Schlagwörter", + + // "person.page.orcid.sync-queue.tooltip.insert": "Add a new entry in the ORCID registry", + "person.page.orcid.sync-queue.tooltip.insert": "Fügen Sie einen neuen Eintrag zum ORCID-Register hinzu", + + // "person.page.orcid.sync-queue.tooltip.update": "Update this entry on the ORCID registry", + "person.page.orcid.sync-queue.tooltip.update": "Aktualisieren Sie diesen Eintrag im ORCID-Register", + + // "person.page.orcid.sync-queue.tooltip.delete": "Remove this entry from the ORCID registry", + "person.page.orcid.sync-queue.tooltip.delete": "Entfernen Sie diesen Eintrag aus dem ORCID-Register", + + // "person.page.orcid.sync-queue.tooltip.publication": "Publication", + "person.page.orcid.sync-queue.tooltip.publication": "Publikation", + + // "person.page.orcid.sync-queue.tooltip.project": "Project", + "person.page.orcid.sync-queue.tooltip.project": "Projekt", + + // "person.page.orcid.sync-queue.tooltip.affiliation": "Affiliation", + "person.page.orcid.sync-queue.tooltip.affiliation": "Zugehörigkeit", + + // "person.page.orcid.sync-queue.tooltip.education": "Education", + "person.page.orcid.sync-queue.tooltip.education": "Ausbildung", + + // "person.page.orcid.sync-queue.tooltip.qualification": "Qualification", + "person.page.orcid.sync-queue.tooltip.qualification": "Qualifizierung", + + // "person.page.orcid.sync-queue.tooltip.other_names": "Other name", + "person.page.orcid.sync-queue.tooltip.other_names": "Anderer Name", + + // "person.page.orcid.sync-queue.tooltip.country": "Country", + "person.page.orcid.sync-queue.tooltip.country": "Land", + + // "person.page.orcid.sync-queue.tooltip.keywords": "Keyword", + "person.page.orcid.sync-queue.tooltip.keywords": "Schlagwort", + + // "person.page.orcid.sync-queue.tooltip.external_ids": "External identifier", + "person.page.orcid.sync-queue.tooltip.external_ids": "Externer Identifier", + + // "person.page.orcid.sync-queue.tooltip.researcher_urls": "Researcher url", + "person.page.orcid.sync-queue.tooltip.researcher_urls": "Forscher-URL", + + // "person.page.orcid.sync-queue.send": "Synchronize with ORCID registry", + "person.page.orcid.sync-queue.send": "Mit ORCID-Register synchronisieren", + + // "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": "Die Übermittlung an ORCID ist wegen fehlender Berechtigungen fehlgeschlagen.", + + // "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": "Klicken Sie hier, um die erforderlichen Berechtigungen erneut zu erteilen. Wenn das Problem weiterhin besteht, wenden Sie sich an die Administrator:innen", + + // "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": "Die Übermittlung an ORCID ist fehlgeschlagen, weil die an das ORCID-Register gesendete Ressource nicht gültig ist", + + // "person.page.orcid.sync-queue.send.error": "The submission to ORCID failed", + "person.page.orcid.sync-queue.send.error": "Die Übermittlung an ORCID ist fehlgeschlagen", + + // "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": "Die Übermittlung an ORCID ist fehlgeschlagen, weil die Ressource bereits im ORCID-Register vorhanden ist", + + // "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": "Die Ressource existiert nicht mehr im ORCID-Register.", + + // "person.page.orcid.sync-queue.send.success": "The submission to ORCID was completed successfully", + "person.page.orcid.sync-queue.send.success": "Die Übermittlung an ORCID wurde erfolgreich abgeschlossen", + + // "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": "Die Daten, die Sie mit ORCID synchronisieren möchten, sind nicht gültig", + + // "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": "Die Währung des Betrags ist erforderlich", + + // "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": "Die zu übermittelnde Ressource erfordert mindestens einen Identifier", + + // "person.page.orcid.sync-queue.send.validation-error.title.required": "The title is required", + "person.page.orcid.sync-queue.send.validation-error.title.required": "Der Titel ist erforderlich", + + // "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": "Der dc.type ist erforderlich", + + // "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": "Das Startdatum ist erforderlich", + + // "person.page.orcid.sync-queue.send.validation-error.funder.required": "The funder is required", + "person.page.orcid.sync-queue.send.validation-error.funder.required": "Der Förderer ist erforderlich", + + // "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": "Ungültiges 2-stelliges ISO-3166-Land", + + // "person.page.orcid.sync-queue.send.validation-error.organization.required": "The organization is required", + "person.page.orcid.sync-queue.send.validation-error.organization.required": "Die Organisation ist erforderlich", + + // "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": "Der Name der Organisation ist erforderlich", + + // "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": "Das Datum der Publikation muss ein Jahr nach 1900 liegen.", + + // "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": "Die zu übermittelnde Organisation benötigt eine Adresse", + + // "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": "Die Adresse der zu übermittelnden Organisation erfordert eine Stadt", + + // "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": "Die Adresse der zu übermittelnden Organisation erfordert ein gültiges 2-stelliges ISO-3166-Land", + + // "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": "Ein Identifier zur eindeutigen Identifizierung von Organisationen ist erforderlich. Unterstützt werden GRID, Ringgold, Legal Entity Identifier (LEI) und Crossref Funder Registry Identifier", + + // "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": "Die Identifier der Organisation erfordern einen Wert", + + // "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": "Die Identifier der Organisation erfordern eine Quelle", + + // "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": "Die Quelle eines der Organisationsidentifier ist ungültig. Unterstützte Quellen sind RINGGOLD, GRID, LEI und FUNDREF", + + // "person.page.orcid.synchronization-mode": "Synchronization mode", + "person.page.orcid.synchronization-mode": "Synchronisationsmodus", + + // "person.page.orcid.synchronization-mode.batch": "Batch", + "person.page.orcid.synchronization-mode.batch": "Batch", + + // "person.page.orcid.synchronization-mode.label": "Synchronization mode", + "person.page.orcid.synchronization-mode.label": "Synchronisationsmodus", + + // "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": "Bitte wählen Sie aus, wie Sie die Synchronisierung mit ORCID vornehmen möchten. Die Optionen umfassen \"Manuell\" (Sie müssen Ihre Daten manuell an ORCID senden) oder \"Batch\" (das System wird Ihre Daten über ein terminiertes Skript an ORCID senden).", + + // "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": "Wählen Sie aus, ob Ihre verlinkten Projektentitäten an die Liste der Förderinformationen in Ihrem ORCID-Datensatz gesendet werden sollen.", + + // "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": "Legen Sie fest, ob Ihre verlinkten Publikationsentitäten an die Werkliste Ihres ORCID-Datensatzes gesendet werden sollen.", + + // "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": "Wählen Sie aus, ob Sie Ihre biografischen Daten oder persönlichen Identifier an Ihren ORCID-Datensatz senden möchten.", + + // "person.page.orcid.synchronization-settings-update.success": "The synchronization settings have been updated successfully", + "person.page.orcid.synchronization-settings-update.success": "Die Synchronisationseinstellungen wurden erfolgreich aktualisiert", + + // "person.page.orcid.synchronization-settings-update.error": "The update of the synchronization settings failed", + "person.page.orcid.synchronization-settings-update.error": "Die Aktualisierung der Synchronisationseinstellungen ist fehlgeschlagen", + + // "person.page.orcid.synchronization-mode.manual": "Manual", + "person.page.orcid.synchronization-mode.manual": "Handbuch", + + // "person.page.orcid.scope.authenticate": "Get your ORCID iD", + "person.page.orcid.scope.authenticate": "Erhalten Sie Ihre ORCID-iD", + + // "person.page.orcid.scope.read-limited": "Read your information with visibility set to Trusted Parties", + "person.page.orcid.scope.read-limited": "Lesen Sie Ihre Informationen mit Sichtbarkeit auf vertrauenswürdige Parteien eingestellt", + + // "person.page.orcid.scope.activities-update": "Add/update your research activities", + "person.page.orcid.scope.activities-update": "Hinzufügen/Aktualisieren Ihrer Forschungsaktivitäten", + + // "person.page.orcid.scope.person-update": "Add/update other information about you", + "person.page.orcid.scope.person-update": "Andere Informationen über Sie hinzufügen/aktualisieren", + + // "person.page.orcid.unlink.success": "The disconnection between the profile and the ORCID registry was successful", + "person.page.orcid.unlink.success": "Die Trennung der Verknüpfung zwischen dem Profil und dem ORCID-Register war erfolgreich", + + // "person.page.orcid.unlink.error": "An error occurred while disconnecting between the profile and the ORCID registry. Try again", + "person.page.orcid.unlink.error": "Beim Trennen der Verknüpfung zwischen dem Profil und der ORCID-Register ist ein Fehler aufgetreten. Versuchen Sie es erneut", + + // "person.orcid.sync.setting": "ORCID Synchronization settings", + "person.orcid.sync.setting": "ORCID-Synchronisierungseinstellungen", + + // "person.orcid.registry.queue": "ORCID Registry Queue", + "person.orcid.registry.queue": "Warteschlange zur ORCID-Registrierung", + + // "person.orcid.registry.auth": "ORCID Authorizations", + "person.orcid.registry.auth": "ORCID-Autorisierungen", + + // "home.recent-submissions.head": "Recent Submissions", + "home.recent-submissions.head": "Neue Einreichungen", + + // "listable-notification-object.default-message": "This object couldn't be retrieved", + "listable-notification-object.default-message": "Dieses Objekt konnte nicht abgerufen werden", + + // "system-wide-alert-banner.retrieval.error": "Something went wrong retrieving the system-wide alert banner", + "system-wide-alert-banner.retrieval.error": "Beim Abrufen des systemweiten Warnbanners ist etwas schief gelaufen", + + // "system-wide-alert-banner.countdown.prefix": "In", + "system-wide-alert-banner.countdown.prefix": "In", + + // "system-wide-alert-banner.countdown.days": "{{days}} day(s),", + "system-wide-alert-banner.countdown.days": "{{days}} Tag(e),", + + // "system-wide-alert-banner.countdown.hours": "{{hours}} hour(s) and", + "system-wide-alert-banner.countdown.hours": "{{hours}} Stunde(n) und", + + // "system-wide-alert-banner.countdown.minutes": "{{minutes}} minute(s):", + "system-wide-alert-banner.countdown.minutes": "{{minutes}} Minute(n):", + + // "menu.section.system-wide-alert": "System-wide Alert", + "menu.section.system-wide-alert": "Systemweite Warnung", + + // "system-wide-alert.form.header": "System-wide Alert", + "system-wide-alert.form.header": "Systemweite Warnung", + + // "system-wide-alert-form.retrieval.error": "Something went wrong retrieving the system-wide alert", + "system-wide-alert-form.retrieval.error": "Beim Abrufen der systemweiten Warnung ist etwas schief gelaufen", + + // "system-wide-alert.form.cancel": "Cancel", + "system-wide-alert.form.cancel": "Abbrechen", + + // "system-wide-alert.form.save": "Save", + "system-wide-alert.form.save": "Speichern", + + // "system-wide-alert.form.label.active": "ACTIVE", + "system-wide-alert.form.label.active": "AKTIV", + + // "system-wide-alert.form.label.inactive": "INACTIVE", + "system-wide-alert.form.label.inactive": "INAKTIV", + + // "system-wide-alert.form.error.message": "The system wide alert must have a message", + "system-wide-alert.form.error.message": "Die systemweite Warnung muss eine Nachricht enthalten", + + // "system-wide-alert.form.label.message": "Alert message", + "system-wide-alert.form.label.message": "Warnnachricht", + + // "system-wide-alert.form.label.countdownTo.enable": "Enable a countdown timer", + "system-wide-alert.form.label.countdownTo.enable": "Aktivieren eines Countdown-Timers", + + // "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": "Tipp: Stellen Sie einen Countdown-Timer ein. Wenn dieser aktiviert ist, kann ein Datum in der Zukunft festgelegt werden und das systemweite Warnbanner führt einen Countdown bis zum festgelegten Datum aus. Nach Ablauf des Countdowns verschwindet er aus der Meldung. Der Server wird NICHT automatisch angehalten.", + + // "system-wide-alert-form.select-date-by-calendar": "Select date using calendar", + "system-wide-alert-form.select-date-by-calendar": "Datum über den Kalender auswählen", + + // "system-wide-alert.form.label.preview": "System-wide alert preview", + "system-wide-alert.form.label.preview": "Systemweite Warnvorschau", + + // "system-wide-alert.form.update.success": "The system-wide alert was successfully updated", + "system-wide-alert.form.update.success": "Die systemweite Warnung wurde erfolgreich aktualisiert", + + // "system-wide-alert.form.update.error": "Something went wrong when updating the system-wide alert", + "system-wide-alert.form.update.error": "Bei der Aktualisierung der systemweiten Warnung ist etwas schief gelaufen", + + // "system-wide-alert.form.create.success": "The system-wide alert was successfully created", + "system-wide-alert.form.create.success": "Die systemweite Warnung wurde erfolgreich erstellt", + + // "system-wide-alert.form.create.error": "Something went wrong when creating the system-wide alert", + "system-wide-alert.form.create.error": "Bei der Erstellung der systemweiten Warnung ist etwas schief gelaufen", + + // "admin.system-wide-alert.breadcrumbs": "System-wide Alerts", + "admin.system-wide-alert.breadcrumbs": "Systemweite Warnung", + + // "admin.system-wide-alert.title": "System-wide Alerts", + "admin.system-wide-alert.title": "Systemweite Warnung", + + // "discover.filters.head": "Discover", + "discover.filters.head": "Entdecken", + + // "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": "Mit diesem Formular können Sie Änderungen an den Zugriffsbedingungen der Metadaten oder der Dateien des Items vornehmen.", + + // "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": "Mit diesem Formular können Sie Änderungen an den Zugriffsbedingungen für alle Items dieser Sammlung vornehmen. Die Änderungen können entweder für alle Metadaten der Items oder für alle Inhalte (Dateien) vorgenommen werden.", + + // "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": "Mit diesem Formular können Sie Änderungen an den Zugriffsbedingungen für alle Items vornehmen, die zu einer Sammlung dieses Bereichs gehören. Die Änderungen können entweder für alle Metadaten der Items oder für alle Inhalte (Dateien) vorgenommen werden.", + + // "access-control-item-header-toggle": "Item's Metadata", + "access-control-item-header-toggle": "Item-Metadaten", + + // "access-control-item-toggle.enable": "Enable option to perform changes on the item's metadata", + "access-control-item-toggle.enable": "Option zur Durchführung von Änderungen an den Item-Metadaten aktivieren", + + // "access-control-item-toggle.disable": "Disable option to perform changes on the item's metadata", + "access-control-item-toggle.disable": "Deaktivieren Sie die Option, Änderungen an den Metadaten des Items vorzunehmen", + + // "access-control-bitstream-header-toggle": "Bitstreams", + "access-control-bitstream-header-toggle": "Dateien", + + // "access-control-bitstream-toggle.enable": "Enable option to perform changes on the bitstreams", + "access-control-bitstream-toggle.enable": "Option zur Durchführung von Änderungen an den Dateien aktivieren", + + // "access-control-bitstream-toggle.disable": "Disable option to perform changes on the bitstreams", + "access-control-bitstream-toggle.disable": "Option zur Durchführung von Änderungen an den Dateien deaktivieren", + + // "access-control-mode": "Mode", + "access-control-mode": "Modus", + + // "access-control-access-conditions": "Access conditions", + "access-control-access-conditions": "Zugriffsbedingungen", + + // "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": "Gegenwärtig sind hier keine Zugriffsbedingungen angegeben. Bei Ausführung werden die aktuellen Zugriffsbedingungen durch die von der eigenen Sammlung geerbten Standardzugriffsbedingungen ersetzt.", + + // "access-control-replace-all": "Replace access conditions", + "access-control-replace-all": "Ersetzen Sie die Zugriffsbedingungen", + + // "access-control-add-to-existing": "Add to existing ones", + "access-control-add-to-existing": "Zu den bestehenden hinzufügen", + + // "access-control-limit-to-specific": "Limit the changes to specific bitstreams", + "access-control-limit-to-specific": "Beschränkung der Änderungen auf bestimmte Dateien", + + // "access-control-process-all-bitstreams": "Update all the bitstreams in the item", + "access-control-process-all-bitstreams": "Alle Dateien im Item aktualisieren", + + // "access-control-bitstreams-selected": "bitstreams selected", + "access-control-bitstreams-selected": "ausgewählte Dateien", + + // "access-control-bitstreams-select": "Select bitstreams", + "access-control-bitstreams-select": "Dateien auswählen", + + // "access-control-cancel": "Cancel", + "access-control-cancel": "Abbrechen", + + // "access-control-execute": "Execute", + "access-control-execute": "Ausführen", + + // "access-control-add-more": "Add more", + "access-control-add-more": "Mehr hinzufügen", + + // "access-control-remove": "Remove access condition", + "access-control-remove": "Zugriffsbedingung aufheben", + + // "access-control-select-bitstreams-modal.title": "Select bitstreams", + "access-control-select-bitstreams-modal.title": "Dateien auswählen", + + // "access-control-select-bitstreams-modal.no-items": "No items to show.", + "access-control-select-bitstreams-modal.no-items": "Keine Items zu zeigen.", + + // "access-control-select-bitstreams-modal.close": "Close", + "access-control-select-bitstreams-modal.close": "Schließen", + + // "access-control-option-label": "Access condition type", + "access-control-option-label": "Art der Zugriffsbedingung", + + // "access-control-option-note": "Choose an access condition to apply to selected objects.", + "access-control-option-note": "Wählen Sie eine Zugriffsbedingung, die auf die ausgewählten Objekte angewendet werden soll.", + + // "access-control-option-start-date": "Grant access from", + "access-control-option-start-date": "Zugriff gewähren von", + + // "access-control-option-start-date-note": "Select the date from which the related access condition is applied", + "access-control-option-start-date-note": "Wählen Sie das Datum, ab dem die betreffende Zugriffsbedingung angewendet wird", + + // "access-control-option-end-date": "Grant access until", + "access-control-option-end-date": "Zugriff gewähren bis", + + // "access-control-option-end-date-note": "Select the date until which the related access condition is applied", + "access-control-option-end-date-note": "Wählen Sie das Datum, bis zu dem die betreffende Zugriffsbedingung angewendet wird", + + // "vocabulary-treeview.search.form.add": "Add", + "vocabulary-treeview.search.form.add": "Hinzufügen", + + // "admin.notifications.publicationclaim.breadcrumbs": "Publication Claim", + "admin.notifications.publicationclaim.breadcrumbs": "Beanspruchung von Publikationen", + + // "admin.notifications.publicationclaim.page.title": "Publication Claim", + "admin.notifications.publicationclaim.page.title": "Beanspruchung von Publikationen", + + // "coar-notify-support.title": "COAR Notify Protocol", + "coar-notify-support.title": "COAR-Notify-Protokoll", + + // "coar-notify-support-title.content": "Here, we fully support the COAR Notify protocol, which is designed to enhance the communication between repositories. To learn more about the COAR Notify protocol, visit the COAR Notify website.", + "coar-notify-support-title.content": "Hier wird das COAR-Notify-Protokoll, das die Kommunikation zwischen Repositorien verbessern soll, vollständig unterstützt. Um mehr über das COAR-Notify-Protokoll zu erfahren, besuchen Sie die COAR-Notify-Website.", + + // "coar-notify-support.ldn-inbox.title": "LDN InBox", + "coar-notify-support.ldn-inbox.title": "LDN InBox", + + // "coar-notify-support.ldn-inbox.content": "For your convenience, our LDN (Linked Data Notifications) InBox is easily accessible at {{ ldnInboxUrl }}. The LDN InBox enables seamless communication and data exchange, ensuring efficient and effective collaboration.", + "coar-notify-support.ldn-inbox.content": "Unsere LDN-InBox (Linked Data Notifications) ist unter {{ ldnInboxUrl }} leicht zugänglich. Die LDN-InBox ermöglicht reibungslose Kommunikation und Datenaustausch und gewährleistet eine effiziente und effektive Zusammenarbeit.", + + // "coar-notify-support.message-moderation.title": "Message Moderation", + "coar-notify-support.message-moderation.title": "Nachrichtenmoderation", + + // "coar-notify-support.message-moderation.content": "To ensure a secure and productive environment, all incoming LDN messages are moderated. If you are planning to exchange information with us, kindly reach out via our dedicated", + "coar-notify-support.message-moderation.content": "Um eine sichere und produktive Umgebung zu gewährleisten, werden alle eingehenden LDN-Nachrichten moderiert. Wenn Sie Informationen mit uns austauschen möchten, wenden Sie sich bitte an unser Team", + + // "coar-notify-support.message-moderation.feedback-form": " Feedback form.", + "coar-notify-support.message-moderation.feedback-form": " Feedback-Formular.", + + // "service.overview.delete.header": "Delete Service", + "service.overview.delete.header": "Dienst löschen", + + // "ldn-registered-services.title": "Registered Services", + "ldn-registered-services.title": "Registrierte Dienste", + + // "ldn-registered-services.table.name": "Name", + "ldn-registered-services.table.name": "Name", + + // "ldn-registered-services.table.description": "Description", + "ldn-registered-services.table.description": "Beschreibung", + + // "ldn-registered-services.table.status": "Status", + "ldn-registered-services.table.status": "Status", + + // "ldn-registered-services.table.action": "Action", + "ldn-registered-services.table.action": "Aktion", + + // "ldn-registered-services.new": "NEW", + "ldn-registered-services.new": "NEU", + + // "ldn-registered-services.new.breadcrumbs": "Registered Services", + "ldn-registered-services.new.breadcrumbs": "Registrierte Dienste", + + // "ldn-service.overview.table.enabled": "Enabled", + "ldn-service.overview.table.enabled": "Aktiviert", + + // "ldn-service.overview.table.disabled": "Disabled", + "ldn-service.overview.table.disabled": "Deaktiviert", + + // "ldn-service.overview.table.clickToEnable": "Click to enable", + "ldn-service.overview.table.clickToEnable": "Zum Aktivieren anklicken", + + // "ldn-service.overview.table.clickToDisable": "Click to disable", + "ldn-service.overview.table.clickToDisable": "Zum Deaktivieren anklicken", + + // "ldn-edit-registered-service.title": "Edit Service", + "ldn-edit-registered-service.title": "Dienst bearbeiten", + + // "ldn-create-service.title": "Create service", + "ldn-create-service.title": "Dienst erstellen", + + // "service.overview.create.modal": "Create Service", + "service.overview.create.modal": "Dienst erstellen", + + // "service.overview.create.body": "Please confirm the creation of this service.", + "service.overview.create.body": "Bitte bestätigen Sie die Erstellung dieses Dienstes.", + + // "ldn-service-status": "Status", + "ldn-service-status": "Status", + + // "service.confirm.create": "Create", + "service.confirm.create": "Erstellen.", + + // "service.refuse.create": "Cancel", + "service.refuse.create": "Abbrechen", + + // "ldn-register-new-service.title": "Register a new service", + "ldn-register-new-service.title": "Einen neuen Dienst registrieren", + + // "ldn-new-service.form.label.submit": "Save", + "ldn-new-service.form.label.submit": "Speichern", + + // "ldn-new-service.form.label.name": "Name", + "ldn-new-service.form.label.name": "Name", + + // "ldn-new-service.form.label.description": "Description", + "ldn-new-service.form.label.description": "Beschreibung", + + // "ldn-new-service.form.label.url": "Service URL", + "ldn-new-service.form.label.url": "Dienst-URL", + + // "ldn-new-service.form.label.ip-range": "Service IP range", + "ldn-new-service.form.label.ip-range": "Dienst-IP-Bereich", + + // "ldn-new-service.form.label.score": "Level of trust", + "ldn-new-service.form.label.score": "Grad des Vertrauens", + + // "ldn-new-service.form.label.ldnUrl": "LDN Inbox URL", + "ldn-new-service.form.label.ldnUrl": "LDN-Posteingang - URL", + + // "ldn-new-service.form.placeholder.name": "Please provide service name", + "ldn-new-service.form.placeholder.name": "Bitte geben Sie den Namen des Dienstes an", + + // "ldn-new-service.form.placeholder.description": "Please provide a description regarding your service", + "ldn-new-service.form.placeholder.description": "Bitte geben Sie eine Beschreibung Ihres Dienstes an", + + // "ldn-new-service.form.placeholder.url": "Please input the URL for users to check out more information about the service", + "ldn-new-service.form.placeholder.url": "Bitte geben Sie die URL ein, damit Nutzende weitere Informationen abrufen können", + + // "ldn-new-service.form.placeholder.lowerIp": "IPv4 range lower bound", + "ldn-new-service.form.placeholder.lowerIp": "IPv4-Bereich untere Grenze", + + // "ldn-new-service.form.placeholder.upperIp": "IPv4 range upper bound", + "ldn-new-service.form.placeholder.upperIp": "IPv4-Bereichs obere Grenze", + + // "ldn-new-service.form.placeholder.ldnUrl": "Please specify the URL of the LDN Inbox", + "ldn-new-service.form.placeholder.ldnUrl": "Bitte geben Sie die URL der LDN Inbox an", + + // "ldn-new-service.form.placeholder.score": "Please enter a value between 0 and 1. Use the “.” as decimal separator", + "ldn-new-service.form.placeholder.score": "Bitte geben Sie einen Wert zwischen 0 und 1 ein", + + // "ldn-service.form.label.placeholder.default-select": "Select a pattern", + "ldn-service.form.label.placeholder.default-select": "Wählen Sie eine Vorlage", + + // "ldn-service.form.pattern.ack-accept.label": "Acknowledge and Accept", + "ldn-service.form.pattern.ack-accept.label": "Zur Kenntnis nehmen und Akzeptieren", + + // "ldn-service.form.pattern.ack-accept.description": "This pattern is used to acknowledge and accept a request (offer). It implies an intention to act on the request.", + "ldn-service.form.pattern.ack-accept.description": "Diese Vorlage wird verwendet, um eine Anfrage zu bestätigen und anzunehmen. Sie impliziert die Absicht, der Anfrage nachzukommen.", + + // "ldn-service.form.pattern.ack-accept.category": "Acknowledgements", + "ldn-service.form.pattern.ack-accept.category": "Bestätigungen", + + // "ldn-service.form.pattern.ack-reject.label": "Acknowledge and Reject", + "ldn-service.form.pattern.ack-reject.label": "Zur Kenntnis nehmen und Ablehnen", + + // "ldn-service.form.pattern.ack-reject.description": "This pattern is used to acknowledge and reject a request (offer). It signifies no further action regarding the request.", + "ldn-service.form.pattern.ack-reject.description": "Diese Vorlage wird verwendet, um eine Anfrage zur Kenntnis zu nehmen und abzulehnen. Es bedeutet, dass keine weitere Aktion bezüglich der Anfrage erfolgt.", + + // "ldn-service.form.pattern.ack-reject.category": "Acknowledgements", + "ldn-service.form.pattern.ack-reject.category": "Bestätigungen", + + // "ldn-service.form.pattern.ack-tentative-accept.label": "Acknowledge and Tentatively Accept", + "ldn-service.form.pattern.ack-tentative-accept.label": "Zur Kenntnis nehmen und vorläufig akzeptieren", + + // "ldn-service.form.pattern.ack-tentative-accept.description": "This pattern is used to acknowledge and tentatively accept a request (offer). It implies an intention to act, which may change.", + "ldn-service.form.pattern.ack-tentative-accept.description": "Diese Vorlage wird verwendet, um eine Anfrage zur Kenntnis zu nehmen und vorläufig anzunehmen. Es impliziert eine Absicht zu handeln, die sich ändern kann.", + + // "ldn-service.form.pattern.ack-tentative-accept.category": "Acknowledgements", + "ldn-service.form.pattern.ack-tentative-accept.category": "Bestätigungen", + + // "ldn-service.form.pattern.ack-tentative-reject.label": "Acknowledge and Tentatively Reject", + "ldn-service.form.pattern.ack-tentative-reject.label": "Zur Kenntnis nehmen und vorläufig ablehnen", + + // "ldn-service.form.pattern.ack-tentative-reject.description": "This pattern is used to acknowledge and tentatively reject a request (offer). It signifies no further action, subject to change.", + "ldn-service.form.pattern.ack-tentative-reject.description": "Diese Vorlage wird verwendet, um eine Anfrage zur Kenntnis zu nehmen und vorläufig abzulehnen. Es bedeutet, dass keine weitere Aktion bezüglich der Anfrage erfolgt, vorbehaltlich von Änderungen.", + + // "ldn-service.form.pattern.ack-tentative-reject.category": "Acknowledgements", + "ldn-service.form.pattern.ack-tentative-reject.category": "Bestätigungen", + + // "ldn-service.form.pattern.announce-endorsement.label": "Announce Endorsement", + "ldn-service.form.pattern.announce-endorsement.label": "Befürwortung ankündigen", + + // "ldn-service.form.pattern.announce-endorsement.description": "This pattern is used to announce the existence of an endorsement, referencing the endorsed resource.", + "ldn-service.form.pattern.announce-endorsement.description": "Diese Vorlage wird verwendet, um das Vorhandensein einer Befürwortung anzukündigen, wobei auf die vermerkte Ressource verwiesen wird.", + + // "ldn-service.form.pattern.announce-endorsement.category": "Announcements", + "ldn-service.form.pattern.announce-endorsement.category": "Ankündigungen", + + // "ldn-service.form.pattern.announce-ingest.label": "Announce Ingest", + "ldn-service.form.pattern.announce-ingest.label": "Übernahme ankündigen", + + // "ldn-service.form.pattern.announce-ingest.description": "This pattern is used to announce that a resource has been ingested.", + "ldn-service.form.pattern.announce-ingest.description": "Diese Vorlage wird verwendet, um anzukündigen, dass eine Ressource aufgenommen worden ist.", + + // "ldn-service.form.pattern.announce-ingest.category": "Announcements", + "ldn-service.form.pattern.announce-ingest.category": "Ankündigungen", + + // "ldn-service.form.pattern.announce-relationship.label": "Announce Relationship", + "ldn-service.form.pattern.announce-relationship.label": "Verknüpfung ankündigen", + + // "ldn-service.form.pattern.announce-relationship.description": "This pattern is used to announce a relationship between two resources.", + "ldn-service.form.pattern.announce-relationship.description": "Diese Vorlage wird verwendet, um eine Verknüpfung zwischen zwei Ressourcen anzukündigen.", + + // "ldn-service.form.pattern.announce-relationship.category": "Announcements", + "ldn-service.form.pattern.announce-relationship.category": "Ankündigungen", + + // "ldn-service.form.pattern.announce-review.label": "Announce Review", + "ldn-service.form.pattern.announce-review.label": "Review ankündigen", + + // "ldn-service.form.pattern.announce-review.description": "This pattern is used to announce the existence of a review, referencing the reviewed resource.", + "ldn-service.form.pattern.announce-review.description": "Diese Vorlage wird verwendet, um das Vorhandensein einer Review anzukündigen und auf die überprüfte Ressource zu verweisen.", + + // "ldn-service.form.pattern.announce-review.category": "Announcements", + "ldn-service.form.pattern.announce-review.category": "Ankündigungen", + + // "ldn-service.form.pattern.announce-service-result.label": "Announce Service Result", + "ldn-service.form.pattern.announce-service-result.label": "Ergebnis des Dienstes ankündigen", + + // "ldn-service.form.pattern.announce-service-result.description": "This pattern is used to announce the existence of a 'service result', referencing the relevant resource.", + "ldn-service.form.pattern.announce-service-result.description": "Diese Vorlage wird verwendet, um das Vorhandensein eines \"Dienstergebnisses\" anzukündigen, wobei auf die entsprechende Ressource verwiesen wird.", + + // "ldn-service.form.pattern.announce-service-result.category": "Announcements", + "ldn-service.form.pattern.announce-service-result.category": "Ankündigungen", + + // "ldn-service.form.pattern.request-endorsement.label": "Request Endorsement", + "ldn-service.form.pattern.request-endorsement.label": "Befürwortung anfragen", + + // "ldn-service.form.pattern.request-endorsement.description": "This pattern is used to request endorsement of a resource owned by the origin system.", + "ldn-service.form.pattern.request-endorsement.description": "Diese Vorlage wird verwendet, um die Befürwortung einer Ressource anzufragen, die im Besitz des Quellsystems ist.", + + // "ldn-service.form.pattern.request-endorsement.category": "Requests", + "ldn-service.form.pattern.request-endorsement.category": "Anfragen", + + // "ldn-service.form.pattern.request-ingest.label": "Request Ingest", + "ldn-service.form.pattern.request-ingest.label": "Übernahme anfragen", + + // "ldn-service.form.pattern.request-ingest.description": "This pattern is used to request that the target system ingest a resource.", + "ldn-service.form.pattern.request-ingest.description": "Diese Vorlage wird verwendet, um das Zielsystem aufzufordern, eine Ressource aufzunehmen.", + + // "ldn-service.form.pattern.request-ingest.category": "Requests", + "ldn-service.form.pattern.request-ingest.category": "Anfragen", + + // "ldn-service.form.pattern.request-review.label": "Request Review", + "ldn-service.form.pattern.request-review.label": "Review anfragen", + + // "ldn-service.form.pattern.request-review.description": "This pattern is used to request a review of a resource owned by the origin system.", + "ldn-service.form.pattern.request-review.description": "Diese Vorlage wird verwendet, um eine Review einer Ressource anzufragen, die sich im Besitz des Quellsystems befindet.", + + // "ldn-service.form.pattern.request-review.category": "Requests", + "ldn-service.form.pattern.request-review.category": "Anfragen", + + // "ldn-service.form.pattern.undo-offer.label": "Undo Offer", + "ldn-service.form.pattern.undo-offer.label": "Angebot rückgängig machen", + + // "ldn-service.form.pattern.undo-offer.description": "This pattern is used to undo (retract) an offer previously made.", + "ldn-service.form.pattern.undo-offer.description": "Diese Vorlage wird verwendet, um ein zuvor abgegebenes Angebot rückgängig zu machen (zu widerrufen).", + + // "ldn-service.form.pattern.undo-offer.category": "Undo", + "ldn-service.form.pattern.undo-offer.category": "Rückgängig machen", + + // "ldn-new-service.form.label.placeholder.selectedItemFilter": "No Item Filter Selected", + "ldn-new-service.form.label.placeholder.selectedItemFilter": "Kein Itemfilter ausgewählt", + + // "ldn-new-service.form.label.ItemFilter": "Item Filter", + "ldn-new-service.form.label.ItemFilter": "Itemfilter", + + // "ldn-new-service.form.label.automatic": "Automatic", + "ldn-new-service.form.label.automatic": "Automatisch", + + // "ldn-new-service.form.error.name": "Name is required", + "ldn-new-service.form.error.name": "Name ist erforderlich", + + // "ldn-new-service.form.error.url": "URL is required", + "ldn-new-service.form.error.url": "URL ist erforderlich", + + // "ldn-new-service.form.error.ipRange": "Please enter a valid IP range", + "ldn-new-service.form.error.ipRange": "Bitte geben Sie einen gültigen IP-Bereich ein", + + // "ldn-new-service.form.hint.ipRange": "Please enter a valid IpV4 in both range bounds (note: for single IP, please enter the same value in both fields)", + "ldn-new-service.form.hint.ipRange": "Bitte geben Sie eine gültige IpV4 in beide Bereichsgrenzen ein (Hinweis: für eine einzelne IP geben Sie bitte in beide Felder den gleichen Wert ein)", + + // "ldn-new-service.form.error.ldnurl": "LDN URL is required", + "ldn-new-service.form.error.ldnurl": "LDN-URL ist erforderlich", + + // "ldn-new-service.form.error.patterns": "At least a pattern is required", + "ldn-new-service.form.error.patterns": "Zumindest eine Vorlage ist erforderlich", + + // "ldn-new-service.form.error.score": "Please enter a valid score (between 0 and 1). Use the “.” as decimal separator", + "ldn-new-service.form.error.score": "Bitte geben Sie eine gültige Punktzahl ein (zwischen 0 und 1)", + + // "ldn-new-service.form.label.inboundPattern": "Supported Pattern", + "ldn-new-service.form.label.inboundPattern": "Unterstützte Vorlagen", + + // "ldn-new-service.form.label.addPattern": "+ Add more", + "ldn-new-service.form.label.addPattern": "+ Mehr hinzufügen", + + // "ldn-new-service.form.label.removeItemFilter": "Remove", + "ldn-new-service.form.label.removeItemFilter": "Entfernen", + + // "ldn-register-new-service.breadcrumbs": "New Service", + "ldn-register-new-service.breadcrumbs": "Neuer Dienst", + + // "service.overview.delete.body": "Are you sure you want to delete this service?", + "service.overview.delete.body": "Sind Sie sicher, dass Sie diesen Dienst löschen möchten?", + + // "service.overview.edit.body": "Do you confirm the changes?", + "service.overview.edit.body": "Bestätigen Sie die Änderungen?", + + // "service.overview.edit.modal": "Edit Service", + "service.overview.edit.modal": "Dienst bearbeiten", + + // "service.detail.update": "Confirm", + "service.detail.update": "Bestätigen", + + // "service.detail.return": "Cancel", + "service.detail.return": "Abbrechen", + + // "service.overview.reset-form.body": "Are you sure you want to discard the changes and leave?", + "service.overview.reset-form.body": "Sind Sie sicher, dass Sie die Änderungen verwerfen und gehen wollen?", + + // "service.overview.reset-form.modal": "Discard Changes", + "service.overview.reset-form.modal": "Änderungen verwerfen", + + // "service.overview.reset-form.reset-confirm": "Discard", + "service.overview.reset-form.reset-confirm": "Verwerfen", + + // "admin.registries.services-formats.modify.success.head": "Successful Edit", + "admin.registries.services-formats.modify.success.head": "Bearbeitung erfolgreich", + + // "admin.registries.services-formats.modify.success.content": "The service has been edited", + "admin.registries.services-formats.modify.success.content": "Der Dienst wurde bearbeitet", + + // "admin.registries.services-formats.modify.failure.head": "Failed Edit", + "admin.registries.services-formats.modify.failure.head": "Bearbeitung fehlgeschlagen", + + // "admin.registries.services-formats.modify.failure.content": "The service has not been edited", + "admin.registries.services-formats.modify.failure.content": "Der Dienst wurde nicht bearbeitet", + + // "ldn-service-notification.created.success.title": "Successful Create", + "ldn-service-notification.created.success.title": "Erfolgreich erstellt", + + // "ldn-service-notification.created.success.body": "The service has been created", + "ldn-service-notification.created.success.body": "Der Dienst wurde erstellt", + + // "ldn-service-notification.created.failure.title": "Failed Create", + "ldn-service-notification.created.failure.title": "Erstellen fehlgeschlagen", + + // "ldn-service-notification.created.failure.body": "The service has not been created", + "ldn-service-notification.created.failure.body": "Der Dienst wurde nicht erstellt", + + // "ldn-service-notification.created.warning.title": "Please select at least one Inbound Pattern", + "ldn-service-notification.created.warning.title": "Bitte wählen Sie mindestens eine Eingang-Vorlage", + + // "ldn-enable-service.notification.success.title": "Successful status updated", + "ldn-enable-service.notification.success.title": "Status erfolgreich aktualisiert", + + // "ldn-enable-service.notification.success.content": "The service status has been updated", + "ldn-enable-service.notification.success.content": "Der Status des Dienstes wurde aktualisiert", + + // "ldn-service-delete.notification.success.title": "Successful Deletion", + "ldn-service-delete.notification.success.title": "Löschung erfolgreich", + + // "ldn-service-delete.notification.success.content": "The service has been deleted", + "ldn-service-delete.notification.success.content": "Der Dienst wurde gelöscht", + + // "ldn-service-delete.notification.error.title": "Failed Deletion", + "ldn-service-delete.notification.error.title": "Löschen fehlgeschlagen", + + // "ldn-service-delete.notification.error.content": "The service has not been deleted", + "ldn-service-delete.notification.error.content": "Der Dienst wurde nicht gelöscht", + + // "service.overview.reset-form.reset-return": "Cancel", + "service.overview.reset-form.reset-return": "Abbrechen", + + // "service.overview.delete": "Delete service", + "service.overview.delete": "Dienst löschen", + + // "ldn-edit-service.title": "Edit service", + "ldn-edit-service.title": "Dienst bearbeiten", + + // "ldn-edit-service.form.label.name": "Name", + "ldn-edit-service.form.label.name": "Name", + + // "ldn-edit-service.form.label.description": "Description", + "ldn-edit-service.form.label.description": "Beschreibung", + + // "ldn-edit-service.form.label.url": "Service URL", + "ldn-edit-service.form.label.url": "Dienst-URL", + + // "ldn-edit-service.form.label.ldnUrl": "LDN Inbox URL", + "ldn-edit-service.form.label.ldnUrl": "LDN-Inbox URL", + + // "ldn-edit-service.form.label.inboundPattern": "Inbound Pattern", + "ldn-edit-service.form.label.inboundPattern": "Eingang-Vorlage", + + // "ldn-edit-service.form.label.noInboundPatternSelected": "No Inbound Pattern", + "ldn-edit-service.form.label.noInboundPatternSelected": "Keine Eingang-Vorlage", + + // "ldn-edit-service.form.label.selectedItemFilter": "Selected Item Filter", + "ldn-edit-service.form.label.selectedItemFilter": "Ausgewählte Itemfilter", + + // "ldn-edit-service.form.label.selectItemFilter": "No Item Filter", + "ldn-edit-service.form.label.selectItemFilter": "Keine Itemfilter", + + // "ldn-edit-service.form.label.automatic": "Automatic", + "ldn-edit-service.form.label.automatic": "Automatisch", + + // "ldn-edit-service.form.label.addInboundPattern": "+ Add more", + "ldn-edit-service.form.label.addInboundPattern": "+ Mehr hinzufügen", + + // "ldn-edit-service.form.label.submit": "Save", + "ldn-edit-service.form.label.submit": "Speichern", + + // "ldn-edit-service.breadcrumbs": "Edit Service", + "ldn-edit-service.breadcrumbs": "Dienst bearbeiten", + + // "ldn-service.control-constaint-select-none": "Select none", + "ldn-service.control-constaint-select-none": "Keine auswählen", + + // "ldn-register-new-service.notification.error.title": "Error", + "ldn-register-new-service.notification.error.title": "Fehler", + + // "ldn-register-new-service.notification.error.content": "An error occurred while creating this process", + "ldn-register-new-service.notification.error.content": "Beim Erstellen dieses Prozesses ist ein Fehler aufgetreten", + + // "ldn-register-new-service.notification.success.title": "Success", + "ldn-register-new-service.notification.success.title": "Erfolg", + + // "ldn-register-new-service.notification.success.content": "The process was successfully created", + "ldn-register-new-service.notification.success.content": "Der Prozess wurde erfolgreich erstellt", + + // "submission.sections.notify.info": "The selected service is compatible with the item according to its current status. {{ service.name }}: {{ service.description }}", + "submission.sections.notify.info": "Der ausgewählte Dienst ist mit dem Item gemäß seinem aktuellen Status kompatibel. {{ service.name }}: {{ service.description }}", + + // "item.page.endorsement": "Endorsement", + "item.page.endorsement": "Befürwortung", + + // "item.page.review": "Review", + "item.page.review": "Review", + + // "item.page.referenced": "Referenced By", + "item.page.referenced": "Referenziert von", + + // "item.page.supplemented": "Supplemented By", + "item.page.supplemented": "Ergänzt durch", + + // "menu.section.icon.ldn_services": "LDN Services overview", + "menu.section.icon.ldn_services": "Übersicht der LDN-Dienste", + + // "menu.section.services": "LDN Services", + "menu.section.services": "LDN-Dienste", + + // "menu.section.services_new": "LDN Service", + "menu.section.services_new": "LDN-Dienst", + + // "quality-assurance.topics.description-with-target": "Below you can see all the topics received from the subscriptions to {{source}} in regards to the", + "quality-assurance.topics.description-with-target": "Unten sehen Sie alle Themen, die von den Abonnenten von {{source}} in Bezug auf die", + + // "quality-assurance.events.description": "Below the list of all the suggestions for the selected topic {{topic}}, related to {{source}}.", + "quality-assurance.events.description": "Nachfolgend die Liste aller Vorschläge für das ausgewählte Thema {{topic}}, die mit {{source}} zusammenhängen.", + + // "quality-assurance.events.description-with-topic-and-target": "Below the list of all the suggestions for the selected topic {{topic}}, related to {{source}} and ", + "quality-assurance.events.description-with-topic-and-target": "Nachfolgend die Liste aller Vorschläge für das ausgewählte Thema {{topic}}, bezogen auf {{source}} und ", + + // "quality-assurance.event.table.event.message.serviceUrl": "Service URL:", + "quality-assurance.event.table.event.message.serviceUrl": "Dienst-URL:", + + // "quality-assurance.event.table.event.message.link": "Link:", + "quality-assurance.event.table.event.message.link": "Link:", + + // "service.detail.delete.cancel": "Cancel", + "service.detail.delete.cancel": "Abbrechen", + + // "service.detail.delete.button": "Delete service", + "service.detail.delete.button": "Dienst löschen", + + // "service.detail.delete.header": "Delete service", + "service.detail.delete.header": "Dienst löschen", + + // "service.detail.delete.body": "Are you sure you want to delete the current service?", + "service.detail.delete.body": "Sind Sie sicher, dass Sie den aktuellen Dienst löschen wollen?", + + // "service.detail.delete.confirm": "Delete service", + "service.detail.delete.confirm": "Dienst löschen", + + // "service.detail.delete.success": "The service was successfully deleted.", + "service.detail.delete.success": "Der Dienst wurde erfolgreich gelöscht.", + + // "service.detail.delete.error": "Something went wrong when deleting the service", + "service.detail.delete.error": "Beim Löschen des Dienstes ist etwas schief gelaufen", + + // "service.overview.table.id": "Services ID", + "service.overview.table.id": "ID des Dienstes", + + // "service.overview.table.name": "Name", + "service.overview.table.name": "Name", + + // "service.overview.table.start": "Start time (UTC)", + "service.overview.table.start": "Startzeit (UTC)", + + // "service.overview.table.status": "Status", + "service.overview.table.status": "Status", + + // "service.overview.table.user": "User", + "service.overview.table.user": "Benutzer:in", + + // "service.overview.title": "Services Overview", + "service.overview.title": "Übersicht über die Dienste", + + // "service.overview.breadcrumbs": "Services Overview", + "service.overview.breadcrumbs": "Übersicht über die Dienste", + + // "service.overview.table.actions": "Actions", + "service.overview.table.actions": "Aktionen", + + // "service.overview.table.description": "Description", + "service.overview.table.description": "Beschreibung", + + // "submission.sections.submit.progressbar.coarnotify": "COAR Notify", + "submission.sections.submit.progressbar.coarnotify": "COAR Notify", + + // "submission.section.section-coar-notify.control.request-review.label": "You can request a review to one of the following services", + "submission.section.section-coar-notify.control.request-review.label": "Sie können eine Überprüfung bei einem der folgenden Dienste beantragen", + + // "submission.section.section-coar-notify.control.request-endorsement.label": "You can request an Endorsement to one of the following overlay journals", + "submission.section.section-coar-notify.control.request-endorsement.label": "Sie können eine Befürwortung für eine der folgenden Overlay-Journals anfragen", + + // "submission.section.section-coar-notify.control.request-ingest.label": "You can request to ingest a copy of your submission to one of the following services", + "submission.section.section-coar-notify.control.request-ingest.label": "Sie können anfragen, dass eine Kopie Ihrer Einreichung an einen der folgenden Dienste übermittelt wird", + + // "submission.section.section-coar-notify.dropdown.no-data": "No data available", + "submission.section.section-coar-notify.dropdown.no-data": "Keine Daten verfügbar", + + // "submission.section.section-coar-notify.dropdown.select-none": "Select none", + "submission.section.section-coar-notify.dropdown.select-none": "Keinen auswählen", + + // "submission.section.section-coar-notify.small.notification": "Select a service for {{ pattern }} of this item", + "submission.section.section-coar-notify.small.notification": "Wählen Sie einen Dienst für {{ pattern }} dieses Items", + + // "submission.section.section-coar-notify.selection.description": "Selected service's description:", + "submission.section.section-coar-notify.selection.description": "Beschreibung des ausgewählten Dienstes:", + + // "submission.section.section-coar-notify.selection.no-description": "No further information is available", + "submission.section.section-coar-notify.selection.no-description": "Es sind keine weiteren Informationen verfügbar.", + + // "submission.section.section-coar-notify.notification.error": "The selected service is not suitable for the current item. Please check the description for details about which record can be managed by this service.", + "submission.section.section-coar-notify.notification.error": "Der ausgewählte Dienst ist für das aktuelle Item nicht geeignet. Bitte prüfen Sie in der Beschreibung, welcher Datensatz von diesem Dienst verwaltet werden kann.", + + // "submission.section.section-coar-notify.info.no-pattern": "No configurable patterns found.", + "submission.section.section-coar-notify.info.no-pattern": "Keine konfigurierbaren Vorlagen gefunden.", + + // "error.validation.coarnotify.invalidfilter": "Invalid filter, try to select another service or none.", + "error.validation.coarnotify.invalidfilter": "Ungültiger Filter, versuchen Sie, einen anderen Dienst oder keinen auszuwählen.", + + // "request-status-alert-box.accepted": "The requested {{ offerType }} for {{ serviceName }} has been taken in charge.", + "request-status-alert-box.accepted": "Die angefragte {{ offerType }} für {{ serviceName }} wurde in Auftrag gegeben.", + + // "request-status-alert-box.rejected": "The requested {{ offerType }} for {{ serviceName }} has been rejected.", + "request-status-alert-box.rejected": "Die angefragte {{ offerType }} für {{ serviceName }} wurde abgelehnt.", + + // "request-status-alert-box.requested": "The requested {{ offerType }} for {{ serviceName }} is pending.", + "request-status-alert-box.requested": "Die angefragte {{ offerType }} für {{ serviceName }} ist ausstehend.", + + // "ldn-service-button-mark-inbound-deletion": "Mark supported pattern for deletion", + "ldn-service-button-mark-inbound-deletion": "Unterstützte Vorlagen zur Löschung markieren", + + // "ldn-service-button-unmark-inbound-deletion": "Unmark supported pattern for deletion", + "ldn-service-button-unmark-inbound-deletion": "Unterstützte Vorlagen nicht mehr für die Löschung markieren", + + // "ldn-service-input-inbound-item-filter-dropdown": "Select Item filter for the pattern", + "ldn-service-input-inbound-item-filter-dropdown": "Itemfilter für die Vorlage auswählen", + + // "ldn-service-input-inbound-pattern-dropdown": "Select a pattern for service", + "ldn-service-input-inbound-pattern-dropdown": "Wählen Sie eine Vorlage für den Dienst", + + // "ldn-service-overview-select-delete": "Select service for deletion", + "ldn-service-overview-select-delete": "Dienst zur Löschung auswählen", + + // "ldn-service-overview-select-edit": "Edit LDN service", + "ldn-service-overview-select-edit": "LDN-Dienst bearbeiten", + + // "ldn-service-overview-close-modal": "Close modal", + "ldn-service-overview-close-modal": "Modul schließen", + + // "a-common-or_statement.label": "Item type is Journal Article or Dataset", + "a-common-or_statement.label": "Itemtyp ist Zeitschriftenartikel oder Datensatz", + + // "always_true_filter.label": "Always true", + "always_true_filter.label": "Immer wahr", + + // "automatic_processing_collection_filter_16.label": "Automatic processing", + "automatic_processing_collection_filter_16.label": "Automatische Verarbeitung", + + // "dc-identifier-uri-contains-doi_condition.label": "URI contains DOI", + "dc-identifier-uri-contains-doi_condition.label": "URI enthält DOI", + + // "doi-filter.label": "DOI filter", + "doi-filter.label": "DOI-Filter", + + // "driver-document-type_condition.label": "Document type equals driver", + "driver-document-type_condition.label": "Dokumenttyp entspricht Treiber", + + // "has-at-least-one-bitstream_condition.label": "Has at least one Bitstream", + "has-at-least-one-bitstream_condition.label": "Hat mindestens eine Datei", + + // "has-bitstream_filter.label": "Has Bitstream", + "has-bitstream_filter.label": "Hat Datei", + + // "has-one-bitstream_condition.label": "Has one Bitstream", + "has-one-bitstream_condition.label": "Hat eine Datei", + + // "is-archived_condition.label": "Is archived", + "is-archived_condition.label": "Ist archiviert", + + // "is-withdrawn_condition.label": "Is withdrawn", + "is-withdrawn_condition.label": "Ist zurückgezogen", + + // "item-is-public_condition.label": "Item is public", + "item-is-public_condition.label": "Item ist öffentlich", + + // "journals_ingest_suggestion_collection_filter_18.label": "Journals ingest", + "journals_ingest_suggestion_collection_filter_18.label": "Zeitschriften übermitteln", + + // "title-starts-with-pattern_condition.label": "Title starts with pattern", + "title-starts-with-pattern_condition.label": "Titel beginnt mit Muster", + + // "type-equals-dataset_condition.label": "Type equals Dataset", + "type-equals-dataset_condition.label": "Typ entspricht Datensatz", + + // "type-equals-journal-article_condition.label": "Type equals Journal Article", + "type-equals-journal-article_condition.label": "Typ entspricht Zeitschriftenartikel", + + // "ldn.no-filter.label": "None", + "ldn.no-filter.label": "Keine", + + // "admin.notify.dashboard": "Dashboard", + "admin.notify.dashboard": "Dashboard", + + // "menu.section.notify_dashboard": "Dashboard", + "menu.section.notify_dashboard": "Dashboard", + + // "menu.section.coar_notify": "COAR Notify", + "menu.section.coar_notify": "COAR Notify", + + // "admin-notify-dashboard.title": "Notify Dashboard", + "admin-notify-dashboard.title": "Notify Dashboard", + + // "admin-notify-dashboard.description": "The Notify dashboard monitor the general usage of the COAR Notify protocol across the repository. In the “Metrics” tab are statistics about usage of the COAR Notify protocol. In the “Logs/Inbound” and “Logs/Outbound” tabs it’s possible to search and check the individual status of each LDN message, either received or sent.", + "admin-notify-dashboard.description": "Das Notify-Dashboard überwacht die allgemeine Nutzung des COAR-Notify-Protokolls im gesamten Repositorium. Auf dem Reiter \"Metriken\" werden Statistiken über die Nutzung des COAR-Notify-Protokolls angezeigt. In den Reitern \"Protokolle/Eingang\" und \"Protokolle/Ausgang\" können Sie den individuellen Status jeder empfangenen oder gesendeten LDN-Nachricht suchen und überprüfen.", + + // "admin-notify-dashboard.metrics": "Metrics", + "admin-notify-dashboard.metrics": "Metriken", + + // "admin-notify-dashboard.received-ldn": "Number of received LDN", + "admin-notify-dashboard.received-ldn": "Anzahl der erhaltenen LDN", + + // "admin-notify-dashboard.generated-ldn": "Number of generated LDN", + "admin-notify-dashboard.generated-ldn": "Anzahl der erzeugten LDN", + + // "admin-notify-dashboard.NOTIFY.incoming.accepted": "Accepted", + "admin-notify-dashboard.NOTIFY.incoming.accepted": "Angenommen", + + // "admin-notify-dashboard.NOTIFY.incoming.accepted.description": "Accepted inbound notifications", + "admin-notify-dashboard.NOTIFY.incoming.accepted.description": "Angenommene eingehende Benachrichtigungen", + + // "admin-notify-logs.NOTIFY.incoming.accepted": "Currently displaying: Accepted notifications", + "admin-notify-logs.NOTIFY.incoming.accepted": "Derzeit angezeigt: Angenommene Benachrichtigungen", + + // "admin-notify-dashboard.NOTIFY.incoming.processed": "Processed LDN", + "admin-notify-dashboard.NOTIFY.incoming.processed": "Verarbeitete LDN", + + // "admin-notify-dashboard.NOTIFY.incoming.processed.description": "Processed inbound notifications", + "admin-notify-dashboard.NOTIFY.incoming.processed.description": "Verarbeitete eingehende Benachrichtigungen", + + // "admin-notify-logs.NOTIFY.incoming.processed": "Currently displaying: Processed LDN", + "admin-notify-logs.NOTIFY.incoming.processed": "Derzeit angezeigt: Verarbeitete LDN", + + // "admin-notify-logs.NOTIFY.incoming.failure": "Currently displaying: Failed notifications", + "admin-notify-logs.NOTIFY.incoming.failure": "Derzeit angezeigt: Fehlgeschlagene Benachrichtigungen", + + // "admin-notify-dashboard.NOTIFY.incoming.failure": "Failure", + "admin-notify-dashboard.NOTIFY.incoming.failure": "Fehlgeschlagen", + + // "admin-notify-dashboard.NOTIFY.incoming.failure.description": "Failed inbound notifications", + "admin-notify-dashboard.NOTIFY.incoming.failure.description": "Fehlgeschlagene eingehende Benachrichtigungen", + + // "admin-notify-logs.NOTIFY.outgoing.failure": "Currently displaying: Failed notifications", + "admin-notify-logs.NOTIFY.outgoing.failure": "Derzeit angezeigt: Fehlgeschlagene Benachrichtigungen", + + // "admin-notify-dashboard.NOTIFY.outgoing.failure": "Failure", + "admin-notify-dashboard.NOTIFY.outgoing.failure": "Fehlgeschlagen", + + // "admin-notify-dashboard.NOTIFY.outgoing.failure.description": "Failed outbound notifications", + "admin-notify-dashboard.NOTIFY.outgoing.failure.description": "Fehlgeschlagene ausgehende Benachrichtigungen", + + // "admin-notify-logs.NOTIFY.incoming.untrusted": "Currently displaying: Untrusted notifications", + "admin-notify-logs.NOTIFY.incoming.untrusted": "Derzeit angezeigt: Nicht vertrauenswürdige Benachrichtigungen", + + // "admin-notify-dashboard.NOTIFY.incoming.untrusted": "Untrusted", + "admin-notify-dashboard.NOTIFY.incoming.untrusted": "Nicht vertrauenswürdig", + + // "admin-notify-dashboard.NOTIFY.incoming.untrusted.description": "Inbound notifications not trusted", + "admin-notify-dashboard.NOTIFY.incoming.untrusted.description": "Eingehende Benachrichtigungen nicht vertrauenswürdig", + + // "admin-notify-logs.NOTIFY.incoming.delivered": "Currently displaying: Delivered notifications", + "admin-notify-logs.NOTIFY.incoming.delivered": "Derzeit angezeigt: Gelieferte Benachrichtigungen", + + // "admin-notify-dashboard.NOTIFY.incoming.delivered.description": "Inbound notifications successfully delivered", + "admin-notify-dashboard.NOTIFY.incoming.delivered.description": "Eingehende Benachrichtigungen erfolgreich zugestellt", + + // "admin-notify-dashboard.NOTIFY.outgoing.delivered": "Delivered", + "admin-notify-dashboard.NOTIFY.outgoing.delivered": "Geliefert", + + // "admin-notify-logs.NOTIFY.outgoing.delivered": "Currently displaying: Delivered notifications", + "admin-notify-logs.NOTIFY.outgoing.delivered": "Derzeit angezeigt: Gelieferte Benachrichtigungen", + + // "admin-notify-dashboard.NOTIFY.outgoing.delivered.description": "Outbound notifications successfully delivered", + "admin-notify-dashboard.NOTIFY.outgoing.delivered.description": "Ausgehende Benachrichtigungen erfolgreich zugestellt", + + // "admin-notify-logs.NOTIFY.outgoing.queued": "Currently displaying: Queued notifications", + "admin-notify-logs.NOTIFY.outgoing.queued": "Derzeit angezeigt: Wartende Benachrichtigungen", + + // "admin-notify-dashboard.NOTIFY.outgoing.queued.description": "Notifications currently queued", + "admin-notify-dashboard.NOTIFY.outgoing.queued.description": "Derzeit wartende Benachrichtigungen", + + // "admin-notify-dashboard.NOTIFY.outgoing.queued": "Queued", + "admin-notify-dashboard.NOTIFY.outgoing.queued": "In der Warteschlange", + + // "admin-notify-logs.NOTIFY.outgoing.queued_for_retry": "Currently displaying: Queued for retry notifications", + "admin-notify-logs.NOTIFY.outgoing.queued_for_retry": "Derzeit angezeigt: Wartende Benachrichtigungen für erneuten Versuch", + + // "admin-notify-dashboard.NOTIFY.outgoing.queued_for_retry": "Queued for retry", + "admin-notify-dashboard.NOTIFY.outgoing.queued_for_retry": "Warteschlange für erneuten Versuch", + + // "admin-notify-dashboard.NOTIFY.outgoing.queued_for_retry.description": "Notifications currently queued for retry", + "admin-notify-dashboard.NOTIFY.outgoing.queued_for_retry.description": "Derzeit wartende Benachrichtigungen für erneuten Versuch", + + // "admin-notify-dashboard.NOTIFY.incoming.involvedItems": "Items involved", + "admin-notify-dashboard.NOTIFY.incoming.involvedItems": "Betroffende Items", + + // "admin-notify-dashboard.NOTIFY.incoming.involvedItems.description": "Items related to inbound notifications", + "admin-notify-dashboard.NOTIFY.incoming.involvedItems.description": "Items im Zusammenhang mit eingehenden Benachrichtigungen", + + // "admin-notify-dashboard.NOTIFY.outgoing.involvedItems": "Items involved", + "admin-notify-dashboard.NOTIFY.outgoing.involvedItems": "Betroffende Items", + + // "admin-notify-dashboard.NOTIFY.outgoing.involvedItems.description": "Items related to outbound notifications", + "admin-notify-dashboard.NOTIFY.outgoing.involvedItems.description": "Items im Zusammenhang mit ausgehenden Benachrichtigungen", + + // "admin.notify.dashboard.breadcrumbs": "Dashboard", + "admin.notify.dashboard.breadcrumbs": "Dashboard", + + // "admin.notify.dashboard.inbound": "Inbound messages", + "admin.notify.dashboard.inbound": "Eingehende Nachrichten", + + // "admin.notify.dashboard.inbound-logs": "Logs/Inbound", + "admin.notify.dashboard.inbound-logs": "Protokolle/Eingang", + + // "admin.notify.dashboard.filter": "Filter: ", + "admin.notify.dashboard.filter": "Filter:", + + // "search.filters.applied.f.relateditem": "Related items", + "search.filters.applied.f.relateditem": "Verwandte Items", + + // "search.filters.applied.f.ldn_service": "LDN Service", + "search.filters.applied.f.ldn_service": "LDN-Dienst", + + // "search.filters.applied.f.notifyReview": "Notify Review", + "search.filters.applied.f.notifyReview": "Notify-Review", + + // "search.filters.applied.f.notifyEndorsement": "Notify Endorsement", + "search.filters.applied.f.notifyEndorsement": "Notify-Endorsement", + + // "search.filters.applied.f.notifyRelation": "Notify Relation", + "search.filters.applied.f.notifyRelation": "Notify-Relation", + + // "search.filters.filter.queue_last_start_time.head": "Last processing time ", + "search.filters.filter.queue_last_start_time.head": "Letztes verarbeitetes Item", + + // "search.filters.filter.queue_last_start_time.min.label": "Min range", + "search.filters.filter.queue_last_start_time.min.label": "Min. Bereich", + + // "search.filters.filter.queue_last_start_time.max.label": "Max range", + "search.filters.filter.queue_last_start_time.max.label": "Max. Bereich", + + // "search.filters.applied.f.queue_last_start_time.min": "Min range", + "search.filters.applied.f.queue_last_start_time.min": "Min. Bereich", + + // "search.filters.applied.f.queue_last_start_time.max": "Max range", + "search.filters.applied.f.queue_last_start_time.max": "Max. Bereich", + + // "admin.notify.dashboard.outbound": "Outbound messages", + "admin.notify.dashboard.outbound": "Ausgehende Nachrichten", + + // "admin.notify.dashboard.outbound-logs": "Logs/Outbound", + "admin.notify.dashboard.outbound-logs": "Protokolle/Ausgang", + + // "NOTIFY.incoming.search.results.head": "Incoming", + "NOTIFY.incoming.search.results.head": "Eingehend", + + // "search.filters.filter.relateditem.head": "Related item", + "search.filters.filter.relateditem.head": "Verwandtes Item", + + // "search.filters.filter.origin.head": "Origin", + "search.filters.filter.origin.head": "Herkunft", + + // "search.filters.filter.ldn_service.head": "LDN Service", + "search.filters.filter.ldn_service.head": "LDN-Dienst", + + // "search.filters.filter.target.head": "Target", + "search.filters.filter.target.head": "Ziel", + + // "search.filters.filter.queue_status.head": "Queue status", + "search.filters.filter.queue_status.head": "Status der Warteschlange", + + // "search.filters.filter.activity_stream_type.head": "Activity stream type", + "search.filters.filter.activity_stream_type.head": "Activity-Stream-Typ", + + // "search.filters.filter.coar_notify_type.head": "COAR Notify type", + "search.filters.filter.coar_notify_type.head": "COAR-Notify-Typ", + + // "search.filters.filter.notification_type.head": "Notification type", + "search.filters.filter.notification_type.head": "Benachrichtigungstyp", + + // "search.filters.filter.relateditem.label": "Search related items", + "search.filters.filter.relateditem.label": "Verwandte Items suchen", + + // "search.filters.filter.queue_status.label": "Search queue status", + "search.filters.filter.queue_status.label": "Warteschlangenstatus suchen", + + // "search.filters.filter.target.label": "Search target", + "search.filters.filter.target.label": "Ziel suchen", + + // "search.filters.filter.activity_stream_type.label": "Search activity stream type", + "search.filters.filter.activity_stream_type.label": "Activity-Stream-Typ suchen", + + // "search.filters.applied.f.queue_status": "Queue Status", + "search.filters.applied.f.queue_status": "Status der Warteschlange", + + // "search.filters.queue_status.0,authority": "Untrusted Ip", + "search.filters.queue_status.0,authority": "Nicht vertrauenswürdige Ip", + + // "search.filters.queue_status.1,authority": "Queued", + "search.filters.queue_status.1,authority": "Wartend", + + // "search.filters.queue_status.2,authority": "Processing", + "search.filters.queue_status.2,authority": "In der Verarbeitung", + + // "search.filters.queue_status.3,authority": "Processed", + "search.filters.queue_status.3,authority": "Verarbeitet", + + // "search.filters.queue_status.4,authority": "Failed", + "search.filters.queue_status.4,authority": "Fehlgeschlagen", + + // "search.filters.queue_status.5,authority": "Untrusted", + "search.filters.queue_status.5,authority": "Nicht vertrauenswürdig", + + // "search.filters.queue_status.6,authority": "Unmapped Action", + "search.filters.queue_status.6,authority": "Nicht abgebildete Aktion", + + // "search.filters.queue_status.7,authority": "Queued for retry", + "search.filters.queue_status.7,authority": "Warteschlange für erneuten Versuch", + + // "search.filters.applied.f.activity_stream_type": "Activity stream type", + "search.filters.applied.f.activity_stream_type": "Activity-Stream-Typ", + + // "search.filters.applied.f.coar_notify_type": "COAR Notify type", + "search.filters.applied.f.coar_notify_type": "COAR-Notify-Typ", + + // "search.filters.applied.f.notification_type": "Notification type", + "search.filters.applied.f.notification_type": "Benachrichtigungstyp", + + // "search.filters.filter.coar_notify_type.label": "Search COAR Notify type", + "search.filters.filter.coar_notify_type.label": "COAR-Notify-Typ suchen", + + // "search.filters.filter.notification_type.label": "Search notification type", + "search.filters.filter.notification_type.label": "Benachrichtigungstyp suchen", + + // "search.filters.filter.relateditem.placeholder": "Related items", + "search.filters.filter.relateditem.placeholder": "Verwandte Items", + + // "search.filters.filter.target.placeholder": "Target", + "search.filters.filter.target.placeholder": "Ziel", + + // "search.filters.filter.origin.label": "Search source", + "search.filters.filter.origin.label": "Quelle suchen", + + // "search.filters.filter.origin.placeholder": "Source", + "search.filters.filter.origin.placeholder": "Quelle", + + // "search.filters.filter.ldn_service.label": "Search LDN Service", + "search.filters.filter.ldn_service.label": "LDN-Dienst suchen", + + // "search.filters.filter.ldn_service.placeholder": "LDN Service", + "search.filters.filter.ldn_service.placeholder": "LDN-Dienst", + + // "search.filters.filter.queue_status.placeholder": "Queue status", + "search.filters.filter.queue_status.placeholder": "Status der Warteschlange", + + // "search.filters.filter.activity_stream_type.placeholder": "Activity stream type", + "search.filters.filter.activity_stream_type.placeholder": "Activity-Stream-Typ", + + // "search.filters.filter.coar_notify_type.placeholder": "COAR Notify type", + "search.filters.filter.coar_notify_type.placeholder": "COAR-Notify-Typ", + + // "search.filters.filter.notification_type.placeholder": "Notification", + "search.filters.filter.notification_type.placeholder": "Benachrichtigung", + + // "search.filters.filter.notifyRelation.head": "Notify Relation", + "search.filters.filter.notifyRelation.head": "Notify-Relation", + + // "search.filters.filter.notifyRelation.label": "Search Notify Relation", + "search.filters.filter.notifyRelation.label": "Notify-Relation suchen", + + // "search.filters.filter.notifyRelation.placeholder": "Notify Relation", + "search.filters.filter.notifyRelation.placeholder": "Notify-Relation", + + // "search.filters.filter.notifyReview.head": "Notify Review", + "search.filters.filter.notifyReview.head": "Notify-Review", + + // "search.filters.filter.notifyReview.label": "Search Notify Review", + "search.filters.filter.notifyReview.label": "Notify-Review suchen", + + // "search.filters.filter.notifyReview.placeholder": "Notify Review", + "search.filters.filter.notifyReview.placeholder": "Notify-Review", + + // "search.filters.coar_notify_type.coar-notify:ReviewAction": "Review action", + "search.filters.coar_notify_type.coar-notify:ReviewAction": "Aktion überprüfen", + + // "search.filters.coar_notify_type.coar-notify:ReviewAction,authority": "Review action", + "search.filters.coar_notify_type.coar-notify:ReviewAction,authority": "Aktion überprüfen", + + // "notify-detail-modal.coar-notify:ReviewAction": "Review action", + "notify-detail-modal.coar-notify:ReviewAction": "Aktion überprüfen", + + // "search.filters.coar_notify_type.coar-notify:EndorsementAction": "Endorsement action", + "search.filters.coar_notify_type.coar-notify:EndorsementAction": "Aktion zur Befürwortung", + + // "search.filters.coar_notify_type.coar-notify:EndorsementAction,authority": "Endorsement action", + "search.filters.coar_notify_type.coar-notify:EndorsementAction,authority": "Aktion zur Befürwortung", + + // "notify-detail-modal.coar-notify:EndorsementAction": "Endorsement action", + "notify-detail-modal.coar-notify:EndorsementAction": "Aktion zur Befürwortung", + + // "search.filters.coar_notify_type.coar-notify:IngestAction": "Ingest action", + "search.filters.coar_notify_type.coar-notify:IngestAction": "Aktion zur Übernahme", + + // "search.filters.coar_notify_type.coar-notify:IngestAction,authority": "Ingest action", + "search.filters.coar_notify_type.coar-notify:IngestAction,authority": "Aktion zur Übernahme", + + // "notify-detail-modal.coar-notify:IngestAction": "Ingest action", + "notify-detail-modal.coar-notify:IngestAction": "Aktion zur Übernahme", + + // "search.filters.coar_notify_type.coar-notify:RelationshipAction": "Relationship action", + "search.filters.coar_notify_type.coar-notify:RelationshipAction": "Aktion zur Verknüpfung", + + // "search.filters.coar_notify_type.coar-notify:RelationshipAction,authority": "Relationship action", + "search.filters.coar_notify_type.coar-notify:RelationshipAction,authority": "Aktion zur Verknüpfung", + + // "notify-detail-modal.coar-notify:RelationshipAction": "Relationship action", + "notify-detail-modal.coar-notify:RelationshipAction": "Aktion zur Verknüpfung", + + // "search.filters.queue_status.QUEUE_STATUS_QUEUED": "Queued", + "search.filters.queue_status.QUEUE_STATUS_QUEUED": "Wartend", + + // "notify-detail-modal.QUEUE_STATUS_QUEUED": "Queued", + "notify-detail-modal.QUEUE_STATUS_QUEUED": "Wartend", + + // "search.filters.queue_status.QUEUE_STATUS_QUEUED_FOR_RETRY": "Queued for retry", + "search.filters.queue_status.QUEUE_STATUS_QUEUED_FOR_RETRY": "Wartend für erneuten Versuch", + + // "notify-detail-modal.QUEUE_STATUS_QUEUED_FOR_RETRY": "Queued for retry", + "notify-detail-modal.QUEUE_STATUS_QUEUED_FOR_RETRY": "Wartend für erneuten Versuch", + + // "search.filters.queue_status.QUEUE_STATUS_PROCESSING": "Processing", + "search.filters.queue_status.QUEUE_STATUS_PROCESSING": "In der Verarbeitung", + + // "notify-detail-modal.QUEUE_STATUS_PROCESSING": "Processing", + "notify-detail-modal.QUEUE_STATUS_PROCESSING": "In der Verarbeitung", + + // "search.filters.queue_status.QUEUE_STATUS_PROCESSED": "Processed", + "search.filters.queue_status.QUEUE_STATUS_PROCESSED": "Verarbeitet", + + // "notify-detail-modal.QUEUE_STATUS_PROCESSED": "Processed", + "notify-detail-modal.QUEUE_STATUS_PROCESSED": "Verarbeitet", + + // "search.filters.queue_status.QUEUE_STATUS_FAILED": "Failed", + "search.filters.queue_status.QUEUE_STATUS_FAILED": "Fehlgeschlagen", + + // "notify-detail-modal.QUEUE_STATUS_FAILED": "Failed", + "notify-detail-modal.QUEUE_STATUS_FAILED": "Fehlgeschlagen", + + // "search.filters.queue_status.QUEUE_STATUS_UNTRUSTED": "Untrusted", + "search.filters.queue_status.QUEUE_STATUS_UNTRUSTED": "Nicht vertrauenswürdig", + + // "search.filters.queue_status.QUEUE_STATUS_UNTRUSTED_IP": "Untrusted Ip", + "search.filters.queue_status.QUEUE_STATUS_UNTRUSTED_IP": "Nicht vertrauenswürdige Ip", + + // "notify-detail-modal.QUEUE_STATUS_UNTRUSTED": "Untrusted", + "notify-detail-modal.QUEUE_STATUS_UNTRUSTED": "Nicht vertrauenswürdig", + + // "notify-detail-modal.QUEUE_STATUS_UNTRUSTED_IP": "Untrusted Ip", + "notify-detail-modal.QUEUE_STATUS_UNTRUSTED_IP": "Nicht vertrauenswürdige Ip", + + // "search.filters.queue_status.QUEUE_STATUS_UNMAPPED_ACTION": "Unmapped Action", + "search.filters.queue_status.QUEUE_STATUS_UNMAPPED_ACTION": "Nicht abgebildete Aktion", + + // "notify-detail-modal.QUEUE_STATUS_UNMAPPED_ACTION": "Unmapped Action", + "notify-detail-modal.QUEUE_STATUS_UNMAPPED_ACTION": "Nicht abgebildete Aktion", + + // "sorting.queue_last_start_time.DESC": "Last started queue Descending", + "sorting.queue_last_start_time.DESC": "Zuletzt gestartete Warteschlange absteigend", + + // "sorting.queue_last_start_time.ASC": "Last started queue Ascending", + "sorting.queue_last_start_time.ASC": "Zuletzt gestartete Warteschlange aufsteigend", + + // "sorting.queue_attempts.DESC": "Queue attempted Descending", + "sorting.queue_attempts.DESC": "Warteschlangenversuche absteigend", + + // "sorting.queue_attempts.ASC": "Queue attempted Ascending", + "sorting.queue_attempts.ASC": "Warteschlangenversuche aufsteigend", + + // "NOTIFY.incoming.involvedItems.search.results.head": "Items involved in incoming LDN", + "NOTIFY.incoming.involvedItems.search.results.head": "Von eingehender LDN betroffene Items", + + // "NOTIFY.outgoing.involvedItems.search.results.head": "Items involved in outgoing LDN", + "NOTIFY.outgoing.involvedItems.search.results.head": "Von ausgehender LDN betroffene Items", + + // "type.notify-detail-modal": "Type", + "type.notify-detail-modal": "Typ", + + // "id.notify-detail-modal": "Id", + "id.notify-detail-modal": "Id", + + // "coarNotifyType.notify-detail-modal": "COAR Notify type", + "coarNotifyType.notify-detail-modal": "COAR-Notify-Typ", + + // "activityStreamType.notify-detail-modal": "Activity stream type", + "activityStreamType.notify-detail-modal": "Activity-Stream-Typ", + + // "inReplyTo.notify-detail-modal": "In reply to", + "inReplyTo.notify-detail-modal": "In Antwort auf", + + // "object.notify-detail-modal": "Repository Item", + "object.notify-detail-modal": "Repositorium-Item", + + // "context.notify-detail-modal": "Repository Item", + "context.notify-detail-modal": "Repositorium-Item", + + // "queueAttempts.notify-detail-modal": "Queue attempts", + "queueAttempts.notify-detail-modal": "Warteschlangen-Versuche", + + // "queueLastStartTime.notify-detail-modal": "Queue last started", + "queueLastStartTime.notify-detail-modal": "Zuletzt gestartete Warteschlange", + + // "origin.notify-detail-modal": "LDN Service", + "origin.notify-detail-modal": "LDN-Dienst", + + // "target.notify-detail-modal": "LDN Service", + "target.notify-detail-modal": "LDN-Dienst", + + // "queueStatusLabel.notify-detail-modal": "Queue status", + "queueStatusLabel.notify-detail-modal": "Status der Warteschlange", + + // "queueTimeout.notify-detail-modal": "Queue timeout", + "queueTimeout.notify-detail-modal": "Zeitüberschreitung der Warteschlange", + + // "notify-message-modal.title": "Message Detail", + "notify-message-modal.title": "Nachricht Detail", + + // "notify-message-modal.show-message": "Show message", + "notify-message-modal.show-message": "Nachricht anzeigen", + + // "notify-message-result.timestamp": "Timestamp", + "notify-message-result.timestamp": "Zeitstempel", + + // "notify-message-result.repositoryItem": "Repository Item", + "notify-message-result.repositoryItem": "Repositorium-Item", + + // "notify-message-result.ldnService": "LDN Service", + "notify-message-result.ldnService": "LDN-Dienst", + + // "notify-message-result.type": "Type", + "notify-message-result.type": "Typ", + + // "notify-message-result.status": "Status", + "notify-message-result.status": "Status", + + // "notify-message-result.action": "Action", + "notify-message-result.action": "Aktion", + + // "notify-message-result.detail": "Detail", + "notify-message-result.detail": "Detail", + + // "notify-message-result.reprocess": "Reprocess", + "notify-message-result.reprocess": "Wiederaufbereitung", + + // "notify-queue-status.processed": "Processed", + "notify-queue-status.processed": "Verarbeitet", + + // "notify-queue-status.failed": "Failed", + "notify-queue-status.failed": "Fehlgeschlagen", + + // "notify-queue-status.queue_retry": "Queued for retry", + "notify-queue-status.queue_retry": "Wartend für erneuten Versuch", + + // "notify-queue-status.unmapped_action": "Unmapped action", + "notify-queue-status.unmapped_action": "Nicht abgebildete Aktion", + + // "notify-queue-status.processing": "Processing", + "notify-queue-status.processing": "In der Verarbeitung", + + // "notify-queue-status.queued": "Queued", + "notify-queue-status.queued": "Wartend", + + // "notify-queue-status.untrusted": "Untrusted", + "notify-queue-status.untrusted": "Nicht vertrauenswürdig", + + // "ldnService.notify-detail-modal": "LDN Service", + "ldnService.notify-detail-modal": "LDN-Dienst", + + // "relatedItem.notify-detail-modal": "Related Item", + "relatedItem.notify-detail-modal": "Verwandtes Item", + + // "search.filters.filter.notifyEndorsement.head": "Notify Endorsement", + "search.filters.filter.notifyEndorsement.head": "Notify-Endorsement", + + // "search.filters.filter.notifyEndorsement.placeholder": "Notify Endorsement", + "search.filters.filter.notifyEndorsement.placeholder": "Notify-Endorsement", + + // "search.filters.filter.notifyEndorsement.label": "Search Notify Endorsement", + "search.filters.filter.notifyEndorsement.label": "Notify-Endorsement suchen", + + // "item.page.cc.license.title": "Creative Commons license", + "item.page.cc.license.title": "Creative-Commons-Lizenz", + + // "item.page.cc.license.disclaimer": "Except where otherwised noted, this item's license is described as", + "item.page.cc.license.disclaimer": "Wenn nicht anders vermerkt, wird die Lizenz dieses Items wie folgt beschrieben", + + // "browse.search-form.placeholder": "Search the repository", + "browse.search-form.placeholder": "Suche im Repositorium", // "form.date-picker.placeholder.year": "Year", "form.date-picker.placeholder.year": "Jahr", @@ -6002,4 +10276,5 @@ // "form.date-picker.placeholder.day": "Day", "form.date-picker.placeholder.day": "Tag", + } diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 13059998fc..97ffc854c3 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -1,5 +1,4 @@ { - "401.help": "You're not authorized to access this page. You can use the button below to get back to the home page.", "401.link.home-page": "Take me to the home page", @@ -640,7 +639,6 @@ "admin.reports.items.title": "Title", - "admin.reports.commons.filters": "Filters", "admin.reports.commons.additional-data": "Additional data to return", @@ -661,7 +659,6 @@ "admin.reports.commons.filters.matches_all": "Matches all specified filters", - "admin.reports.commons.filters.property": "Item Property Filters", "admin.reports.commons.filters.property.is_item": "Is Item - always true", @@ -2884,6 +2881,14 @@ "item.preview.oaire.citation.volume": "Volume", + "item.preview.dc.relation.hasversion": "Has version", + + "item.preview.dc.relation.ispartofseries": "Is part of series", + + "item.preview.dc.rights": "Rights", + + "item.preview.dc.identifier.other": "Other Identifier", + "item.preview.dc.relation.issn": "ISSN", "item.preview.dc.identifier.isbn": "ISBN", @@ -4474,6 +4479,10 @@ "search.filters.filter.creativeDatePublished.label": "Search date published", + "search.filters.filter.creativeDatePublished.min.label": "Start", + + "search.filters.filter.creativeDatePublished.max.label": "End", + "search.filters.filter.creativeWorkEditor.head": "Editor", "search.filters.filter.creativeWorkEditor.placeholder": "Editor", @@ -5062,6 +5071,8 @@ "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Local Journal Issues ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfIssue": "Local Journal Volumes ({{ 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 }})", @@ -5124,6 +5135,8 @@ "submission.sections.describe.relationship-lookup.title.JournalIssue": "Journal Issues", + "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfIssue": "Journal Volumes", + "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Journal Volumes", "submission.sections.describe.relationship-lookup.title.JournalVolume": "Journal Volumes", @@ -5166,6 +5179,8 @@ "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Selected Journals", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfIssue": "Selected Journal Volume", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Selected Journal Volume", "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Selected Projects", @@ -5598,6 +5613,8 @@ "subscriptions.tooltip": "Subscribe", + "subscriptions.unsubscribe": "Unsubscribe", + "subscriptions.modal.title": "Subscriptions", "subscriptions.modal.type-frequency": "Type and frequency", @@ -6368,7 +6385,7 @@ "quality-assurance.events.description-with-topic-and-target": "Below the list of all the suggestions for the selected topic {{topic}}, related to {{source}} and ", - "quality-assurance.event.table.event.message.serviceUrl": "Service URL:", + "quality-assurance.event.table.event.message.serviceUrl": "Actor:", "quality-assurance.event.table.event.message.link": "Link:", @@ -6432,6 +6449,8 @@ "request-status-alert-box.rejected": "The requested {{ offerType }} for {{ serviceName }} has been rejected.", + "request-status-alert-box.tentative_rejected": "The requested {{ offerType }} for {{ serviceName }} has been tentatively rejected. Revisions are required.", + "request-status-alert-box.requested": "The requested {{ offerType }} for {{ serviceName }} is pending.", "ldn-service-button-mark-inbound-deletion": "Mark supported pattern for deletion", diff --git a/src/assets/i18n/fr.json5 b/src/assets/i18n/fr.json5 index ea45f5b2fe..3322daa89a 100644 --- a/src/assets/i18n/fr.json5 +++ b/src/assets/i18n/fr.json5 @@ -1471,11 +1471,11 @@ // "browse.startsWith.type_text": "Type the first few letters and click on the Browse button", "browse.startsWith.type_text": "Ou saisir les premières lettres puis cliquer sur le bouton « Parcourir »", - // "browse.title": "Browsing {{ collection }} by {{ field }} {{ value }}", - "browse.title": "Parcourir la collection {{ collection }} par {{ field }} {{ value }}", + // "browse.title": "Browsing by {{ field }}{{ startsWith }} {{ value }}", + "browse.title": "Parcourir par {{ field }}{{ startsWith }} {{ value }}", - //"browse.title.page": "Browsing {{ collection }} by {{ field }} {{ value }}", - "browse.title.page": "Parcourir la collection {{ collection }} par {{ field }} {{ value }}", + //"browse.title.page": "Browsing by {{ field }} {{ value }}", + "browse.title.page": "Parcourir par {{ field }} {{ value }}", //"search.browse.item-back": "Back to Results", "search.browse.item-back": "Retour aux résultats", @@ -2682,6 +2682,66 @@ // "grant-request-copy.success": "Successfully granted item request", "grant-request-copy.success": "Demande de copie de document acceptée avec succès", + //"health.breadcrumbs": "Health", + "health.breadcrumbs": "Santé du système", + + // "health-page.heading": "Health", + "health-page.heading": "Santé", + + // "health-page.info-tab": "Info", + "health-page.info-tab": "Info", + + //"health-page.status-tab": "Status", + "health-page.status-tab": "Statut", + + //"health-page.error.msg": "The health check service is temporarily unavailable", + "health-page.error.msg": "Le service de vérification de la santé du système n'est pas disponible", + + //"health-page.property.status": "Status code", + "health-page.property.status": "Code de statut", + + //"health-page.section.db.title": "Database", + "health-page.section.db.title": "Base de données", + + // "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": "Application Backend", + + //"health-page.section-info.java.title": "Java", + "health-page.section-info.java.title": "Java", + + //"health-page.status": "Status", + "health-page.status": "Statut", + + //"health-page.status.ok.info": "Operational", + "health-page.status.ok.info": "Opérationnel", + + //"health-page.status.error.info": "Problems detected", + "health-page.status.error.info": "Problèmes détectés", + + //"health-page.status.warning.info": "Possible issues detected", + "health-page.status.warning.info": "Problèmes éventuels détectés", + + // "health-page.title": "Health", + "health-page.title": "Santé du système", + + // "health-page.section.no-issues": "No issues detected", + "health-page.section.no-issues": "Aucun problème détecté", + // "home.description": "", "home.description": "", @@ -3585,6 +3645,9 @@ // "item.preview.dc.title": "Title:", "item.preview.dc.title": "Title :", + //"item.preview.dc.type": "Type:", + "item.preview.dc.type": "Type de document :", + // "item.preview.person.familyName": "Surname:", "item.preview.person.familyName": "Nom de famille :", @@ -3612,6 +3675,30 @@ // "item.preview.oaire.fundingStream": "Funding Stream:", "item.preview.oaire.fundingStream": "Volet de financement :", + //"item.preview.oairecerif.identifier.url": "URL", + "item.preview.oairecerif.identifier.url": "URL", + + //"item.preview.organization.address.addressCountry": "Country", + "item.preview.organization.address.addressCountry": "Pays", + + //"item.preview.organization.foundingDate": "Founding Date", + "item.preview.organization.foundingDate": "Date de création", + + //"item.preview.organization.identifier.crossrefid": "Crossref ID", + "item.preview.organization.identifier.crossrefid": "Identifiant Crossref", + + //"item.preview.organization.identifier.isni": "ISNI", + "item.preview.organization.identifier.isni": "ISNI", + + //"item.preview.organization.identifier.ror": "ROR ID", + "item.preview.organization.identifier.ror": "Identifiant ROR", + + //"item.preview.organization.legalName": "Legal Name", + "item.preview.organization.legalName": "Nom officiel", + + //"item.preview.dspace.entity.type": "Entity Type:", + "item.preview.dspace.entity.type": "Type d'entité :", + // "item.select.confirm": "Confirm selected", "item.select.confirm": "Confirmer la sélection", @@ -3972,6 +4059,9 @@ // "menu.section.access_control_authorizations": "Authorizations", "menu.section.access_control_authorizations": "Autorisations", + // "menu.section.access_control_bulk": "Bulk Access Management", + "menu.section.access_control_bulk": "Gestion des accès en lot", + // "menu.section.access_control_groups": "Groups", "menu.section.access_control_groups": "Groupes", @@ -4590,9 +4680,39 @@ // "process.overview.table.name": "Name", "process.overview.table.name": "Nom", + //"process.overview.table.running.info": "Start time (UTC)", + "process.overview.table.running.info": "Heure de fin (UTC)", + + // "process.overview.table.running.title": "Running processes", + "process.overview.table.running.title": "Processus en cours", + + //"process.overview.table.scheduled.info": "Creation time (UTC)", + "process.overview.table.scheduled.info": "Heure de création (UTC)", + + // "process.overview.table.scheduled.title": "Scheduled processes", + "process.overview.table.scheduled.title": "Processus planifiés", + // "process.overview.table.start": "Start time (UTC)", "process.overview.table.start": "Heure de début (TUC)", + // "process.overview.table.completed.info": "Finish time (UTC)", + "process.overview.table.completed.info": "Heure de fin (UTC)", + + //"process.overview.table.completed.title": "Succeeded processes", + "process.overview.table.completed.title": "Processus terminés", + + // "process.overview.table.empty": "No matching processes found.", + "process.overview.table.empty": "Aucun processus trouvé.", + + // "process.overview.table.failed.info": "Finish time (UTC)", + "process.overview.table.failed.info": "Heure de fin (UTC)", + + // "process.overview.table.failed.title": "Failed processes", + "process.overview.table.failed.title": "Processus en échec", + + // "process.overview.table.finish": "Finish time (UTC)", + "process.overview.table.finish": "Heure de fin (UTC)", + // "process.overview.table.status": "Status", "process.overview.table.status": "Statut", @@ -5174,6 +5294,33 @@ // "search.filters.applied.f.withdrawn": "Withdrawn", "search.filters.applied.f.withdrawn": "Retiré", + //"search.filters.applied.operator.equals": "", + "search.filters.applied.operator.equals": "est égal à", + + //"search.filters.applied.operator.notequals": " not equals", + "search.filters.applied.operator.notequals": " n'est pas égal à", + + //"search.filters.applied.operator.authority": "", + "search.filters.applied.operator.authority": "", + + //"search.filters.applied.operator.notauthority": " not authority", + //"search.filters.applied.operator.notauthority": "", + + //"search.filters.applied.operator.contains": " contains", + "search.filters.applied.operator.contains": " contient", + + //"search.filters.applied.operator.notcontains": " not contains", + "search.filters.applied.operator.notcontains": " ne contient pas", + + //"search.filters.applied.operator.query": "", + "search.filters.applied.operator.query": "", + + //"search.filters.filter.title.head": "Title", + "search.filters.filter.title.head": "Titre", + + //"search.filters.filter.title.placeholder": "Title", + "search.filters.filter.title.placeholder": "Titre", + // "search.filters.filter.author.head": "Author", "search.filters.filter.author.head": "Auteur", @@ -5417,6 +5564,27 @@ // "search.filters.search.submit": "Submit", "search.filters.search.submit": "Soumettre", + //"search.filters.operator.equals.text": "Equals", + "search.filters.operator.equals.text": "Est égal à", + + //"search.filters.operator.notequals.text": "Not Equals", + "search.filters.operator.notequals.text": "N'est pas égal à", + + //"search.filters.operator.authority.text": "Authority", + "search.filters.operator.authority.text": "Est une autorité", + + //"search.filters.operator.notauthority.text": "Not Authority", + "search.filters.operator.notauthority.text": "N'est pas une autorité", + + //"search.filters.operator.contains.text": "Contains", + "search.filters.operator.contains.text": "Contient", + + //"search.filters.operator.notcontains.text": "Not Contains", + "search.filters.operator.notcontains.text": "Ne contient pas", + + //"search.filters.operator.query.text": "Query", + "search.filters.operator.query.text": "Requête", + // "search.form.search": "Search", "search.form.search": "Recherche", @@ -5465,6 +5633,22 @@ // "search.sidebar.settings.sort-by": "Sort By", "search.sidebar.settings.sort-by": "Trier par", + //"search.sidebar.advanced-search.title": "Advanced Search", + "search.sidebar.advanced-search.title": "Recherche avancée", + + //"search.sidebar.advanced-search.filter-by": "Filter by", + "search.sidebar.advanced-search.filter-by": "Filtrer par", + + //"search.sidebar.advanced-search.filters": "Filters", + "search.sidebar.advanced-search.filters": "Filtres", + + //"search.sidebar.advanced-search.operators": "Operators", + "search.sidebar.advanced-search.operators": "Opérateurs", + + //"search.sidebar.advanced-search.add": "Add", + "search.sidebar.advanced-search.add": "Ajouter", + + // "search.sidebar.settings.title": "Settings", "search.sidebar.settings.title": "Paramètres", @@ -5648,6 +5832,9 @@ // "submission.import-external.source.crossref": "Crossref", "submission.import-external.source.crossref": "Crossref (DOI)", + //"submission.import-external.source.doi": "DOI", + "submission.import-external.source.doi": "DOI", + //"submission.import-external.source.datacite": "DataCite", "submission.import-external.source.datacite": "DataCite (DOI)", @@ -6173,6 +6360,9 @@ // "submission.sections.submit.progressbar.describe.steptwo": "Describe", "submission.sections.submit.progressbar.describe.steptwo": "Décrire", + //"submission.sections.submit.progressbar.duplicates": "Potential duplicates", + "submission.sections.submit.progressbar.duplicates": "Doublons potentiels", + // "submission.sections.submit.progressbar.detect-duplicate": "Potential duplicates", "submission.sections.submit.progressbar.detect-duplicate": "Doublon(s) potentiel(s)", @@ -6350,6 +6540,17 @@ // "submission.sections.accesses.form.until-placeholder": "Until", "submission.sections.accesses.form.until-placeholder": "Jusqu'au", + //"submission.sections.duplicates.none": "No duplicates were detected.", + "submission.sections.duplicates.none": "Aucun doublon n'a été détecté.", + + //"submission.sections.duplicates.detected": "Potential duplicates were detected. Please review the list below.", + "submission.sections.duplicates.detected": "Des doublons potentiels ont été détectés. Vérifier la liste ci-dessous.", + + //"submission.sections.duplicates.in-workspace": "This item is in workspace", + "submission.sections.duplicates.in-workspace": "Cet item est en cours de dépôt", + + //"submission.sections.duplicates.in-workflow": "This item is in workflow", + "submission.sections.duplicates.in-workflow": "Cet item est en traitement", // "submission.sections.license.granted-label": "I confirm the license above", "submission.sections.license.granted-label": "J'approuve la licence ci-dessus", @@ -6532,6 +6733,9 @@ //"submitter.empty": "N/A", "submitter.empty": "S/O", + //"subscriptions.title": "Subscriptions", + "subscriptions.title": "Abonnements", + //"subscriptions.modal.title": "Subscriptions", "subscriptions.modal.title": "Abonnements", @@ -8440,6 +8644,15 @@ //"search.filters.filter.notifyEndorsement.label": "Search Notify Endorsement", "search.filters.filter.notifyEndorsement.label": "Chercher l'approbation Notify", + // "form.date-picker.placeholder.year": "Year", + "form.date-picker.placeholder.year": "Année", + + // "form.date-picker.placeholder.month": "Month", + "form.date-picker.placeholder.month": "Mois", + + // "form.date-picker.placeholder.day": "Day", + "form.date-picker.placeholder.day": "Jour", + //"item.page.cc.license.title": "Creative Commons license", "item.page.cc.license.title": "Licence Creative Commons", diff --git a/src/config/ssr-config.interface.ts b/src/config/ssr-config.interface.ts index 2ce626b47b..16bb3f54d6 100644 --- a/src/config/ssr-config.interface.ts +++ b/src/config/ssr-config.interface.ts @@ -1,5 +1,10 @@ import { Config } from './config.interface'; +export interface SsrExcludePatterns { + pattern: string | RegExp; + flag?: string; +} + export interface SSRConfig extends Config { /** * A boolean flag indicating whether the SSR configuration is enabled @@ -39,9 +44,9 @@ export interface SSRConfig extends Config { replaceRestUrl: boolean; /** - * Paths to enable SSR for. Defaults to the home page and paths in the sitemap. + * Patterns to be used as regexes to match url's path and check if SSR is disabled for it. */ - paths: Array; + excludePathPatterns: SsrExcludePatterns[]; /** * Whether to enable rendering of search component on SSR diff --git a/src/environments/environment.production.ts b/src/environments/environment.production.ts index 9bd663922c..21cc8a25ea 100644 --- a/src/environments/environment.production.ts +++ b/src/environments/environment.production.ts @@ -10,7 +10,25 @@ export const environment: Partial = { inlineCriticalCss: false, transferState: true, replaceRestUrl: true, - paths: [ '/home', '/items/', '/entities/', '/collections/', '/communities/', '/bitstream/', '/bitstreams/', '/handle/', '/reload/' ], + excludePathPatterns: [ + { + pattern: '^/communities/[a-f0-9-]{36}/browse(/.*)?$', + flag: 'i', + }, + { + pattern: '^/collections/[a-f0-9-]{36}/browse(/.*)?$', + flag: 'i', + }, + { pattern: '^/browse/' }, + { pattern: '^/search' }, + { pattern: '^/community-list$' }, + { pattern: '^/statistics/?' }, + { pattern: '^/admin/' }, + { pattern: '^/processes/?' }, + { pattern: '^/notifications/' }, + { pattern: '^/access-control/' }, + { pattern: '^/health$' }, + ], enableSearchComponent: false, enableBrowseComponent: false, }, diff --git a/src/environments/environment.test.ts b/src/environments/environment.test.ts index b452594d23..383b203d38 100644 --- a/src/environments/environment.test.ts +++ b/src/environments/environment.test.ts @@ -14,7 +14,25 @@ export const environment: BuildConfig = { inlineCriticalCss: false, transferState: true, replaceRestUrl: false, - paths: [ '/home', '/items/', '/entities/', '/collections/', '/communities/', '/bitstream/', '/bitstreams/', '/handle/', '/reload/' ], + excludePathPatterns: [ + { + pattern: '^/communities/[a-f0-9-]{36}/browse(/.*)?$', + flag: 'i', + }, + { + pattern: '^/collections/[a-f0-9-]{36}/browse(/.*)?$', + flag: 'i', + }, + { pattern: '^/browse/' }, + { pattern: '^/search' }, + { pattern: '^/community-list$' }, + { pattern: '^/statistics/?' }, + { pattern: '^/admin/' }, + { pattern: '^/processes/?' }, + { pattern: '^/notifications/' }, + { pattern: '^/access-control/' }, + { pattern: '^/health$' }, + ], enableSearchComponent: false, enableBrowseComponent: false, }, diff --git a/src/environments/environment.ts b/src/environments/environment.ts index 39ab31de03..2b6b6d9fd8 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -15,7 +15,25 @@ export const environment: Partial = { inlineCriticalCss: false, transferState: true, replaceRestUrl: false, - paths: [ '/home', '/items/', '/entities/', '/collections/', '/communities/', '/bitstream/', '/bitstreams/', '/handle/', '/reload/' ], + excludePathPatterns: [ + { + pattern: '^/communities/[a-f0-9-]{36}/browse(/.*)?$', + flag: 'i', + }, + { + pattern: '^/collections/[a-f0-9-]{36}/browse(/.*)?$', + flag: 'i', + }, + { pattern: '^/browse/' }, + { pattern: '^/search' }, + { pattern: '^/community-list$' }, + { pattern: '^/statistics/?' }, + { pattern: '^/admin/' }, + { pattern: '^/processes/?' }, + { pattern: '^/notifications/' }, + { pattern: '^/access-control/' }, + { pattern: '^/health$' }, + ], enableSearchComponent: false, enableBrowseComponent: false, }, diff --git a/src/ngx-translate-loaders/translate-server.loader.ts b/src/ngx-translate-loaders/translate-server.loader.ts index d86251e008..8950b91a6b 100644 --- a/src/ngx-translate-loaders/translate-server.loader.ts +++ b/src/ngx-translate-loaders/translate-server.loader.ts @@ -1,4 +1,4 @@ -import { TransferState } from '@angular/platform-browser'; +import { TransferState } from '@angular/core'; import { TranslateLoader } from '@ngx-translate/core'; import { readFileSync } from 'fs'; import { diff --git a/src/styles/_global-styles.scss b/src/styles/_global-styles.scss index 058a94138d..05d631e48a 100644 --- a/src/styles/_global-styles.scss +++ b/src/styles/_global-styles.scss @@ -230,15 +230,31 @@ ds-dynamic-form-control-container.d-none { } .thumb-font-2 { - .thumbnail-placeholder { - font-size: 0.9rem; - padding: 0.125rem; + .thumbnail-placeholder { + @media screen and (max-width: map-get($grid-breakpoints, sm)) { + font-size: 0.4rem; + padding: 0.1rem; } + @media screen and (min-width: map-get($grid-breakpoints, sm)) and (max-width: map-get($grid-breakpoints, lg)) { + font-size: 0.7rem; + padding: 0.1rem; + } + font-size: 1rem; + padding: 0.5rem; + } } .thumb-font-3 { .thumbnail-placeholder { - font-size: 1.25rem; + @media screen and (max-width: map-get($grid-breakpoints, sm)) { + font-size: 0.4rem; + padding: 0.1rem; + } + @media screen and (min-width: map-get($grid-breakpoints, sm)) and (max-width: map-get($grid-breakpoints, lg)) { + font-size: 0.7rem; + padding: 0.1rem; + } + font-size: 1rem; padding: 0.5rem; } } diff --git a/src/styles/_truncatable-part.component.scss b/src/styles/_truncatable-part.component.scss index d9158a6751..127dda0171 100644 --- a/src/styles/_truncatable-part.component.scss +++ b/src/styles/_truncatable-part.component.scss @@ -4,24 +4,11 @@ height: $lines * $height; } .content { - max-height: $lines * $height; - position: relative; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: $lines; + -webkit-box-orient: vertical; overflow: hidden; - line-height: $line-height; - overflow-wrap: break-word; - &:after { - content: ""; - position: absolute; - padding-right: 15px; - top: ($lines - 1) * $height; - right: 0; - width: 30%; - min-width: 75px; - max-width: 150px; - height: $height; - background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba($bg, 1) 70%); - pointer-events: none; - } } } diff --git a/src/themes/custom/app/admin/admin-search-page/admin-search-page.component.html b/src/themes/custom/app/admin/admin-search-page/admin-search-page.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/admin/admin-search-page/admin-search-page.component.scss b/src/themes/custom/app/admin/admin-search-page/admin-search-page.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/admin/admin-search-page/admin-search-page.component.ts b/src/themes/custom/app/admin/admin-search-page/admin-search-page.component.ts new file mode 100644 index 0000000000..b16a544827 --- /dev/null +++ b/src/themes/custom/app/admin/admin-search-page/admin-search-page.component.ts @@ -0,0 +1,16 @@ +import { Component } from '@angular/core'; + +import { AdminSearchPageComponent as BaseComponent } from '../../../../../app/admin/admin-search-page/admin-search-page.component'; +import { ThemedConfigurationSearchPageComponent } from '../../../../../app/search-page/themed-configuration-search-page.component'; + +@Component({ + selector: 'ds-themed-admin-search-page', + // styleUrls: ['./admin-search-page.component.scss'], + styleUrls: ['../../../../../app/admin/admin-search-page/admin-search-page.component.scss'], + // templateUrl: './admin-search-page.component.html', + templateUrl: '../../../../../app/admin/admin-search-page/admin-search-page.component.html', + imports: [ThemedConfigurationSearchPageComponent], + standalone: true, +}) +export class AdminSearchPageComponent extends BaseComponent { +} diff --git a/src/themes/custom/app/admin/admin-workflow-page/admin-workflow-page.component.html b/src/themes/custom/app/admin/admin-workflow-page/admin-workflow-page.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/admin/admin-workflow-page/admin-workflow-page.component.scss b/src/themes/custom/app/admin/admin-workflow-page/admin-workflow-page.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/admin/admin-workflow-page/admin-workflow-page.component.ts b/src/themes/custom/app/admin/admin-workflow-page/admin-workflow-page.component.ts new file mode 100644 index 0000000000..c5ee994c5b --- /dev/null +++ b/src/themes/custom/app/admin/admin-workflow-page/admin-workflow-page.component.ts @@ -0,0 +1,16 @@ +import { Component } from '@angular/core'; + +import { AdminWorkflowPageComponent as BaseComponent } from '../../../../../app/admin/admin-workflow-page/admin-workflow-page.component'; +import { ThemedConfigurationSearchPageComponent } from '../../../../../app/search-page/themed-configuration-search-page.component'; + +@Component({ + selector: 'ds-themed-admin-workflow-page', + // styleUrls: ['./admin-workflow-page.component.scss'], + styleUrls: ['../../../../../app/admin/admin-workflow-page/admin-workflow-page.component.scss'], + // templateUrl: './admin-workflow-page.component.html', + templateUrl: '../../../../../app/admin/admin-workflow-page/admin-workflow-page.component.html', + standalone: true, + imports: [ThemedConfigurationSearchPageComponent], +}) +export class AdminWorkflowPageComponent extends BaseComponent { +} diff --git a/src/themes/custom/app/collection-page/collection-page.component.ts b/src/themes/custom/app/collection-page/collection-page.component.ts index 4b2f9e3245..470a5cf62c 100644 --- a/src/themes/custom/app/collection-page/collection-page.component.ts +++ b/src/themes/custom/app/collection-page/collection-page.component.ts @@ -24,7 +24,6 @@ import { ErrorComponent } from '../../../../app/shared/error/error.component'; import { ThemedLoadingComponent } from '../../../../app/shared/loading/themed-loading.component'; import { ObjectCollectionComponent } from '../../../../app/shared/object-collection/object-collection.component'; import { VarDirective } from '../../../../app/shared/utils/var.directive'; -import { ViewTrackerComponent } from '../../../../app/statistics/angulartics/dspace/view-tracker.component'; @Component({ selector: 'ds-themed-collection-page', @@ -44,7 +43,6 @@ import { ViewTrackerComponent } from '../../../../app/statistics/angulartics/dsp NgIf, ThemedLoadingComponent, TranslateModule, - ViewTrackerComponent, VarDirective, AsyncPipe, ComcolPageHeaderComponent, diff --git a/src/themes/custom/app/community-page/community-page.component.ts b/src/themes/custom/app/community-page/community-page.component.ts index 5aa7e85527..d14507e905 100644 --- a/src/themes/custom/app/community-page/community-page.component.ts +++ b/src/themes/custom/app/community-page/community-page.component.ts @@ -25,7 +25,6 @@ import { DsoEditMenuComponent } from '../../../../app/shared/dso-page/dso-edit-m import { ErrorComponent } from '../../../../app/shared/error/error.component'; import { ThemedLoadingComponent } from '../../../../app/shared/loading/themed-loading.component'; import { VarDirective } from '../../../../app/shared/utils/var.directive'; -import { ViewTrackerComponent } from '../../../../app/statistics/angulartics/dspace/view-tracker.component'; @Component({ selector: 'ds-themed-community-page', @@ -50,7 +49,6 @@ import { ViewTrackerComponent } from '../../../../app/statistics/angulartics/dsp ComcolPageLogoComponent, ComcolPageHeaderComponent, AsyncPipe, - ViewTrackerComponent, VarDirective, RouterOutlet, RouterModule, diff --git a/src/themes/custom/app/home-page/home-page.component.ts b/src/themes/custom/app/home-page/home-page.component.ts index 2b45f69754..86c0d272d5 100644 --- a/src/themes/custom/app/home-page/home-page.component.ts +++ b/src/themes/custom/app/home-page/home-page.component.ts @@ -16,7 +16,6 @@ import { SuggestionsPopupComponent } from '../../../../app/notifications/suggest import { ThemedConfigurationSearchPageComponent } from '../../../../app/search-page/themed-configuration-search-page.component'; import { ThemedSearchFormComponent } from '../../../../app/shared/search-form/themed-search-form.component'; import { PageWithSidebarComponent } from '../../../../app/shared/sidebar/page-with-sidebar.component'; -import { ViewTrackerComponent } from '../../../../app/statistics/angulartics/dspace/view-tracker.component'; @Component({ selector: 'ds-themed-home-page', @@ -25,7 +24,7 @@ import { ViewTrackerComponent } from '../../../../app/statistics/angulartics/dsp // templateUrl: './home-page.component.html' templateUrl: '../../../../app/home-page/home-page.component.html', standalone: true, - imports: [ThemedHomeNewsComponent, NgTemplateOutlet, NgIf, ViewTrackerComponent, ThemedSearchFormComponent, ThemedTopLevelCommunityListComponent, RecentItemListComponent, AsyncPipe, TranslateModule, NgClass, SuggestionsPopupComponent, ThemedConfigurationSearchPageComponent, PageWithSidebarComponent, HomeCoarComponent], + imports: [ThemedHomeNewsComponent, NgTemplateOutlet, NgIf, ThemedSearchFormComponent, ThemedTopLevelCommunityListComponent, RecentItemListComponent, AsyncPipe, TranslateModule, NgClass, SuggestionsPopupComponent, ThemedConfigurationSearchPageComponent, PageWithSidebarComponent, HomeCoarComponent], }) export class HomePageComponent extends BaseComponent { diff --git a/src/themes/custom/app/item-page/full/full-item-page.component.ts b/src/themes/custom/app/item-page/full/full-item-page.component.ts index c1bad7ba89..c9b17cd200 100644 --- a/src/themes/custom/app/item-page/full/full-item-page.component.ts +++ b/src/themes/custom/app/item-page/full/full-item-page.component.ts @@ -23,7 +23,6 @@ import { DsoEditMenuComponent } from '../../../../../app/shared/dso-page/dso-edi import { ErrorComponent } from '../../../../../app/shared/error/error.component'; import { ThemedLoadingComponent } from '../../../../../app/shared/loading/themed-loading.component'; import { VarDirective } from '../../../../../app/shared/utils/var.directive'; -import { ViewTrackerComponent } from '../../../../../app/statistics/angulartics/dspace/view-tracker.component'; /** * This component renders a full item page. @@ -54,7 +53,6 @@ import { ViewTrackerComponent } from '../../../../../app/statistics/angulartics/ ThemedItemPageTitleFieldComponent, DsoEditMenuComponent, ItemVersionsNoticeComponent, - ViewTrackerComponent, ThemedItemAlertsComponent, VarDirective, ], diff --git a/src/themes/custom/app/item-page/simple/item-page.component.ts b/src/themes/custom/app/item-page/simple/item-page.component.ts index 7daa65287a..7ffd4b68d1 100644 --- a/src/themes/custom/app/item-page/simple/item-page.component.ts +++ b/src/themes/custom/app/item-page/simple/item-page.component.ts @@ -19,7 +19,6 @@ import { ErrorComponent } from '../../../../../app/shared/error/error.component' import { ThemedLoadingComponent } from '../../../../../app/shared/loading/themed-loading.component'; import { ListableObjectComponentLoaderComponent } from '../../../../../app/shared/object-collection/shared/listable-object/listable-object-component-loader.component'; import { VarDirective } from '../../../../../app/shared/utils/var.directive'; -import { ViewTrackerComponent } from '../../../../../app/statistics/angulartics/dspace/view-tracker.component'; /** * This component renders a simple item page. @@ -39,7 +38,6 @@ import { ViewTrackerComponent } from '../../../../../app/statistics/angulartics/ VarDirective, ThemedItemAlertsComponent, ItemVersionsNoticeComponent, - ViewTrackerComponent, ListableObjectComponentLoaderComponent, ItemVersionsComponent, ErrorComponent, diff --git a/src/themes/custom/lazy-theme.module.ts b/src/themes/custom/lazy-theme.module.ts index 0394c672f6..7367e291b5 100644 --- a/src/themes/custom/lazy-theme.module.ts +++ b/src/themes/custom/lazy-theme.module.ts @@ -14,7 +14,9 @@ import { ScrollToModule } from '@nicky-lenaers/ngx-scroll-to'; import { RootModule } from '../../app/root.module'; import { SearchResultsSkeletonComponent } from '../../app/shared/search/search-results/search-results-skeleton/search-results-skeleton.component'; import { MetadataImportPageComponent } from './app/admin/admin-import-metadata-page/metadata-import-page.component'; +import { AdminSearchPageComponent } from './app/admin/admin-search-page/admin-search-page.component'; import { AdminSidebarComponent } from './app/admin/admin-sidebar/admin-sidebar.component'; +import { AdminWorkflowPageComponent } from './app/admin/admin-workflow-page/admin-workflow-page.component'; import { EditBitstreamPageComponent } from './app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component'; import { BreadcrumbsComponent } from './app/breadcrumbs/breadcrumbs.component'; import { BrowseByDateComponent } from './app/browse-by/browse-by-date/browse-by-date.component'; @@ -104,7 +106,6 @@ import { WorkflowItemDeleteComponent } from './app/workflowitems-edit-page/workf import { WorkflowItemSendBackComponent } from './app/workflowitems-edit-page/workflow-item-send-back/workflow-item-send-back.component'; import { WorkspaceItemsDeletePageComponent } from './app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component'; - const DECLARATIONS = [ FileSectionComponent, HomePageComponent, @@ -197,6 +198,8 @@ const DECLARATIONS = [ SubmissionUploadFilesComponent, ComcolPageContentComponent, SearchResultsSkeletonComponent, + AdminSearchPageComponent, + AdminWorkflowPageComponent, ]; @NgModule({ diff --git a/src/themes/dspace/app/header-nav-wrapper/header-navbar-wrapper.component.scss b/src/themes/dspace/app/header-nav-wrapper/header-navbar-wrapper.component.scss index 444d3a9722..5293fdfb57 100644 --- a/src/themes/dspace/app/header-nav-wrapper/header-navbar-wrapper.component.scss +++ b/src/themes/dspace/app/header-nav-wrapper/header-navbar-wrapper.component.scss @@ -28,7 +28,6 @@ ::ng-deep { .ds-menu-item, .ds-menu-toggler-wrapper { - white-space: nowrap; text-decoration: none; } diff --git a/src/themes/dspace/app/header/header.component.html b/src/themes/dspace/app/header/header.component.html index e78d19053d..e66adf8c05 100644 --- a/src/themes/dspace/app/header/header.component.html +++ b/src/themes/dspace/app/header/header.component.html @@ -1,19 +1,19 @@
    -
    +
    - + -
    -
    +