From 4de5ab0f563a2090d28f03852b0322b6043b6305 Mon Sep 17 00:00:00 2001 From: Jens Vannerum Date: Mon, 27 Jun 2022 13:47:19 +0200 Subject: [PATCH 01/39] 92701: Disable user agreement feature --- ...-user-agreement-current-user.guard.spec.ts | 20 +++++++++ .../end-user-agreement-current-user.guard.ts | 7 ++- src/app/info/info-routing.module.ts | 44 ++++++++++++------- src/config/global-config.interface.ts | 2 + src/config/info-config.interface.ts | 6 +++ src/environments/environment.common.ts | 4 ++ src/environments/mock-environment.ts | 4 ++ 7 files changed, 70 insertions(+), 17 deletions(-) create mode 100644 src/config/info-config.interface.ts diff --git a/src/app/core/end-user-agreement/end-user-agreement-current-user.guard.spec.ts b/src/app/core/end-user-agreement/end-user-agreement-current-user.guard.spec.ts index 75b8f6089e..b280ef798c 100644 --- a/src/app/core/end-user-agreement/end-user-agreement-current-user.guard.spec.ts +++ b/src/app/core/end-user-agreement/end-user-agreement-current-user.guard.spec.ts @@ -2,6 +2,7 @@ import { EndUserAgreementCurrentUserGuard } from './end-user-agreement-current-u import { EndUserAgreementService } from './end-user-agreement.service'; import { Router, UrlTree } from '@angular/router'; import { of as observableOf } from 'rxjs'; +import { environment } from '../../../environments/mock-environment'; describe('EndUserAgreementGuard', () => { let guard: EndUserAgreementCurrentUserGuard; @@ -44,5 +45,24 @@ describe('EndUserAgreementGuard', () => { }); }); }); + + describe('when the end user agreement is disabled', () => { + it('should return true', (done) => { + environment.info.enableEndUserAgreement = false; + guard.canActivate(undefined, Object.assign({ url: 'redirect' })).subscribe((result) => { + console.log(result); + expect(result).toEqual(true); + done(); + }); + }); + + it('should not resolve to the end user agreement page', (done) => { + environment.info.enableEndUserAgreement = false; + guard.canActivate(undefined, Object.assign({ url: 'redirect' })).subscribe((result) => { + expect(router.navigateByUrl).not.toHaveBeenCalled(); + done(); + }); + }); + }); }); }); diff --git a/src/app/core/end-user-agreement/end-user-agreement-current-user.guard.ts b/src/app/core/end-user-agreement/end-user-agreement-current-user.guard.ts index 2c04186f34..a79e12cc32 100644 --- a/src/app/core/end-user-agreement/end-user-agreement-current-user.guard.ts +++ b/src/app/core/end-user-agreement/end-user-agreement-current-user.guard.ts @@ -1,8 +1,9 @@ import { Injectable } from '@angular/core'; -import { Observable } from 'rxjs'; +import { Observable, of as observableOf } from 'rxjs'; import { AbstractEndUserAgreementGuard } from './abstract-end-user-agreement.guard'; import { EndUserAgreementService } from './end-user-agreement.service'; import { Router } from '@angular/router'; +import { environment } from '../../../environments/environment'; /** * A guard redirecting logged in users to the end agreement page when they haven't accepted the latest user agreement @@ -19,6 +20,10 @@ export class EndUserAgreementCurrentUserGuard extends AbstractEndUserAgreementGu * True when the currently logged in user has accepted the agreements or when the user is not currently authenticated */ hasAccepted(): Observable { + if (!environment.info.enableEndUserAgreement) { + return observableOf(true); + } + return this.endUserAgreementService.hasCurrentUserAcceptedAgreement(true); } diff --git a/src/app/info/info-routing.module.ts b/src/app/info/info-routing.module.ts index f76fb47ff0..e15ae521b2 100644 --- a/src/app/info/info-routing.module.ts +++ b/src/app/info/info-routing.module.ts @@ -4,25 +4,37 @@ import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.reso import { PRIVACY_PATH, END_USER_AGREEMENT_PATH } from './info-routing-paths'; import { ThemedEndUserAgreementComponent } from './end-user-agreement/themed-end-user-agreement.component'; import { ThemedPrivacyComponent } from './privacy/themed-privacy.component'; +import { environment } from '../../environments/environment'; + + +const imports = []; + + if (environment.info.enableEndUserAgreement) { + imports.push( + RouterModule.forChild([ + { + path: END_USER_AGREEMENT_PATH, + component: ThemedEndUserAgreementComponent, + resolve: { breadcrumb: I18nBreadcrumbResolver }, + data: { title: 'info.end-user-agreement.title', breadcrumbKey: 'info.end-user-agreement' } + } + ])); + } + if (environment.info.enablePrivacyStatement) { + imports.push( + RouterModule.forChild([ + { + path: PRIVACY_PATH, + component: ThemedPrivacyComponent, + resolve: { breadcrumb: I18nBreadcrumbResolver }, + data: { title: 'info.privacy.title', breadcrumbKey: 'info.privacy' } + } + ])); + } @NgModule({ imports: [ - RouterModule.forChild([ - { - path: END_USER_AGREEMENT_PATH, - component: ThemedEndUserAgreementComponent, - resolve: { breadcrumb: I18nBreadcrumbResolver }, - data: { title: 'info.end-user-agreement.title', breadcrumbKey: 'info.end-user-agreement' } - } - ]), - RouterModule.forChild([ - { - path: PRIVACY_PATH, - component: ThemedPrivacyComponent, - resolve: { breadcrumb: I18nBreadcrumbResolver }, - data: { title: 'info.privacy.title', breadcrumbKey: 'info.privacy' } - } - ]) + ...imports ] }) /** diff --git a/src/config/global-config.interface.ts b/src/config/global-config.interface.ts index d46822eb61..8218682d8a 100644 --- a/src/config/global-config.interface.ts +++ b/src/config/global-config.interface.ts @@ -13,6 +13,7 @@ import { ThemeConfig } from './theme.model'; import { AuthConfig } from './auth-config.interfaces'; import { UIServerConfig } from './ui-server-config.interface'; import { MediaViewerConfig } from './media-viewer-config.interface'; +import { InfoConfig } from './info-config.interface'; export interface GlobalConfig extends Config { ui: UIServerConfig; @@ -32,4 +33,5 @@ export interface GlobalConfig extends Config { collection: CollectionPageConfig; themes: ThemeConfig[]; mediaViewer: MediaViewerConfig; + info: InfoConfig; } diff --git a/src/config/info-config.interface.ts b/src/config/info-config.interface.ts new file mode 100644 index 0000000000..b1831962b5 --- /dev/null +++ b/src/config/info-config.interface.ts @@ -0,0 +1,6 @@ +import { Config } from './config.interface'; + +export interface InfoConfig extends Config { + enableEndUserAgreement: boolean; + enablePrivacyStatement: boolean; +} diff --git a/src/environments/environment.common.ts b/src/environments/environment.common.ts index 9091773041..2570759151 100644 --- a/src/environments/environment.common.ts +++ b/src/environments/environment.common.ts @@ -285,4 +285,8 @@ export const environment: GlobalConfig = { image: false, video: false, }, + info: { + enableEndUserAgreement: false, + enablePrivacyStatement: false + }, }; diff --git a/src/environments/mock-environment.ts b/src/environments/mock-environment.ts index 824c8c8a83..a5fa44b115 100644 --- a/src/environments/mock-environment.ts +++ b/src/environments/mock-environment.ts @@ -235,4 +235,8 @@ export const environment: Partial = { image: true, video: true }, + info: { + enableEndUserAgreement: true, + enablePrivacyStatement: true, + } }; From 1b5c801d0665f0c9fa39c3b63e45dfa01d4e59d2 Mon Sep 17 00:00:00 2001 From: Jens Vannerum Date: Mon, 27 Jun 2022 16:24:16 +0200 Subject: [PATCH 02/39] 92701: Disable user agreement feature --- config/config.example.yml | 7 +++++++ config/config.yml | 4 ++++ .../end-user-agreement-current-user.guard.spec.ts | 2 +- src/config/default-app-config.ts | 7 ++++--- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/config/config.example.yml b/config/config.example.yml index 898b47784f..723568c020 100644 --- a/config/config.example.yml +++ b/config/config.example.yml @@ -246,3 +246,10 @@ bundle: mediaViewer: image: false video: false + +# Whether the end user agreement is required before users use the repository. +# If enabled, the user will be required to accept the agreement before they can use the repository. +# And whether the privacy statement should exist or not. +info: + enableEndUserAgreement: true + enablePrivacyStatement: true diff --git a/config/config.yml b/config/config.yml index b5eecd112f..2b5ac3b52e 100644 --- a/config/config.yml +++ b/config/config.yml @@ -3,3 +3,7 @@ rest: host: api7.dspace.org port: 443 nameSpace: /server + +info: + enableEndUserAgreement: true + enablePrivacyStatement: true diff --git a/src/app/core/end-user-agreement/end-user-agreement-current-user.guard.spec.ts b/src/app/core/end-user-agreement/end-user-agreement-current-user.guard.spec.ts index b280ef798c..40728ab601 100644 --- a/src/app/core/end-user-agreement/end-user-agreement-current-user.guard.spec.ts +++ b/src/app/core/end-user-agreement/end-user-agreement-current-user.guard.spec.ts @@ -2,7 +2,7 @@ import { EndUserAgreementCurrentUserGuard } from './end-user-agreement-current-u import { EndUserAgreementService } from './end-user-agreement.service'; import { Router, UrlTree } from '@angular/router'; import { of as observableOf } from 'rxjs'; -import { environment } from '../../../environments/mock-environment'; +import { environment } from '../../../environments/environment.test'; describe('EndUserAgreementGuard', () => { let guard: EndUserAgreementCurrentUserGuard; diff --git a/src/config/default-app-config.ts b/src/config/default-app-config.ts index 886f1598fd..4108444443 100644 --- a/src/config/default-app-config.ts +++ b/src/config/default-app-config.ts @@ -16,6 +16,7 @@ import { ThemeConfig } from './theme.model'; import { UIServerConfig } from './ui-server-config.interface'; import { BundleConfig } from './bundle-config.interface'; import { ActuatorsConfig } from './actuators.config'; +import { InfoConfig } from './info-config.interface'; export class DefaultAppConfig implements AppConfig { production = false; @@ -324,8 +325,8 @@ export class DefaultAppConfig implements AppConfig { image: false, video: false }; - info: { - enableEndUserAgreement: false, - enablePrivacyStatement: false + info: InfoConfig = { + enableEndUserAgreement: true, + enablePrivacyStatement: true }; } From 39c2aa85eca5c94060bb4618c371a896f8b9e1de Mon Sep 17 00:00:00 2001 From: Yura Bondarenko Date: Mon, 18 Jul 2022 15:55:30 +0200 Subject: [PATCH 03/39] 93219: Move APP_INITIALIZER logic into InitService --- src/app/app.module.ts | 25 ++++------ src/app/init.service.ts | 63 +++++++++++++++++++++++++ src/modules/app/browser-app.module.ts | 38 +++------------ src/modules/app/browser-init.service.ts | 54 +++++++++++++++++++++ src/modules/app/server-app.module.ts | 26 ++-------- src/modules/app/server-init.service.ts | 46 ++++++++++++++++++ 6 files changed, 183 insertions(+), 69 deletions(-) create mode 100644 src/app/init.service.ts create mode 100644 src/modules/app/browser-init.service.ts create mode 100644 src/modules/app/server-init.service.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index a1db89b60d..e3f5c46adb 100755 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -7,13 +7,9 @@ import { BrowserModule } from '@angular/platform-browser'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; import { EffectsModule } from '@ngrx/effects'; import { RouterStateSerializer, StoreRouterConnectingModule } from '@ngrx/router-store'; -import { MetaReducer, Store, StoreModule, USER_PROVIDED_META_REDUCERS } from '@ngrx/store'; +import { MetaReducer, StoreModule, USER_PROVIDED_META_REDUCERS } from '@ngrx/store'; import { StoreDevtoolsModule } from '@ngrx/store-devtools'; -import { - DYNAMIC_ERROR_MESSAGES_MATCHER, - DYNAMIC_MATCHER_PROVIDERS, - DynamicErrorMessagesMatcher -} from '@ng-dynamic-forms/core'; +import { DYNAMIC_ERROR_MESSAGES_MATCHER, DYNAMIC_MATCHER_PROVIDERS, DynamicErrorMessagesMatcher } from '@ng-dynamic-forms/core'; import { TranslateModule } from '@ngx-translate/core'; import { ScrollToModule } from '@nicky-lenaers/ngx-scroll-to'; import { AppRoutingModule } from './app-routing.module'; @@ -21,7 +17,6 @@ import { AppComponent } from './app.component'; import { appEffects } from './app.effects'; import { appMetaReducers, debugMetaReducers } from './app.metareducers'; import { appReducers, AppState, storeModuleConfig } from './app.reducer'; -import { CheckAuthenticationTokenAction } from './core/auth/auth.actions'; import { CoreModule } from './core/core.module'; import { ClientCookieService } from './core/services/client-cookie.service'; import { NavbarModule } from './navbar/navbar.module'; @@ -36,6 +31,7 @@ import { EagerThemesModule } from '../themes/eager-themes.module'; import { APP_CONFIG, AppConfig } from '../config/app-config.interface'; import { RootModule } from './root.module'; +import { InitService } from './init.service'; export function getConfig() { return environment; @@ -82,6 +78,12 @@ IMPORTS.push( ); const PROVIDERS = [ + { + provide: APP_INITIALIZER, + useFactory: (initService: InitService) => initService.init(), + deps: [ InitService ], + multi: true, + }, { provide: APP_CONFIG, useFactory: getConfig @@ -101,15 +103,6 @@ const PROVIDERS = [ useClass: DSpaceRouterStateSerializer }, ClientCookieService, - // Check the authentication token when the app initializes - { - provide: APP_INITIALIZER, - useFactory: (store: Store,) => { - return () => store.dispatch(new CheckAuthenticationTokenAction()); - }, - deps: [Store], - multi: true - }, // register AuthInterceptor as HttpInterceptor { provide: HTTP_INTERCEPTORS, diff --git a/src/app/init.service.ts b/src/app/init.service.ts new file mode 100644 index 0000000000..c5bd6dddb0 --- /dev/null +++ b/src/app/init.service.ts @@ -0,0 +1,63 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +import { Store } from '@ngrx/store'; +import { AppState } from './app.reducer'; +import { CheckAuthenticationTokenAction } from './core/auth/auth.actions'; +import { CorrelationIdService } from './correlation-id/correlation-id.service'; +import { DSpaceTransferState } from '../modules/transfer-state/dspace-transfer-state.service'; + +/** + * Performs the initialization of the app. + * + * Should have distinct extensions for server & browser for the specifics. + * Should be provided in AppModule as follows + * ``` + * { + * provide: APP_INITIALIZER + * useFactory: (initService: InitService) => initService.init(), + * deps: [ InitService ], + * multi: true, + * } + * ``` + * + * In order to be injected in the common APP_INITIALIZER, + * concrete subclasses should be provided in their respective app modules as + * ``` + * { provide: InitService, useClass: SpecificInitService } + * ``` + */ +export abstract class InitService { + protected constructor( + protected store: Store, + protected correlationIdService: CorrelationIdService, + protected dspaceTransferState: DSpaceTransferState, + ) { + } + + /** + * Main initialization method, to be used as the APP_INITIALIZER factory. + * + * Note that the body of this method and the callback it returns are called + * at different times. + * This is important to take into account when other providers depend on the + * initialization logic (e.g. APP_BASE_HREF) + */ + abstract init(): () => Promise; + + protected checkAuthenticationToken(): void { + this.store.dispatch(new CheckAuthenticationTokenAction()); + } + + protected initCorrelationId(): void { + this.correlationIdService.initCorrelationId(); + } + + protected async transferAppState(): Promise { + return this.dspaceTransferState.transfer(); + } +} diff --git a/src/modules/app/browser-app.module.ts b/src/modules/app/browser-app.module.ts index 20c68898ae..e50018b51a 100644 --- a/src/modules/app/browser-app.module.ts +++ b/src/modules/app/browser-app.module.ts @@ -1,5 +1,5 @@ import { HttpClient, HttpClientModule } from '@angular/common/http'; -import { APP_INITIALIZER, NgModule } from '@angular/core'; +import { NgModule } from '@angular/core'; import { BrowserModule, makeStateKey, TransferState } from '@angular/platform-browser'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { REQUEST } from '@nguniversal/express-engine/tokens'; @@ -13,7 +13,6 @@ import { AppComponent } from '../../app/app.component'; import { AppModule } from '../../app/app.module'; import { DSpaceBrowserTransferStateModule } from '../transfer-state/dspace-browser-transfer-state.module'; -import { DSpaceTransferState } from '../transfer-state/dspace-transfer-state.service'; import { ClientCookieService } from '../../app/core/services/client-cookie.service'; import { CookieService } from '../../app/core/services/cookie.service'; import { AuthService } from '../../app/core/auth/auth.service'; @@ -23,21 +22,13 @@ import { StatisticsModule } from '../../app/statistics/statistics.module'; import { BrowserKlaroService } from '../../app/shared/cookies/browser-klaro.service'; import { KlaroService } from '../../app/shared/cookies/klaro.service'; import { HardRedirectService } from '../../app/core/services/hard-redirect.service'; -import { - BrowserHardRedirectService, - locationProvider, - LocationToken -} from '../../app/core/services/browser-hard-redirect.service'; +import { BrowserHardRedirectService, locationProvider, LocationToken } from '../../app/core/services/browser-hard-redirect.service'; import { LocaleService } from '../../app/core/locale/locale.service'; import { GoogleAnalyticsService } from '../../app/statistics/google-analytics.service'; import { AuthRequestService } from '../../app/core/auth/auth-request.service'; import { BrowserAuthRequestService } from '../../app/core/auth/browser-auth-request.service'; -import { AppConfig, APP_CONFIG_STATE } from '../../config/app-config.interface'; -import { DefaultAppConfig } from '../../config/default-app-config'; -import { extendEnvironmentWithAppConfig } from '../../config/config.util'; -import { CorrelationIdService } from '../../app/correlation-id/correlation-id.service'; - -import { environment } from '../../environments/environment'; +import { InitService } from 'src/app/init.service'; +import { BrowserInitService } from './browser-init.service'; export const REQ_KEY = makeStateKey('req'); @@ -73,25 +64,8 @@ export function getRequest(transferState: TransferState): any { ], providers: [ { - provide: APP_INITIALIZER, - useFactory: ( - transferState: TransferState, - dspaceTransferState: DSpaceTransferState, - correlationIdService: CorrelationIdService - ) => { - if (transferState.hasKey(APP_CONFIG_STATE)) { - const appConfig = transferState.get(APP_CONFIG_STATE, new DefaultAppConfig()); - // extend environment with app config for browser - extendEnvironmentWithAppConfig(environment, appConfig); - } - return () => - dspaceTransferState.transfer().then((b: boolean) => { - correlationIdService.initCorrelationId(); - return b; - }); - }, - deps: [TransferState, DSpaceTransferState, CorrelationIdService], - multi: true + provide: InitService, + useClass: BrowserInitService, }, { provide: REQUEST, diff --git a/src/modules/app/browser-init.service.ts b/src/modules/app/browser-init.service.ts new file mode 100644 index 0000000000..1b050af82a --- /dev/null +++ b/src/modules/app/browser-init.service.ts @@ -0,0 +1,54 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +import { InitService } from '../../app/init.service'; +import { Store } from '@ngrx/store'; +import { AppState } from '../../app/app.reducer'; +import { DSpaceTransferState } from '../transfer-state/dspace-transfer-state.service'; +import { TransferState } from '@angular/platform-browser'; +import { APP_CONFIG_STATE, AppConfig } from '../../config/app-config.interface'; +import { DefaultAppConfig } from '../../config/default-app-config'; +import { extendEnvironmentWithAppConfig } from '../../config/config.util'; +import { environment } from '../../environments/environment'; +import { CorrelationIdService } from '../../app/correlation-id/correlation-id.service'; +import { Injectable } from '@angular/core'; + +/** + * Performs client-side initialization. + */ +@Injectable() +export class BrowserInitService extends InitService { + constructor( + protected store: Store, + protected correlationIdService: CorrelationIdService, + protected transferState: TransferState, + protected dspaceTransferState: DSpaceTransferState, + ) { + super(store, correlationIdService, dspaceTransferState); + } + + public init(): () => Promise { + // this method must be called before the callback because APP_BASE_HREF depends on it + this.loadAppConfigFromSSR(); + + return async () => { + await this.transferAppState(); + this.checkAuthenticationToken(); + this.initCorrelationId(); + + return true; + }; + } + + private loadAppConfigFromSSR(): void { + if (this.transferState.hasKey(APP_CONFIG_STATE)) { + const appConfig = this.transferState.get(APP_CONFIG_STATE, new DefaultAppConfig()); + // extend environment with app config for browser + extendEnvironmentWithAppConfig(environment, appConfig); + } + } +} diff --git a/src/modules/app/server-app.module.ts b/src/modules/app/server-app.module.ts index 4f8569962c..f61712ccb0 100644 --- a/src/modules/app/server-app.module.ts +++ b/src/modules/app/server-app.module.ts @@ -1,9 +1,8 @@ import { HTTP_INTERCEPTORS } from '@angular/common/http'; -import { APP_INITIALIZER, NgModule } from '@angular/core'; +import { NgModule } from '@angular/core'; import { BrowserModule, TransferState } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { ServerModule } from '@angular/platform-server'; -import { RouterModule } from '@angular/router'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; @@ -14,7 +13,6 @@ import { AppComponent } from '../../app/app.component'; import { AppModule } from '../../app/app.module'; import { DSpaceServerTransferStateModule } from '../transfer-state/dspace-server-transfer-state.module'; -import { DSpaceTransferState } from '../transfer-state/dspace-transfer-state.service'; import { TranslateServerLoader } from '../../ngx-translate-loaders/translate-server.loader'; import { CookieService } from '../../app/core/services/cookie.service'; import { ServerCookieService } from '../../app/core/services/server-cookie.service'; @@ -32,10 +30,8 @@ import { ServerHardRedirectService } from '../../app/core/services/server-hard-r import { Angulartics2Mock } from '../../app/shared/mocks/angulartics2.service.mock'; import { AuthRequestService } from '../../app/core/auth/auth-request.service'; import { ServerAuthRequestService } from '../../app/core/auth/server-auth-request.service'; -import { CorrelationIdService } from '../../app/correlation-id/correlation-id.service'; -import { AppConfig, APP_CONFIG_STATE } from '../../config/app-config.interface'; - -import { environment } from '../../environments/environment'; +import { InitService } from '../../app/init.service'; +import { ServerInitService } from './server-init.service'; export function createTranslateLoader(transferState: TransferState) { return new TranslateServerLoader(transferState, 'dist/server/assets/i18n/', '.json5'); @@ -60,21 +56,9 @@ export function createTranslateLoader(transferState: TransferState) { AppModule ], providers: [ - // Initialize app config and extend environment { - provide: APP_INITIALIZER, - useFactory: ( - transferState: TransferState, - dspaceTransferState: DSpaceTransferState, - correlationIdService: CorrelationIdService, - ) => { - transferState.set(APP_CONFIG_STATE, environment as AppConfig); - dspaceTransferState.transfer(); - correlationIdService.initCorrelationId(); - return () => true; - }, - deps: [TransferState, DSpaceTransferState, CorrelationIdService], - multi: true + provide: InitService, + useClass: ServerInitService, }, { provide: Angulartics2, diff --git a/src/modules/app/server-init.service.ts b/src/modules/app/server-init.service.ts new file mode 100644 index 0000000000..d5814f10f3 --- /dev/null +++ b/src/modules/app/server-init.service.ts @@ -0,0 +1,46 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +import { InitService } from '../../app/init.service'; +import { Store } from '@ngrx/store'; +import { AppState } from '../../app/app.reducer'; +import { TransferState } from '@angular/platform-browser'; +import { DSpaceTransferState } from '../transfer-state/dspace-transfer-state.service'; +import { CorrelationIdService } from '../../app/correlation-id/correlation-id.service'; +import { APP_CONFIG_STATE, AppConfig } from '../../config/app-config.interface'; +import { environment } from '../../environments/environment'; +import { Injectable } from '@angular/core'; + +/** + * Performs server-side initialization. + */ +@Injectable() +export class ServerInitService extends InitService { + constructor( + protected store: Store, + protected correlationIdService: CorrelationIdService, + protected transferState: TransferState, + protected dspaceTransferState: DSpaceTransferState, + ) { + super(store, correlationIdService, dspaceTransferState); + } + + public init(): () => Promise { + return async () => { + this.checkAuthenticationToken(); + this.saveAppConfigForCSR(); + this.transferAppState(); // todo: SSR breaks if we await this (why?) + this.initCorrelationId(); + + return true; + }; + } + + private saveAppConfigForCSR(): void { + this.transferState.set(APP_CONFIG_STATE, environment as AppConfig); + } +} From 372cddfd5e65387fe6714108e9711a6a6467d90e Mon Sep 17 00:00:00 2001 From: Yura Bondarenko Date: Tue, 19 Jul 2022 17:58:19 +0200 Subject: [PATCH 04/39] 93219: Support Router in InitService For Router to work properly, APP_BASE_HREF must be resolved _before_ the APP_INITIALIZER factory is called (otherwise Angular will attempt to initialize APP_BASE_HREF too soon) To fix this we add a pre-initialization hook to APP_CONFIG so BrowserInitService can resolve it before APP_INITIALIZER --- src/app/app.module.ts | 18 +---- src/app/init.service.spec.ts | 83 +++++++++++++++++++++++ src/app/init.service.ts | 87 ++++++++++++++++++------- src/config/app-config.interface.ts | 4 ++ src/modules/app/browser-app.module.ts | 7 +- src/modules/app/browser-init.service.ts | 21 +++--- src/modules/app/server-app.module.ts | 6 +- src/modules/app/server-init.service.ts | 2 +- 8 files changed, 164 insertions(+), 64 deletions(-) create mode 100644 src/app/init.service.spec.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index e3f5c46adb..b3a5872722 100755 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,6 +1,6 @@ import { APP_BASE_HREF, CommonModule } from '@angular/common'; import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http'; -import { APP_INITIALIZER, NgModule } from '@angular/core'; +import { NgModule } from '@angular/core'; import { AbstractControl } from '@angular/forms'; import { BrowserModule } from '@angular/platform-browser'; @@ -28,14 +28,8 @@ import { LocaleInterceptor } from './core/locale/locale.interceptor'; import { XsrfInterceptor } from './core/xsrf/xsrf.interceptor'; import { LogInterceptor } from './core/log/log.interceptor'; import { EagerThemesModule } from '../themes/eager-themes.module'; - import { APP_CONFIG, AppConfig } from '../config/app-config.interface'; import { RootModule } from './root.module'; -import { InitService } from './init.service'; - -export function getConfig() { - return environment; -} export function getBase(appConfig: AppConfig) { return appConfig.ui.nameSpace; @@ -78,16 +72,6 @@ IMPORTS.push( ); const PROVIDERS = [ - { - provide: APP_INITIALIZER, - useFactory: (initService: InitService) => initService.init(), - deps: [ InitService ], - multi: true, - }, - { - provide: APP_CONFIG, - useFactory: getConfig - }, { provide: APP_BASE_HREF, useFactory: getBase, diff --git a/src/app/init.service.spec.ts b/src/app/init.service.spec.ts new file mode 100644 index 0000000000..7bbd50e4b7 --- /dev/null +++ b/src/app/init.service.spec.ts @@ -0,0 +1,83 @@ +import { InitService } from './init.service'; +import { APP_CONFIG } from 'src/config/app-config.interface'; +import { APP_INITIALIZER } from '@angular/core'; +import objectContaining = jasmine.objectContaining; +import createSpyObj = jasmine.createSpyObj; +import SpyObj = jasmine.SpyObj; + +let spy: SpyObj; + +export class ConcreteInitServiceMock extends InitService { + protected static resolveAppConfig() { + spy.resolveAppConfig(); + } + + protected init(): () => Promise { + spy.init(); + return async () => true; + } +} + + +describe('InitService', () => { + describe('providers', () => { + beforeEach(() => { + spy = createSpyObj('ConcreteInitServiceMock', { + resolveAppConfig: null, + init: null, + }); + }); + + it('should throw error when called on abstract InitService', () => { + expect(() => InitService.providers()).toThrow(); + }); + + it('should correctly set up provider dependencies', () => { + const providers = ConcreteInitServiceMock.providers(); + + expect(providers).toContain(objectContaining({ + provide: InitService, + useClass: ConcreteInitServiceMock + })); + + expect(providers).toContain(objectContaining({ + provide: APP_CONFIG, + })); + + expect(providers).toContain(objectContaining({ + provide: APP_INITIALIZER, + deps: [ InitService ], + multi: true, + })); + }); + + it('should call resolveAppConfig() in APP_CONFIG factory', () => { + const factory = ( + ConcreteInitServiceMock.providers() + .find((p: any) => p.provide === APP_CONFIG) as any + ).useFactory; + + // this factory is called _before_ InitService is instantiated + factory(); + expect(spy.resolveAppConfig).toHaveBeenCalled(); + expect(spy.init).not.toHaveBeenCalled(); + }); + + it('should defer to init() in APP_INITIALIZER factory', () => { + const factory = ( + ConcreteInitServiceMock.providers() + .find((p: any) => p.provide === APP_INITIALIZER) as any + ).useFactory; + + // we don't care about the dependencies here + // @ts-ignore + const instance = new ConcreteInitServiceMock(null, null, null); + + // provider ensures that the right concrete instance is passed to the factory + factory(instance); + expect(spy.resolveAppConfig).not.toHaveBeenCalled(); + expect(spy.init).toHaveBeenCalled(); + }); + }); +}); + diff --git a/src/app/init.service.ts b/src/app/init.service.ts index c5bd6dddb0..d8ecf8d23a 100644 --- a/src/app/init.service.ts +++ b/src/app/init.service.ts @@ -6,30 +6,18 @@ * http://www.dspace.org/license/ */ import { Store } from '@ngrx/store'; -import { AppState } from './app.reducer'; import { CheckAuthenticationTokenAction } from './core/auth/auth.actions'; import { CorrelationIdService } from './correlation-id/correlation-id.service'; import { DSpaceTransferState } from '../modules/transfer-state/dspace-transfer-state.service'; +import { APP_INITIALIZER, Provider, Type } from '@angular/core'; +import { TransferState } from '@angular/platform-browser'; +import { APP_CONFIG } from '../config/app-config.interface'; +import { environment } from '../environments/environment'; +import { AppState } from './app.reducer'; /** * Performs the initialization of the app. - * - * Should have distinct extensions for server & browser for the specifics. - * Should be provided in AppModule as follows - * ``` - * { - * provide: APP_INITIALIZER - * useFactory: (initService: InitService) => initService.init(), - * deps: [ InitService ], - * multi: true, - * } - * ``` - * - * In order to be injected in the common APP_INITIALIZER, - * concrete subclasses should be provided in their respective app modules as - * ``` - * { provide: InitService, useClass: SpecificInitService } - * ``` + * Should be extended to implement server- & browser-specific functionality. */ export abstract class InitService { protected constructor( @@ -40,14 +28,63 @@ export abstract class InitService { } /** - * Main initialization method, to be used as the APP_INITIALIZER factory. - * - * Note that the body of this method and the callback it returns are called - * at different times. - * This is important to take into account when other providers depend on the - * initialization logic (e.g. APP_BASE_HREF) + * The initialization providers to use in `*AppModule` + * - this concrete {@link InitService} + * - {@link APP_CONFIG} with optional pre-initialization hook + * - {@link APP_INITIALIZER} + *
+ * Should only be called on concrete subclasses of InitService for the initialization hooks to work */ - abstract init(): () => Promise; + public static providers(): Provider[] { + if (!InitService.isPrototypeOf(this)) { + throw new Error( + 'Initalization providers should only be generated from concrete subclasses of InitService' + ); + } + return [ + { + provide: InitService, + useClass: this as unknown as Type, + }, + { + provide: APP_CONFIG, + useFactory: (transferState: TransferState) => { + this.resolveAppConfig(transferState); + return environment; + }, + deps: [ TransferState ] + }, + { + provide: APP_INITIALIZER, + useFactory: (initService: InitService) => initService.init(), + deps: [ InitService ], + multi: true, + }, + ]; + } + + /** + * Optional pre-initialization method to ensure that {@link APP_CONFIG} is fully resolved before {@link init} is called. + * + * For example, Router depends on APP_BASE_HREF, which in turn depends on APP_CONFIG. + * In production mode, APP_CONFIG is resolved from the TransferState when the app is initialized. + * If we want to use Router within APP_INITIALIZER, we have to make sure APP_BASE_HREF is resolved beforehand. + * In this case that means that we must transfer the configuration from the SSR state during pre-initialization. + * @protected + */ + protected static resolveAppConfig( + transferState: TransferState + ): void { + // overriden in subclasses if applicable + } + + /** + * Main initialization method. + * @protected + */ + protected abstract init(): () => Promise; + + // Common initialization steps protected checkAuthenticationToken(): void { this.store.dispatch(new CheckAuthenticationTokenAction()); diff --git a/src/config/app-config.interface.ts b/src/config/app-config.interface.ts index 62d0be7216..5b2f0b1eeb 100644 --- a/src/config/app-config.interface.ts +++ b/src/config/app-config.interface.ts @@ -36,6 +36,10 @@ interface AppConfig extends Config { mediaViewer: MediaViewerConfig; } +/** + * Injection token for the app configuration. + * Provided in {@link InitService.providers}. + */ const APP_CONFIG = new InjectionToken('APP_CONFIG'); const APP_CONFIG_STATE = makeStateKey('APP_CONFIG_STATE'); diff --git a/src/modules/app/browser-app.module.ts b/src/modules/app/browser-app.module.ts index e50018b51a..cd3feedad8 100644 --- a/src/modules/app/browser-app.module.ts +++ b/src/modules/app/browser-app.module.ts @@ -27,8 +27,8 @@ import { LocaleService } from '../../app/core/locale/locale.service'; import { GoogleAnalyticsService } from '../../app/statistics/google-analytics.service'; import { AuthRequestService } from '../../app/core/auth/auth-request.service'; import { BrowserAuthRequestService } from '../../app/core/auth/browser-auth-request.service'; -import { InitService } from 'src/app/init.service'; import { BrowserInitService } from './browser-init.service'; +import { InitService } from '../../app/init.service'; export const REQ_KEY = makeStateKey('req'); @@ -63,10 +63,7 @@ export function getRequest(transferState: TransferState): any { AppModule ], providers: [ - { - provide: InitService, - useClass: BrowserInitService, - }, + ...BrowserInitService.providers(), { provide: REQUEST, useFactory: getRequest, diff --git a/src/modules/app/browser-init.service.ts b/src/modules/app/browser-init.service.ts index 1b050af82a..5c55795383 100644 --- a/src/modules/app/browser-init.service.ts +++ b/src/modules/app/browser-init.service.ts @@ -31,10 +31,17 @@ export class BrowserInitService extends InitService { super(store, correlationIdService, dspaceTransferState); } - public init(): () => Promise { - // this method must be called before the callback because APP_BASE_HREF depends on it - this.loadAppConfigFromSSR(); + protected static resolveAppConfig( + transferState: TransferState, + ) { + if (transferState.hasKey(APP_CONFIG_STATE)) { + const appConfig = transferState.get(APP_CONFIG_STATE, new DefaultAppConfig()); + // extend environment with app config for browser + extendEnvironmentWithAppConfig(environment, appConfig); + } + } + protected init(): () => Promise { return async () => { await this.transferAppState(); this.checkAuthenticationToken(); @@ -43,12 +50,4 @@ export class BrowserInitService extends InitService { return true; }; } - - private loadAppConfigFromSSR(): void { - if (this.transferState.hasKey(APP_CONFIG_STATE)) { - const appConfig = this.transferState.get(APP_CONFIG_STATE, new DefaultAppConfig()); - // extend environment with app config for browser - extendEnvironmentWithAppConfig(environment, appConfig); - } - } } diff --git a/src/modules/app/server-app.module.ts b/src/modules/app/server-app.module.ts index f61712ccb0..2b0462e9a0 100644 --- a/src/modules/app/server-app.module.ts +++ b/src/modules/app/server-app.module.ts @@ -30,7 +30,6 @@ import { ServerHardRedirectService } from '../../app/core/services/server-hard-r import { Angulartics2Mock } from '../../app/shared/mocks/angulartics2.service.mock'; import { AuthRequestService } from '../../app/core/auth/auth-request.service'; import { ServerAuthRequestService } from '../../app/core/auth/server-auth-request.service'; -import { InitService } from '../../app/init.service'; import { ServerInitService } from './server-init.service'; export function createTranslateLoader(transferState: TransferState) { @@ -56,10 +55,7 @@ export function createTranslateLoader(transferState: TransferState) { AppModule ], providers: [ - { - provide: InitService, - useClass: ServerInitService, - }, + ...ServerInitService.providers(), { provide: Angulartics2, useClass: Angulartics2Mock diff --git a/src/modules/app/server-init.service.ts b/src/modules/app/server-init.service.ts index d5814f10f3..11fcc482ca 100644 --- a/src/modules/app/server-init.service.ts +++ b/src/modules/app/server-init.service.ts @@ -29,7 +29,7 @@ export class ServerInitService extends InitService { super(store, correlationIdService, dspaceTransferState); } - public init(): () => Promise { + protected init(): () => Promise { return async () => { this.checkAuthenticationToken(); this.saveAppConfigForCSR(); From 5cb737c7f236a546d8b3d63b042cdc9d346927bb Mon Sep 17 00:00:00 2001 From: Yura Bondarenko Date: Fri, 22 Jul 2022 10:29:44 +0200 Subject: [PATCH 05/39] 93219: Move general initialization from AppComponent to InitService --- src/app/app.component.spec.ts | 46 +----- src/app/app.component.ts | 75 +-------- src/app/core/auth/auth.service.ts | 6 +- src/app/init.service.spec.ts | 192 +++++++++++++++++++++++- src/app/init.service.ts | 124 ++++++++++++++- src/modules/app/browser-init.service.ts | 52 ++++++- src/modules/app/server-init.service.ts | 44 +++++- 7 files changed, 416 insertions(+), 123 deletions(-) diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts index a892e34a5a..4cf3f3b6e7 100644 --- a/src/app/app.component.spec.ts +++ b/src/app/app.component.spec.ts @@ -32,7 +32,6 @@ import { storeModuleConfig } from './app.reducer'; import { LocaleService } from './core/locale/locale.service'; import { authReducer } from './core/auth/auth.reducer'; import { provideMockStore } from '@ngrx/store/testing'; -import { GoogleAnalyticsService } from './statistics/google-analytics.service'; import { ThemeService } from './shared/theme-support/theme.service'; import { getMockThemeService } from './shared/mocks/theme-service.mock'; import { BreadcrumbsService } from './breadcrumbs/breadcrumbs.service'; @@ -46,16 +45,16 @@ const initialState = { core: { auth: { loading: false } } }; +export function getMockLocaleService(): LocaleService { + return jasmine.createSpyObj('LocaleService', { + setCurrentLanguageCode: jasmine.createSpy('setCurrentLanguageCode') + }); +} + describe('App component', () => { let breadcrumbsServiceSpy; - function getMockLocaleService(): LocaleService { - return jasmine.createSpyObj('LocaleService', { - setCurrentLanguageCode: jasmine.createSpy('setCurrentLanguageCode') - }); - } - const getDefaultTestBedConf = () => { breadcrumbsServiceSpy = jasmine.createSpyObj(['listenForRouteChanges']); @@ -131,39 +130,6 @@ describe('App component', () => { }); - describe('the constructor', () => { - it('should call breadcrumbsService.listenForRouteChanges', () => { - expect(breadcrumbsServiceSpy.listenForRouteChanges).toHaveBeenCalledTimes(1); - }); - }); - - describe('when GoogleAnalyticsService is provided', () => { - let googleAnalyticsSpy; - - beforeEach(() => { - // NOTE: Cannot override providers once components have been compiled, so TestBed needs to be reset - TestBed.resetTestingModule(); - TestBed.configureTestingModule(getDefaultTestBedConf()); - googleAnalyticsSpy = jasmine.createSpyObj('googleAnalyticsService', [ - 'addTrackingIdToPage', - ]); - TestBed.overrideProvider(GoogleAnalyticsService, {useValue: googleAnalyticsSpy}); - fixture = TestBed.createComponent(AppComponent); - comp = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create component', () => { - expect(comp).toBeTruthy(); - }); - - describe('the constructor', () => { - it('should call googleAnalyticsService.addTrackingIdToPage()', () => { - expect(googleAnalyticsSpy.addTrackingIdToPage).toHaveBeenCalledTimes(1); - }); - }); - }); - describe('when ThemeService returns a custom theme', () => { let document; let headSpy; diff --git a/src/app/app.component.ts b/src/app/app.component.ts index ea2fb9fde6..c7b99b42a8 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -18,36 +18,24 @@ import { Router, } from '@angular/router'; -import { isEqual } from 'lodash'; -import { BehaviorSubject, Observable, of } from 'rxjs'; +import { BehaviorSubject, Observable } from 'rxjs'; import { select, Store } from '@ngrx/store'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { TranslateService } from '@ngx-translate/core'; -import { Angulartics2GoogleAnalytics } from 'angulartics2/ga'; - -import { MetadataService } from './core/metadata/metadata.service'; import { HostWindowResizeAction } from './shared/host-window.actions'; import { HostWindowState } from './shared/search/host-window.reducer'; import { NativeWindowRef, NativeWindowService } from './core/services/window.service'; import { isAuthenticationBlocking } from './core/auth/selectors'; import { AuthService } from './core/auth/auth.service'; import { CSSVariableService } from './shared/sass-helper/sass-helper.service'; -import { MenuService } from './shared/menu/menu.service'; -import { HostWindowService } from './shared/host-window.service'; -import { HeadTagConfig, ThemeConfig } from '../config/theme.model'; -import { Angulartics2DSpace } from './statistics/angulartics/dspace-provider'; +import { HeadTagConfig } from '../config/theme.model'; import { environment } from '../environments/environment'; import { models } from './core/core.module'; -import { LocaleService } from './core/locale/locale.service'; import { hasNoValue, hasValue, isNotEmpty } from './shared/empty.util'; -import { KlaroService } from './shared/cookies/klaro.service'; -import { GoogleAnalyticsService } from './statistics/google-analytics.service'; import { ThemeService } from './shared/theme-support/theme.service'; import { BASE_THEME_NAME } from './shared/theme-support/theme.constants'; -import { BreadcrumbsService } from './breadcrumbs/breadcrumbs.service'; import { IdleModalComponent } from './shared/idle-modal/idle-modal.component'; import { getDefaultThemeConfig } from '../config/config.util'; -import { AppConfig, APP_CONFIG } from 'src/config/app-config.interface'; @Component({ selector: 'ds-app', @@ -56,11 +44,6 @@ import { AppConfig, APP_CONFIG } from 'src/config/app-config.interface'; changeDetection: ChangeDetectionStrategy.OnPush, }) export class AppComponent implements OnInit, AfterViewInit { - sidebarVisible: Observable; - slideSidebarOver: Observable; - collapsedSidebarWidth: Observable; - totalSidebarWidth: Observable; - theme: Observable = of({} as any); notificationOptions; models; @@ -90,29 +73,14 @@ export class AppComponent implements OnInit, AfterViewInit { @Inject(NativeWindowService) private _window: NativeWindowRef, @Inject(DOCUMENT) private document: any, @Inject(PLATFORM_ID) private platformId: any, - @Inject(APP_CONFIG) private appConfig: AppConfig, private themeService: ThemeService, private translate: TranslateService, private store: Store, - private metadata: MetadataService, - private angulartics2GoogleAnalytics: Angulartics2GoogleAnalytics, - private angulartics2DSpace: Angulartics2DSpace, private authService: AuthService, private router: Router, private cssService: CSSVariableService, - private menuService: MenuService, - private windowService: HostWindowService, - private localeService: LocaleService, - private breadcrumbsService: BreadcrumbsService, private modalService: NgbModal, - @Optional() private cookiesService: KlaroService, - @Optional() private googleAnalyticsService: GoogleAnalyticsService, ) { - - if (!isEqual(environment, this.appConfig)) { - throw new Error('environment does not match app config!'); - } - this.notificationOptions = environment.notifications; /* Use models object so all decorators are actually called */ @@ -136,47 +104,18 @@ export class AppComponent implements OnInit, AfterViewInit { }); if (isPlatformBrowser(this.platformId)) { - this.authService.trackTokenExpiration(); this.trackIdleModal(); } - // Load all the languages that are defined as active from the config file - translate.addLangs(environment.languages.filter((LangConfig) => LangConfig.active === true).map((a) => a.code)); - - // Load the default language from the config file - // translate.setDefaultLang(environment.defaultLanguage); - - // set the current language code - this.localeService.setCurrentLanguageCode(); - - // analytics - if (hasValue(googleAnalyticsService)) { - googleAnalyticsService.addTrackingIdToPage(); - } - angulartics2DSpace.startTracking(); - - metadata.listenForRouteChange(); - breadcrumbsService.listenForRouteChanges(); - - if (environment.debug) { - console.info(environment); - } this.storeCSSVariables(); } ngOnInit() { - this.isAuthBlocking$ = this.store.pipe(select(isAuthenticationBlocking)).pipe( + this.isAuthBlocking$ = this.store.pipe( + select(isAuthenticationBlocking), distinctUntilChanged() ); - this.isAuthBlocking$ - .pipe( - filter((isBlocking: boolean) => isBlocking === false), - take(1) - ).subscribe(() => this.initializeKlaro()); - const env: string = environment.production ? 'Production' : 'Development'; - const color: string = environment.production ? 'red' : 'green'; - console.info(`Environment: %c${env}`, `color: ${color}; font-weight: bold;`); this.dispatchWindowSize(this._window.nativeWindow.innerWidth, this._window.nativeWindow.innerHeight); } @@ -239,12 +178,6 @@ export class AppComponent implements OnInit, AfterViewInit { ); } - private initializeKlaro() { - if (hasValue(this.cookiesService)) { - this.cookiesService.initialize(); - } - } - private loadGlobalThemeConfig(themeName: string): void { this.setThemeCss(themeName); this.setHeadTags(themeName); diff --git a/src/app/core/auth/auth.service.ts b/src/app/core/auth/auth.service.ts index 5738948ebd..95b20a1142 100644 --- a/src/app/core/auth/auth.service.ts +++ b/src/app/core/auth/auth.service.ts @@ -4,7 +4,7 @@ import { HttpHeaders } from '@angular/common/http'; import { REQUEST, RESPONSE } from '@nguniversal/express-engine/tokens'; import { Observable, of as observableOf } from 'rxjs'; -import { map, startWith, switchMap, take } from 'rxjs/operators'; +import { filter, map, startWith, switchMap, take } from 'rxjs/operators'; import { select, Store } from '@ngrx/store'; import { CookieAttributes } from 'js-cookie'; @@ -88,6 +88,8 @@ export class AuthService { private translateService: TranslateService ) { this.store.pipe( + // when this service is constructed the store is not fully initialized yet + filter((state: any) => state?.core?.auth !== undefined), select(isAuthenticated), startWith(false) ).subscribe((authenticated: boolean) => this._authenticated = authenticated); @@ -325,7 +327,7 @@ export class AuthService { let token: AuthTokenInfo; let currentlyRefreshingToken = false; this.store.pipe(select(getAuthenticationToken)).subscribe((authTokenInfo: AuthTokenInfo) => { - // If new token is undefined an it wasn't previously => Refresh failed + // If new token is undefined and it wasn't previously => Refresh failed if (currentlyRefreshingToken && token !== undefined && authTokenInfo === undefined) { // Token refresh failed => Error notification => 10 second wait => Page reloads & user logged out this.notificationService.error(this.translateService.get('auth.messages.token-refresh-failed')); diff --git a/src/app/init.service.spec.ts b/src/app/init.service.spec.ts index 7bbd50e4b7..7fb555f23c 100644 --- a/src/app/init.service.spec.ts +++ b/src/app/init.service.spec.ts @@ -1,12 +1,42 @@ import { InitService } from './init.service'; import { APP_CONFIG } from 'src/config/app-config.interface'; -import { APP_INITIALIZER } from '@angular/core'; +import { APP_INITIALIZER, Injectable } from '@angular/core'; +import { inject, TestBed, waitForAsync } from '@angular/core/testing'; +import { GoogleAnalyticsService } from './statistics/google-analytics.service'; +import { MetadataService } from './core/metadata/metadata.service'; +import { BreadcrumbsService } from './breadcrumbs/breadcrumbs.service'; +import { CommonModule } from '@angular/common'; +import { Store, StoreModule } from '@ngrx/store'; +import { authReducer } from './core/auth/auth.reducer'; +import { storeModuleConfig } from './app.reducer'; +import { AngularticsProviderMock } from './shared/mocks/angulartics-provider.service.mock'; +import { Angulartics2DSpace } from './statistics/angulartics/dspace-provider'; +import { AuthService } from './core/auth/auth.service'; +import { AuthServiceMock } from './shared/mocks/auth.service.mock'; +import { ActivatedRoute, Router } from '@angular/router'; +import { RouterMock } from './shared/mocks/router.mock'; +import { MockActivatedRoute } from './shared/mocks/active-router.mock'; +import { MenuService } from './shared/menu/menu.service'; +import { LocaleService } from './core/locale/locale.service'; +import { environment } from '../environments/environment'; +import { provideMockStore } from '@ngrx/store/testing'; +import { AppComponent } from './app.component'; +import { RouteService } from './core/services/route.service'; +import { getMockLocaleService } from './app.component.spec'; +import { MenuServiceStub } from './shared/testing/menu-service.stub'; +import { CorrelationIdService } from './correlation-id/correlation-id.service'; +import { DSpaceTransferState } from '../modules/transfer-state/dspace-transfer-state.service'; +import { KlaroService } from './shared/cookies/klaro.service'; +import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; +import { TranslateLoaderMock } from './shared/mocks/translate-loader.mock'; +import { getTestScheduler } from 'jasmine-marbles'; import objectContaining = jasmine.objectContaining; import createSpyObj = jasmine.createSpyObj; import SpyObj = jasmine.SpyObj; let spy: SpyObj; +@Injectable() export class ConcreteInitServiceMock extends InitService { protected static resolveAppConfig() { spy.resolveAppConfig(); @@ -18,6 +48,15 @@ export class ConcreteInitServiceMock extends InitService { } } +const initialState = { + core: { + auth: { + loading: false, + blocking: true, + } + } +}; + describe('InitService', () => { describe('providers', () => { @@ -79,5 +118,156 @@ describe('InitService', () => { expect(spy.init).toHaveBeenCalled(); }); }); + + describe('common initialization steps', () => { + let correlationIdServiceSpy; + let dspaceTransferStateSpy; + let transferStateSpy; + let metadataServiceSpy; + let breadcrumbsServiceSpy; + + beforeEach(waitForAsync(() => { + correlationIdServiceSpy = jasmine.createSpyObj('correlationIdServiceSpy', [ + 'initCorrelationId', + ]); + dspaceTransferStateSpy = jasmine.createSpyObj('dspaceTransferStateSpy', [ + 'transfer', + ]); + transferStateSpy = jasmine.createSpyObj('dspaceTransferStateSpy', [ + 'get', 'hasKey' + ]); + breadcrumbsServiceSpy = jasmine.createSpyObj('breadcrumbsServiceSpy', [ + 'listenForRouteChanges', + ]); + metadataServiceSpy = jasmine.createSpyObj('metadataService', [ + 'listenForRouteChange', + ]); + + + TestBed.resetTestingModule(); + TestBed.configureTestingModule({ + imports: [ + CommonModule, + StoreModule.forRoot(authReducer, storeModuleConfig), + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useClass: TranslateLoaderMock + } + }), + ], + providers: [ + { provide: InitService, useClass: ConcreteInitServiceMock }, + { provide: CorrelationIdService, useValue: correlationIdServiceSpy }, + { provide: DSpaceTransferState, useValue: dspaceTransferStateSpy }, + { provide: APP_CONFIG, useValue: environment }, + { provide: LocaleService, useValue: getMockLocaleService() }, + { provide: Angulartics2DSpace, useValue: new AngularticsProviderMock() }, + { provide: MetadataService, useValue: metadataServiceSpy }, + { provide: BreadcrumbsService, useValue: breadcrumbsServiceSpy }, + { provide: AuthService, useValue: new AuthServiceMock() }, + { provide: Router, useValue: new RouterMock() }, + { provide: ActivatedRoute, useValue: new MockActivatedRoute() }, + { provide: MenuService, useValue: new MenuServiceStub() }, + { provide: KlaroService, useValue: undefined }, + { provide: GoogleAnalyticsService, useValue: undefined }, + provideMockStore({ initialState }), + AppComponent, + RouteService, + ] + }); + })); + + describe('initÀnalytics', () => { + describe('when GoogleAnalyticsService is provided', () => { + let googleAnalyticsSpy; + + beforeEach(() => { + googleAnalyticsSpy = jasmine.createSpyObj('googleAnalyticsService', [ + 'addTrackingIdToPage', + ]); + + TestBed.overrideProvider(GoogleAnalyticsService, { useValue: googleAnalyticsSpy }); + }); + + it('should call googleAnalyticsService.addTrackingIdToPage()', inject([InitService], (service) => { + // @ts-ignore + service.initAnalytics(); + expect(googleAnalyticsSpy.addTrackingIdToPage).toHaveBeenCalledTimes(1); + })); + }); + }); + + describe('initRouteListeners', () => { + it('should call listenForRouteChanges', inject([InitService], (service) => { + // @ts-ignore + service.initRouteListeners(); + expect(metadataServiceSpy.listenForRouteChange).toHaveBeenCalledTimes(1); + expect(breadcrumbsServiceSpy.listenForRouteChanges).toHaveBeenCalledTimes(1); + })); + }); + + describe('initKlaro', () => { + const BLOCKING = { + t: { core: { auth: { blocking: true } } }, + f: { core: { auth: { blocking: false } } }, + }; + + it('should not error out if KlaroService is not provided', inject([InitService], (service) => { + // @ts-ignore + service.initKlaro(); + })); + + describe('when KlaroService is provided', () => { + let klaroServiceSpy; + + beforeEach(() => { + klaroServiceSpy = jasmine.createSpyObj('klaroServiceSpy', [ + 'initialize', + ]); + + TestBed.overrideProvider(KlaroService, { useValue: klaroServiceSpy }); + }); + + it('should not initialize Klaro while auth is blocking', () => { + getTestScheduler().run(({ cold, flush}) => { + TestBed.overrideProvider(Store, { useValue: cold('t--t--t--', BLOCKING) }); + const service = TestBed.inject(InitService); + + // @ts-ignore + service.initKlaro(); + flush(); + expect(klaroServiceSpy.initialize).not.toHaveBeenCalled(); + }); + }); + + + it('should only initialize Klaro the first time auth is unblocked', () => { + getTestScheduler().run(({ cold, flush}) => { + TestBed.overrideProvider(Store, { useValue: cold('t--t--f--t--f--', BLOCKING) }); + const service = TestBed.inject(InitService); + + // @ts-ignore + service.initKlaro(); + flush(); + expect(klaroServiceSpy.initialize).toHaveBeenCalledTimes(1); + }); + }); + }); + + describe('when KlaroService is not provided', () => { + it('should not error out when auth is unblocked', () => { + getTestScheduler().run(({ cold, flush}) => { + TestBed.overrideProvider(Store, { useValue: cold('t--t--f--t--f--', BLOCKING) }); + const service = TestBed.inject(InitService); + + // @ts-ignore + service.initKlaro(); + flush(); + }); + }); + }); + }); + }); }); diff --git a/src/app/init.service.ts b/src/app/init.service.ts index d8ecf8d23a..e5b04163c0 100644 --- a/src/app/init.service.ts +++ b/src/app/init.service.ts @@ -5,25 +5,50 @@ * * http://www.dspace.org/license/ */ -import { Store } from '@ngrx/store'; +import { select, Store } from '@ngrx/store'; import { CheckAuthenticationTokenAction } from './core/auth/auth.actions'; import { CorrelationIdService } from './correlation-id/correlation-id.service'; import { DSpaceTransferState } from '../modules/transfer-state/dspace-transfer-state.service'; -import { APP_INITIALIZER, Provider, Type } from '@angular/core'; +import { APP_INITIALIZER, Inject, Optional, Provider, Type } from '@angular/core'; import { TransferState } from '@angular/platform-browser'; -import { APP_CONFIG } from '../config/app-config.interface'; +import { APP_CONFIG, AppConfig } from '../config/app-config.interface'; import { environment } from '../environments/environment'; import { AppState } from './app.reducer'; +import { isEqual } from 'lodash'; +import { TranslateService } from '@ngx-translate/core'; +import { LocaleService } from './core/locale/locale.service'; +import { hasValue } from './shared/empty.util'; +import { Angulartics2DSpace } from './statistics/angulartics/dspace-provider'; +import { GoogleAnalyticsService } from './statistics/google-analytics.service'; +import { MetadataService } from './core/metadata/metadata.service'; +import { BreadcrumbsService } from './breadcrumbs/breadcrumbs.service'; +import { distinctUntilChanged, filter, take, tap } from 'rxjs/operators'; +import { isAuthenticationBlocking } from './core/auth/selectors'; +import { KlaroService } from './shared/cookies/klaro.service'; /** * Performs the initialization of the app. + * * Should be extended to implement server- & browser-specific functionality. + * Initialization steps shared between the server and brower implementations + * can be included in this class. + * + * Note that the service cannot (indirectly) depend on injection tokens that are only available _after_ APP_INITIALIZER. + * For example, NgbModal depends on ApplicationRef and can therefore not be used during initialization. */ export abstract class InitService { protected constructor( protected store: Store, protected correlationIdService: CorrelationIdService, protected dspaceTransferState: DSpaceTransferState, + @Inject(APP_CONFIG) protected appConfig: AppConfig, + protected translate: TranslateService, + protected localeService: LocaleService, + protected angulartics2DSpace: Angulartics2DSpace, + @Optional() protected googleAnalyticsService: GoogleAnalyticsService, + protected metadata: MetadataService, + protected breadcrumbsService: BreadcrumbsService, + @Optional() protected klaroService: KlaroService, ) { } @@ -86,15 +111,108 @@ export abstract class InitService { // Common initialization steps + /** + * Dispatch a {@link CheckAuthenticationTokenAction} to start off the chain of + * actions used to determine whether a user is already logged in. + * @protected + */ protected checkAuthenticationToken(): void { this.store.dispatch(new CheckAuthenticationTokenAction()); } + /** + * Initialize the correlation ID (from cookie, NgRx store or random) + * @protected + */ protected initCorrelationId(): void { this.correlationIdService.initCorrelationId(); } + /** + * Transfer the application's NgRx state between server-side and client-side + * @protected + */ protected async transferAppState(): Promise { return this.dspaceTransferState.transfer(); } + + /** + * Make sure the {@link environment} matches {@link APP_CONFIG} and print + * some information about it to the console + * @protected + */ + protected checkEnvironment(): void { + if (!isEqual(environment, this.appConfig)) { + throw new Error('environment does not match app config!'); + } + + if (environment.debug) { + console.info(environment); + } + + const env: string = environment.production ? 'Production' : 'Development'; + const color: string = environment.production ? 'red' : 'green'; + console.info(`Environment: %c${env}`, `color: ${color}; font-weight: bold;`); + } + + /** + * Initialize internationalization services + * - Specify the active languages + * - Set the current locale + * @protected + */ + protected initI18n(): void { + // Load all the languages that are defined as active from the config file + this.translate.addLangs( + environment.languages + .filter((LangConfig) => LangConfig.active === true) + .map((a) => a.code) + ); + + // Load the default language from the config file + // translate.setDefaultLang(environment.defaultLanguage); + + this.localeService.setCurrentLanguageCode(); + } + + /** + * Initialize analytics services + * - Angulartics + * - Google Analytics (if enabled) + * @protected + */ + protected initAnalytics(): void { + if (hasValue(this.googleAnalyticsService)) { + this.googleAnalyticsService.addTrackingIdToPage(); + } + this.angulartics2DSpace.startTracking(); + } + + /** + * Start route-listening subscriptions + * - {@link MetadataService.listenForRouteChange} + * - {@link BreadcrumbsService.listenForRouteChanges} + * @protected + */ + protected initRouteListeners(): void { + this.metadata.listenForRouteChange(); + this.breadcrumbsService.listenForRouteChanges(); + } + + /** + * Initialize Klaro (if enabled) + * @protected + */ + protected initKlaro() { + if (hasValue(this.klaroService)) { + this.store.pipe( + select(isAuthenticationBlocking), + distinctUntilChanged(), + filter((isBlocking: boolean) => isBlocking === false), + take(1) + ).subscribe(() => { + this.klaroService.initialize(); + }); + } + } } diff --git a/src/modules/app/browser-init.service.ts b/src/modules/app/browser-init.service.ts index 5c55795383..f675c55718 100644 --- a/src/modules/app/browser-init.service.ts +++ b/src/modules/app/browser-init.service.ts @@ -10,12 +10,21 @@ import { Store } from '@ngrx/store'; import { AppState } from '../../app/app.reducer'; import { DSpaceTransferState } from '../transfer-state/dspace-transfer-state.service'; import { TransferState } from '@angular/platform-browser'; -import { APP_CONFIG_STATE, AppConfig } from '../../config/app-config.interface'; +import { APP_CONFIG, APP_CONFIG_STATE, AppConfig } from '../../config/app-config.interface'; import { DefaultAppConfig } from '../../config/default-app-config'; import { extendEnvironmentWithAppConfig } from '../../config/config.util'; import { environment } from '../../environments/environment'; import { CorrelationIdService } from '../../app/correlation-id/correlation-id.service'; -import { Injectable } from '@angular/core'; +import { Inject, Injectable, Optional } from '@angular/core'; +import { TranslateService } from '@ngx-translate/core'; +import { LocaleService } from '../../app/core/locale/locale.service'; +import { Angulartics2DSpace } from '../../app/statistics/angulartics/dspace-provider'; +import { GoogleAnalyticsService } from '../../app/statistics/google-analytics.service'; +import { MetadataService } from '../../app/core/metadata/metadata.service'; +import { BreadcrumbsService } from '../../app/breadcrumbs/breadcrumbs.service'; +import { CSSVariableService } from '../../app/shared/sass-helper/sass-helper.service'; +import { KlaroService } from '../../app/shared/cookies/klaro.service'; +import { AuthService } from '../../app/core/auth/auth.service'; /** * Performs client-side initialization. @@ -27,8 +36,30 @@ export class BrowserInitService extends InitService { protected correlationIdService: CorrelationIdService, protected transferState: TransferState, protected dspaceTransferState: DSpaceTransferState, + @Inject(APP_CONFIG) protected appConfig: AppConfig, + protected translate: TranslateService, + protected localeService: LocaleService, + protected angulartics2DSpace: Angulartics2DSpace, + @Optional() protected googleAnalyticsService: GoogleAnalyticsService, + protected metadata: MetadataService, + protected breadcrumbsService: BreadcrumbsService, + protected cssService: CSSVariableService, + @Optional() protected klaroService: KlaroService, + protected authService: AuthService, ) { - super(store, correlationIdService, dspaceTransferState); + super( + store, + correlationIdService, + dspaceTransferState, + appConfig, + translate, + localeService, + angulartics2DSpace, + googleAnalyticsService, + metadata, + breadcrumbsService, + klaroService, + ); } protected static resolveAppConfig( @@ -47,7 +78,22 @@ export class BrowserInitService extends InitService { this.checkAuthenticationToken(); this.initCorrelationId(); + this.checkEnvironment(); + + this.initI18n(); + this.initAnalytics(); + this.initRouteListeners(); + this.trackAuthTokenExpiration(); + + this.initKlaro(); + return true; }; } + + // Browser-only initialization steps + + private trackAuthTokenExpiration(): void { + this.authService.trackTokenExpiration(); + } } diff --git a/src/modules/app/server-init.service.ts b/src/modules/app/server-init.service.ts index 11fcc482ca..fc7fc66bf7 100644 --- a/src/modules/app/server-init.service.ts +++ b/src/modules/app/server-init.service.ts @@ -11,9 +11,17 @@ import { AppState } from '../../app/app.reducer'; import { TransferState } from '@angular/platform-browser'; import { DSpaceTransferState } from '../transfer-state/dspace-transfer-state.service'; import { CorrelationIdService } from '../../app/correlation-id/correlation-id.service'; -import { APP_CONFIG_STATE, AppConfig } from '../../config/app-config.interface'; +import { APP_CONFIG, APP_CONFIG_STATE, AppConfig } from '../../config/app-config.interface'; import { environment } from '../../environments/environment'; -import { Injectable } from '@angular/core'; +import { Inject, Injectable, Optional } from '@angular/core'; +import { TranslateService } from '@ngx-translate/core'; +import { LocaleService } from '../../app/core/locale/locale.service'; +import { Angulartics2DSpace } from '../../app/statistics/angulartics/dspace-provider'; +import { GoogleAnalyticsService } from '../../app/statistics/google-analytics.service'; +import { MetadataService } from '../../app/core/metadata/metadata.service'; +import { BreadcrumbsService } from '../../app/breadcrumbs/breadcrumbs.service'; +import { CSSVariableService } from '../../app/shared/sass-helper/sass-helper.service'; +import { KlaroService } from '../../app/shared/cookies/klaro.service'; /** * Performs server-side initialization. @@ -25,8 +33,29 @@ export class ServerInitService extends InitService { protected correlationIdService: CorrelationIdService, protected transferState: TransferState, protected dspaceTransferState: DSpaceTransferState, + @Inject(APP_CONFIG) protected appConfig: AppConfig, + protected translate: TranslateService, + protected localeService: LocaleService, + protected angulartics2DSpace: Angulartics2DSpace, + @Optional() protected googleAnalyticsService: GoogleAnalyticsService, + protected metadata: MetadataService, + protected breadcrumbsService: BreadcrumbsService, + protected cssService: CSSVariableService, + @Optional() protected klaroService: KlaroService, ) { - super(store, correlationIdService, dspaceTransferState); + super( + store, + correlationIdService, + dspaceTransferState, + appConfig, + translate, + localeService, + angulartics2DSpace, + googleAnalyticsService, + metadata, + breadcrumbsService, + klaroService, + ); } protected init(): () => Promise { @@ -36,10 +65,19 @@ export class ServerInitService extends InitService { this.transferAppState(); // todo: SSR breaks if we await this (why?) this.initCorrelationId(); + this.checkEnvironment(); + this.initI18n(); + this.initAnalytics(); + this.initRouteListeners(); + + this.initKlaro(); + return true; }; } + // Server-only initialization steps + private saveAppConfigForCSR(): void { this.transferState.set(APP_CONFIG_STATE, environment as AppConfig); } From bdc004f64dbeae554e97cb45158e90bf5ac7b1f3 Mon Sep 17 00:00:00 2001 From: Yura Bondarenko Date: Fri, 22 Jul 2022 12:12:21 +0200 Subject: [PATCH 06/39] 93219: Move theme/route subscriptions from AppComponent to ThemeService --- src/app/app.component.spec.ts | 31 +-- src/app/app.component.ts | 183 +----------------- src/app/core/shared/distinct-next.ts | 18 ++ src/app/init.service.spec.ts | 3 + src/app/init.service.ts | 4 + src/app/navbar/navbar.component.html | 4 +- src/app/shared/mocks/theme-service.mock.ts | 1 + .../theme-support/theme.service.spec.ts | 57 +++++- src/app/shared/theme-support/theme.service.ts | 176 ++++++++++++++++- src/modules/app/browser-init.service.ts | 4 + src/modules/app/server-init.service.ts | 4 + 11 files changed, 268 insertions(+), 217 deletions(-) create mode 100644 src/app/core/shared/distinct-next.ts diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts index 4cf3f3b6e7..0e86beeedb 100644 --- a/src/app/app.component.spec.ts +++ b/src/app/app.component.spec.ts @@ -1,7 +1,7 @@ import { Store, StoreModule } from '@ngrx/store'; import { ComponentFixture, inject, TestBed, waitForAsync } from '@angular/core/testing'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { CommonModule, DOCUMENT } from '@angular/common'; +import { CommonModule } from '@angular/common'; import { ActivatedRoute, Router } from '@angular/router'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; import { Angulartics2GoogleAnalytics } from 'angulartics2/ga'; @@ -129,33 +129,4 @@ describe('App component', () => { }); }); - - describe('when ThemeService returns a custom theme', () => { - let document; - let headSpy; - - beforeEach(() => { - // NOTE: Cannot override providers once components have been compiled, so TestBed needs to be reset - TestBed.resetTestingModule(); - TestBed.configureTestingModule(getDefaultTestBedConf()); - TestBed.overrideProvider(ThemeService, {useValue: getMockThemeService('custom')}); - document = TestBed.inject(DOCUMENT); - headSpy = jasmine.createSpyObj('head', ['appendChild', 'getElementsByClassName']); - headSpy.getElementsByClassName.and.returnValue([]); - spyOn(document, 'getElementsByTagName').and.returnValue([headSpy]); - fixture = TestBed.createComponent(AppComponent); - comp = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should append a link element with the correct attributes to the head element', () => { - const link = document.createElement('link'); - link.setAttribute('rel', 'stylesheet'); - link.setAttribute('type', 'text/css'); - link.setAttribute('class', 'theme-css'); - link.setAttribute('href', '/custom-theme.css'); - - expect(headSpy.appendChild).toHaveBeenCalledWith(link); - }); - }); }); diff --git a/src/app/app.component.ts b/src/app/app.component.ts index c7b99b42a8..98e91c9c31 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,4 +1,4 @@ -import { distinctUntilChanged, filter, switchMap, take, withLatestFrom } from 'rxjs/operators'; +import { distinctUntilChanged, take, withLatestFrom } from 'rxjs/operators'; import { DOCUMENT, isPlatformBrowser } from '@angular/common'; import { AfterViewInit, @@ -7,14 +7,12 @@ import { HostListener, Inject, OnInit, - Optional, PLATFORM_ID, } from '@angular/core'; import { - ActivatedRouteSnapshot, NavigationCancel, NavigationEnd, - NavigationStart, ResolveEnd, + NavigationStart, Router, } from '@angular/router'; @@ -28,14 +26,11 @@ import { NativeWindowRef, NativeWindowService } from './core/services/window.ser import { isAuthenticationBlocking } from './core/auth/selectors'; import { AuthService } from './core/auth/auth.service'; import { CSSVariableService } from './shared/sass-helper/sass-helper.service'; -import { HeadTagConfig } from '../config/theme.model'; import { environment } from '../environments/environment'; import { models } from './core/core.module'; -import { hasNoValue, hasValue, isNotEmpty } from './shared/empty.util'; import { ThemeService } from './shared/theme-support/theme.service'; -import { BASE_THEME_NAME } from './shared/theme-support/theme.constants'; import { IdleModalComponent } from './shared/idle-modal/idle-modal.component'; -import { getDefaultThemeConfig } from '../config/config.util'; +import { distinctNext } from './core/shared/distinct-next'; @Component({ selector: 'ds-app', @@ -60,9 +55,7 @@ export class AppComponent implements OnInit, AfterViewInit { /** * Whether or not the theme is in the process of being swapped */ - isThemeLoading$: BehaviorSubject = new BehaviorSubject(false); - - isThemeCSSLoading$: BehaviorSubject = new BehaviorSubject(false); + isThemeLoading$: Observable; /** * Whether or not the idle modal is is currently open @@ -86,27 +79,12 @@ export class AppComponent implements OnInit, AfterViewInit { /* Use models object so all decorators are actually called */ this.models = models; - this.themeService.getThemeName$().subscribe((themeName: string) => { - if (isPlatformBrowser(this.platformId)) { - // the theme css will never download server side, so this should only happen on the browser - this.distinctNext(this.isThemeCSSLoading$, true); - } - if (hasValue(themeName)) { - this.loadGlobalThemeConfig(themeName); - } else { - const defaultThemeConfig = getDefaultThemeConfig(); - if (hasValue(defaultThemeConfig)) { - this.loadGlobalThemeConfig(defaultThemeConfig.name); - } else { - this.loadGlobalThemeConfig(BASE_THEME_NAME); - } - } - }); - if (isPlatformBrowser(this.platformId)) { this.trackIdleModal(); } + this.isThemeLoading$ = this.themeService.isThemeLoading$; + this.storeCSSVariables(); } @@ -135,34 +113,14 @@ export class AppComponent implements OnInit, AfterViewInit { } ngAfterViewInit() { - let resolveEndFound = false; this.router.events.subscribe((event) => { if (event instanceof NavigationStart) { - resolveEndFound = false; - this.distinctNext(this.isRouteLoading$, true); - this.distinctNext(this.isThemeLoading$, true); - } else if (event instanceof ResolveEnd) { - resolveEndFound = true; - const activatedRouteSnapShot: ActivatedRouteSnapshot = event.state.root; - this.themeService.updateThemeOnRouteChange$(event.urlAfterRedirects, activatedRouteSnapShot).pipe( - switchMap((changed) => { - if (changed) { - return this.isThemeCSSLoading$; - } else { - return [false]; - } - }) - ).subscribe((changed) => { - this.distinctNext(this.isThemeLoading$, changed); - }); + distinctNext(this.isRouteLoading$, true); } else if ( event instanceof NavigationEnd || event instanceof NavigationCancel ) { - if (!resolveEndFound) { - this.distinctNext(this.isThemeLoading$, false); - } - this.distinctNext(this.isRouteLoading$, false); + distinctNext(this.isRouteLoading$, false); } }); } @@ -178,119 +136,6 @@ export class AppComponent implements OnInit, AfterViewInit { ); } - private loadGlobalThemeConfig(themeName: string): void { - this.setThemeCss(themeName); - this.setHeadTags(themeName); - } - - /** - * Update the theme css file in - * - * @param themeName The name of the new theme - * @private - */ - private setThemeCss(themeName: string): void { - const head = this.document.getElementsByTagName('head')[0]; - if (hasNoValue(head)) { - return; - } - - // Array.from to ensure we end up with an array, not an HTMLCollection, which would be - // automatically updated if we add nodes later - const currentThemeLinks = Array.from(head.getElementsByClassName('theme-css')); - const link = this.document.createElement('link'); - link.setAttribute('rel', 'stylesheet'); - link.setAttribute('type', 'text/css'); - link.setAttribute('class', 'theme-css'); - link.setAttribute('href', `/${encodeURIComponent(themeName)}-theme.css`); - // wait for the new css to download before removing the old one to prevent a - // flash of unstyled content - link.onload = () => { - if (isNotEmpty(currentThemeLinks)) { - currentThemeLinks.forEach((currentThemeLink: any) => { - if (hasValue(currentThemeLink)) { - currentThemeLink.remove(); - } - }); - } - // the fact that this callback is used, proves we're on the browser. - this.distinctNext(this.isThemeCSSLoading$, false); - }; - head.appendChild(link); - } - - private setHeadTags(themeName: string): void { - const head = this.document.getElementsByTagName('head')[0]; - if (hasNoValue(head)) { - return; - } - - // clear head tags - const currentHeadTags = Array.from(head.getElementsByClassName('theme-head-tag')); - if (hasValue(currentHeadTags)) { - currentHeadTags.forEach((currentHeadTag: any) => currentHeadTag.remove()); - } - - // create new head tags (not yet added to DOM) - const headTagFragment = this.document.createDocumentFragment(); - this.createHeadTags(themeName) - .forEach(newHeadTag => headTagFragment.appendChild(newHeadTag)); - - // add new head tags to DOM - head.appendChild(headTagFragment); - } - - private createHeadTags(themeName: string): HTMLElement[] { - const themeConfig = this.themeService.getThemeConfigFor(themeName); - const headTagConfigs = themeConfig?.headTags; - - if (hasNoValue(headTagConfigs)) { - const parentThemeName = themeConfig?.extends; - if (hasValue(parentThemeName)) { - // inherit the head tags of the parent theme - return this.createHeadTags(parentThemeName); - } - const defaultThemeConfig = getDefaultThemeConfig(); - const defaultThemeName = defaultThemeConfig.name; - if ( - hasNoValue(defaultThemeName) || - themeName === defaultThemeName || - themeName === BASE_THEME_NAME - ) { - // last resort, use fallback favicon.ico - return [ - this.createHeadTag({ - 'tagName': 'link', - 'attributes': { - 'rel': 'icon', - 'href': 'assets/images/favicon.ico', - 'sizes': 'any', - } - }) - ]; - } - - // inherit the head tags of the default theme - return this.createHeadTags(defaultThemeConfig.name); - } - - return headTagConfigs.map(this.createHeadTag.bind(this)); - } - - private createHeadTag(headTagConfig: HeadTagConfig): HTMLElement { - const tag = this.document.createElement(headTagConfig.tagName); - - if (hasValue(headTagConfig.attributes)) { - Object.entries(headTagConfig.attributes) - .forEach(([key, value]) => tag.setAttribute(key, value)); - } - - // 'class' attribute should always be 'theme-head-tag' for removal - tag.setAttribute('class', 'theme-head-tag'); - - return tag; - } - private trackIdleModal() { const isIdle$ = this.authService.isUserIdle(); const isAuthenticated$ = this.authService.isAuthenticated(); @@ -310,16 +155,4 @@ export class AppComponent implements OnInit, AfterViewInit { }); } - /** - * Use nextValue to update a given BehaviorSubject, only if it differs from its current value - * - * @param bs a BehaviorSubject - * @param nextValue the next value for that BehaviorSubject - * @protected - */ - protected distinctNext(bs: BehaviorSubject, nextValue: T): void { - if (bs.getValue() !== nextValue) { - bs.next(nextValue); - } - } } diff --git a/src/app/core/shared/distinct-next.ts b/src/app/core/shared/distinct-next.ts new file mode 100644 index 0000000000..0ee3d237d4 --- /dev/null +++ b/src/app/core/shared/distinct-next.ts @@ -0,0 +1,18 @@ +/* + * something something atmire + */ + +import { BehaviorSubject } from 'rxjs'; + +/** + * Use nextValue to update a given BehaviorSubject, only if it differs from its current value + * + * @param bs a BehaviorSubject + * @param nextValue the next value for that BehaviorSubject + * @protected + */ +export function distinctNext(bs: BehaviorSubject, nextValue: T): void { + if (bs.getValue() !== nextValue) { + bs.next(nextValue); + } +} diff --git a/src/app/init.service.spec.ts b/src/app/init.service.spec.ts index 7fb555f23c..c046ad5715 100644 --- a/src/app/init.service.spec.ts +++ b/src/app/init.service.spec.ts @@ -33,6 +33,8 @@ import { getTestScheduler } from 'jasmine-marbles'; import objectContaining = jasmine.objectContaining; import createSpyObj = jasmine.createSpyObj; import SpyObj = jasmine.SpyObj; +import { ThemeService } from './shared/theme-support/theme.service'; +import { getMockThemeService } from './shared/mocks/theme-service.mock'; let spy: SpyObj; @@ -171,6 +173,7 @@ describe('InitService', () => { { provide: MenuService, useValue: new MenuServiceStub() }, { provide: KlaroService, useValue: undefined }, { provide: GoogleAnalyticsService, useValue: undefined }, + { provide: ThemeService, useValue: getMockThemeService() }, provideMockStore({ initialState }), AppComponent, RouteService, diff --git a/src/app/init.service.ts b/src/app/init.service.ts index e5b04163c0..62461212d2 100644 --- a/src/app/init.service.ts +++ b/src/app/init.service.ts @@ -25,6 +25,7 @@ import { BreadcrumbsService } from './breadcrumbs/breadcrumbs.service'; import { distinctUntilChanged, filter, take, tap } from 'rxjs/operators'; import { isAuthenticationBlocking } from './core/auth/selectors'; import { KlaroService } from './shared/cookies/klaro.service'; +import { ThemeService } from './shared/theme-support/theme.service'; /** * Performs the initialization of the app. @@ -49,6 +50,7 @@ export abstract class InitService { protected metadata: MetadataService, protected breadcrumbsService: BreadcrumbsService, @Optional() protected klaroService: KlaroService, + protected themeService: ThemeService, ) { } @@ -192,11 +194,13 @@ export abstract class InitService { * Start route-listening subscriptions * - {@link MetadataService.listenForRouteChange} * - {@link BreadcrumbsService.listenForRouteChanges} + * - {@link ThemeService.listenForRouteChanges} * @protected */ protected initRouteListeners(): void { this.metadata.listenForRouteChange(); this.breadcrumbsService.listenForRouteChanges(); + this.themeService.listenForRouteChanges(); } /** diff --git a/src/app/navbar/navbar.component.html b/src/app/navbar/navbar.component.html index fc5d1a2ef3..8531543361 100644 --- a/src/app/navbar/navbar.component.html +++ b/src/app/navbar/navbar.component.html @@ -6,10 +6,10 @@
- \ No newline at end of file + diff --git a/src/app/shared/mocks/theme-service.mock.ts b/src/app/shared/mocks/theme-service.mock.ts index 058ba993bc..e3c2960e51 100644 --- a/src/app/shared/mocks/theme-service.mock.ts +++ b/src/app/shared/mocks/theme-service.mock.ts @@ -8,6 +8,7 @@ export function getMockThemeService(themeName = 'base', themes?: ThemeConfig[]): getThemeName: themeName, getThemeName$: observableOf(themeName), getThemeConfigFor: undefined, + listenForRouteChanges: undefined, }); if (isNotEmpty(themes)) { diff --git a/src/app/shared/theme-support/theme.service.spec.ts b/src/app/shared/theme-support/theme.service.spec.ts index 84043369c0..43b5964b8c 100644 --- a/src/app/shared/theme-support/theme.service.spec.ts +++ b/src/app/shared/theme-support/theme.service.spec.ts @@ -2,7 +2,7 @@ import { of as observableOf } from 'rxjs'; import { TestBed } from '@angular/core/testing'; import { provideMockActions } from '@ngrx/effects/testing'; import { LinkService } from '../../core/cache/builders/link.service'; -import { cold, hot } from 'jasmine-marbles'; +import { hot } from 'jasmine-marbles'; import { SetThemeAction } from './theme.actions'; import { Theme } from '../../../config/theme.model'; import { provideMockStore } from '@ngrx/store/testing'; @@ -21,7 +21,9 @@ import { import { DSpaceObjectDataService } from '../../core/data/dspace-object-data.service'; import { ThemeService } from './theme.service'; import { ROUTER_NAVIGATED } from '@ngrx/router-store'; -import { ActivatedRouteSnapshot } from '@angular/router'; +import { ActivatedRouteSnapshot, Router } from '@angular/router'; +import { CommonModule, DOCUMENT } from '@angular/common'; +import { RouterMock } from '../mocks/router.mock'; /** * LinkService able to mock recursively resolving DSO parent links @@ -84,12 +86,16 @@ describe('ThemeService', () => { findById: () => createSuccessfulRemoteDataObject$(mockCommunity) }; TestBed.configureTestingModule({ + imports: [ + CommonModule, + ], providers: [ ThemeService, { provide: LinkService, useValue: linkService }, provideMockStore({ initialState }), provideMockActions(() => mockActions), - { provide: DSpaceObjectDataService, useValue: mockDsoService } + { provide: DSpaceObjectDataService, useValue: mockDsoService }, + { provide: Router, useValue: new RouterMock() }, ] }); @@ -367,4 +373,49 @@ describe('ThemeService', () => { }); }); }); + + describe('listenForThemeChanges', () => { + let document; + let headSpy; + + beforeEach(() => { + const mockDsoService = { + findById: () => createSuccessfulRemoteDataObject$(mockCommunity) + }; + + TestBed.configureTestingModule({ + imports: [ + CommonModule, + ], + providers: [ + ThemeService, + { provide: LinkService, useValue: linkService }, + provideMockStore({ initialState }), + { provide: DSpaceObjectDataService, useValue: mockDsoService }, + { provide: Router, useValue: new RouterMock() }, + ] + }); + + document = TestBed.inject(DOCUMENT); + headSpy = jasmine.createSpyObj('head', ['appendChild', 'getElementsByClassName']); + headSpy.getElementsByClassName.and.returnValue([]); + spyOn(document, 'getElementsByTagName').and.returnValue([headSpy]); + + themeService = TestBed.inject(ThemeService); + spyOn(themeService, 'getThemeName').and.returnValue('custom'); + spyOn(themeService, 'getThemeName$').and.returnValue(observableOf('custom')); + }); + + it('should append a link element with the correct attributes to the head element', () => { + themeService.listenForThemeChanges(true); + + const link = document.createElement('link'); + link.setAttribute('rel', 'stylesheet'); + link.setAttribute('type', 'text/css'); + link.setAttribute('class', 'theme-css'); + link.setAttribute('href', '/custom-theme.css'); + + expect(headSpy.appendChild).toHaveBeenCalledWith(link); + }); + }); }); diff --git a/src/app/shared/theme-support/theme.service.ts b/src/app/shared/theme-support/theme.service.ts index 4a4f6ae986..7642b7097e 100644 --- a/src/app/shared/theme-support/theme.service.ts +++ b/src/app/shared/theme-support/theme.service.ts @@ -1,10 +1,10 @@ -import { Injectable, Inject } from '@angular/core'; -import { Store, createFeatureSelector, createSelector, select } from '@ngrx/store'; -import { EMPTY, Observable, of as observableOf } from 'rxjs'; +import { Inject, Injectable } from '@angular/core'; +import { createFeatureSelector, createSelector, select, Store } from '@ngrx/store'; +import { BehaviorSubject, EMPTY, Observable, of as observableOf } from 'rxjs'; import { ThemeState } from './theme.reducer'; import { SetThemeAction, ThemeActionTypes } from './theme.actions'; import { expand, filter, map, switchMap, take, toArray } from 'rxjs/operators'; -import { hasValue, isNotEmpty } from '../empty.util'; +import { hasNoValue, hasValue, isNotEmpty } from '../empty.util'; import { RemoteData } from '../../core/data/remote-data'; import { DSpaceObject } from '../../core/shared/dspace-object.model'; import { @@ -12,14 +12,18 @@ import { getFirstSucceededRemoteData, getRemoteDataPayload } from '../../core/shared/operators'; -import { Theme, ThemeConfig, themeFactory } from '../../../config/theme.model'; +import { HeadTagConfig, Theme, ThemeConfig, themeFactory } from '../../../config/theme.model'; import { NO_OP_ACTION_TYPE, NoOpAction } from '../ngrx/no-op.action'; import { followLink } from '../utils/follow-link-config.model'; import { LinkService } from '../../core/cache/builders/link.service'; import { environment } from '../../../environments/environment'; import { DSpaceObjectDataService } from '../../core/data/dspace-object-data.service'; -import { ActivatedRouteSnapshot } from '@angular/router'; +import { ActivatedRouteSnapshot, ResolveEnd, Router } from '@angular/router'; import { GET_THEME_CONFIG_FOR_FACTORY } from '../object-collection/shared/listable-object/listable-object.decorator'; +import { distinctNext } from 'src/app/core/shared/distinct-next'; +import { DOCUMENT } from '@angular/common'; +import { getDefaultThemeConfig } from '../../../config/config.util'; +import { BASE_THEME_NAME } from './theme.constants'; export const themeStateSelector = createFeatureSelector('theme'); @@ -42,11 +46,16 @@ export class ThemeService { */ hasDynamicTheme: boolean; + private _isThemeLoading$ = new BehaviorSubject(false); + private _isThemeCSSLoading$ = new BehaviorSubject(false); + constructor( private store: Store, private linkService: LinkService, private dSpaceObjectDataService: DSpaceObjectDataService, - @Inject(GET_THEME_CONFIG_FOR_FACTORY) private gtcf: (str) => ThemeConfig + @Inject(GET_THEME_CONFIG_FOR_FACTORY) private gtcf: (str) => ThemeConfig, + private router: Router, + @Inject(DOCUMENT) private document: any, ) { // Create objects from the theme configs in the environment file this.themes = environment.themes.map((themeConfig: ThemeConfig) => themeFactory(themeConfig)); @@ -78,6 +87,159 @@ export class ThemeService { ); } + get isThemeLoading$(): Observable { + return this._isThemeLoading$; + } + + listenForThemeChanges(isBrowser: boolean): void { + this.getThemeName$().subscribe((themeName: string) => { + if (isBrowser) { + // the theme css will never download server side, so this should only happen on the browser + distinctNext(this._isThemeCSSLoading$, true); + } + if (hasValue(themeName)) { + this.loadGlobalThemeConfig(themeName); + } else { + const defaultThemeConfig = getDefaultThemeConfig(); + if (hasValue(defaultThemeConfig)) { + this.loadGlobalThemeConfig(defaultThemeConfig.name); + } else { + this.loadGlobalThemeConfig(BASE_THEME_NAME); + } + } + }); + } + + listenForRouteChanges(): void { + this.router.events.pipe( + filter(event => event instanceof ResolveEnd), + switchMap((event: ResolveEnd) => this.updateThemeOnRouteChange$(event.urlAfterRedirects, event.state.root)), + switchMap((changed) => { + if (changed) { + return this._isThemeCSSLoading$; + } else { + return [false]; + } + }) + ).subscribe((changed) => { + distinctNext(this._isThemeLoading$, changed); + }); + } + + private loadGlobalThemeConfig(themeName: string): void { + this.setThemeCss(themeName); + this.setHeadTags(themeName); + } + + /** + * Update the theme css file in + * + * @param themeName The name of the new theme + * @private + */ + private setThemeCss(themeName: string): void { + const head = this.document.getElementsByTagName('head')[0]; + if (hasNoValue(head)) { + return; + } + + // Array.from to ensure we end up with an array, not an HTMLCollection, which would be + // automatically updated if we add nodes later + const currentThemeLinks = Array.from(head.getElementsByClassName('theme-css')); + const link = this.document.createElement('link'); + link.setAttribute('rel', 'stylesheet'); + link.setAttribute('type', 'text/css'); + link.setAttribute('class', 'theme-css'); + link.setAttribute('href', `/${encodeURIComponent(themeName)}-theme.css`); + // wait for the new css to download before removing the old one to prevent a + // flash of unstyled content + link.onload = () => { + if (isNotEmpty(currentThemeLinks)) { + currentThemeLinks.forEach((currentThemeLink: any) => { + if (hasValue(currentThemeLink)) { + currentThemeLink.remove(); + } + }); + } + // the fact that this callback is used, proves we're on the browser. + distinctNext(this._isThemeCSSLoading$, false); + }; + head.appendChild(link); + } + + private setHeadTags(themeName: string): void { + const head = this.document.getElementsByTagName('head')[0]; + if (hasNoValue(head)) { + return; + } + + // clear head tags + const currentHeadTags = Array.from(head.getElementsByClassName('theme-head-tag')); + if (hasValue(currentHeadTags)) { + currentHeadTags.forEach((currentHeadTag: any) => currentHeadTag.remove()); + } + + // create new head tags (not yet added to DOM) + const headTagFragment = this.document.createDocumentFragment(); + this.createHeadTags(themeName) + .forEach(newHeadTag => headTagFragment.appendChild(newHeadTag)); + + // add new head tags to DOM + head.appendChild(headTagFragment); + } + + private createHeadTags(themeName: string): HTMLElement[] { + const themeConfig = this.getThemeConfigFor(themeName); + const headTagConfigs = themeConfig?.headTags; + + if (hasNoValue(headTagConfigs)) { + const parentThemeName = themeConfig?.extends; + if (hasValue(parentThemeName)) { + // inherit the head tags of the parent theme + return this.createHeadTags(parentThemeName); + } + const defaultThemeConfig = getDefaultThemeConfig(); + const defaultThemeName = defaultThemeConfig.name; + if ( + hasNoValue(defaultThemeName) || + themeName === defaultThemeName || + themeName === BASE_THEME_NAME + ) { + // last resort, use fallback favicon.ico + return [ + this.createHeadTag({ + 'tagName': 'link', + 'attributes': { + 'rel': 'icon', + 'href': 'assets/images/favicon.ico', + 'sizes': 'any', + } + }) + ]; + } + + // inherit the head tags of the default theme + return this.createHeadTags(defaultThemeConfig.name); + } + + return headTagConfigs.map(this.createHeadTag.bind(this)); + } + + private createHeadTag(headTagConfig: HeadTagConfig): HTMLElement { + const tag = this.document.createElement(headTagConfig.tagName); + + if (hasValue(headTagConfig.attributes)) { + Object.entries(headTagConfig.attributes) + .forEach(([key, value]) => tag.setAttribute(key, value)); + } + + // 'class' attribute should always be 'theme-head-tag' for removal + tag.setAttribute('class', 'theme-head-tag'); + + return tag; + } + + /** * Determine whether or not the theme needs to change depending on the current route's URL and snapshot data * If the snapshot contains a dso, this will be used to match a theme diff --git a/src/modules/app/browser-init.service.ts b/src/modules/app/browser-init.service.ts index f675c55718..e5718045c6 100644 --- a/src/modules/app/browser-init.service.ts +++ b/src/modules/app/browser-init.service.ts @@ -25,6 +25,7 @@ import { BreadcrumbsService } from '../../app/breadcrumbs/breadcrumbs.service'; import { CSSVariableService } from '../../app/shared/sass-helper/sass-helper.service'; import { KlaroService } from '../../app/shared/cookies/klaro.service'; import { AuthService } from '../../app/core/auth/auth.service'; +import { ThemeService } from '../../app/shared/theme-support/theme.service'; /** * Performs client-side initialization. @@ -46,6 +47,7 @@ export class BrowserInitService extends InitService { protected cssService: CSSVariableService, @Optional() protected klaroService: KlaroService, protected authService: AuthService, + protected themeService: ThemeService, ) { super( store, @@ -59,6 +61,7 @@ export class BrowserInitService extends InitService { metadata, breadcrumbsService, klaroService, + themeService, ); } @@ -83,6 +86,7 @@ export class BrowserInitService extends InitService { this.initI18n(); this.initAnalytics(); this.initRouteListeners(); + this.themeService.listenForThemeChanges(true); this.trackAuthTokenExpiration(); this.initKlaro(); diff --git a/src/modules/app/server-init.service.ts b/src/modules/app/server-init.service.ts index fc7fc66bf7..9e23bbeef3 100644 --- a/src/modules/app/server-init.service.ts +++ b/src/modules/app/server-init.service.ts @@ -22,6 +22,7 @@ import { MetadataService } from '../../app/core/metadata/metadata.service'; import { BreadcrumbsService } from '../../app/breadcrumbs/breadcrumbs.service'; import { CSSVariableService } from '../../app/shared/sass-helper/sass-helper.service'; import { KlaroService } from '../../app/shared/cookies/klaro.service'; +import { ThemeService } from '../../app/shared/theme-support/theme.service'; /** * Performs server-side initialization. @@ -42,6 +43,7 @@ export class ServerInitService extends InitService { protected breadcrumbsService: BreadcrumbsService, protected cssService: CSSVariableService, @Optional() protected klaroService: KlaroService, + protected themeService: ThemeService, ) { super( store, @@ -55,6 +57,7 @@ export class ServerInitService extends InitService { metadata, breadcrumbsService, klaroService, + themeService, ); } @@ -69,6 +72,7 @@ export class ServerInitService extends InitService { this.initI18n(); this.initAnalytics(); this.initRouteListeners(); + this.themeService.listenForThemeChanges(false); this.initKlaro(); From 5ff80a8a02e38ddca2e68f9a7ea80faca4eb0d59 Mon Sep 17 00:00:00 2001 From: Yura Bondarenko Date: Fri, 22 Jul 2022 13:31:46 +0200 Subject: [PATCH 07/39] 93219: Fold DSpaceTransferState into InitService --- src/app/init.service.spec.ts | 2 -- src/app/init.service.ts | 18 ++++++-------- src/modules/app/browser-app.module.ts | 6 ++--- src/modules/app/browser-init.service.ts | 24 +++++++++++++++---- src/modules/app/server-app.module.ts | 5 ++-- src/modules/app/server-init.service.ts | 21 ++++++++++++---- .../dspace-browser-transfer-state.module.ts | 16 ------------- .../dspace-browser-transfer-state.service.ts | 19 --------------- .../dspace-server-transfer-state.module.ts | 16 ------------- .../dspace-server-transfer-state.service.ts | 20 ---------------- .../dspace-transfer-state.service.ts | 18 -------------- 11 files changed, 48 insertions(+), 117 deletions(-) delete mode 100644 src/modules/transfer-state/dspace-browser-transfer-state.module.ts delete mode 100644 src/modules/transfer-state/dspace-browser-transfer-state.service.ts delete mode 100644 src/modules/transfer-state/dspace-server-transfer-state.module.ts delete mode 100644 src/modules/transfer-state/dspace-server-transfer-state.service.ts delete mode 100644 src/modules/transfer-state/dspace-transfer-state.service.ts diff --git a/src/app/init.service.spec.ts b/src/app/init.service.spec.ts index c046ad5715..181fe58700 100644 --- a/src/app/init.service.spec.ts +++ b/src/app/init.service.spec.ts @@ -25,7 +25,6 @@ import { RouteService } from './core/services/route.service'; import { getMockLocaleService } from './app.component.spec'; import { MenuServiceStub } from './shared/testing/menu-service.stub'; import { CorrelationIdService } from './correlation-id/correlation-id.service'; -import { DSpaceTransferState } from '../modules/transfer-state/dspace-transfer-state.service'; import { KlaroService } from './shared/cookies/klaro.service'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; import { TranslateLoaderMock } from './shared/mocks/translate-loader.mock'; @@ -161,7 +160,6 @@ describe('InitService', () => { providers: [ { provide: InitService, useClass: ConcreteInitServiceMock }, { provide: CorrelationIdService, useValue: correlationIdServiceSpy }, - { provide: DSpaceTransferState, useValue: dspaceTransferStateSpy }, { provide: APP_CONFIG, useValue: environment }, { provide: LocaleService, useValue: getMockLocaleService() }, { provide: Angulartics2DSpace, useValue: new AngularticsProviderMock() }, diff --git a/src/app/init.service.ts b/src/app/init.service.ts index 62461212d2..ae04b6a82e 100644 --- a/src/app/init.service.ts +++ b/src/app/init.service.ts @@ -8,9 +8,8 @@ import { select, Store } from '@ngrx/store'; import { CheckAuthenticationTokenAction } from './core/auth/auth.actions'; import { CorrelationIdService } from './correlation-id/correlation-id.service'; -import { DSpaceTransferState } from '../modules/transfer-state/dspace-transfer-state.service'; import { APP_INITIALIZER, Inject, Optional, Provider, Type } from '@angular/core'; -import { TransferState } from '@angular/platform-browser'; +import { makeStateKey, TransferState } from '@angular/platform-browser'; import { APP_CONFIG, AppConfig } from '../config/app-config.interface'; import { environment } from '../environments/environment'; import { AppState } from './app.reducer'; @@ -38,10 +37,15 @@ import { ThemeService } from './shared/theme-support/theme.service'; * For example, NgbModal depends on ApplicationRef and can therefore not be used during initialization. */ export abstract class InitService { + /** + * The state transfer key to use for the NgRx store state + * @protected + */ + protected static NGRX_STATE = makeStateKey('NGRX_STATE'); + protected constructor( protected store: Store, protected correlationIdService: CorrelationIdService, - protected dspaceTransferState: DSpaceTransferState, @Inject(APP_CONFIG) protected appConfig: AppConfig, protected translate: TranslateService, protected localeService: LocaleService, @@ -130,14 +134,6 @@ export abstract class InitService { this.correlationIdService.initCorrelationId(); } - /** - * Transfer the application's NgRx state between server-side and client-side - * @protected - */ - protected async transferAppState(): Promise { - return this.dspaceTransferState.transfer(); - } - /** * Make sure the {@link environment} matches {@link APP_CONFIG} and print * some information about it to the console diff --git a/src/modules/app/browser-app.module.ts b/src/modules/app/browser-app.module.ts index cd3feedad8..d857b14dbd 100644 --- a/src/modules/app/browser-app.module.ts +++ b/src/modules/app/browser-app.module.ts @@ -1,6 +1,6 @@ import { HttpClient, HttpClientModule } from '@angular/common/http'; import { NgModule } from '@angular/core'; -import { BrowserModule, makeStateKey, TransferState } from '@angular/platform-browser'; +import { BrowserModule, BrowserTransferStateModule, makeStateKey, TransferState } from '@angular/platform-browser'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { REQUEST } from '@nguniversal/express-engine/tokens'; @@ -12,7 +12,6 @@ import { IdlePreloadModule } from 'angular-idle-preload'; import { AppComponent } from '../../app/app.component'; import { AppModule } from '../../app/app.module'; -import { DSpaceBrowserTransferStateModule } from '../transfer-state/dspace-browser-transfer-state.module'; import { ClientCookieService } from '../../app/core/services/client-cookie.service'; import { CookieService } from '../../app/core/services/cookie.service'; import { AuthService } from '../../app/core/auth/auth.service'; @@ -28,7 +27,6 @@ import { GoogleAnalyticsService } from '../../app/statistics/google-analytics.se import { AuthRequestService } from '../../app/core/auth/auth-request.service'; import { BrowserAuthRequestService } from '../../app/core/auth/browser-auth-request.service'; import { BrowserInitService } from './browser-init.service'; -import { InitService } from '../../app/init.service'; export const REQ_KEY = makeStateKey('req'); @@ -52,7 +50,7 @@ export function getRequest(transferState: TransferState): any { StatisticsModule.forRoot(), Angulartics2RouterlessModule.forRoot(), BrowserAnimationsModule, - DSpaceBrowserTransferStateModule, + BrowserTransferStateModule, TranslateModule.forRoot({ loader: { provide: TranslateLoader, diff --git a/src/modules/app/browser-init.service.ts b/src/modules/app/browser-init.service.ts index e5718045c6..28d2e0aad5 100644 --- a/src/modules/app/browser-init.service.ts +++ b/src/modules/app/browser-init.service.ts @@ -8,7 +8,6 @@ import { InitService } from '../../app/init.service'; import { Store } from '@ngrx/store'; import { AppState } from '../../app/app.reducer'; -import { DSpaceTransferState } from '../transfer-state/dspace-transfer-state.service'; import { TransferState } from '@angular/platform-browser'; import { APP_CONFIG, APP_CONFIG_STATE, AppConfig } from '../../config/app-config.interface'; import { DefaultAppConfig } from '../../config/default-app-config'; @@ -26,6 +25,10 @@ import { CSSVariableService } from '../../app/shared/sass-helper/sass-helper.ser import { KlaroService } from '../../app/shared/cookies/klaro.service'; import { AuthService } from '../../app/core/auth/auth.service'; import { ThemeService } from '../../app/shared/theme-support/theme.service'; +import { StoreAction, StoreActionTypes } from '../../app/store.actions'; +import { coreSelector } from '../../app/core/core.selectors'; +import { find, map } from 'rxjs/operators'; +import { isNotEmpty } from '../../app/shared/empty.util'; /** * Performs client-side initialization. @@ -36,7 +39,6 @@ export class BrowserInitService extends InitService { protected store: Store, protected correlationIdService: CorrelationIdService, protected transferState: TransferState, - protected dspaceTransferState: DSpaceTransferState, @Inject(APP_CONFIG) protected appConfig: AppConfig, protected translate: TranslateService, protected localeService: LocaleService, @@ -52,7 +54,6 @@ export class BrowserInitService extends InitService { super( store, correlationIdService, - dspaceTransferState, appConfig, translate, localeService, @@ -77,7 +78,7 @@ export class BrowserInitService extends InitService { protected init(): () => Promise { return async () => { - await this.transferAppState(); + await this.loadAppState(); this.checkAuthenticationToken(); this.initCorrelationId(); @@ -97,6 +98,21 @@ export class BrowserInitService extends InitService { // Browser-only initialization steps + /** + * Retrieve server-side application state from the {@link NGRX_STATE} key and rehydrate the store. + * Resolves once the store is no longer empty. + * @private + */ + private async loadAppState(): Promise { + const state = this.transferState.get(InitService.NGRX_STATE, null); + this.transferState.remove(InitService.NGRX_STATE); + this.store.dispatch(new StoreAction(StoreActionTypes.REHYDRATE, state)); + return this.store.select(coreSelector).pipe( + find((core: any) => isNotEmpty(core)), + map(() => true) + ).toPromise(); + } + private trackAuthTokenExpiration(): void { this.authService.trackTokenExpiration(); } diff --git a/src/modules/app/server-app.module.ts b/src/modules/app/server-app.module.ts index 2b0462e9a0..c87963b2f8 100644 --- a/src/modules/app/server-app.module.ts +++ b/src/modules/app/server-app.module.ts @@ -2,7 +2,7 @@ import { HTTP_INTERCEPTORS } from '@angular/common/http'; import { NgModule } from '@angular/core'; import { BrowserModule, TransferState } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { ServerModule } from '@angular/platform-server'; +import { ServerModule, ServerTransferStateModule } from '@angular/platform-server'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; @@ -12,7 +12,6 @@ import { Angulartics2GoogleAnalytics } from 'angulartics2/ga'; import { AppComponent } from '../../app/app.component'; import { AppModule } from '../../app/app.module'; -import { DSpaceServerTransferStateModule } from '../transfer-state/dspace-server-transfer-state.module'; import { TranslateServerLoader } from '../../ngx-translate-loaders/translate-server.loader'; import { CookieService } from '../../app/core/services/cookie.service'; import { ServerCookieService } from '../../app/core/services/server-cookie.service'; @@ -43,7 +42,7 @@ export function createTranslateLoader(transferState: TransferState) { appId: 'dspace-angular' }), NoopAnimationsModule, - DSpaceServerTransferStateModule, + ServerTransferStateModule, TranslateModule.forRoot({ loader: { provide: TranslateLoader, diff --git a/src/modules/app/server-init.service.ts b/src/modules/app/server-init.service.ts index 9e23bbeef3..a0e0b84769 100644 --- a/src/modules/app/server-init.service.ts +++ b/src/modules/app/server-init.service.ts @@ -9,7 +9,6 @@ import { InitService } from '../../app/init.service'; import { Store } from '@ngrx/store'; import { AppState } from '../../app/app.reducer'; import { TransferState } from '@angular/platform-browser'; -import { DSpaceTransferState } from '../transfer-state/dspace-transfer-state.service'; import { CorrelationIdService } from '../../app/correlation-id/correlation-id.service'; import { APP_CONFIG, APP_CONFIG_STATE, AppConfig } from '../../config/app-config.interface'; import { environment } from '../../environments/environment'; @@ -23,6 +22,7 @@ import { BreadcrumbsService } from '../../app/breadcrumbs/breadcrumbs.service'; import { CSSVariableService } from '../../app/shared/sass-helper/sass-helper.service'; import { KlaroService } from '../../app/shared/cookies/klaro.service'; import { ThemeService } from '../../app/shared/theme-support/theme.service'; +import { take } from 'rxjs/operators'; /** * Performs server-side initialization. @@ -33,7 +33,6 @@ export class ServerInitService extends InitService { protected store: Store, protected correlationIdService: CorrelationIdService, protected transferState: TransferState, - protected dspaceTransferState: DSpaceTransferState, @Inject(APP_CONFIG) protected appConfig: AppConfig, protected translate: TranslateService, protected localeService: LocaleService, @@ -48,7 +47,6 @@ export class ServerInitService extends InitService { super( store, correlationIdService, - dspaceTransferState, appConfig, translate, localeService, @@ -65,7 +63,7 @@ export class ServerInitService extends InitService { return async () => { this.checkAuthenticationToken(); this.saveAppConfigForCSR(); - this.transferAppState(); // todo: SSR breaks if we await this (why?) + this.saveAppState(); this.initCorrelationId(); this.checkEnvironment(); @@ -82,6 +80,21 @@ export class ServerInitService extends InitService { // Server-only initialization steps + /** + * Set the {@link NGRX_STATE} key when state is serialized to be transfered + * @private + */ + private saveAppState() { + this.transferState.onSerialize(InitService.NGRX_STATE, () => { + let state; + this.store.pipe(take(1)).subscribe((saveState: any) => { + state = saveState; + }); + + return state; + }); + } + private saveAppConfigForCSR(): void { this.transferState.set(APP_CONFIG_STATE, environment as AppConfig); } diff --git a/src/modules/transfer-state/dspace-browser-transfer-state.module.ts b/src/modules/transfer-state/dspace-browser-transfer-state.module.ts deleted file mode 100644 index e251d0b3b2..0000000000 --- a/src/modules/transfer-state/dspace-browser-transfer-state.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { BrowserTransferStateModule } from '@angular/platform-browser'; -import { DSpaceBrowserTransferState } from './dspace-browser-transfer-state.service'; -import { DSpaceTransferState } from './dspace-transfer-state.service'; - -@NgModule({ - imports: [ - BrowserTransferStateModule - ], - providers: [ - { provide: DSpaceTransferState, useClass: DSpaceBrowserTransferState } - ] -}) -export class DSpaceBrowserTransferStateModule { - -} diff --git a/src/modules/transfer-state/dspace-browser-transfer-state.service.ts b/src/modules/transfer-state/dspace-browser-transfer-state.service.ts deleted file mode 100644 index 512d6aeb71..0000000000 --- a/src/modules/transfer-state/dspace-browser-transfer-state.service.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Injectable } from '@angular/core'; -import { coreSelector } from 'src/app/core/core.selectors'; -import { StoreAction, StoreActionTypes } from '../../app/store.actions'; -import { DSpaceTransferState } from './dspace-transfer-state.service'; -import { find, map } from 'rxjs/operators'; -import { isNotEmpty } from '../../app/shared/empty.util'; - -@Injectable() -export class DSpaceBrowserTransferState extends DSpaceTransferState { - transfer(): Promise { - const state = this.transferState.get(DSpaceTransferState.NGRX_STATE, null); - this.transferState.remove(DSpaceTransferState.NGRX_STATE); - this.store.dispatch(new StoreAction(StoreActionTypes.REHYDRATE, state)); - return this.store.select(coreSelector).pipe( - find((core: any) => isNotEmpty(core)), - map(() => true) - ).toPromise(); - } -} diff --git a/src/modules/transfer-state/dspace-server-transfer-state.module.ts b/src/modules/transfer-state/dspace-server-transfer-state.module.ts deleted file mode 100644 index f8f2631cd0..0000000000 --- a/src/modules/transfer-state/dspace-server-transfer-state.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { ServerTransferStateModule } from '@angular/platform-server'; -import { DSpaceServerTransferState } from './dspace-server-transfer-state.service'; -import { DSpaceTransferState } from './dspace-transfer-state.service'; - -@NgModule({ - imports: [ - ServerTransferStateModule - ], - providers: [ - { provide: DSpaceTransferState, useClass: DSpaceServerTransferState } - ] -}) -export class DSpaceServerTransferStateModule { - -} diff --git a/src/modules/transfer-state/dspace-server-transfer-state.service.ts b/src/modules/transfer-state/dspace-server-transfer-state.service.ts deleted file mode 100644 index 96b1e4be38..0000000000 --- a/src/modules/transfer-state/dspace-server-transfer-state.service.ts +++ /dev/null @@ -1,20 +0,0 @@ - -import {take} from 'rxjs/operators'; -import { Injectable } from '@angular/core'; -import { DSpaceTransferState } from './dspace-transfer-state.service'; - -@Injectable() -export class DSpaceServerTransferState extends DSpaceTransferState { - transfer(): Promise { - this.transferState.onSerialize(DSpaceTransferState.NGRX_STATE, () => { - let state; - this.store.pipe(take(1)).subscribe((saveState: any) => { - state = saveState; - }); - - return state; - }); - - return new Promise(() => true); - } -} diff --git a/src/modules/transfer-state/dspace-transfer-state.service.ts b/src/modules/transfer-state/dspace-transfer-state.service.ts deleted file mode 100644 index 32761866fb..0000000000 --- a/src/modules/transfer-state/dspace-transfer-state.service.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Injectable } from '@angular/core'; -import { makeStateKey, TransferState } from '@angular/platform-browser'; -import { Store } from '@ngrx/store'; -import { AppState } from '../../app/app.reducer'; - -@Injectable() -export abstract class DSpaceTransferState { - - protected static NGRX_STATE = makeStateKey('NGRX_STATE'); - - constructor( - protected transferState: TransferState, - protected store: Store - ) { - } - - abstract transfer(): Promise; -} From 67b4cce25d0b2adae8cb3c803aa886632f26df66 Mon Sep 17 00:00:00 2001 From: Yura Bondarenko Date: Tue, 26 Jul 2022 09:50:39 +0200 Subject: [PATCH 08/39] 92319: Move Klaro & GA steps to BrowserInitService --- src/app/init.service.ts | 33 ++--------------------- src/modules/app/browser-init.service.ts | 35 +++++++++++++++++++------ src/modules/app/server-init.service.ts | 12 ++------- 3 files changed, 31 insertions(+), 49 deletions(-) diff --git a/src/app/init.service.ts b/src/app/init.service.ts index ae04b6a82e..30630e1d84 100644 --- a/src/app/init.service.ts +++ b/src/app/init.service.ts @@ -16,14 +16,9 @@ import { AppState } from './app.reducer'; import { isEqual } from 'lodash'; import { TranslateService } from '@ngx-translate/core'; import { LocaleService } from './core/locale/locale.service'; -import { hasValue } from './shared/empty.util'; import { Angulartics2DSpace } from './statistics/angulartics/dspace-provider'; -import { GoogleAnalyticsService } from './statistics/google-analytics.service'; import { MetadataService } from './core/metadata/metadata.service'; import { BreadcrumbsService } from './breadcrumbs/breadcrumbs.service'; -import { distinctUntilChanged, filter, take, tap } from 'rxjs/operators'; -import { isAuthenticationBlocking } from './core/auth/selectors'; -import { KlaroService } from './shared/cookies/klaro.service'; import { ThemeService } from './shared/theme-support/theme.service'; /** @@ -50,10 +45,8 @@ export abstract class InitService { protected translate: TranslateService, protected localeService: LocaleService, protected angulartics2DSpace: Angulartics2DSpace, - @Optional() protected googleAnalyticsService: GoogleAnalyticsService, protected metadata: MetadataService, protected breadcrumbsService: BreadcrumbsService, - @Optional() protected klaroService: KlaroService, protected themeService: ThemeService, ) { } @@ -174,15 +167,10 @@ export abstract class InitService { } /** - * Initialize analytics services - * - Angulartics - * - Google Analytics (if enabled) + * Initialize Angulartics * @protected */ - protected initAnalytics(): void { - if (hasValue(this.googleAnalyticsService)) { - this.googleAnalyticsService.addTrackingIdToPage(); - } + protected initAngulartics(): void { this.angulartics2DSpace.startTracking(); } @@ -198,21 +186,4 @@ export abstract class InitService { this.breadcrumbsService.listenForRouteChanges(); this.themeService.listenForRouteChanges(); } - - /** - * Initialize Klaro (if enabled) - * @protected - */ - protected initKlaro() { - if (hasValue(this.klaroService)) { - this.store.pipe( - select(isAuthenticationBlocking), - distinctUntilChanged(), - filter((isBlocking: boolean) => isBlocking === false), - take(1) - ).subscribe(() => { - this.klaroService.initialize(); - }); - } - } } diff --git a/src/modules/app/browser-init.service.ts b/src/modules/app/browser-init.service.ts index 28d2e0aad5..733a776a73 100644 --- a/src/modules/app/browser-init.service.ts +++ b/src/modules/app/browser-init.service.ts @@ -6,7 +6,7 @@ * http://www.dspace.org/license/ */ import { InitService } from '../../app/init.service'; -import { Store } from '@ngrx/store'; +import { select, Store } from '@ngrx/store'; import { AppState } from '../../app/app.reducer'; import { TransferState } from '@angular/platform-browser'; import { APP_CONFIG, APP_CONFIG_STATE, AppConfig } from '../../config/app-config.interface'; @@ -14,7 +14,7 @@ import { DefaultAppConfig } from '../../config/default-app-config'; import { extendEnvironmentWithAppConfig } from '../../config/config.util'; import { environment } from '../../environments/environment'; import { CorrelationIdService } from '../../app/correlation-id/correlation-id.service'; -import { Inject, Injectable, Optional } from '@angular/core'; +import { Inject, Injectable } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; import { LocaleService } from '../../app/core/locale/locale.service'; import { Angulartics2DSpace } from '../../app/statistics/angulartics/dspace-provider'; @@ -27,8 +27,9 @@ import { AuthService } from '../../app/core/auth/auth.service'; import { ThemeService } from '../../app/shared/theme-support/theme.service'; import { StoreAction, StoreActionTypes } from '../../app/store.actions'; import { coreSelector } from '../../app/core/core.selectors'; -import { find, map } from 'rxjs/operators'; +import { distinctUntilChanged, filter, find, map, take } from 'rxjs/operators'; import { isNotEmpty } from '../../app/shared/empty.util'; +import { isAuthenticationBlocking } from '../../app/core/auth/selectors'; /** * Performs client-side initialization. @@ -43,11 +44,11 @@ export class BrowserInitService extends InitService { protected translate: TranslateService, protected localeService: LocaleService, protected angulartics2DSpace: Angulartics2DSpace, - @Optional() protected googleAnalyticsService: GoogleAnalyticsService, + protected googleAnalyticsService: GoogleAnalyticsService, protected metadata: MetadataService, protected breadcrumbsService: BreadcrumbsService, protected cssService: CSSVariableService, - @Optional() protected klaroService: KlaroService, + protected klaroService: KlaroService, protected authService: AuthService, protected themeService: ThemeService, ) { @@ -58,10 +59,8 @@ export class BrowserInitService extends InitService { translate, localeService, angulartics2DSpace, - googleAnalyticsService, metadata, breadcrumbsService, - klaroService, themeService, ); } @@ -85,7 +84,8 @@ export class BrowserInitService extends InitService { this.checkEnvironment(); this.initI18n(); - this.initAnalytics(); + this.initAngulartics(); + this.initGoogleAnalytics(); this.initRouteListeners(); this.themeService.listenForThemeChanges(true); this.trackAuthTokenExpiration(); @@ -116,4 +116,23 @@ export class BrowserInitService extends InitService { private trackAuthTokenExpiration(): void { this.authService.trackTokenExpiration(); } + + /** + * Initialize Klaro + * @protected + */ + protected initKlaro() { + this.store.pipe( + select(isAuthenticationBlocking), + distinctUntilChanged(), + filter((isBlocking: boolean) => isBlocking === false), + take(1) + ).subscribe(() => { + this.klaroService.initialize(); + }); + } + + protected initGoogleAnalytics() { + this.googleAnalyticsService.addTrackingIdToPage(); + } } diff --git a/src/modules/app/server-init.service.ts b/src/modules/app/server-init.service.ts index a0e0b84769..803dc7a75a 100644 --- a/src/modules/app/server-init.service.ts +++ b/src/modules/app/server-init.service.ts @@ -12,15 +12,13 @@ import { TransferState } from '@angular/platform-browser'; import { CorrelationIdService } from '../../app/correlation-id/correlation-id.service'; import { APP_CONFIG, APP_CONFIG_STATE, AppConfig } from '../../config/app-config.interface'; import { environment } from '../../environments/environment'; -import { Inject, Injectable, Optional } from '@angular/core'; +import { Inject, Injectable } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; import { LocaleService } from '../../app/core/locale/locale.service'; import { Angulartics2DSpace } from '../../app/statistics/angulartics/dspace-provider'; -import { GoogleAnalyticsService } from '../../app/statistics/google-analytics.service'; import { MetadataService } from '../../app/core/metadata/metadata.service'; import { BreadcrumbsService } from '../../app/breadcrumbs/breadcrumbs.service'; import { CSSVariableService } from '../../app/shared/sass-helper/sass-helper.service'; -import { KlaroService } from '../../app/shared/cookies/klaro.service'; import { ThemeService } from '../../app/shared/theme-support/theme.service'; import { take } from 'rxjs/operators'; @@ -37,11 +35,9 @@ export class ServerInitService extends InitService { protected translate: TranslateService, protected localeService: LocaleService, protected angulartics2DSpace: Angulartics2DSpace, - @Optional() protected googleAnalyticsService: GoogleAnalyticsService, protected metadata: MetadataService, protected breadcrumbsService: BreadcrumbsService, protected cssService: CSSVariableService, - @Optional() protected klaroService: KlaroService, protected themeService: ThemeService, ) { super( @@ -51,10 +47,8 @@ export class ServerInitService extends InitService { translate, localeService, angulartics2DSpace, - googleAnalyticsService, metadata, breadcrumbsService, - klaroService, themeService, ); } @@ -68,12 +62,10 @@ export class ServerInitService extends InitService { this.checkEnvironment(); this.initI18n(); - this.initAnalytics(); + this.initAngulartics(); this.initRouteListeners(); this.themeService.listenForThemeChanges(false); - this.initKlaro(); - return true; }; } From ca87f0962533910653d9bcf524b212462372fd71 Mon Sep 17 00:00:00 2001 From: Yura Bondarenko Date: Fri, 29 Jul 2022 15:51:23 +0200 Subject: [PATCH 09/39] Update specs --- src/app/init.service.spec.ts | 93 +---------- src/modules/app/browser-init.service.spec.ts | 155 +++++++++++++++++++ src/modules/app/browser-init.service.ts | 1 - 3 files changed, 158 insertions(+), 91 deletions(-) create mode 100644 src/modules/app/browser-init.service.spec.ts diff --git a/src/app/init.service.spec.ts b/src/app/init.service.spec.ts index 181fe58700..2c9edfd4e0 100644 --- a/src/app/init.service.spec.ts +++ b/src/app/init.service.spec.ts @@ -2,11 +2,10 @@ import { InitService } from './init.service'; import { APP_CONFIG } from 'src/config/app-config.interface'; import { APP_INITIALIZER, Injectable } from '@angular/core'; import { inject, TestBed, waitForAsync } from '@angular/core/testing'; -import { GoogleAnalyticsService } from './statistics/google-analytics.service'; import { MetadataService } from './core/metadata/metadata.service'; import { BreadcrumbsService } from './breadcrumbs/breadcrumbs.service'; import { CommonModule } from '@angular/common'; -import { Store, StoreModule } from '@ngrx/store'; +import { StoreModule } from '@ngrx/store'; import { authReducer } from './core/auth/auth.reducer'; import { storeModuleConfig } from './app.reducer'; import { AngularticsProviderMock } from './shared/mocks/angulartics-provider.service.mock'; @@ -25,15 +24,13 @@ import { RouteService } from './core/services/route.service'; import { getMockLocaleService } from './app.component.spec'; import { MenuServiceStub } from './shared/testing/menu-service.stub'; import { CorrelationIdService } from './correlation-id/correlation-id.service'; -import { KlaroService } from './shared/cookies/klaro.service'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; import { TranslateLoaderMock } from './shared/mocks/translate-loader.mock'; -import { getTestScheduler } from 'jasmine-marbles'; +import { ThemeService } from './shared/theme-support/theme.service'; +import { getMockThemeService } from './shared/mocks/theme-service.mock'; import objectContaining = jasmine.objectContaining; import createSpyObj = jasmine.createSpyObj; import SpyObj = jasmine.SpyObj; -import { ThemeService } from './shared/theme-support/theme.service'; -import { getMockThemeService } from './shared/mocks/theme-service.mock'; let spy: SpyObj; @@ -169,8 +166,6 @@ describe('InitService', () => { { provide: Router, useValue: new RouterMock() }, { provide: ActivatedRoute, useValue: new MockActivatedRoute() }, { provide: MenuService, useValue: new MenuServiceStub() }, - { provide: KlaroService, useValue: undefined }, - { provide: GoogleAnalyticsService, useValue: undefined }, { provide: ThemeService, useValue: getMockThemeService() }, provideMockStore({ initialState }), AppComponent, @@ -179,26 +174,6 @@ describe('InitService', () => { }); })); - describe('initÀnalytics', () => { - describe('when GoogleAnalyticsService is provided', () => { - let googleAnalyticsSpy; - - beforeEach(() => { - googleAnalyticsSpy = jasmine.createSpyObj('googleAnalyticsService', [ - 'addTrackingIdToPage', - ]); - - TestBed.overrideProvider(GoogleAnalyticsService, { useValue: googleAnalyticsSpy }); - }); - - it('should call googleAnalyticsService.addTrackingIdToPage()', inject([InitService], (service) => { - // @ts-ignore - service.initAnalytics(); - expect(googleAnalyticsSpy.addTrackingIdToPage).toHaveBeenCalledTimes(1); - })); - }); - }); - describe('initRouteListeners', () => { it('should call listenForRouteChanges', inject([InitService], (service) => { // @ts-ignore @@ -207,68 +182,6 @@ describe('InitService', () => { expect(breadcrumbsServiceSpy.listenForRouteChanges).toHaveBeenCalledTimes(1); })); }); - - describe('initKlaro', () => { - const BLOCKING = { - t: { core: { auth: { blocking: true } } }, - f: { core: { auth: { blocking: false } } }, - }; - - it('should not error out if KlaroService is not provided', inject([InitService], (service) => { - // @ts-ignore - service.initKlaro(); - })); - - describe('when KlaroService is provided', () => { - let klaroServiceSpy; - - beforeEach(() => { - klaroServiceSpy = jasmine.createSpyObj('klaroServiceSpy', [ - 'initialize', - ]); - - TestBed.overrideProvider(KlaroService, { useValue: klaroServiceSpy }); - }); - - it('should not initialize Klaro while auth is blocking', () => { - getTestScheduler().run(({ cold, flush}) => { - TestBed.overrideProvider(Store, { useValue: cold('t--t--t--', BLOCKING) }); - const service = TestBed.inject(InitService); - - // @ts-ignore - service.initKlaro(); - flush(); - expect(klaroServiceSpy.initialize).not.toHaveBeenCalled(); - }); - }); - - - it('should only initialize Klaro the first time auth is unblocked', () => { - getTestScheduler().run(({ cold, flush}) => { - TestBed.overrideProvider(Store, { useValue: cold('t--t--f--t--f--', BLOCKING) }); - const service = TestBed.inject(InitService); - - // @ts-ignore - service.initKlaro(); - flush(); - expect(klaroServiceSpy.initialize).toHaveBeenCalledTimes(1); - }); - }); - }); - - describe('when KlaroService is not provided', () => { - it('should not error out when auth is unblocked', () => { - getTestScheduler().run(({ cold, flush}) => { - TestBed.overrideProvider(Store, { useValue: cold('t--t--f--t--f--', BLOCKING) }); - const service = TestBed.inject(InitService); - - // @ts-ignore - service.initKlaro(); - flush(); - }); - }); - }); - }); }); }); diff --git a/src/modules/app/browser-init.service.spec.ts b/src/modules/app/browser-init.service.spec.ts new file mode 100644 index 0000000000..05da7d9d36 --- /dev/null +++ b/src/modules/app/browser-init.service.spec.ts @@ -0,0 +1,155 @@ +import { InitService } from '../../app/init.service'; +import { APP_CONFIG } from 'src/config/app-config.interface'; +import { inject, TestBed, waitForAsync } from '@angular/core/testing'; +import { GoogleAnalyticsService } from '../../app/statistics/google-analytics.service'; +import { MetadataService } from '../../app/core/metadata/metadata.service'; +import { BreadcrumbsService } from '../../app/breadcrumbs/breadcrumbs.service'; +import { CommonModule } from '@angular/common'; +import { Store, StoreModule } from '@ngrx/store'; +import { authReducer } from '../../app/core/auth/auth.reducer'; +import { storeModuleConfig } from '../../app/app.reducer'; +import { AngularticsProviderMock } from '../../app/shared/mocks/angulartics-provider.service.mock'; +import { Angulartics2DSpace } from '../../app/statistics/angulartics/dspace-provider'; +import { AuthService } from '../../app/core/auth/auth.service'; +import { AuthServiceMock } from '../../app/shared/mocks/auth.service.mock'; +import { ActivatedRoute, Router } from '@angular/router'; +import { RouterMock } from '../../app/shared/mocks/router.mock'; +import { MockActivatedRoute } from '../../app/shared/mocks/active-router.mock'; +import { MenuService } from '../../app/shared/menu/menu.service'; +import { LocaleService } from '../../app/core/locale/locale.service'; +import { environment } from '../../environments/environment'; +import { provideMockStore } from '@ngrx/store/testing'; +import { AppComponent } from '../../app/app.component'; +import { RouteService } from '../../app/core/services/route.service'; +import { getMockLocaleService } from '../../app/app.component.spec'; +import { MenuServiceStub } from '../../app/shared/testing/menu-service.stub'; +import { CorrelationIdService } from '../../app/correlation-id/correlation-id.service'; +import { KlaroService } from '../../app/shared/cookies/klaro.service'; +import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; +import { TranslateLoaderMock } from '../../app/shared/mocks/translate-loader.mock'; +import { getTestScheduler } from 'jasmine-marbles'; +import { ThemeService } from '../../app/shared/theme-support/theme.service'; +import { getMockThemeService } from '../../app/shared/mocks/theme-service.mock'; +import { BrowserInitService } from './browser-init.service'; +import { TransferState } from '@angular/platform-browser'; + +const initialState = { + core: { + auth: { + loading: false, + blocking: true, + } + } +}; + +describe('BrowserInitService', () => { + describe('browser-specific initialization steps', () => { + let correlationIdServiceSpy; + let dspaceTransferStateSpy; + let transferStateSpy; + let metadataServiceSpy; + let breadcrumbsServiceSpy; + let klaroServiceSpy; + let googleAnalyticsSpy; + + beforeEach(waitForAsync(() => { + correlationIdServiceSpy = jasmine.createSpyObj('correlationIdServiceSpy', [ + 'initCorrelationId', + ]); + dspaceTransferStateSpy = jasmine.createSpyObj('dspaceTransferStateSpy', [ + 'transfer', + ]); + transferStateSpy = jasmine.createSpyObj('dspaceTransferStateSpy', [ + 'get', 'hasKey' + ]); + breadcrumbsServiceSpy = jasmine.createSpyObj('breadcrumbsServiceSpy', [ + 'listenForRouteChanges', + ]); + metadataServiceSpy = jasmine.createSpyObj('metadataService', [ + 'listenForRouteChange', + ]); + klaroServiceSpy = jasmine.createSpyObj('klaroServiceSpy', [ + 'initialize', + ]); + googleAnalyticsSpy = jasmine.createSpyObj('googleAnalyticsService', [ + 'addTrackingIdToPage', + ]); + + + TestBed.resetTestingModule(); + TestBed.configureTestingModule({ + imports: [ + CommonModule, + StoreModule.forRoot(authReducer, storeModuleConfig), + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useClass: TranslateLoaderMock + } + }), + ], + providers: [ + { provide: InitService, useClass: BrowserInitService }, + { provide: CorrelationIdService, useValue: correlationIdServiceSpy }, + { provide: APP_CONFIG, useValue: environment }, + { provide: LocaleService, useValue: getMockLocaleService() }, + { provide: Angulartics2DSpace, useValue: new AngularticsProviderMock() }, + { provide: MetadataService, useValue: metadataServiceSpy }, + { provide: BreadcrumbsService, useValue: breadcrumbsServiceSpy }, + { provide: AuthService, useValue: new AuthServiceMock() }, + { provide: Router, useValue: new RouterMock() }, + { provide: ActivatedRoute, useValue: new MockActivatedRoute() }, + { provide: MenuService, useValue: new MenuServiceStub() }, + { provide: KlaroService, useValue: klaroServiceSpy }, + { provide: GoogleAnalyticsService, useValue: googleAnalyticsSpy }, + { provide: ThemeService, useValue: getMockThemeService() }, + provideMockStore({ initialState }), + AppComponent, + RouteService, + { provide: TransferState, useValue: undefined }, + ] + }); + })); + + describe('initGoogleÀnalytics', () => { + it('should call googleAnalyticsService.addTrackingIdToPage()', inject([InitService], (service) => { + // @ts-ignore + service.initGoogleAnalytics(); + expect(googleAnalyticsSpy.addTrackingIdToPage).toHaveBeenCalledTimes(1); + })); + }); + + describe('initKlaro', () => { + const BLOCKING = { + t: { core: { auth: { blocking: true } } }, + f: { core: { auth: { blocking: false } } }, + }; + + it('should not initialize Klaro while auth is blocking', () => { + getTestScheduler().run(({ cold, flush}) => { + TestBed.overrideProvider(Store, { useValue: cold('t--t--t--', BLOCKING) }); + const service = TestBed.inject(InitService); + + // @ts-ignore + service.initKlaro(); + flush(); + expect(klaroServiceSpy.initialize).not.toHaveBeenCalled(); + }); + }); + + + it('should only initialize Klaro the first time auth is unblocked', () => { + getTestScheduler().run(({ cold, flush}) => { + TestBed.overrideProvider(Store, { useValue: cold('t--t--f--t--f--', BLOCKING) }); + const service = TestBed.inject(InitService); + + // @ts-ignore + service.initKlaro(); + flush(); + expect(klaroServiceSpy.initialize).toHaveBeenCalledTimes(1); + }); + }); + }); + }); +}); + diff --git a/src/modules/app/browser-init.service.ts b/src/modules/app/browser-init.service.ts index 733a776a73..3980b8bc28 100644 --- a/src/modules/app/browser-init.service.ts +++ b/src/modules/app/browser-init.service.ts @@ -47,7 +47,6 @@ export class BrowserInitService extends InitService { protected googleAnalyticsService: GoogleAnalyticsService, protected metadata: MetadataService, protected breadcrumbsService: BreadcrumbsService, - protected cssService: CSSVariableService, protected klaroService: KlaroService, protected authService: AuthService, protected themeService: ThemeService, From 250043fde8d8023f71310f6940d7183e9ef28052 Mon Sep 17 00:00:00 2001 From: Yura Bondarenko Date: Fri, 29 Jul 2022 16:58:11 +0200 Subject: [PATCH 10/39] Fix LGTM issues --- src/app/init.service.ts | 4 ++-- src/modules/app/browser-init.service.ts | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/app/init.service.ts b/src/app/init.service.ts index 30630e1d84..d91f6b2dd9 100644 --- a/src/app/init.service.ts +++ b/src/app/init.service.ts @@ -5,10 +5,10 @@ * * http://www.dspace.org/license/ */ -import { select, Store } from '@ngrx/store'; +import { Store } from '@ngrx/store'; import { CheckAuthenticationTokenAction } from './core/auth/auth.actions'; import { CorrelationIdService } from './correlation-id/correlation-id.service'; -import { APP_INITIALIZER, Inject, Optional, Provider, Type } from '@angular/core'; +import { APP_INITIALIZER, Inject, Provider, Type } from '@angular/core'; import { makeStateKey, TransferState } from '@angular/platform-browser'; import { APP_CONFIG, AppConfig } from '../config/app-config.interface'; import { environment } from '../environments/environment'; diff --git a/src/modules/app/browser-init.service.ts b/src/modules/app/browser-init.service.ts index 3980b8bc28..80619800fb 100644 --- a/src/modules/app/browser-init.service.ts +++ b/src/modules/app/browser-init.service.ts @@ -21,7 +21,6 @@ import { Angulartics2DSpace } from '../../app/statistics/angulartics/dspace-prov import { GoogleAnalyticsService } from '../../app/statistics/google-analytics.service'; import { MetadataService } from '../../app/core/metadata/metadata.service'; import { BreadcrumbsService } from '../../app/breadcrumbs/breadcrumbs.service'; -import { CSSVariableService } from '../../app/shared/sass-helper/sass-helper.service'; import { KlaroService } from '../../app/shared/cookies/klaro.service'; import { AuthService } from '../../app/core/auth/auth.service'; import { ThemeService } from '../../app/shared/theme-support/theme.service'; From f2e977c402a299735d3c646db3d8e7264a163973 Mon Sep 17 00:00:00 2001 From: Jens Vannerum Date: Wed, 3 Aug 2022 15:15:45 +0200 Subject: [PATCH 11/39] 92701: Redirect / dead link fixes --- config/config.yml | 4 ++-- .../end-user-agreement/abstract-end-user-agreement.guard.ts | 6 +++++- src/app/footer/footer.component.html | 4 ++-- src/app/footer/footer.component.ts | 3 +++ src/app/shared/cookies/browser-klaro.service.ts | 4 ++++ 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/config/config.yml b/config/config.yml index 2b5ac3b52e..8b1966b100 100644 --- a/config/config.yml +++ b/config/config.yml @@ -5,5 +5,5 @@ rest: nameSpace: /server info: - enableEndUserAgreement: true - enablePrivacyStatement: true + enableEndUserAgreement: false + enablePrivacyStatement: false diff --git a/src/app/core/end-user-agreement/abstract-end-user-agreement.guard.ts b/src/app/core/end-user-agreement/abstract-end-user-agreement.guard.ts index b9f134f946..076df8ebc9 100644 --- a/src/app/core/end-user-agreement/abstract-end-user-agreement.guard.ts +++ b/src/app/core/end-user-agreement/abstract-end-user-agreement.guard.ts @@ -1,6 +1,7 @@ import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree } from '@angular/router'; -import { Observable } from 'rxjs'; +import { Observable, of as observableOf } from 'rxjs'; import { returnEndUserAgreementUrlTreeOnFalse } from '../shared/authorized.operators'; +import { environment } from '../../../environments/environment'; /** * An abstract guard for redirecting users to the user agreement page if a certain condition is met @@ -18,6 +19,9 @@ export abstract class AbstractEndUserAgreementGuard implements CanActivate { * when they're finished accepting the agreement */ canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + if (!environment.info.enableEndUserAgreement) { + return observableOf(true); + } return this.hasAccepted().pipe( returnEndUserAgreementUrlTreeOnFalse(this.router, state.url) ); diff --git a/src/app/footer/footer.component.html b/src/app/footer/footer.component.html index 2c1a34ccae..88236d381e 100644 --- a/src/app/footer/footer.component.html +++ b/src/app/footer/footer.component.html @@ -67,11 +67,11 @@ {{ 'footer.link.cookies' | translate}} -
  • +
  • {{ 'footer.link.privacy-policy' | translate}}
  • -
  • +
  • {{ 'footer.link.end-user-agreement' | translate}}
  • diff --git a/src/app/footer/footer.component.ts b/src/app/footer/footer.component.ts index c43a0ae85d..c4195c8eb3 100644 --- a/src/app/footer/footer.component.ts +++ b/src/app/footer/footer.component.ts @@ -1,6 +1,7 @@ import { Component, Optional } from '@angular/core'; import { hasValue } from '../shared/empty.util'; import { KlaroService } from '../shared/cookies/klaro.service'; +import { environment } from '../../environments/environment'; @Component({ selector: 'ds-footer', @@ -14,6 +15,8 @@ export class FooterComponent { * A boolean representing if to show or not the top footer container */ showTopFooter = false; + showPrivacyPolicy = environment.info.enablePrivacyStatement; + showEndUserAgreement = environment.info.enableEndUserAgreement; constructor(@Optional() private cookies: KlaroService) { } diff --git a/src/app/shared/cookies/browser-klaro.service.ts b/src/app/shared/cookies/browser-klaro.service.ts index 4e6370f179..e65b7c8b86 100644 --- a/src/app/shared/cookies/browser-klaro.service.ts +++ b/src/app/shared/cookies/browser-klaro.service.ts @@ -91,6 +91,10 @@ export class BrowserKlaroService extends KlaroService { Klaro.setup(this.klaroConfig); }); + if (!environment.info.enablePrivacyStatement) { + delete this.klaroConfig.privacyPolicy; + } + } /** From 4dcf6a345a0ddb749234c301978f7a9beb754480 Mon Sep 17 00:00:00 2001 From: Jens Vannerum Date: Fri, 5 Aug 2022 13:12:52 +0200 Subject: [PATCH 12/39] 92701: Fix privacy string for klaro and add documentation --- config/config.yml | 4 ---- src/app/shared/cookies/browser-klaro.service.ts | 10 +++++----- src/assets/i18n/en.json5 | 2 ++ src/config/default-app-config.ts | 8 ++++++++ 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/config/config.yml b/config/config.yml index 8b1966b100..b5eecd112f 100644 --- a/config/config.yml +++ b/config/config.yml @@ -3,7 +3,3 @@ rest: host: api7.dspace.org port: 443 nameSpace: /server - -info: - enableEndUserAgreement: false - enablePrivacyStatement: false diff --git a/src/app/shared/cookies/browser-klaro.service.ts b/src/app/shared/cookies/browser-klaro.service.ts index e65b7c8b86..638d465864 100644 --- a/src/app/shared/cookies/browser-klaro.service.ts +++ b/src/app/shared/cookies/browser-klaro.service.ts @@ -63,6 +63,11 @@ export class BrowserKlaroService extends KlaroService { * - Add and translate klaro configuration messages */ initialize() { + if (!environment.info.enablePrivacyStatement) { + delete this.klaroConfig.privacyPolicy; + this.klaroConfig.translations.en.consentNotice.description = 'cookies.consent.content-notice.description.no-privacy'; + } + this.translateService.setDefaultLang(environment.defaultLanguage); const user$: Observable = this.getUser$(); @@ -90,11 +95,6 @@ export class BrowserKlaroService extends KlaroService { this.translateConfiguration(); Klaro.setup(this.klaroConfig); }); - - if (!environment.info.enablePrivacyStatement) { - delete this.klaroConfig.privacyPolicy; - } - } /** diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 5d7be2a681..bf2d37fbf9 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -1225,6 +1225,8 @@ "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.no-privacy": "We collect and process your personal information for the following purposes: Authentication, Preferences, Acknowledgement and Statistics.", + "cookies.consent.content-notice.learnMore": "Customize", "cookies.consent.content-modal.description": "Here you can see and customize the information that we collect about you.", diff --git a/src/config/default-app-config.ts b/src/config/default-app-config.ts index 4108444443..11761af49a 100644 --- a/src/config/default-app-config.ts +++ b/src/config/default-app-config.ts @@ -325,6 +325,14 @@ export class DefaultAppConfig implements AppConfig { image: false, video: false }; + // Whether the end-user-agreement and privacy policy feature should be enabled or not. + // Disabling the end user agreement feature will result in: + // - Users no longer being forced to accept the end-user-agreement before they can access the repository + // - A 404 page if you manually try to navigate to the end-user-agreement page at info/end-user-agreement + // - All end-user-agreement related links and pages will be removed from the UI (e.g. in the footer) + // Disabling the privacy policy feature will result in: + // - A 404 page if you manually try to navigate to the privacy policy page at info/privacy + // - All mentions of the privacy policy being removed from the UI (e.g. in the footer) info: InfoConfig = { enableEndUserAgreement: true, enablePrivacyStatement: true From ed0204ab9caaadc3c82cb8c204f67277bb38840b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 15:56:19 +0000 Subject: [PATCH 13/39] Bump moment from 2.29.2 to 2.29.4 Bumps [moment](https://github.com/moment/moment) from 2.29.2 to 2.29.4. - [Release notes](https://github.com/moment/moment/releases) - [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md) - [Commits](https://github.com/moment/moment/compare/2.29.2...2.29.4) --- updated-dependencies: - dependency-name: moment dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index dbb4cca8a5..32832460a2 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,7 @@ "mirador": "^3.3.0", "mirador-dl-plugin": "^0.13.0", "mirador-share-plugin": "^0.11.0", - "moment": "^2.29.2", + "moment": "^2.29.4", "morgan": "^1.10.0", "ng-mocks": "^13.1.1", "ng2-file-upload": "1.4.0", diff --git a/yarn.lock b/yarn.lock index f870fd85e0..1996ace1b1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8741,10 +8741,10 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -moment@^2.29.2: - version "2.29.2" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.2.tgz#00910c60b20843bcba52d37d58c628b47b1f20e4" - integrity sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg== +moment@^2.29.4: + version "2.29.4" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== morgan@^1.10.0: version "1.10.0" From 9e67b7f7a570c782264cd24b57237053ba49d73b Mon Sep 17 00:00:00 2001 From: Yana De Pauw Date: Tue, 9 Aug 2022 11:21:22 +0200 Subject: [PATCH 14/39] 93657: Add admin option to export all fields in the metadata export --- ...export-metadata-selector.component.spec.ts | 64 +++++++++++++++++-- .../export-metadata-selector.component.ts | 45 +++++++------ 2 files changed, 87 insertions(+), 22 deletions(-) diff --git a/src/app/shared/dso-selector/modal-wrappers/export-metadata-selector/export-metadata-selector.component.spec.ts b/src/app/shared/dso-selector/modal-wrappers/export-metadata-selector/export-metadata-selector.component.spec.ts index f6b3581df5..df3e4f095c 100644 --- a/src/app/shared/dso-selector/modal-wrappers/export-metadata-selector/export-metadata-selector.component.spec.ts +++ b/src/app/shared/dso-selector/modal-wrappers/export-metadata-selector/export-metadata-selector.component.spec.ts @@ -20,6 +20,7 @@ import { createSuccessfulRemoteDataObject$ } from '../../../remote-data.utils'; import { ExportMetadataSelectorComponent } from './export-metadata-selector.component'; +import { AuthorizationDataService } from '../../../../core/data/feature-authorization/authorization-data.service'; // No way to add entryComponents yet to testbed; alternative implemented; source: https://stackoverflow.com/questions/41689468/how-to-shallow-test-a-component-with-an-entrycomponents @NgModule({ @@ -47,6 +48,7 @@ describe('ExportMetadataSelectorComponent', () => { let router; let notificationService: NotificationsServiceStub; let scriptService; + let authorizationDataService; const mockItem = Object.assign(new Item(), { id: 'fake-id', @@ -95,6 +97,9 @@ describe('ExportMetadataSelectorComponent', () => { invoke: createSuccessfulRemoteDataObject$({ processId: '45' }) } ); + authorizationDataService = jasmine.createSpyObj('authorizationDataService', { + isAuthorized: observableOf(true) + }); TestBed.configureTestingModule({ imports: [TranslateModule.forRoot(), RouterTestingModule.withRoutes([]), ModelTestModule], declarations: [ExportMetadataSelectorComponent], @@ -102,6 +107,7 @@ describe('ExportMetadataSelectorComponent', () => { { provide: NgbActiveModal, useValue: modalStub }, { provide: NotificationsService, useValue: notificationService }, { provide: ScriptDataService, useValue: scriptService }, + { provide: AuthorizationDataService, useValue: authorizationDataService }, { provide: ActivatedRoute, useValue: { @@ -150,7 +156,7 @@ describe('ExportMetadataSelectorComponent', () => { }); }); - describe('if collection is selected', () => { + describe('if collection is selected and is admin', () => { let scriptRequestSucceeded; beforeEach((done) => { spyOn((component as any).modalService, 'open').and.returnValue(modalRef); @@ -159,7 +165,32 @@ describe('ExportMetadataSelectorComponent', () => { done(); }); }); - it('should invoke the metadata-export script with option -i uuid', () => { + it('should invoke the metadata-export script with option -i uuid and -a option', () => { + const parameterValues: ProcessParameter[] = [ + Object.assign(new ProcessParameter(), { name: '-i', value: mockCollection.uuid }), + Object.assign(new ProcessParameter(), { name: '-a' }), + ]; + expect(scriptService.invoke).toHaveBeenCalledWith(METADATA_EXPORT_SCRIPT_NAME, parameterValues, []); + }); + it('success notification is shown', () => { + expect(scriptRequestSucceeded).toBeTrue(); + expect(notificationService.success).toHaveBeenCalled(); + }); + it('redirected to process page', () => { + expect(router.navigateByUrl).toHaveBeenCalledWith('/processes/45'); + }); + }); + describe('if collection is selected and is not admin', () => { + let scriptRequestSucceeded; + beforeEach((done) => { + (authorizationDataService.isAuthorized as jasmine.Spy).and.returnValue(observableOf(false)); + spyOn((component as any).modalService, 'open').and.returnValue(modalRef); + component.navigate(mockCollection).subscribe((succeeded: boolean) => { + scriptRequestSucceeded = succeeded; + done(); + }); + }); + it('should invoke the metadata-export script with option -i uuid without the -a option', () => { const parameterValues: ProcessParameter[] = [ Object.assign(new ProcessParameter(), { name: '-i', value: mockCollection.uuid }), ]; @@ -174,7 +205,7 @@ describe('ExportMetadataSelectorComponent', () => { }); }); - describe('if community is selected', () => { + describe('if community is selected and is an admin', () => { let scriptRequestSucceeded; beforeEach((done) => { spyOn((component as any).modalService, 'open').and.returnValue(modalRef); @@ -183,7 +214,32 @@ describe('ExportMetadataSelectorComponent', () => { done(); }); }); - it('should invoke the metadata-export script with option -i uuid', () => { + it('should invoke the metadata-export script with option -i uuid and -a option if the user is an admin', () => { + const parameterValues: ProcessParameter[] = [ + Object.assign(new ProcessParameter(), { name: '-i', value: mockCommunity.uuid }), + Object.assign(new ProcessParameter(), { name: '-a' }), + ]; + expect(scriptService.invoke).toHaveBeenCalledWith(METADATA_EXPORT_SCRIPT_NAME, parameterValues, []); + }); + it('success notification is shown', () => { + expect(scriptRequestSucceeded).toBeTrue(); + expect(notificationService.success).toHaveBeenCalled(); + }); + it('redirected to process page', () => { + expect(router.navigateByUrl).toHaveBeenCalledWith('/processes/45'); + }); + }); + describe('if community is selected and is not an admin', () => { + let scriptRequestSucceeded; + beforeEach((done) => { + (authorizationDataService.isAuthorized as jasmine.Spy).and.returnValue(observableOf(false)); + spyOn((component as any).modalService, 'open').and.returnValue(modalRef); + component.navigate(mockCommunity).subscribe((succeeded: boolean) => { + scriptRequestSucceeded = succeeded; + done(); + }); + }); + it('should invoke the metadata-export script with option -i uuid without the -a option', () => { const parameterValues: ProcessParameter[] = [ Object.assign(new ProcessParameter(), { name: '-i', value: mockCommunity.uuid }), ]; diff --git a/src/app/shared/dso-selector/modal-wrappers/export-metadata-selector/export-metadata-selector.component.ts b/src/app/shared/dso-selector/modal-wrappers/export-metadata-selector/export-metadata-selector.component.ts index a04fc0a1cd..6b8169a263 100644 --- a/src/app/shared/dso-selector/modal-wrappers/export-metadata-selector/export-metadata-selector.component.ts +++ b/src/app/shared/dso-selector/modal-wrappers/export-metadata-selector/export-metadata-selector.component.ts @@ -19,6 +19,8 @@ import { getFirstCompletedRemoteData } from '../../../../core/shared/operators'; import { Process } from '../../../../process-page/processes/process.model'; import { RemoteData } from '../../../../core/data/remote-data'; import { getProcessDetailRoute } from '../../../../process-page/process-page-routing.paths'; +import { AuthorizationDataService } from '../../../../core/data/feature-authorization/authorization-data.service'; +import { FeatureID } from '../../../../core/data/feature-authorization/feature-id'; /** * Component to wrap a list of existing dso's inside a modal @@ -36,6 +38,7 @@ export class ExportMetadataSelectorComponent extends DSOSelectorModalWrapperComp constructor(protected activeModal: NgbActiveModal, protected route: ActivatedRoute, private router: Router, protected notificationsService: NotificationsService, protected translationService: TranslateService, protected scriptDataService: ScriptDataService, + protected authorizationDataService: AuthorizationDataService, private modalService: NgbModal) { super(activeModal, route); } @@ -82,24 +85,30 @@ export class ExportMetadataSelectorComponent extends DSOSelectorModalWrapperComp const parameterValues: ProcessParameter[] = [ Object.assign(new ProcessParameter(), { name: '-i', value: dso.uuid }), ]; - return this.scriptDataService.invoke(METADATA_EXPORT_SCRIPT_NAME, parameterValues, []) - .pipe( - getFirstCompletedRemoteData(), - map((rd: RemoteData) => { - if (rd.hasSucceeded) { - const title = this.translationService.get('process.new.notification.success.title'); - const content = this.translationService.get('process.new.notification.success.content'); - this.notificationsService.success(title, content); - if (isNotEmpty(rd.payload)) { - this.router.navigateByUrl(getProcessDetailRoute(rd.payload.processId)); - } - return true; - } else { - const title = this.translationService.get('process.new.notification.error.title'); - const content = this.translationService.get('process.new.notification.error.content'); - this.notificationsService.error(title, content); - return false; + return this.authorizationDataService.isAuthorized(FeatureID.AdministratorOf).pipe( + switchMap((isAdmin) => { + if (isAdmin) { + parameterValues.push(Object.assign(new ProcessParameter(), {name: '-a'})); + } + console.log(isAdmin, parameterValues); + return this.scriptDataService.invoke(METADATA_EXPORT_SCRIPT_NAME, parameterValues, []); + }), + getFirstCompletedRemoteData(), + map((rd: RemoteData) => { + if (rd.hasSucceeded) { + const title = this.translationService.get('process.new.notification.success.title'); + const content = this.translationService.get('process.new.notification.success.content'); + this.notificationsService.success(title, content); + if (isNotEmpty(rd.payload)) { + this.router.navigateByUrl(getProcessDetailRoute(rd.payload.processId)); } - })); + return true; + } else { + const title = this.translationService.get('process.new.notification.error.title'); + const content = this.translationService.get('process.new.notification.error.content'); + this.notificationsService.error(title, content); + return false; + } + })); } } From 4870d818f685b83aae5fcd9484f6366f4639bdf4 Mon Sep 17 00:00:00 2001 From: Yura Bondarenko Date: Tue, 9 Aug 2022 15:47:19 +0200 Subject: [PATCH 15/39] Fix license header --- src/app/core/shared/distinct-next.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/app/core/shared/distinct-next.ts b/src/app/core/shared/distinct-next.ts index 0ee3d237d4..6c629867a4 100644 --- a/src/app/core/shared/distinct-next.ts +++ b/src/app/core/shared/distinct-next.ts @@ -1,5 +1,9 @@ -/* - * something something atmire +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ */ import { BehaviorSubject } from 'rxjs'; From ba7ecf432b77975cdbb8203ada739cfd80aa5007 Mon Sep 17 00:00:00 2001 From: Yura Bondarenko Date: Tue, 9 Aug 2022 16:03:30 +0200 Subject: [PATCH 16/39] Add TypeDocs to ThemeService --- src/app/shared/theme-support/theme.service.ts | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/app/shared/theme-support/theme.service.ts b/src/app/shared/theme-support/theme.service.ts index 7642b7097e..6d9bffc44e 100644 --- a/src/app/shared/theme-support/theme.service.ts +++ b/src/app/shared/theme-support/theme.service.ts @@ -66,10 +66,17 @@ export class ThemeService { ); } + /** + * Set the current theme + * @param newName + */ setTheme(newName: string) { this.store.dispatch(new SetThemeAction(newName)); } + /** + * The name of the current theme (synchronous) + */ getThemeName(): string { let currentTheme: string; this.store.pipe( @@ -81,16 +88,29 @@ export class ThemeService { return currentTheme; } + /** + * The name of the current theme (asynchronous, tracks changes) + */ getThemeName$(): Observable { return this.store.pipe( select(currentThemeSelector) ); } + /** + * Whether the theme is currently loading + */ get isThemeLoading$(): Observable { return this._isThemeLoading$; } + /** + * Every time the theme is changed + * - if the theme name is valid, load it (CSS + tags) + * - otherwise fall back to {@link getDefaultThemeConfig} or {@link BASE_THEME_NAME} + * Should be called when initializing the app. + * @param isBrowser + */ listenForThemeChanges(isBrowser: boolean): void { this.getThemeName$().subscribe((themeName: string) => { if (isBrowser) { @@ -110,6 +130,10 @@ export class ThemeService { }); } + /** + * For every resolved route, check if it matches a dynamic theme. If it does, load that theme. + * Should be called when initializing the app. + */ listenForRouteChanges(): void { this.router.events.pipe( filter(event => event instanceof ResolveEnd), @@ -126,6 +150,13 @@ export class ThemeService { }); } + /** + * Load a theme's configuration + * - CSS + * - tags + * @param themeName + * @private + */ private loadGlobalThemeConfig(themeName: string): void { this.setThemeCss(themeName); this.setHeadTags(themeName); @@ -167,6 +198,11 @@ export class ThemeService { head.appendChild(link); } + /** + * Update the page to add a theme's tags + * @param themeName the theme in question + * @private + */ private setHeadTags(themeName: string): void { const head = this.document.getElementsByTagName('head')[0]; if (hasNoValue(head)) { @@ -188,6 +224,12 @@ export class ThemeService { head.appendChild(headTagFragment); } + /** + * Create HTML elements for a theme's tags + * (including those defined in the parent theme, if applicable) + * @param themeName the theme in question + * @private + */ private createHeadTags(themeName: string): HTMLElement[] { const themeConfig = this.getThemeConfigFor(themeName); const headTagConfigs = themeConfig?.headTags; @@ -225,6 +267,11 @@ export class ThemeService { return headTagConfigs.map(this.createHeadTag.bind(this)); } + /** + * Create a single tag element + * @param headTagConfig the configuration for this tag + * @private + */ private createHeadTag(headTagConfig: HeadTagConfig): HTMLElement { const tag = this.document.createElement(headTagConfig.tagName); From 967f4a99b9262642c77ca2d3ba295e67f7b9c059 Mon Sep 17 00:00:00 2001 From: nikunj59 Date: Mon, 4 Jul 2022 18:29:42 +0200 Subject: [PATCH 17/39] CST-6035 handled import query error --- .../submission-import-external.component.html | 5 +- ...bmission-import-external.component.spec.ts | 332 +++++++++++++++++- src/assets/i18n/en.json5 | 1 + 3 files changed, 335 insertions(+), 3 deletions(-) diff --git a/src/app/submission/import-external/submission-import-external.component.html b/src/app/submission/import-external/submission-import-external.component.html index 19499b4be8..dc46e6758f 100644 --- a/src/app/submission/import-external/submission-import-external.component.html +++ b/src/app/submission/import-external/submission-import-external.component.html @@ -24,9 +24,12 @@ -
    +
    {{ 'search.results.empty' | translate }}
    +
    + {{ 'search.results.response.500' | translate }} +
    diff --git a/src/app/submission/import-external/submission-import-external.component.spec.ts b/src/app/submission/import-external/submission-import-external.component.spec.ts index dc53b2e45f..dbf665e297 100644 --- a/src/app/submission/import-external/submission-import-external.component.spec.ts +++ b/src/app/submission/import-external/submission-import-external.component.spec.ts @@ -19,9 +19,15 @@ import { VarDirective } from '../../shared/utils/var.directive'; import { routeServiceStub } from '../../shared/testing/route-service.stub'; import { PaginatedSearchOptions } from '../../shared/search/models/paginated-search-options.model'; import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model'; -import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; +import { + createFailedRemoteDataObject$, + createSuccessfulRemoteDataObject, + createSuccessfulRemoteDataObject$ +} from '../../shared/remote-data.utils'; import { ExternalSourceEntry } from '../../core/shared/external-source-entry.model'; import { SubmissionImportExternalPreviewComponent } from './import-external-preview/submission-import-external-preview.component'; +import { By } from '@angular/platform-browser'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; describe('SubmissionImportExternalComponent test suite', () => { let comp: SubmissionImportExternalComponent; @@ -44,7 +50,8 @@ describe('SubmissionImportExternalComponent test suite', () => { beforeEach(waitForAsync (() => { TestBed.configureTestingModule({ imports: [ - TranslateModule.forRoot() + TranslateModule.forRoot(), + BrowserAnimationsModule ], declarations: [ SubmissionImportExternalComponent, @@ -177,6 +184,327 @@ describe('SubmissionImportExternalComponent test suite', () => { }); }); + describe('handle BE response for search query', () => { + const paginatedData: any = { + 'timeCompleted': 1657009282990, + 'msToLive': 900000, + 'lastUpdated': 1657009282990, + 'state': 'Success', + 'errorMessage': null, + 'payload': { + 'type': { + 'value': 'paginated-list' + }, + 'pageInfo': { + 'elementsPerPage': 10, + 'totalElements': 11971608, + 'totalPages': 1197161, + 'currentPage': 1 + }, + '_links': { + 'first': { + 'href': 'https://dspacecris7.4science.cloud/server/api/integration/externalsources/scopus/entries?query=test&page=0&size=10&sort=id,asc' + }, + 'self': { + 'href': 'https://dspacecris7.4science.cloud/server/api/integration/externalsources/scopus/entries?sort=id,ASC&page=0&size=10&query=test' + }, + 'next': { + 'href': 'https://dspacecris7.4science.cloud/server/api/integration/externalsources/scopus/entries?query=test&page=1&size=10&sort=id,asc' + }, + 'last': { + 'href': 'https://dspacecris7.4science.cloud/server/api/integration/externalsources/scopus/entries?query=test&page=1197160&size=10&sort=id,asc' + }, + 'page': [ + { + 'href': 'https://dspacecris7.4science.cloud/server/api/integration/externalsources/scopus/entryValues/2-s2.0-85130258665' + } + ] + }, + 'page': [ + { + 'id': '2-s2.0-85130258665', + 'type': 'externalSourceEntry', + 'display': 'Biological activities of endophytic fungi isolated from Annona muricata Linnaeus: a systematic review', + 'value': 'Biological activities of endophytic fungi isolated from Annona muricata Linnaeus: a systematic review', + 'externalSource': 'scopus', + 'metadata': { + 'dc.contributor.author': [ + { + 'uuid': 'cbceba09-4c12-4968-ab02-2f77a985b422', + 'language': null, + 'value': 'Silva I.M.M.', + 'place': -1, + 'authority': null, + 'confidence': -1 + } + ], + 'dc.date.issued': [ + { + 'uuid': 'e8d3c306-ce21-43e2-8a80-5f257cc3b7ea', + 'language': null, + 'value': '2024-01-01', + 'place': -1, + 'authority': null, + 'confidence': -1 + } + ], + 'dc.description.abstract': [ + { + 'uuid': 'c9ee4076-c602-4c1d-ab1a-60bbdd0dd511', + 'language': null, + 'value': 'This systematic review integrates the data available in the literature regarding the biological activities of the extracts of endophytic fungi isolated from Annona muricata and their secondary metabolites. The search was performed using four electronic databases, and studies’ quality was evaluated using an adapted assessment tool. The initial database search yielded 436 results; ten studies were selected for inclusion. The leaf was the most studied part of the plant (in nine studies); Periconia sp. was the most tested fungus (n = 4); the most evaluated biological activity was anticancer (n = 6), followed by antiviral (n = 3). Antibacterial, antifungal, and antioxidant activities were also tested. Terpenoids or terpenoid hybrid compounds were the most abundant chemical metabolites. Phenolic compounds, esters, alkaloids, saturated and unsaturated fatty acids, aromatic compounds, and peptides were also reported. The selected studies highlighted the biotechnological potentiality of the endophytic fungi extracts from A. muricata. Consequently, it can be considered a promising source of biological compounds with antioxidant effects and active against different microorganisms and cancer cells. Further research is needed involving different plant tissues, other microorganisms, such as SARS-CoV-2, and different cancer cells.', + 'place': -1, + 'authority': null, + 'confidence': -1 + } + ], + 'dc.identifier.doi': [ + { + 'uuid': '95ec26be-c1b4-4c4a-b12d-12421a4f181d', + 'language': null, + 'value': '10.1590/1519-6984.259525', + 'place': -1, + 'authority': null, + 'confidence': -1 + } + ], + 'dc.identifier.pmid': [ + { + 'uuid': 'd6913cd6-1007-4013-b486-3f07192bc739', + 'language': null, + 'value': '35588520', + 'place': -1, + 'authority': null, + 'confidence': -1 + } + ], + 'dc.identifier.scopus': [ + { + 'uuid': '6386a1f6-84ba-431d-a583-e16d19af8db0', + 'language': null, + 'value': '2-s2.0-85130258665', + 'place': -1, + 'authority': null, + 'confidence': -1 + } + ], + 'dc.relation.grantno': [ + { + 'uuid': 'bcafd7b0-827d-4abb-8608-95dc40a8e58a', + 'language': null, + 'value': 'undefined', + 'place': -1, + 'authority': null, + 'confidence': -1 + } + ], + 'dc.relation.ispartof': [ + { + 'uuid': '680819c8-c143-405f-9d09-f84d2d5cd338', + 'language': null, + 'value': 'Brazilian Journal of Biology', + 'place': -1, + 'authority': null, + 'confidence': -1 + } + ], + 'dc.relation.ispartofseries': [ + { + 'uuid': '06634104-127b-44f6-9dcc-efae24b74bd1', + 'language': null, + 'value': 'Brazilian Journal of Biology', + 'place': -1, + 'authority': null, + 'confidence': -1 + } + ], + 'dc.relation.issn': [ + { + 'uuid': '5f6cce46-2538-49e9-8ed0-a3988dcac6c5', + 'language': null, + 'value': '15196984', + 'place': -1, + 'authority': null, + 'confidence': -1 + } + ], + 'dc.subject': [ + { + 'uuid': '0b6fbc77-de54-4f4a-b317-3d74a429f22a', + 'language': null, + 'value': 'biological products | biotechnology | mycology | soursop', + 'place': -1, + 'authority': null, + 'confidence': -1 + } + ], + 'dc.title': [ + { + 'uuid': '4c0fa3d3-1a8c-4302-a772-4a4d0408df35', + 'language': null, + 'value': 'Biological activities of endophytic fungi isolated from Annona muricata Linnaeus: a systematic review', + 'place': -1, + 'authority': null, + 'confidence': -1 + } + ], + 'dc.type': [ + { + 'uuid': '5b6e0337-6f79-4574-a720-536816d1dc6e', + 'language': null, + 'value': 'Journal', + 'place': -1, + 'authority': null, + 'confidence': -1 + } + ], + 'oaire.citation.volume': [ + { + 'uuid': 'b88b0246-61a9-4aca-917f-68afc8ead7d8', + 'language': null, + 'value': '84', + 'place': -1, + 'authority': null, + 'confidence': -1 + } + ], + 'oairecerif.affiliation.orgunit': [ + { + 'uuid': '487c0fbc-3622-4cc7-a5fa-4edf780c6a21', + 'language': null, + 'value': 'Universidade Federal do Reconcavo da Bahia', + 'place': -1, + 'authority': null, + 'confidence': -1 + } + ], + 'oairecerif.citation.number': [ + { + 'uuid': '90808bdd-f456-4ba3-91aa-b82fb3c453f6', + 'language': null, + 'value': 'e259525', + 'place': -1, + 'authority': null, + 'confidence': -1 + } + ], + 'person.identifier.orcid': [ + { + 'uuid': 'e533d0d2-cf26-4c3e-b5ae-cabf497dfb6b', + 'language': null, + 'value': '#PLACEHOLDER_PARENT_METADATA_VALUE#', + 'place': -1, + 'authority': null, + 'confidence': -1 + } + ], + 'person.identifier.scopus-author-id': [ + { + 'uuid': '4faf0be5-0226-4d4f-92a0-938397c4ec02', + 'language': null, + 'value': '42561627000', + 'place': -1, + 'authority': null, + 'confidence': -1 + } + ] + }, + '_links': { + 'self': { + 'href': 'https://dspacecris7.4science.cloud/server/api/integration/externalsources/scopus/entryValues/2-s2.0-85130258665' + } + } + } + ] + }, + 'statusCode': 200 + }; + const errorObj = { + errorMessage: 'Http failure response for ' + + 'https://dspacecris7.4science.cloud/server/api/integration/externalsources/pubmed/entries?sort=id,ASC&page=0&size=10&query=test: 500 OK', + statusCode: 500, + timeCompleted: 1656950434666, + errors: [{ + 'message': 'Internal Server Error', 'paths': ['/server/api/integration/externalsources/pubmed/entries'] + }] + }; + beforeEach(() => { + fixture = TestBed.createComponent(SubmissionImportExternalComponent); + comp = fixture.componentInstance; + compAsAny = comp; + scheduler = getTestScheduler(); + }); + + afterEach(() => { + fixture.destroy(); + comp = null; + compAsAny = null; + }); + + it('REST endpoint returns a 200 response with valid content', () => { + mockExternalSourceService.getExternalSourceEntries.and.returnValue(createSuccessfulRemoteDataObject$(paginatedData.payload)); + const expectedEntries = createSuccessfulRemoteDataObject(paginatedData.payload); + spyOn(routeServiceStub, 'getQueryParameterValue').and.callFake((param) => { + if (param === 'entity') { + return observableOf('Publication'); + } else if (param === 'sourceId') { + return observableOf('scopus'); + } else if (param === 'query') { + return observableOf('test'); + } + return observableOf({}); + }); + fixture.detectChanges(); + + expect(comp.isLoading$.value).toBe(false); + expect(comp.entriesRD$.value).toEqual(expectedEntries); + const viewableCollection = fixture.debugElement.query(By.css('ds-viewable-collection')); + expect(viewableCollection).toBeTruthy(); + }); + + it('REST endpoint returns a 200 response with no results', () => { + mockExternalSourceService.getExternalSourceEntries.and.returnValue(createSuccessfulRemoteDataObject$(createPaginatedList([]))); + const expectedEntries = createSuccessfulRemoteDataObject(createPaginatedList([])); + spyOn(routeServiceStub, 'getQueryParameterValue').and.callFake((param) => { + if (param === 'entity') { + return observableOf('Publication'); + } + return observableOf({}); + }); + fixture.detectChanges(); + + expect(comp.isLoading$.value).toBe(false); + expect(comp.entriesRD$.value).toEqual(expectedEntries); + const noDataAlert = fixture.debugElement.query(By.css('[data-test="empty-external-entry-list"]')); + expect(noDataAlert).toBeTruthy(); + }); + + it('REST endpoint returns a 500 error', () => { + mockExternalSourceService.getExternalSourceEntries.and.returnValue(createFailedRemoteDataObject$( + errorObj.errorMessage, + errorObj.statusCode, + errorObj.timeCompleted, + errorObj.errors + )); + spyOn(routeServiceStub, 'getQueryParameterValue').and.callFake((param) => { + if (param === 'entity') { + return observableOf('Publication'); + } else if (param === 'sourceId') { + return observableOf('pubmed'); + } else if (param === 'query') { + return observableOf('test'); + } + return observableOf({}); + }); + fixture.detectChanges(); + + expect(comp.isLoading$.value).toBe(false); + expect(comp.entriesRD$.value.statusCode).toEqual(500); + const noDataAlert = fixture.debugElement.query(By.css('[data-test="empty-external-error-500"]')); + expect(noDataAlert).toBeTruthy(); + }); + }); + }); // declare a test component diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 57863b3a69..02fbf9dabe 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -3583,6 +3583,7 @@ "search.results.view-result": "View", + "search.results.response.500": "An error occurred during query execution, please try again later", "default.search.results.head": "Search Results", From a2e8b2a61c059415669e9686b6e0df1e92a22441 Mon Sep 17 00:00:00 2001 From: corrado lombardi Date: Wed, 10 Aug 2022 18:49:01 +0200 Subject: [PATCH 18/39] CST-6035 updated test --- .../submission-import-external.component.spec.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/app/submission/import-external/submission-import-external.component.spec.ts b/src/app/submission/import-external/submission-import-external.component.spec.ts index dbf665e297..7a9c71f342 100644 --- a/src/app/submission/import-external/submission-import-external.component.spec.ts +++ b/src/app/submission/import-external/submission-import-external.component.spec.ts @@ -483,8 +483,7 @@ describe('SubmissionImportExternalComponent test suite', () => { mockExternalSourceService.getExternalSourceEntries.and.returnValue(createFailedRemoteDataObject$( errorObj.errorMessage, errorObj.statusCode, - errorObj.timeCompleted, - errorObj.errors + errorObj.timeCompleted )); spyOn(routeServiceStub, 'getQueryParameterValue').and.callFake((param) => { if (param === 'entity') { From 17ab269e255ca3a7bd25880ae9b9125c91abbf93 Mon Sep 17 00:00:00 2001 From: Yana De Pauw Date: Thu, 11 Aug 2022 09:43:19 +0200 Subject: [PATCH 19/39] Remove console log --- .../export-metadata-selector.component.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/shared/dso-selector/modal-wrappers/export-metadata-selector/export-metadata-selector.component.ts b/src/app/shared/dso-selector/modal-wrappers/export-metadata-selector/export-metadata-selector.component.ts index 6b8169a263..d4b4314a99 100644 --- a/src/app/shared/dso-selector/modal-wrappers/export-metadata-selector/export-metadata-selector.component.ts +++ b/src/app/shared/dso-selector/modal-wrappers/export-metadata-selector/export-metadata-selector.component.ts @@ -90,7 +90,6 @@ export class ExportMetadataSelectorComponent extends DSOSelectorModalWrapperComp if (isAdmin) { parameterValues.push(Object.assign(new ProcessParameter(), {name: '-a'})); } - console.log(isAdmin, parameterValues); return this.scriptDataService.invoke(METADATA_EXPORT_SCRIPT_NAME, parameterValues, []); }), getFirstCompletedRemoteData(), From 092b3d862a7547f39ea78750cbdd9780b00bf296 Mon Sep 17 00:00:00 2001 From: lotte Date: Fri, 12 Aug 2022 11:35:30 +0200 Subject: [PATCH 20/39] 93665: fixed pagination in metadata browse links --- .../browse-by-metadata-page.component.ts | 4 +++- .../browse-entry-list-element.component.html | 2 +- .../browse-entry-list-element.component.ts | 20 ++++++++++++++++--- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts b/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts index f789389697..f116077c05 100644 --- a/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts +++ b/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts @@ -18,6 +18,8 @@ import { BrowseByDataType, rendersBrowseBy } from '../browse-by-switcher/browse- import { PaginationService } from '../../core/pagination/pagination.service'; import { map } from 'rxjs/operators'; +export const BBM_PAGINATION_ID = 'bbm'; + @Component({ selector: 'ds-browse-by-metadata-page', styleUrls: ['./browse-by-metadata-page.component.scss'], @@ -50,7 +52,7 @@ export class BrowseByMetadataPageComponent implements OnInit { * The pagination config used to display the values */ paginationConfig: PaginationComponentOptions = Object.assign(new PaginationComponentOptions(), { - id: 'bbm', + id: BBM_PAGINATION_ID, currentPage: 1, pageSize: 20 }); diff --git a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html index 8577ee654c..a87e862345 100644 --- a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html +++ b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html @@ -1,5 +1,5 @@
    - + {{object.value}} diff --git a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.ts b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.ts index cfdf561f99..235ac0665a 100644 --- a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.ts +++ b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.ts @@ -1,9 +1,12 @@ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; import { AbstractListableElementComponent } from '../../object-collection/shared/object-collection-element/abstract-listable-element.component'; import { BrowseEntry } from '../../../core/shared/browse-entry.model'; import { ViewMode } from '../../../core/shared/view-mode.model'; import { listableObjectComponent } from '../../object-collection/shared/listable-object/listable-object.decorator'; +import { PaginationService } from '../../../core/pagination/pagination.service'; +import { Params } from '@angular/router'; +import { BBM_PAGINATION_ID } from '../../../browse-by/browse-by-metadata-page/browse-by-metadata-page.component'; @Component({ selector: 'ds-browse-entry-list-element', @@ -15,16 +18,27 @@ import { listableObjectComponent } from '../../object-collection/shared/listable * This component is automatically used to create a list view for BrowseEntry objects when used in ObjectCollectionComponent */ @listableObjectComponent(BrowseEntry, ViewMode.ListElement) -export class BrowseEntryListElementComponent extends AbstractListableElementComponent { +export class BrowseEntryListElementComponent extends AbstractListableElementComponent implements OnInit { + queryParams: Params; + + constructor(private paginationService: PaginationService) { + super(); + } + + ngOnInit() { + this.queryParams = this.getQueryParams(); + } /** * Get the query params to access the item page of this browse entry. */ - public getQueryParams(): {[param: string]: any} { + private getQueryParams(): Params { + const pageParamName = this.paginationService.getPageParam(BBM_PAGINATION_ID); return { value: this.object.value, authority: !!this.object.authority ? this.object.authority : undefined, startsWith: undefined, + [pageParamName]: null, }; } } From c602a22f6ca0754ff7ab3e442e517c70f656eeb9 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Tue, 16 Aug 2022 10:42:57 +0200 Subject: [PATCH 21/39] 93882: Move 3rd party css imports to separate file --- src/styles/_vendor.scss | 5 +++++ src/styles/base-theme.scss | 4 +--- src/themes/custom/styles/theme.scss | 4 +--- src/themes/dspace/styles/theme.scss | 4 +--- 4 files changed, 8 insertions(+), 9 deletions(-) create mode 100644 src/styles/_vendor.scss diff --git a/src/styles/_vendor.scss b/src/styles/_vendor.scss new file mode 100644 index 0000000000..9d9842b9b3 --- /dev/null +++ b/src/styles/_vendor.scss @@ -0,0 +1,5 @@ +// node_modules imports meant for all the themes + +@import '~node_modules/bootstrap/scss/bootstrap.scss'; +@import '~node_modules/nouislider/distribute/nouislider.min'; +@import '~node_modules/ngx-ui-switch/ui-switch.component.scss'; diff --git a/src/styles/base-theme.scss b/src/styles/base-theme.scss index a88057fec1..539f9fe185 100644 --- a/src/styles/base-theme.scss +++ b/src/styles/base-theme.scss @@ -1,8 +1,6 @@ @import './helpers/font_awesome_imports.scss'; -@import '../../node_modules/bootstrap/scss/bootstrap.scss'; -@import '../../node_modules/nouislider/distribute/nouislider.min'; +@import './_vendor.scss'; @import './_custom_variables.scss'; @import './bootstrap_variables_mapping.scss'; @import './_truncatable-part.component.scss'; @import './_global-styles.scss'; -@import '../../node_modules/ngx-ui-switch/ui-switch.component.scss'; diff --git a/src/themes/custom/styles/theme.scss b/src/themes/custom/styles/theme.scss index ad2c0de24e..05c96f3372 100644 --- a/src/themes/custom/styles/theme.scss +++ b/src/themes/custom/styles/theme.scss @@ -4,11 +4,9 @@ @import '../../../styles/_variables.scss'; @import '../../../styles/_mixins.scss'; @import '../../../styles/helpers/font_awesome_imports.scss'; -@import '../../../../node_modules/bootstrap/scss/bootstrap.scss'; -@import '../../../../node_modules/nouislider/distribute/nouislider.min'; +@import '../../../styles/_vendor.scss'; @import '../../../styles/_custom_variables.scss'; @import './_theme_css_variable_overrides.scss'; @import '../../../styles/bootstrap_variables_mapping.scss'; @import '../../../styles/_truncatable-part.component.scss'; @import './_global-styles.scss'; -@import '../../../../node_modules/ngx-ui-switch/ui-switch.component.scss'; diff --git a/src/themes/dspace/styles/theme.scss b/src/themes/dspace/styles/theme.scss index ad2c0de24e..05c96f3372 100644 --- a/src/themes/dspace/styles/theme.scss +++ b/src/themes/dspace/styles/theme.scss @@ -4,11 +4,9 @@ @import '../../../styles/_variables.scss'; @import '../../../styles/_mixins.scss'; @import '../../../styles/helpers/font_awesome_imports.scss'; -@import '../../../../node_modules/bootstrap/scss/bootstrap.scss'; -@import '../../../../node_modules/nouislider/distribute/nouislider.min'; +@import '../../../styles/_vendor.scss'; @import '../../../styles/_custom_variables.scss'; @import './_theme_css_variable_overrides.scss'; @import '../../../styles/bootstrap_variables_mapping.scss'; @import '../../../styles/_truncatable-part.component.scss'; @import './_global-styles.scss'; -@import '../../../../node_modules/ngx-ui-switch/ui-switch.component.scss'; From 35614d147397d25b01b3174026a71f4ce6490a91 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Wed, 17 Aug 2022 14:12:33 -0500 Subject: [PATCH 22/39] Replace gendered language with generic equivalent --- README.md | 2 +- .../some-feature-authorization.guard.ts | 2 +- src/app/core/data/processes/process-data.service.ts | 2 +- src/app/core/end-user-agreement/end-user-agreement.service.ts | 2 +- src/app/core/shared/metadata.models.ts | 4 ++-- .../health-panel/health-status/health-status.component.ts | 2 +- .../info/end-user-agreement/end-user-agreement.component.ts | 2 +- .../profile-page-researcher-form.component.ts | 2 +- src/app/shared/cookies/klaro-configuration.ts | 2 +- .../item/item-metadata-list-element.component.ts | 2 +- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index cef95a45fa..837cb48004 100644 --- a/README.md +++ b/README.md @@ -179,7 +179,7 @@ If needing to update default configurations values for production, update local - Update `environment.production.ts` file in `src/environment/` for a `production` environment; -The environment object is provided for use as import in code and is extended with he runtime configuration on bootstrap of the application. +The environment object is provided for use as import in code and is extended with the runtime configuration on bootstrap of the application. > Take caution moving runtime configs into the buildtime configuration. They will be overwritten by what is defined in the runtime config on bootstrap. diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.ts b/src/app/core/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.ts index 18c7f8fb43..b909640ea6 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.ts +++ b/src/app/core/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.ts @@ -19,7 +19,7 @@ export abstract class SomeFeatureAuthorizationGuard implements CanActivate { /** * True when user has authorization rights for the feature and object provided - * Redirect the user to the unauthorized page when he/she's not authorized for the given feature + * Redirect the user to the unauthorized page when they are not authorized for the given feature */ canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { return observableCombineLatest(this.getFeatureIDs(route, state), this.getObjectUrl(route, state), this.getEPersonUuid(route, state)).pipe( diff --git a/src/app/core/data/processes/process-data.service.ts b/src/app/core/data/processes/process-data.service.ts index 81b4cbd503..cb00ac529e 100644 --- a/src/app/core/data/processes/process-data.service.ts +++ b/src/app/core/data/processes/process-data.service.ts @@ -38,7 +38,7 @@ export class ProcessDataService extends DataService { } /** - * Get the endpoint for a process his files + * Get the endpoint for the files of the process * @param processId The ID of the process */ getFilesEndpoint(processId: string): Observable { diff --git a/src/app/core/end-user-agreement/end-user-agreement.service.ts b/src/app/core/end-user-agreement/end-user-agreement.service.ts index 8a18488660..3841abb5d4 100644 --- a/src/app/core/end-user-agreement/end-user-agreement.service.ts +++ b/src/app/core/end-user-agreement/end-user-agreement.service.ts @@ -55,7 +55,7 @@ export class EndUserAgreementService { /** * Set the current user's accepted agreement status - * When a user is authenticated, set his/her metadata to the provided value + * When a user is authenticated, set their metadata to the provided value * When no user is authenticated, set the cookie to the provided value * @param accepted */ diff --git a/src/app/core/shared/metadata.models.ts b/src/app/core/shared/metadata.models.ts index 52f1805e8c..e74e1f9927 100644 --- a/src/app/core/shared/metadata.models.ts +++ b/src/app/core/shared/metadata.models.ts @@ -39,7 +39,7 @@ export class MetadataValue implements MetadataValueInterface { value: string; /** - * The place of this MetadataValue within his list of metadata + * The place of this MetadataValue within its list of metadata * This is used to render metadata in a specific custom order */ @autoserialize @@ -105,7 +105,7 @@ export class MetadatumViewModel { value: string; /** - * The place of this MetadataValue within his list of metadata + * The place of this MetadataValue within its list of metadata * This is used to render metadata in a specific custom order */ place: number; diff --git a/src/app/health-page/health-panel/health-status/health-status.component.ts b/src/app/health-page/health-panel/health-status/health-status.component.ts index 19f83713fc..172baeee71 100644 --- a/src/app/health-page/health-panel/health-status/health-status.component.ts +++ b/src/app/health-page/health-panel/health-status/health-status.component.ts @@ -16,7 +16,7 @@ export class HealthStatusComponent { @Input() status: HealthStatus; /** - * He + * Health Status */ HealthStatus = HealthStatus; diff --git a/src/app/info/end-user-agreement/end-user-agreement.component.ts b/src/app/info/end-user-agreement/end-user-agreement.component.ts index a3350319ba..bcb5e0ce9d 100644 --- a/src/app/info/end-user-agreement/end-user-agreement.component.ts +++ b/src/app/info/end-user-agreement/end-user-agreement.component.ts @@ -76,7 +76,7 @@ export class EndUserAgreementComponent implements OnInit { /** * Cancel the agreement - * If the user is logged in, this will log him/her out + * If the user is logged in, this will log them out * If the user is not logged in, they will be redirected to the homepage */ cancel() { diff --git a/src/app/profile-page/profile-page-researcher-form/profile-page-researcher-form.component.ts b/src/app/profile-page/profile-page-researcher-form/profile-page-researcher-form.component.ts index f7662e0522..2d61660a17 100644 --- a/src/app/profile-page/profile-page-researcher-form/profile-page-researcher-form.component.ts +++ b/src/app/profile-page/profile-page-researcher-form/profile-page-researcher-form.component.ts @@ -24,7 +24,7 @@ import { ConfirmationModalComponent } from '../../shared/confirmation-modal/conf templateUrl: './profile-page-researcher-form.component.html', }) /** - * Component for a user to create/delete or change his researcher profile. + * Component for a user to create/delete or change their researcher profile. */ export class ProfilePageResearcherFormComponent implements OnInit { diff --git a/src/app/shared/cookies/klaro-configuration.ts b/src/app/shared/cookies/klaro-configuration.ts index 1c87e46309..659583ad87 100644 --- a/src/app/shared/cookies/klaro-configuration.ts +++ b/src/app/shared/cookies/klaro-configuration.ts @@ -24,7 +24,7 @@ export const klaroConfiguration: any = { /* Setting 'hideLearnMore' to 'true' will hide the "learn more / customize" link in the consent notice. We strongly advise against using this under most - circumstances, as it keeps the user from customizing his/her consent choices. + circumstances, as it keeps the user from customizing their consent choices. */ hideLearnMore: false, diff --git a/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-list-element.component.ts b/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-list-element.component.ts index 3be16bcb5e..d0bbdf1ded 100644 --- a/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-list-element.component.ts +++ b/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-list-element.component.ts @@ -12,7 +12,7 @@ import { metadataRepresentationComponent } from '../../../metadata-representatio /** * A component for displaying MetadataRepresentation objects in the form of items * It will send the MetadataRepresentation object along with ElementViewMode.SetElement to the ItemTypeSwitcherComponent, - * which will in his turn decide how to render the item as metadata. + * which will in its turn decide how to render the item as metadata. */ export class ItemMetadataListElementComponent extends MetadataRepresentationListElementComponent { /** From f8e1db49874762455041974391be3ccc51c1a5d3 Mon Sep 17 00:00:00 2001 From: Yana De Pauw Date: Thu, 18 Aug 2022 14:04:59 +0200 Subject: [PATCH 23/39] 93914: Add the ability to delete processes --- .../detail/process-detail.component.html | 92 ++++++++--- .../detail/process-detail.component.spec.ts | 60 ++++++- .../detail/process-detail.component.ts | 51 +++++- .../process-bulk-delete.service.spec.ts | 149 ++++++++++++++++++ .../overview/process-bulk-delete.service.ts | 118 ++++++++++++++ .../overview/process-overview.component.html | 58 ++++++- .../process-overview.component.spec.ts | 104 +++++++++++- .../overview/process-overview.component.ts | 60 ++++++- src/assets/i18n/en.json5 | 35 ++++ 9 files changed, 685 insertions(+), 42 deletions(-) create mode 100644 src/app/process-page/overview/process-bulk-delete.service.spec.ts create mode 100644 src/app/process-page/overview/process-bulk-delete.service.ts diff --git a/src/app/process-page/detail/process-detail.component.html b/src/app/process-page/detail/process-detail.component.html index 995e56e081..ae3418eafa 100644 --- a/src/app/process-page/detail/process-detail.component.html +++ b/src/app/process-page/detail/process-detail.component.html @@ -1,53 +1,99 @@
    -

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

    -
    - -
    +

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

    {{ process?.scriptName }}
    - +
    {{ argument?.name }} {{ argument?.value }}
    - - - {{getFileName(file)}} - ({{(file?.sizeBytes) | dsFileSize }}) - + + + {{getFileName(file)}} + ({{(file?.sizeBytes) | dsFileSize }}) +
    - +
    {{ process.startTime | date:dateFormat:'UTC' }}
    - +
    {{ process.endTime | date:dateFormat:'UTC' }}
    - +
    {{ process.processStatus }}
    - - -
    {{ (outputLogs$ | async) }}
    -

    + {{ 'process.detail.logs.button' | translate }} + + +

    {{ (outputLogs$ | async) }}
    +

    - {{ 'process.detail.logs.none' | translate }} -

    + {{ 'process.detail.logs.none' | translate }} +

    +
    + + + +
    + + + +
    + + + + + + +
    + +
    + diff --git a/src/app/process-page/detail/process-detail.component.spec.ts b/src/app/process-page/detail/process-detail.component.spec.ts index 4a85c75f81..53e65e62eb 100644 --- a/src/app/process-page/detail/process-detail.component.spec.ts +++ b/src/app/process-page/detail/process-detail.component.spec.ts @@ -19,15 +19,23 @@ import { RouterTestingModule } from '@angular/router/testing'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { ProcessDetailFieldComponent } from './process-detail-field/process-detail-field.component'; import { Process } from '../processes/process.model'; -import { ActivatedRoute } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { of as observableOf } from 'rxjs'; import { By } from '@angular/platform-browser'; import { FileSizePipe } from '../../shared/utils/file-size-pipe'; import { Bitstream } from '../../core/shared/bitstream.model'; import { ProcessDataService } from '../../core/data/processes/process-data.service'; import { DSONameService } from '../../core/breadcrumbs/dso-name.service'; -import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; +import { + createFailedRemoteDataObject$, + createSuccessfulRemoteDataObject, + createSuccessfulRemoteDataObject$ +} from '../../shared/remote-data.utils'; import { createPaginatedList } from '../../shared/testing/utils.test'; +import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { NotificationsService } from '../../shared/notifications/notifications.service'; +import { getProcessListRoute } from '../process-page-routing.paths'; describe('ProcessDetailComponent', () => { let component: ProcessDetailComponent; @@ -44,6 +52,11 @@ describe('ProcessDetailComponent', () => { let processOutput; + let modalService; + let notificationsService; + + let router; + function init() { processOutput = 'Process Started'; process = Object.assign(new Process(), { @@ -93,7 +106,8 @@ describe('ProcessDetailComponent', () => { } }); processService = jasmine.createSpyObj('processService', { - getFiles: createSuccessfulRemoteDataObject$(createPaginatedList(files)) + getFiles: createSuccessfulRemoteDataObject$(createPaginatedList(files)), + delete: createSuccessfulRemoteDataObject$(null) }); bitstreamDataService = jasmine.createSpyObj('bitstreamDataService', { findByHref: createSuccessfulRemoteDataObject$(logBitstream) @@ -104,13 +118,23 @@ describe('ProcessDetailComponent', () => { httpClient = jasmine.createSpyObj('httpClient', { get: observableOf(processOutput) }); + + modalService = jasmine.createSpyObj('modalService', { + open: {} + }); + + notificationsService = new NotificationsServiceStub(); + + router = jasmine.createSpyObj('router', { + navigateByUrl:{} + }); } beforeEach(waitForAsync(() => { init(); TestBed.configureTestingModule({ declarations: [ProcessDetailComponent, ProcessDetailFieldComponent, VarDirective, FileSizePipe], - imports: [TranslateModule.forRoot(), RouterTestingModule.withRoutes([])], + imports: [TranslateModule.forRoot()], providers: [ { provide: ActivatedRoute, @@ -121,6 +145,9 @@ describe('ProcessDetailComponent', () => { { provide: DSONameService, useValue: nameService }, { provide: AuthService, useValue: new AuthServiceMock() }, { provide: HttpClient, useValue: httpClient }, + { provide: NgbModal, useValue: modalService }, + { provide: NotificationsService, useValue: notificationsService }, + { provide: Router, useValue: router }, ], schemas: [CUSTOM_ELEMENTS_SCHEMA] }).compileComponents(); @@ -207,4 +234,29 @@ describe('ProcessDetailComponent', () => { }); }); + describe('openDeleteModal', () => { + it('should open the modal', () => { + component.openDeleteModal({}); + expect(modalService.open).toHaveBeenCalledWith({}); + }); + }); + + describe('deleteProcess', () => { + it('should delete the process and navigate back to the overview page on success', () => { + component.deleteProcess(process); + + expect(processService.delete).toHaveBeenCalledWith(process.processId); + expect(notificationsService.success).toHaveBeenCalled(); + expect(router.navigateByUrl).toHaveBeenCalledWith(getProcessListRoute()); + }); + it('should delete the process and not navigate on error', () => { + (processService.delete as jasmine.Spy).and.returnValue(createFailedRemoteDataObject$()); + component.deleteProcess(process); + + expect(processService.delete).toHaveBeenCalledWith(process.processId); + expect(notificationsService.error).toHaveBeenCalled(); + expect(router.navigateByUrl).not.toHaveBeenCalled(); + }); + }); + }); diff --git a/src/app/process-page/detail/process-detail.component.ts b/src/app/process-page/detail/process-detail.component.ts index 8a05288eb2..f9151d27b8 100644 --- a/src/app/process-page/detail/process-detail.component.ts +++ b/src/app/process-page/detail/process-detail.component.ts @@ -12,8 +12,9 @@ import { RemoteData } from '../../core/data/remote-data'; import { Bitstream } from '../../core/shared/bitstream.model'; import { DSpaceObject } from '../../core/shared/dspace-object.model'; import { - getFirstSucceededRemoteDataPayload, - getFirstSucceededRemoteData + getFirstCompletedRemoteData, + getFirstSucceededRemoteData, + getFirstSucceededRemoteDataPayload } from '../../core/shared/operators'; import { URLCombiner } from '../../core/url-combiner/url-combiner'; import { AlertType } from '../../shared/alert/aletr-type'; @@ -21,6 +22,10 @@ import { hasValue } from '../../shared/empty.util'; import { ProcessStatus } from '../processes/process-status.model'; import { Process } from '../processes/process.model'; import { redirectOn4xx } from '../../core/shared/authorized.operators'; +import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; +import { getProcessListRoute } from '../process-page-routing.paths'; +import { NotificationsService } from '../../shared/notifications/notifications.service'; +import { TranslateService } from '@ngx-translate/core'; @Component({ selector: 'ds-process-detail', @@ -71,6 +76,11 @@ export class ProcessDetailComponent implements OnInit { */ dateFormat = 'yyyy-MM-dd HH:mm:ss ZZZZ'; + /** + * Reference to NgbModal + */ + protected modalRef: NgbModalRef; + constructor(protected route: ActivatedRoute, protected router: Router, protected processService: ProcessDataService, @@ -78,7 +88,11 @@ export class ProcessDetailComponent implements OnInit { protected nameService: DSONameService, private zone: NgZone, protected authService: AuthService, - protected http: HttpClient) { + protected http: HttpClient, + protected modalService: NgbModal, + protected notificationsService: NotificationsService, + protected translateService: TranslateService + ) { } /** @@ -172,4 +186,35 @@ export class ProcessDetailComponent implements OnInit { || process.processStatus.toString() === ProcessStatus[ProcessStatus.FAILED].toString())); } + /** + * Delete the current process + * @param process + */ + deleteProcess(process: Process) { + this.processService.delete(process.processId).pipe( + getFirstCompletedRemoteData() + ).subscribe((rd) => { + if (rd.hasSucceeded) { + this.notificationsService.success(this.translateService.get('process.detail.delete.success')); + this.router.navigateByUrl(getProcessListRoute()); + } else { + this.notificationsService.error(this.translateService.get('process.detail.delete.error')); + } + }); + } + + /** + * Open a given modal. + * @param content - the modal content. + */ + openDeleteModal(content) { + this.modalRef = this.modalService.open(content); + } + /** + * Close the modal. + */ + closeModal() { + this.modalRef.close(); + } + } diff --git a/src/app/process-page/overview/process-bulk-delete.service.spec.ts b/src/app/process-page/overview/process-bulk-delete.service.spec.ts new file mode 100644 index 0000000000..5139048dd1 --- /dev/null +++ b/src/app/process-page/overview/process-bulk-delete.service.spec.ts @@ -0,0 +1,149 @@ +import { ProcessBulkDeleteService } from './process-bulk-delete.service'; +import { waitForAsync } from '@angular/core/testing'; +import { createFailedRemoteDataObject$, createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; +import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; +import { getMockTranslateService } from '../../shared/mocks/translate.service.mock'; + +describe('ProcessBulkDeleteService', () => { + + let service: ProcessBulkDeleteService; + let processDataService; + let notificationsService; + let mockTranslateService; + + beforeEach(waitForAsync(() => { + processDataService = jasmine.createSpyObj('processDataService', { + delete: createSuccessfulRemoteDataObject$(null) + }); + notificationsService = new NotificationsServiceStub(); + mockTranslateService = getMockTranslateService(); + service = new ProcessBulkDeleteService(processDataService, notificationsService, mockTranslateService); + })); + + describe('toggleDelete', () => { + it('should add a new value to the processesToDelete list when not yet present', () => { + service.toggleDelete('test-id-1'); + service.toggleDelete('test-id-2'); + + expect(service.processesToDelete).toEqual(['test-id-1', 'test-id-2']); + }); + it('should remove a value from the processesToDelete list when already present', () => { + service.toggleDelete('test-id-1'); + service.toggleDelete('test-id-2'); + + expect(service.processesToDelete).toEqual(['test-id-1', 'test-id-2']); + + service.toggleDelete('test-id-1'); + expect(service.processesToDelete).toEqual(['test-id-2']); + }); + }); + + describe('isToBeDeleted', () => { + it('should return true when the provided process id is present in the list', () => { + service.toggleDelete('test-id-1'); + service.toggleDelete('test-id-2'); + + expect(service.isToBeDeleted('test-id-1')).toBeTrue(); + }); + it('should return false when the provided process id is not present in the list', () => { + service.toggleDelete('test-id-1'); + service.toggleDelete('test-id-2'); + + expect(service.isToBeDeleted('test-id-3')).toBeFalse(); + }); + }); + + describe('clearAllProcesses', () => { + it('should clear the list of to be deleted processes', () => { + service.toggleDelete('test-id-1'); + service.toggleDelete('test-id-2'); + + expect(service.processesToDelete).toEqual(['test-id-1', 'test-id-2']); + + service.clearAllProcesses(); + expect(service.processesToDelete).toEqual([]); + }); + }); + describe('getAmountOfSelectedProcesses', () => { + it('should return the amount of the currently selected processes for deletion', () => { + service.toggleDelete('test-id-1'); + service.toggleDelete('test-id-2'); + + expect(service.getAmountOfSelectedProcesses()).toEqual(2); + }); + }); + describe('isProcessing$', () => { + it('should return a behavior subject containing whether a delete is currently processing or not', () => { + const result = service.isProcessing$(); + expect(result.getValue()).toBeFalse(); + + result.next(true); + expect(result.getValue()).toBeTrue(); + }); + }); + describe('hasSelected', () => { + it('should return if the list of selected processes has values', () => { + expect(service.hasSelected()).toBeFalse(); + + service.toggleDelete('test-id-1'); + service.toggleDelete('test-id-2'); + + expect(service.hasSelected()).toBeTrue(); + }); + }); + describe('deleteSelectedProcesses', () => { + it('should delete all selected processes, show an error for each failed one and a notification at the end with the amount of succeeded deletions', () => { + (processDataService.delete as jasmine.Spy).and.callFake((processId: string) => { + if (processId.includes('error')) { + return createFailedRemoteDataObject$(); + } else { + return createSuccessfulRemoteDataObject$(null); + } + }); + + service.toggleDelete('test-id-1'); + service.toggleDelete('test-id-2'); + service.toggleDelete('error-id-3'); + service.toggleDelete('test-id-4'); + service.toggleDelete('error-id-5'); + service.toggleDelete('error-id-6'); + service.toggleDelete('test-id-7'); + + + service.deleteSelectedProcesses(); + + expect(processDataService.delete).toHaveBeenCalledWith('test-id-1'); + + + expect(processDataService.delete).toHaveBeenCalledWith('test-id-2'); + + + expect(processDataService.delete).toHaveBeenCalledWith('error-id-3'); + expect(notificationsService.error).toHaveBeenCalled(); + expect(mockTranslateService.get).toHaveBeenCalledWith('process.bulk.delete.error.body', {processId: 'error-id-3'}); + + + expect(processDataService.delete).toHaveBeenCalledWith('test-id-4'); + + + expect(processDataService.delete).toHaveBeenCalledWith('error-id-5'); + expect(notificationsService.error).toHaveBeenCalled(); + expect(mockTranslateService.get).toHaveBeenCalledWith('process.bulk.delete.error.body', {processId: 'error-id-5'}); + + + expect(processDataService.delete).toHaveBeenCalledWith('error-id-6'); + expect(notificationsService.error).toHaveBeenCalled(); + expect(mockTranslateService.get).toHaveBeenCalledWith('process.bulk.delete.error.body', {processId: 'error-id-6'}); + + + expect(processDataService.delete).toHaveBeenCalledWith('test-id-7'); + + expect(notificationsService.success).toHaveBeenCalled(); + expect(mockTranslateService.get).toHaveBeenCalledWith('process.bulk.delete.success', {count: 4}); + + expect(service.processesToDelete).toEqual(['error-id-3', 'error-id-5', 'error-id-6']); + + + }); + }); +}); diff --git a/src/app/process-page/overview/process-bulk-delete.service.ts b/src/app/process-page/overview/process-bulk-delete.service.ts new file mode 100644 index 0000000000..c0943fb615 --- /dev/null +++ b/src/app/process-page/overview/process-bulk-delete.service.ts @@ -0,0 +1,118 @@ +import { Process } from '../processes/process.model'; +import { Injectable } from '@angular/core'; +import { ProcessDataService } from '../../core/data/processes/process-data.service'; +import { NotificationsService } from '../../shared/notifications/notifications.service'; +import { isNotEmpty } from '../../shared/empty.util'; +import { BehaviorSubject, count, from } from 'rxjs'; +import { getFirstCompletedRemoteData } from '../../core/shared/operators'; +import { concatMap, filter, tap } from 'rxjs/operators'; +import { RemoteData } from '../../core/data/remote-data'; +import { TranslateService } from '@ngx-translate/core'; + +@Injectable({ + providedIn: 'root' +}) +/** + * Service to facilitate removing processes in bulk. + */ +export class ProcessBulkDeleteService { + + /** + * Array to track the processes to be deleted + */ + processesToDelete: string[] = []; + + /** + * Behavior subject to track whether the delete is processing + * @protected + */ + protected isProcessingBehaviorSubject: BehaviorSubject = new BehaviorSubject(false); + + constructor( + protected processDataService: ProcessDataService, + protected notificationsService: NotificationsService, + protected translateService: TranslateService + ) { + } + + /** + * Add or remove a process id to/from the list + * If the id is already present it will be removed, otherwise it will be added. + * + * @param processId - The process id to add or remove + */ + toggleDelete(processId: string) { + if (this.isToBeDeleted(processId)) { + this.processesToDelete.splice(this.processesToDelete.indexOf(processId), 1); + } else { + this.processesToDelete.push(processId); + } + } + + /** + * Checks if the provided process id is present in the to be deleted list + * @param processId + */ + isToBeDeleted(processId: string) { + return this.processesToDelete.includes(processId); + } + + /** + * Clear the list of processes to be deleted + */ + clearAllProcesses() { + this.processesToDelete.splice(0); + } + + /** + * Get the amount of processes selected for deletion + */ + getAmountOfSelectedProcesses() { + return this.processesToDelete.length; + } + + /** + * Returns a behavior subject to indicate whether the bulk delete is processing + */ + isProcessing$() { + return this.isProcessingBehaviorSubject; + } + + /** + * Returns whether there currently are values selected for deletion + */ + hasSelected(): boolean { + return isNotEmpty(this.processesToDelete); + } + + /** + * Delete all selected processes one by one + * When the deletion for a process fails, an error notification will be shown with the process id, + * but it will continue deleting the other processes. + * At the end it will show a notification stating the amount of successful deletes + * The successfully deleted processes will be removed from the list of selected values, the failed ones will be retained. + */ + deleteSelectedProcesses() { + this.isProcessingBehaviorSubject.next(true); + + from([...this.processesToDelete]).pipe( + concatMap((processId) => { + return this.processDataService.delete(processId).pipe( + getFirstCompletedRemoteData(), + tap((rd: RemoteData) => { + if (rd.hasFailed) { + this.notificationsService.error(this.translateService.get('process.bulk.delete.error.head'), this.translateService.get('process.bulk.delete.error.body', {processId: processId})); + } else { + this.toggleDelete(processId); + } + }) + ); + }), + filter((rd: RemoteData) => rd.hasSucceeded), + count(), + ).subscribe((value) => { + this.notificationsService.success(this.translateService.get('process.bulk.delete.success', {count: value})); + this.isProcessingBehaviorSubject.next(false); + }); + } +} diff --git a/src/app/process-page/overview/process-overview.component.html b/src/app/process-page/overview/process-overview.component.html index 7d3f15f074..5bf5fee79f 100644 --- a/src/app/process-page/overview/process-overview.component.html +++ b/src/app/process-page/overview/process-overview.component.html @@ -1,7 +1,19 @@

    {{'process.overview.title' | translate}}

    - +
    +
    + + + +
    {{'process.overview.table.start' | translate}} {{'process.overview.table.finish' | translate}} {{'process.overview.table.status' | translate}} + {{'process.overview.table.actions' | translate}} - + {{process.processId}} {{process.scriptName}} {{ePersonName}} {{process.startTime | date:dateFormat:'UTC'}} {{process.endTime | date:dateFormat:'UTC'}} {{process.processStatus}} + + +
    + + + +
    + + + + +
    + + +
    + diff --git a/src/app/process-page/overview/process-overview.component.spec.ts b/src/app/process-page/overview/process-overview.component.spec.ts index c147ed00ca..94071c0e59 100644 --- a/src/app/process-page/overview/process-overview.component.spec.ts +++ b/src/app/process-page/overview/process-overview.component.spec.ts @@ -1,5 +1,5 @@ import { ProcessOverviewComponent } from './process-overview.component'; -import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { VarDirective } from '../../shared/utils/var.directive'; import { TranslateModule } from '@ngx-translate/core'; import { RouterTestingModule } from '@angular/router/testing'; @@ -13,11 +13,11 @@ import { ProcessStatus } from '../processes/process-status.model'; import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; import { createPaginatedList } from '../../shared/testing/utils.test'; import { PaginationService } from '../../core/pagination/pagination.service'; -import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model'; -import { SortDirection, SortOptions } from '../../core/cache/models/sort-options.model'; import { PaginationServiceStub } from '../../shared/testing/pagination-service.stub'; -import { FindListOptions } from '../../core/data/find-list-options.model'; import { DatePipe } from '@angular/common'; +import { BehaviorSubject } from 'rxjs'; +import { ProcessBulkDeleteService } from './process-bulk-delete.service'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; describe('ProcessOverviewComponent', () => { let component: ProcessOverviewComponent; @@ -30,6 +30,9 @@ describe('ProcessOverviewComponent', () => { let processes: Process[]; let ePerson: EPerson; + let processBulkDeleteService; + let modalService; + const pipe = new DatePipe('en-US'); function init() { @@ -80,6 +83,29 @@ describe('ProcessOverviewComponent', () => { }); paginationService = new PaginationServiceStub(); + + processBulkDeleteService = jasmine.createSpyObj('processBulkDeleteService', { + clearAllProcesses: {}, + deleteSelectedProcesses: {}, + isProcessing$: new BehaviorSubject(false), + hasSelected: true, + isToBeDeleted: true, + toggleDelete: {}, + getAmountOfSelectedProcesses: 5 + + }); + + (processBulkDeleteService.isToBeDeleted as jasmine.Spy).and.callFake((id) => { + if (id === 2) { + return true; + } else { + return false; + } + }); + + modalService = jasmine.createSpyObj('modalService', { + open: {} + }); } beforeEach(waitForAsync(() => { @@ -90,7 +116,9 @@ describe('ProcessOverviewComponent', () => { providers: [ { provide: ProcessDataService, useValue: processService }, { provide: EPersonDataService, useValue: ePersonService }, - { provide: PaginationService, useValue: paginationService } + { provide: PaginationService, useValue: paginationService }, + { provide: ProcessBulkDeleteService, useValue: processBulkDeleteService }, + { provide: NgbModal, useValue: modalService }, ], schemas: [NO_ERRORS_SCHEMA] }).compileComponents(); @@ -154,5 +182,71 @@ describe('ProcessOverviewComponent', () => { expect(el.textContent).toContain(processes[index].processStatus); }); }); + it('should display a delete button in the seventh column', () => { + rowElements.forEach((rowElement, index) => { + const el = rowElement.query(By.css('td:nth-child(7)')); + expect(el.nativeElement.innerHTML).toContain('fas fa-trash'); + + el.query(By.css('button')).triggerEventHandler('click', null); + expect(processBulkDeleteService.toggleDelete).toHaveBeenCalledWith(processes[index].processId); + }); + }); + it('should indicate a row that has been selected for deletion', () => { + const deleteRow = fixture.debugElement.query(By.css('.table-danger')); + expect(deleteRow.nativeElement.innerHTML).toContain('/processes/' + processes[1].processId); + }); + }); + + describe('overview buttons', () => { + it('should show a button to clear selected processes when there are selected processes', () => { + const clearButton = fixture.debugElement.query(By.css('.btn-primary')); + expect(clearButton.nativeElement.innerHTML).toContain('process.overview.delete.clear'); + + clearButton.triggerEventHandler('click', null); + expect(processBulkDeleteService.clearAllProcesses).toHaveBeenCalled(); + }); + it('should not show a button to clear selected processes when there are no selected processes', () => { + (processBulkDeleteService.hasSelected as jasmine.Spy).and.returnValue(false); + fixture.detectChanges(); + + const clearButton = fixture.debugElement.query(By.css('.btn-primary')); + expect(clearButton).toBeNull(); + }); + it('should show a button to open the delete modal when there are selected processes', () => { + spyOn(component, 'openDeleteModal'); + + const deleteButton = fixture.debugElement.query(By.css('.btn-danger')); + expect(deleteButton.nativeElement.innerHTML).toContain('process.overview.delete'); + + deleteButton.triggerEventHandler('click', null); + expect(component.openDeleteModal).toHaveBeenCalled(); + }); + it('should not show a button to clear selected processes when there are no selected processes', () => { + (processBulkDeleteService.hasSelected as jasmine.Spy).and.returnValue(false); + fixture.detectChanges(); + + const deleteButton = fixture.debugElement.query(By.css('.btn-danger')); + expect(deleteButton).toBeNull(); + }); + }); + + describe('openDeleteModal', () => { + it('should open the modal', () => { + component.openDeleteModal({}); + expect(modalService.open).toHaveBeenCalledWith({}); + }); + }); + + describe('deleteSelected', () => { + it('should call the deleteSelectedProcesses method on the processBulkDeleteService and close the modal when processing is done', () => { + spyOn(component, 'closeModal'); + spyOn(component, 'setProcesses'); + + component.deleteSelected(); + + expect(processBulkDeleteService.deleteSelectedProcesses).toHaveBeenCalled(); + expect(component.closeModal).toHaveBeenCalled(); + expect(component.setProcesses).toHaveBeenCalled(); + }); }); }); diff --git a/src/app/process-page/overview/process-overview.component.ts b/src/app/process-page/overview/process-overview.component.ts index 7afcd9cb76..749f76b1a6 100644 --- a/src/app/process-page/overview/process-overview.component.ts +++ b/src/app/process-page/overview/process-overview.component.ts @@ -1,5 +1,5 @@ -import { Component, OnInit } from '@angular/core'; -import { Observable } from 'rxjs'; +import { Component, OnDestroy, OnInit } from '@angular/core'; +import { BehaviorSubject, Observable, skipWhile, Subscription } from 'rxjs'; import { RemoteData } from '../../core/data/remote-data'; import { PaginatedList } from '../../core/data/paginated-list.model'; import { Process } from '../processes/process.model'; @@ -11,6 +11,9 @@ import { map, switchMap } from 'rxjs/operators'; import { ProcessDataService } from '../../core/data/processes/process-data.service'; import { PaginationService } from '../../core/pagination/pagination.service'; import { FindListOptions } from '../../core/data/find-list-options.model'; +import { ProcessBulkDeleteService } from './process-bulk-delete.service'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { hasValue } from '../../shared/empty.util'; @Component({ selector: 'ds-process-overview', @@ -19,7 +22,7 @@ import { FindListOptions } from '../../core/data/find-list-options.model'; /** * Component displaying a list of all processes in a paginated table */ -export class ProcessOverviewComponent implements OnInit { +export class ProcessOverviewComponent implements OnInit, OnDestroy { /** * List of all processes @@ -46,13 +49,22 @@ export class ProcessOverviewComponent implements OnInit { */ dateFormat = 'yyyy-MM-dd HH:mm:ss'; + processesToDelete: string[] = []; + private modalRef: any; + + isProcessingSub: Subscription; + constructor(protected processService: ProcessDataService, protected paginationService: PaginationService, - protected ePersonService: EPersonDataService) { + protected ePersonService: EPersonDataService, + protected modalService: NgbModal, + public processBulkDeleteService: ProcessBulkDeleteService, + ) { } ngOnInit(): void { this.setProcesses(); + this.processBulkDeleteService.clearAllProcesses(); } /** @@ -60,7 +72,7 @@ export class ProcessOverviewComponent implements OnInit { */ setProcesses() { this.processesRD$ = this.paginationService.getFindListOptions(this.pageConfig.id, this.config).pipe( - switchMap((config) => this.processService.findAll(config)) + switchMap((config) => this.processService.findAll(config, true, false)) ); } @@ -74,8 +86,46 @@ export class ProcessOverviewComponent implements OnInit { map((eperson: EPerson) => eperson.name) ); } + ngOnDestroy(): void { this.paginationService.clearPagination(this.pageConfig.id); + if (hasValue(this.isProcessingSub)) { + this.isProcessingSub.unsubscribe(); + } } + /** + * Open a given modal. + * @param content - the modal content. + */ + openDeleteModal(content) { + this.modalRef = this.modalService.open(content); + } + + /** + * Close the modal. + */ + closeModal() { + this.modalRef.close(); + } + + /** + * Delete the previously selected processes using the processBulkDeleteService + * After the deletion has started, subscribe to the isProcessing$ and when it is set + * to false after the processing is done, close the modal and reinitialise the processes + */ + deleteSelected() { + this.processBulkDeleteService.deleteSelectedProcesses(); + + if (hasValue(this.isProcessingSub)) { + this.isProcessingSub.unsubscribe(); + } + this.isProcessingSub = this.processBulkDeleteService.isProcessing$() + .subscribe((isProcessing) => { + if (!isProcessing) { + this.closeModal(); + this.setProcesses(); + } + }); + } } diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 57863b3a69..31a32e11b7 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -2983,6 +2983,22 @@ "process.detail.create" : "Create similar process", + "process.detail.actions": "Actions", + + "process.detail.delete.button": "Delete process", + + "process.detail.delete.header": "Delete process", + + "process.detail.delete.body": "Are you sure you want to delete the current process?", + + "process.detail.delete.cancel": "Cancel", + + "process.detail.delete.confirm": "Delete process", + + "process.detail.delete.success": "The process was successfully deleted.", + + "process.detail.delete.error": "Something went wrong when deleting the process", + "process.overview.table.finish" : "Finish time (UTC)", @@ -3003,6 +3019,25 @@ "process.overview.new": "New", + "process.overview.table.actions": "Actions", + + "process.overview.delete": "Delete {{count}} processes", + + "process.overview.delete.clear": "Clear delete selection", + + "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.body": "Are you sure you want to delete {{count}} process(es)?", + + "process.overview.delete.header": "Delete processes", + + "process.bulk.delete.error.head": "Error on deleteing process", + + "process.bulk.delete.error.body": "The process with ID {{processId}} could not be deleted. The remaining processes will continue being deleted. ", + + "process.bulk.delete.success": "{{count}} process(es) have been succesfully deleted", + + "profile.breadcrumbs": "Update Profile", From 606995881fa0a5e1040f74cb4a7053bdf838f826 Mon Sep 17 00:00:00 2001 From: lotte Date: Fri, 19 Aug 2022 11:05:08 +0200 Subject: [PATCH 24/39] 93665: fixes for post 7.2 and updated back button for browse by pages --- .../browse-by/browse-by.component.spec.ts | 6 ++-- .../shared/browse-by/browse-by.component.ts | 30 +++++++++++++++--- .../browse-entry-list-element.component.html | 2 +- ...rowse-entry-list-element.component.spec.ts | 24 ++++++++++++-- .../browse-entry-list-element.component.ts | 31 +++++++++++++------ 5 files changed, 73 insertions(+), 20 deletions(-) diff --git a/src/app/shared/browse-by/browse-by.component.spec.ts b/src/app/shared/browse-by/browse-by.component.spec.ts index 8bda44b11c..1f0d5cfae7 100644 --- a/src/app/shared/browse-by/browse-by.component.spec.ts +++ b/src/app/shared/browse-by/browse-by.component.spec.ts @@ -247,10 +247,12 @@ describe('BrowseByComponent', () => { }); describe('back', () => { it('should navigate back to the main browse page', () => { + const id = 'test-pagination'; comp.back(); - expect(paginationService.updateRoute).toHaveBeenCalledWith('test-pagination', {page: 1}, { + expect(paginationService.updateRoute).toHaveBeenCalledWith(id, {page: 1}, { value: null, - startsWith: null + startsWith: null, + [id + '.return']: null }); }); }); diff --git a/src/app/shared/browse-by/browse-by.component.ts b/src/app/shared/browse-by/browse-by.component.ts index 1132b41124..2c1844a310 100644 --- a/src/app/shared/browse-by/browse-by.component.ts +++ b/src/app/shared/browse-by/browse-by.component.ts @@ -1,10 +1,10 @@ -import { Component, EventEmitter, Injector, Input, OnInit, Output } from '@angular/core'; +import { Component, EventEmitter, Injector, Input, OnDestroy, OnInit, Output } from '@angular/core'; import { RemoteData } from '../../core/data/remote-data'; import { PaginatedList } from '../../core/data/paginated-list.model'; import { PaginationComponentOptions } from '../pagination/pagination-component-options.model'; import { SortDirection, SortOptions } from '../../core/cache/models/sort-options.model'; import { fadeIn, fadeInOut } from '../animations/fade'; -import { combineLatest as observableCombineLatest, Observable } from 'rxjs'; +import { BehaviorSubject, combineLatest as observableCombineLatest, Observable, Subscription } from 'rxjs'; import { ListableObject } from '../object-collection/shared/listable-object.model'; import { getStartsWithComponent, StartsWithType } from '../starts-with/starts-with-decorator'; import { PaginationService } from '../../core/pagination/pagination.service'; @@ -12,6 +12,7 @@ import { ViewMode } from '../../core/shared/view-mode.model'; import { RouteService } from '../../core/services/route.service'; import { map } from 'rxjs/operators'; import { hasValue } from '../empty.util'; +import { BBM_PAGINATION_ID } from '../../browse-by/browse-by-metadata-page/browse-by-metadata-page.component'; @Component({ selector: 'ds-browse-by', @@ -25,7 +26,7 @@ import { hasValue } from '../empty.util'; /** * Component to display a browse-by page for any ListableObject */ -export class BrowseByComponent implements OnInit { +export class BrowseByComponent implements OnInit, OnDestroy { /** * ViewMode that should be passed to {@link ListableObjectComponentLoaderComponent}. @@ -112,6 +113,16 @@ export class BrowseByComponent implements OnInit { */ shouldDisplayResetButton$: Observable; + /** + * Page number of the previous page + */ + previousPage$ = new BehaviorSubject('1'); + + /** + * Subscription that has to be unsubscribed from on destroy + */ + sub: Subscription; + public constructor(private injector: Injector, protected paginationService: PaginationService, private routeService: RouteService, @@ -171,9 +182,20 @@ export class BrowseByComponent implements OnInit { this.shouldDisplayResetButton$ = observableCombineLatest([startsWith$, value$]).pipe( map(([startsWith, value]) => hasValue(startsWith) || hasValue(value)) ); + this.sub = this.routeService.getQueryParameterValue(this.paginationConfig.id + '.return').subscribe(this.previousPage$); } + /** + * Navigate back to the previous browse by page + */ back() { - this.paginationService.updateRoute(this.paginationConfig.id, {page: 1}, {value: null, startsWith: null}); + const page = +this.previousPage$.value > 1 ? +this.previousPage$.value : 1; + this.paginationService.updateRoute(this.paginationConfig.id, {page: page}, {[this.paginationConfig.id + '.return']: null, value: null, startsWith: null}); + } + + ngOnDestroy(): void { + if (this.sub) { + this.sub.unsubscribe(); + } } } diff --git a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html index 94cc590988..dcbdd77bff 100644 --- a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html +++ b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html @@ -1,5 +1,5 @@
    - + {{object.value}} diff --git a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.spec.ts b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.spec.ts index d37f82234d..7d3d9e1eae 100644 --- a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.spec.ts +++ b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.spec.ts @@ -4,7 +4,9 @@ import { By } from '@angular/platform-browser'; import { TruncatePipe } from '../../utils/truncate.pipe'; import { BrowseEntryListElementComponent } from './browse-entry-list-element.component'; import { BrowseEntry } from '../../../core/shared/browse-entry.model'; - +import { PaginationService } from '../../../core/pagination/pagination.service'; +import { RouteService } from '../../../core/services/route.service'; +import { of as observableOf } from 'rxjs'; let browseEntryListElementComponent: BrowseEntryListElementComponent; let fixture: ComponentFixture; @@ -13,12 +15,28 @@ const mockValue: BrowseEntry = Object.assign(new BrowseEntry(), { value: 'De Langhe Kristof' }); -describe('MetadataListElementComponent', () => { +let paginationService; +let routeService; +const pageParam = 'bbm.page'; + +function init() { + paginationService = jasmine.createSpyObj('paginationService', { + getPageParam: pageParam + }); + + routeService = jasmine.createSpyObj('routeService', { + getQueryParameterValue: observableOf('1') + }) +} +describe('BrowseEntryListElementComponent', () => { beforeEach(waitForAsync(() => { + init(); TestBed.configureTestingModule({ declarations: [BrowseEntryListElementComponent, TruncatePipe], providers: [ - { provide: 'objectElementProvider', useValue: { mockValue } } + { provide: 'objectElementProvider', useValue: { mockValue } }, + {provide: PaginationService, useValue: paginationService}, + {provide: RouteService, useValue: routeService}, ], schemas: [NO_ERRORS_SCHEMA] diff --git a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.ts b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.ts index 235ac0665a..667da726ed 100644 --- a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.ts +++ b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.ts @@ -7,6 +7,9 @@ import { listableObjectComponent } from '../../object-collection/shared/listable import { PaginationService } from '../../../core/pagination/pagination.service'; import { Params } from '@angular/router'; import { BBM_PAGINATION_ID } from '../../../browse-by/browse-by-metadata-page/browse-by-metadata-page.component'; +import { RouteService } from 'src/app/core/services/route.service'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; @Component({ selector: 'ds-browse-entry-list-element', @@ -19,26 +22,34 @@ import { BBM_PAGINATION_ID } from '../../../browse-by/browse-by-metadata-page/br */ @listableObjectComponent(BrowseEntry, ViewMode.ListElement) export class BrowseEntryListElementComponent extends AbstractListableElementComponent implements OnInit { - queryParams: Params; + /** + * Emits the query parameters for the link of this browse entry list element + */ + queryParams$: Observable; - constructor(private paginationService: PaginationService) { + constructor(private paginationService: PaginationService, private routeService: RouteService) { super(); } ngOnInit() { - this.queryParams = this.getQueryParams(); + this.queryParams$ = this.getQueryParams(); } /** * Get the query params to access the item page of this browse entry. */ - private getQueryParams(): Params { + private getQueryParams(): Observable { const pageParamName = this.paginationService.getPageParam(BBM_PAGINATION_ID); - return { - value: this.object.value, - authority: !!this.object.authority ? this.object.authority : undefined, - startsWith: undefined, - [pageParamName]: null, - }; + return this.routeService.getQueryParameterValue(pageParamName).pipe( + map((currentPage) => { + return { + value: this.object.value, + authority: !!this.object.authority ? this.object.authority : undefined, + startsWith: undefined, + [pageParamName]: null, + [BBM_PAGINATION_ID + '.return']: currentPage + }; + }) + ); } } From 78598dc1b5030f68fed1ff0ce9e3810e5eab97a6 Mon Sep 17 00:00:00 2001 From: lotte Date: Fri, 19 Aug 2022 11:15:37 +0200 Subject: [PATCH 25/39] 93665: Fixed lint issue --- .../browse-entry-list-element.component.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.spec.ts b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.spec.ts index 7d3d9e1eae..a4490bd951 100644 --- a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.spec.ts +++ b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.spec.ts @@ -26,7 +26,7 @@ function init() { routeService = jasmine.createSpyObj('routeService', { getQueryParameterValue: observableOf('1') - }) + }); } describe('BrowseEntryListElementComponent', () => { beforeEach(waitForAsync(() => { From 5ed369d097e07aab0fd5a128005a57bde6d1b280 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Fri, 19 Aug 2022 16:23:20 -0400 Subject: [PATCH 26/39] Make create, edit community/collection/item dialogs theme-able. --- src/app/menu.resolver.ts | 36 +++++++++---------- ...te-collection-parent-selector.component.ts | 28 +++++++++++++++ ...ate-community-parent-selector.component.ts | 27 ++++++++++++++ ...d-create-item-parent-selector.component.ts | 31 ++++++++++++++++ ...emed-edit-collection-selector.component.ts | 27 ++++++++++++++ ...hemed-edit-community-selector.component.ts | 27 ++++++++++++++ .../themed-edit-item-selector.component.ts | 27 ++++++++++++++ 7 files changed, 185 insertions(+), 18 deletions(-) create mode 100644 src/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/themed-create-collection-parent-selector.component.ts create mode 100644 src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/themed-create-community-parent-selector.component.ts create mode 100644 src/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/themed-create-item-parent-selector.component.ts create mode 100644 src/app/shared/dso-selector/modal-wrappers/edit-collection-selector/themed-edit-collection-selector.component.ts create mode 100644 src/app/shared/dso-selector/modal-wrappers/edit-community-selector/themed-edit-community-selector.component.ts create mode 100644 src/app/shared/dso-selector/modal-wrappers/edit-item-selector/themed-edit-item-selector.component.ts diff --git a/src/app/menu.resolver.ts b/src/app/menu.resolver.ts index 4c97d3d1b3..f12079f737 100644 --- a/src/app/menu.resolver.ts +++ b/src/app/menu.resolver.ts @@ -16,24 +16,24 @@ import { filter, find, map, take } from 'rxjs/operators'; import { hasValue } from './shared/empty.util'; import { FeatureID } from './core/data/feature-authorization/feature-id'; import { - CreateCommunityParentSelectorComponent -} from './shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component'; + ThemedCreateCommunityParentSelectorComponent +} from './shared/dso-selector/modal-wrappers/create-community-parent-selector/themed-create-community-parent-selector.component'; import { OnClickMenuItemModel } from './shared/menu/menu-item/models/onclick.model'; import { - CreateCollectionParentSelectorComponent -} from './shared/dso-selector/modal-wrappers/create-collection-parent-selector/create-collection-parent-selector.component'; + ThemedCreateCollectionParentSelectorComponent +} from './shared/dso-selector/modal-wrappers/create-collection-parent-selector/themed-create-collection-parent-selector.component'; import { - CreateItemParentSelectorComponent -} from './shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component'; + ThemedCreateItemParentSelectorComponent +} from './shared/dso-selector/modal-wrappers/create-item-parent-selector/themed-create-item-parent-selector.component'; import { - EditCommunitySelectorComponent -} from './shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component'; + ThemedEditCommunitySelectorComponent +} from './shared/dso-selector/modal-wrappers/edit-community-selector/themed-edit-community-selector.component'; import { - EditCollectionSelectorComponent -} from './shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component'; + ThemedEditCollectionSelectorComponent +} from './shared/dso-selector/modal-wrappers/edit-collection-selector/themed-edit-collection-selector.component'; import { - EditItemSelectorComponent -} from './shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component'; + ThemedEditItemSelectorComponent +} from './shared/dso-selector/modal-wrappers/edit-item-selector/themed-edit-item-selector.component'; import { ExportMetadataSelectorComponent } from './shared/dso-selector/modal-wrappers/export-metadata-selector/export-metadata-selector.component'; @@ -188,7 +188,7 @@ export class MenuResolver implements Resolve { type: MenuItemType.ONCLICK, text: 'menu.section.new_community', function: () => { - this.modalService.open(CreateCommunityParentSelectorComponent); + this.modalService.open(ThemedCreateCommunityParentSelectorComponent); } } as OnClickMenuItemModel, }, @@ -201,7 +201,7 @@ export class MenuResolver implements Resolve { type: MenuItemType.ONCLICK, text: 'menu.section.new_collection', function: () => { - this.modalService.open(CreateCollectionParentSelectorComponent); + this.modalService.open(ThemedCreateCollectionParentSelectorComponent); } } as OnClickMenuItemModel, }, @@ -214,7 +214,7 @@ export class MenuResolver implements Resolve { type: MenuItemType.ONCLICK, text: 'menu.section.new_item', function: () => { - this.modalService.open(CreateItemParentSelectorComponent); + this.modalService.open(ThemedCreateItemParentSelectorComponent); } } as OnClickMenuItemModel, }, @@ -263,7 +263,7 @@ export class MenuResolver implements Resolve { type: MenuItemType.ONCLICK, text: 'menu.section.edit_community', function: () => { - this.modalService.open(EditCommunitySelectorComponent); + this.modalService.open(ThemedEditCommunitySelectorComponent); } } as OnClickMenuItemModel, }, @@ -276,7 +276,7 @@ export class MenuResolver implements Resolve { type: MenuItemType.ONCLICK, text: 'menu.section.edit_collection', function: () => { - this.modalService.open(EditCollectionSelectorComponent); + this.modalService.open(ThemedEditCollectionSelectorComponent); } } as OnClickMenuItemModel, }, @@ -289,7 +289,7 @@ export class MenuResolver implements Resolve { type: MenuItemType.ONCLICK, text: 'menu.section.edit_item', function: () => { - this.modalService.open(EditItemSelectorComponent); + this.modalService.open(ThemedEditItemSelectorComponent); } } as OnClickMenuItemModel, }, diff --git a/src/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/themed-create-collection-parent-selector.component.ts b/src/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/themed-create-collection-parent-selector.component.ts new file mode 100644 index 0000000000..f6598aec99 --- /dev/null +++ b/src/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/themed-create-collection-parent-selector.component.ts @@ -0,0 +1,28 @@ +import {Component} from "@angular/core"; +import {CreateCollectionParentSelectorComponent} from "./create-collection-parent-selector.component"; +import {ThemedComponent} from "src/app/shared/theme-support/themed.component"; + +/** + * Themed wrapper for CreateCollectionParentSelectorComponent + */ +@Component({ + selector: 'ds-themed-create-collection-parent-selector', + styleUrls: [], + templateUrl: '../../../theme-support/themed.component.html' +}) +export class ThemedCreateCollectionParentSelectorComponent + extends ThemedComponent { + + protected getComponentName(): string { + return 'CreateCollectionParentSelectorComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../../themes/${themeName}/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/create-collection-parent-selector.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./create-collection-parent-selector.component'); + } + +} diff --git a/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/themed-create-community-parent-selector.component.ts b/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/themed-create-community-parent-selector.component.ts new file mode 100644 index 0000000000..92621978b8 --- /dev/null +++ b/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/themed-create-community-parent-selector.component.ts @@ -0,0 +1,27 @@ +import {Component} from "@angular/core"; +import {CreateCommunityParentSelectorComponent} from "./create-community-parent-selector.component"; +import {ThemedComponent} from "src/app/shared/theme-support/themed.component"; + +/** + * Themed wrapper for CreateCommunityParentSelectorComponent + */ +@Component({ + selector: 'ds-themed-create-community-parent-selector', + styleUrls: [], + templateUrl: '../../../theme-support/themed.component.html' +}) +export class ThemedCreateCommunityParentSelectorComponent + extends ThemedComponent { + protected getComponentName(): string { + return 'CreateCommunityParentSelectorComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../../themes/${themeName}/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./create-community-parent-selector.component'); + } + +} diff --git a/src/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/themed-create-item-parent-selector.component.ts b/src/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/themed-create-item-parent-selector.component.ts new file mode 100644 index 0000000000..70ab0d76ee --- /dev/null +++ b/src/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/themed-create-item-parent-selector.component.ts @@ -0,0 +1,31 @@ +import {Component, Input} from "@angular/core"; +import {CreateItemParentSelectorComponent} from "./create-item-parent-selector.component"; +import {ThemedComponent} from "src/app/shared/theme-support/themed.component"; + +/** + * Themed wrapper for CreateItemParentSelectorComponent + */ +@Component({ + selector: 'ds-themed-create-item-parent-selector', + styleUrls: [], + templateUrl: '../../../theme-support/themed.component.html' +}) +export class ThemedCreateItemParentSelectorComponent + extends ThemedComponent { + @Input() entityType: string; + + protected inAndOutputNames: (keyof CreateItemParentSelectorComponent & keyof this)[] = ['entityType']; + + protected getComponentName(): string { + return 'CreateItemParentSelectorComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../../themes/${themeName}/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./create-item-parent-selector.component'); + } + +} diff --git a/src/app/shared/dso-selector/modal-wrappers/edit-collection-selector/themed-edit-collection-selector.component.ts b/src/app/shared/dso-selector/modal-wrappers/edit-collection-selector/themed-edit-collection-selector.component.ts new file mode 100644 index 0000000000..4e3191d03b --- /dev/null +++ b/src/app/shared/dso-selector/modal-wrappers/edit-collection-selector/themed-edit-collection-selector.component.ts @@ -0,0 +1,27 @@ +import {Component} from "@angular/core"; +import {EditCollectionSelectorComponent} from "./edit-collection-selector.component"; +import {ThemedComponent} from "src/app/shared/theme-support/themed.component"; + +/** + * Themed wrapper for EditCollectionSelectorComponent + */ +@Component({ + selector: 'ds-themed-edit-collection-selector', + styleUrls: [], + templateUrl: '../../../theme-support/themed.component.html' +}) +export class ThemedEditCollectionSelectorComponent + extends ThemedComponent { + protected getComponentName(): string { + return 'EditCollectionSelectorComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../../themes/${themeName}/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./edit-collection-selector.component'); + } + +} diff --git a/src/app/shared/dso-selector/modal-wrappers/edit-community-selector/themed-edit-community-selector.component.ts b/src/app/shared/dso-selector/modal-wrappers/edit-community-selector/themed-edit-community-selector.component.ts new file mode 100644 index 0000000000..d8232abcdb --- /dev/null +++ b/src/app/shared/dso-selector/modal-wrappers/edit-community-selector/themed-edit-community-selector.component.ts @@ -0,0 +1,27 @@ +import {Component} from "@angular/core"; +import {EditCommunitySelectorComponent} from "./edit-community-selector.component"; +import {ThemedComponent} from "src/app/shared/theme-support/themed.component"; + +/** + * Themed wrapper for EditCommunitySelectorComponent + */ +@Component({ + selector: 'ds-themed-edit-community-selector', + styleUrls: [], + templateUrl: '../../../theme-support/themed.component.html' +}) +export class ThemedEditCommunitySelectorComponent + extends ThemedComponent { + protected getComponentName(): string { + return 'EditCommunitySelectorComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../../themes/${themeName}/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./edit-community-selector.component'); + } + +} diff --git a/src/app/shared/dso-selector/modal-wrappers/edit-item-selector/themed-edit-item-selector.component.ts b/src/app/shared/dso-selector/modal-wrappers/edit-item-selector/themed-edit-item-selector.component.ts new file mode 100644 index 0000000000..e1377e7fb4 --- /dev/null +++ b/src/app/shared/dso-selector/modal-wrappers/edit-item-selector/themed-edit-item-selector.component.ts @@ -0,0 +1,27 @@ +import {Component} from "@angular/core"; +import {EditItemSelectorComponent} from "./edit-item-selector.component"; +import {ThemedComponent} from "src/app/shared/theme-support/themed.component"; + +/** + * Themed wrapper for EditItemSelectorComponent + */ +@Component({ + selector: 'ds-themed-edit-item-selector', + styleUrls: [], + templateUrl: '../../../theme-support/themed.component.html' +}) +export class ThemedEditItemSelectorComponent + extends ThemedComponent { + protected getComponentName(): string { + return 'EditItemSelectorComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../../themes/${themeName}/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./edit-item-selector.component'); + } + +} From b2feadc290c5b60dd45ac78b174902b187aae4e5 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Fri, 19 Aug 2022 16:47:10 -0400 Subject: [PATCH 27/39] Satisfy lint. --- .../themed-create-collection-parent-selector.component.ts | 6 +++--- .../themed-create-community-parent-selector.component.ts | 6 +++--- .../themed-create-item-parent-selector.component.ts | 6 +++--- .../themed-edit-collection-selector.component.ts | 6 +++--- .../themed-edit-community-selector.component.ts | 6 +++--- .../themed-edit-item-selector.component.ts | 6 +++--- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/themed-create-collection-parent-selector.component.ts b/src/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/themed-create-collection-parent-selector.component.ts index f6598aec99..d90cd0ac0d 100644 --- a/src/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/themed-create-collection-parent-selector.component.ts +++ b/src/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/themed-create-collection-parent-selector.component.ts @@ -1,6 +1,6 @@ -import {Component} from "@angular/core"; -import {CreateCollectionParentSelectorComponent} from "./create-collection-parent-selector.component"; -import {ThemedComponent} from "src/app/shared/theme-support/themed.component"; +import {Component} from '@angular/core'; +import {CreateCollectionParentSelectorComponent} from './create-collection-parent-selector.component'; +import {ThemedComponent} from 'src/app/shared/theme-support/themed.component'; /** * Themed wrapper for CreateCollectionParentSelectorComponent diff --git a/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/themed-create-community-parent-selector.component.ts b/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/themed-create-community-parent-selector.component.ts index 92621978b8..24bff97254 100644 --- a/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/themed-create-community-parent-selector.component.ts +++ b/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/themed-create-community-parent-selector.component.ts @@ -1,6 +1,6 @@ -import {Component} from "@angular/core"; -import {CreateCommunityParentSelectorComponent} from "./create-community-parent-selector.component"; -import {ThemedComponent} from "src/app/shared/theme-support/themed.component"; +import {Component} from '@angular/core'; +import {CreateCommunityParentSelectorComponent} from './create-community-parent-selector.component'; +import {ThemedComponent} from 'src/app/shared/theme-support/themed.component'; /** * Themed wrapper for CreateCommunityParentSelectorComponent diff --git a/src/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/themed-create-item-parent-selector.component.ts b/src/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/themed-create-item-parent-selector.component.ts index 70ab0d76ee..49209ea63b 100644 --- a/src/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/themed-create-item-parent-selector.component.ts +++ b/src/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/themed-create-item-parent-selector.component.ts @@ -1,6 +1,6 @@ -import {Component, Input} from "@angular/core"; -import {CreateItemParentSelectorComponent} from "./create-item-parent-selector.component"; -import {ThemedComponent} from "src/app/shared/theme-support/themed.component"; +import {Component, Input} from '@angular/core'; +import {CreateItemParentSelectorComponent} from './create-item-parent-selector.component'; +import {ThemedComponent} from 'src/app/shared/theme-support/themed.component'; /** * Themed wrapper for CreateItemParentSelectorComponent diff --git a/src/app/shared/dso-selector/modal-wrappers/edit-collection-selector/themed-edit-collection-selector.component.ts b/src/app/shared/dso-selector/modal-wrappers/edit-collection-selector/themed-edit-collection-selector.component.ts index 4e3191d03b..999f466e75 100644 --- a/src/app/shared/dso-selector/modal-wrappers/edit-collection-selector/themed-edit-collection-selector.component.ts +++ b/src/app/shared/dso-selector/modal-wrappers/edit-collection-selector/themed-edit-collection-selector.component.ts @@ -1,6 +1,6 @@ -import {Component} from "@angular/core"; -import {EditCollectionSelectorComponent} from "./edit-collection-selector.component"; -import {ThemedComponent} from "src/app/shared/theme-support/themed.component"; +import {Component} from '@angular/core'; +import {EditCollectionSelectorComponent} from './edit-collection-selector.component'; +import {ThemedComponent} from 'src/app/shared/theme-support/themed.component'; /** * Themed wrapper for EditCollectionSelectorComponent diff --git a/src/app/shared/dso-selector/modal-wrappers/edit-community-selector/themed-edit-community-selector.component.ts b/src/app/shared/dso-selector/modal-wrappers/edit-community-selector/themed-edit-community-selector.component.ts index d8232abcdb..e067803444 100644 --- a/src/app/shared/dso-selector/modal-wrappers/edit-community-selector/themed-edit-community-selector.component.ts +++ b/src/app/shared/dso-selector/modal-wrappers/edit-community-selector/themed-edit-community-selector.component.ts @@ -1,6 +1,6 @@ -import {Component} from "@angular/core"; -import {EditCommunitySelectorComponent} from "./edit-community-selector.component"; -import {ThemedComponent} from "src/app/shared/theme-support/themed.component"; +import {Component} from '@angular/core'; +import {EditCommunitySelectorComponent} from './edit-community-selector.component'; +import {ThemedComponent} from 'src/app/shared/theme-support/themed.component'; /** * Themed wrapper for EditCommunitySelectorComponent diff --git a/src/app/shared/dso-selector/modal-wrappers/edit-item-selector/themed-edit-item-selector.component.ts b/src/app/shared/dso-selector/modal-wrappers/edit-item-selector/themed-edit-item-selector.component.ts index e1377e7fb4..6d3b5691c1 100644 --- a/src/app/shared/dso-selector/modal-wrappers/edit-item-selector/themed-edit-item-selector.component.ts +++ b/src/app/shared/dso-selector/modal-wrappers/edit-item-selector/themed-edit-item-selector.component.ts @@ -1,6 +1,6 @@ -import {Component} from "@angular/core"; -import {EditItemSelectorComponent} from "./edit-item-selector.component"; -import {ThemedComponent} from "src/app/shared/theme-support/themed.component"; +import {Component} from '@angular/core'; +import {EditItemSelectorComponent} from './edit-item-selector.component'; +import {ThemedComponent} from 'src/app/shared/theme-support/themed.component'; /** * Themed wrapper for EditItemSelectorComponent From 50828e9c064965f6487270aa230e6ea277079bab Mon Sep 17 00:00:00 2001 From: Hardy Pottinger Date: Tue, 23 Aug 2022 15:17:40 -0500 Subject: [PATCH 28/39] Enable responsive font sizes - adds enable-responsive-font-sizes toggle to the main bootstrap variables scss file - [docs available](https://getbootstrap.com/docs/4.4/content/typography/#responsive-font-sizes) --- src/styles/_bootstrap_variables.scss | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/styles/_bootstrap_variables.scss b/src/styles/_bootstrap_variables.scss index 20c0b3a679..3b06efb9d5 100644 --- a/src/styles/_bootstrap_variables.scss +++ b/src/styles/_bootstrap_variables.scss @@ -12,6 +12,9 @@ $fa-font-path: "^assets/fonts" !default; /* Images */ $image-path: "../assets/images" !default; +// enable-responsive-font-sizes allows text to scale more naturally across device and viewport sizes +$enable-responsive-font-sizes: true; + /** Bootstrap Variables **/ /* Colors */ $gray-700: #495057 !default; // Bootstrap $gray-700 From bd4190d4fcd51dac2affe5e96dab0820f82e6b73 Mon Sep 17 00:00:00 2001 From: Urban Andersson Date: Wed, 24 Aug 2022 17:39:06 +0200 Subject: [PATCH 29/39] Swedish language file for DSpace 7 (#1673) * Added Swedish language file * Small fix * Added translations * Added translations * More translations * Translations * Translations * Translations * Translations * Translations * Translations * More Swedish translations * Corrections to Swedish translations * Corrections to Swedish translations * Minor language fixes * Minor changes to Swedish translation * Restored tr.json5 --- src/assets/i18n/sv.json5 | 8078 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 8078 insertions(+) create mode 100644 src/assets/i18n/sv.json5 diff --git a/src/assets/i18n/sv.json5 b/src/assets/i18n/sv.json5 new file mode 100644 index 0000000000..0339969b31 --- /dev/null +++ b/src/assets/i18n/sv.json5 @@ -0,0 +1,8078 @@ +{ + + // "401.help": "You're not authorized to access this page. You can use the button below to get back to the home page.", + // TODO New key - Add a translation + "401.help": "Du saknar behörighet att se denna sida. Använd knappen nedan för att återvända till startsidan.", + + // "401.link.home-page": "Take me to the home page", + // TODO New key - Add a translation + "401.link.home-page": "Ta mig till startsidan", + + // "401.unauthorized": "unauthorized", + // TODO New key - Add a translation + "401.unauthorized": "obehörig", + + + // "403.help": "You don't have permission to access this page. You can use the button below to get back to the home page.", + // TODO New key - Add a translation + "403.help": "Du saknar behörighet att nå denna sida. Använd knappen nedan för att återvända till startsidan.", + + // "403.link.home-page": "Take me to the home page", + // TODO New key - Add a translation + "403.link.home-page": "Ta mig till startsidan", + + // "403.forbidden": "forbidden", + // TODO New key - Add a translation + "403.forbidden": "förbjuden", + + // "500.page-internal-server-error": "Service Unavailable", + // TODO New key - Add a translation + "500.page-internal-server-error": "Tjänsten kan inte nås", + + // "500.help": "The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.", + // TODO New key - Add a translation + "500.help": "Tjänsten är tillfälligt nere. Försök senare.", + + // "500.link.home-page": "Take me to the home page", + // TODO New key - Add a translation + "500.link.home-page": "Till startsidan", + + + // "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. ", + // TODO New key - Add a translation + "404.help": "Sidan kan inte hittas. Den kan ha blivit flyttad eller raderad. Använd knappen nedan för att återvända till startsidan. ", + + // "404.link.home-page": "Take me to the home page", + // TODO New key - Add a translation + "404.link.home-page": "Till startsidan", + + // "404.page-not-found": "page not found", + // TODO New key - Add a translation + "404.page-not-found": "sidan hittas inte", + + // "admin.curation-tasks.breadcrumbs": "System curation tasks", + // TODO New key - Add a translation + "admin.curation-tasks.breadcrumbs": "System curation tasks", + + // "admin.curation-tasks.title": "System curation tasks", + // TODO New key - Add a translation + "admin.curation-tasks.title": "System curation tasks", + + // "admin.curation-tasks.header": "System curation tasks", + // TODO New key - Add a translation + "admin.curation-tasks.header": "System curation tasks", + + // "admin.registries.bitstream-formats.breadcrumbs": "Format registry", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.breadcrumbs": "Format registry", + + // "admin.registries.bitstream-formats.create.breadcrumbs": "Bitstream format", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.create.breadcrumbs": "Filformat", + + // "admin.registries.bitstream-formats.create.failure.content": "An error occurred while creating the new bitstream format.", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.create.failure.content": "Ett fel uppstod när nytt filformat skulle skapas.", + + // "admin.registries.bitstream-formats.create.failure.head": "Failure", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.create.failure.head": "Misslyckades", + + // "admin.registries.bitstream-formats.create.head": "Create Bitstream format", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.create.head": "Skapa nytt filformat", + + // "admin.registries.bitstream-formats.create.new": "Add a new bitstream format", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.create.new": "Lägg till nytt filformat", + + // "admin.registries.bitstream-formats.create.success.content": "The new bitstream format was successfully created.", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.create.success.content": "Nytt filformat har skapats.", + + // "admin.registries.bitstream-formats.create.success.head": "Success", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.create.success.head": "Lyckades", + + // "admin.registries.bitstream-formats.delete.failure.amount": "Failed to remove {{ amount }} format(s)", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.delete.failure.amount": "Misslyckades med att radera {{ amount }} format", + + // "admin.registries.bitstream-formats.delete.failure.head": "Failure", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.delete.failure.head": "Misslyckades", + + // "admin.registries.bitstream-formats.delete.success.amount": "Successfully removed {{ amount }} format(s)", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.delete.success.amount": "Har raderat {{ amount }} format", + + // "admin.registries.bitstream-formats.delete.success.head": "Success", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.delete.success.head": "Lyckades", + + // "admin.registries.bitstream-formats.description": "This list of bitstream formats provides information about known formats and their support level.", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.description": "Listan innehåller information om kända filformat.", + + // "admin.registries.bitstream-formats.edit.breadcrumbs": "Bitstream format", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.edit.breadcrumbs": "Filformat", + + // "admin.registries.bitstream-formats.edit.description.hint": "", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.edit.description.hint": "", + + // "admin.registries.bitstream-formats.edit.description.label": "Beskrivning", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.edit.description.label": "Beskrivning", + + // "admin.registries.bitstream-formats.edit.extensions.hint": "Extensions are file extensions that are used to automatically identify the format of uploaded files. You can enter several extensions for each format.", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.edit.extensions.hint": "Extensions are file extensions that are used to automatically identify the format of uploaded files. You can enter several extensions for each format.", + + // "admin.registries.bitstream-formats.edit.extensions.label": "File extensions", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.edit.extensions.label": "Filtillägg", + + // "admin.registries.bitstream-formats.edit.extensions.placeholder": "Enter a file extension without the dot", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.edit.extensions.placeholder": "Ange ett filtillägg (utan punkt)", + + // "admin.registries.bitstream-formats.edit.failure.content": "An error occurred while editing the bitstream format.", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.edit.failure.content": "Ett fel uppstod vid redigering av filformat.", + + // "admin.registries.bitstream-formats.edit.failure.head": "Failure", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.edit.failure.head": "Misslyckades", + + // "admin.registries.bitstream-formats.edit.head": "Bitstream format: {{ format }}", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.edit.head": "Filformat: {{ format }}", + + // "admin.registries.bitstream-formats.edit.internal.hint": "Formats marked as internal are hidden from the user, and used for administrative purposes.", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.edit.internal.hint": "Format som har markerats som interna visas inte utåt och används enbart för administrativa syften.", + + // "admin.registries.bitstream-formats.edit.internal.label": "Internal", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.edit.internal.label": "Interna", + + // "admin.registries.bitstream-formats.edit.mimetype.hint": "The MIME type associated with this format, does not have to be unique.", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.edit.mimetype.hint": "MIME typ som associeras med detta format, beöver inte vara unikt.", + + // "admin.registries.bitstream-formats.edit.mimetype.label": "MIME Type", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.edit.mimetype.label": "MIME typ", + + // "admin.registries.bitstream-formats.edit.shortDescription.hint": "A unique name for this format, (e.g. Microsoft Word XP or Microsoft Word 2000)", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.edit.shortDescription.hint": "Unikt namn för detta format, (t ex Microsoft Word XP eller Microsoft Word 2000)", + + // "admin.registries.bitstream-formats.edit.shortDescription.label": "Name", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.edit.shortDescription.label": "Namn", + + // "admin.registries.bitstream-formats.edit.success.content": "The bitstream format was successfully edited.", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.edit.success.content": "Filformatet har ändrats.", + + // "admin.registries.bitstream-formats.edit.success.head": "Success", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.edit.success.head": "Lyckades", + + // "admin.registries.bitstream-formats.edit.supportLevel.hint": "The level of support your institution pledges for this format.", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.edit.supportLevel.hint": "Nivån som din organisation stödjer detta format.", + + // "admin.registries.bitstream-formats.edit.supportLevel.label": "Support level", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.edit.supportLevel.label": "Supportnivå", + + // "admin.registries.bitstream-formats.head": "Bitstream Format Registry", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.head": "Filformat registry", + + // "admin.registries.bitstream-formats.no-items": "No bitstream formats to show.", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.no-items": "Det finns inga filformat att visa.", + + // "admin.registries.bitstream-formats.table.delete": "Delete selected", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.table.delete": "Radera markerade", + + // "admin.registries.bitstream-formats.table.deselect-all": "Deselect all", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.table.deselect-all": "Avmarkera alla", + + // "admin.registries.bitstream-formats.table.internal": "internal", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.table.internal": "interna", + + // "admin.registries.bitstream-formats.table.mimetype": "MIME Type", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.table.mimetype": "MIME typ", + + // "admin.registries.bitstream-formats.table.name": "Name", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.table.name": "Namn", + + // "admin.registries.bitstream-formats.table.return": "Back", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.table.return": "Tillbaka", + + // "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Known", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Känd", + + // "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Supported", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Stöds", + + // "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Unknown", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Okänd", + + // "admin.registries.bitstream-formats.table.supportLevel.head": "Support Level", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.table.supportLevel.head": "Support (nivå))", + + // "admin.registries.bitstream-formats.title": "Bitstream Format Registry", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.title": "Filformat registry", + + + + // "admin.registries.metadata.breadcrumbs": "Metadata registry", + // TODO New key - Add a translation + "admin.registries.metadata.breadcrumbs": "Metadata registry", + + // "admin.registries.metadata.description": "The metadata registry maintains a list of all metadata fields available in the repository. These fields may be divided amongst multiple schemas. However, DSpace requires the qualified Dublin Core schema.", + // TODO New key - Add a translation + "admin.registries.metadata.description": "Metadata registry inneåller en lista med samtliga fält som stöds av detta repository. Fälten kan förekomma i flera scheman. DSpace kräver dock det utökade Dublin Core (qdc) schemat.", + + // "admin.registries.metadata.form.create": "Create metadata schema", + // TODO New key - Add a translation + "admin.registries.metadata.form.create": "Skapa metadataschema", + + // "admin.registries.metadata.form.edit": "Edit metadata schema", + // TODO New key - Add a translation + "admin.registries.metadata.form.edit": "Redigera metadataschema", + + // "admin.registries.metadata.form.name": "Name", + // TODO New key - Add a translation + "admin.registries.metadata.form.name": "Namn", + + // "admin.registries.metadata.form.namespace": "Namespace", + // TODO New key - Add a translation + "admin.registries.metadata.form.namespace": "Namnrymd", + + // "admin.registries.metadata.head": "Metadata Registry", + // TODO New key - Add a translation + "admin.registries.metadata.head": "Metadata registry", + + // "admin.registries.metadata.schemas.no-items": "No metadata schemas to show.", + // TODO New key - Add a translation + "admin.registries.metadata.schemas.no-items": "Det finns inga metadatascema att visa.", + + // "admin.registries.metadata.schemas.table.delete": "Delete selected", + // TODO New key - Add a translation + "admin.registries.metadata.schemas.table.delete": "Radera markerade", + + // "admin.registries.metadata.schemas.table.id": "ID", + // TODO New key - Add a translation + "admin.registries.metadata.schemas.table.id": "ID", + + // "admin.registries.metadata.schemas.table.name": "Name", + // TODO New key - Add a translation + "admin.registries.metadata.schemas.table.name": "Namn", + + // "admin.registries.metadata.schemas.table.namespace": "Namespace", + // TODO New key - Add a translation + "admin.registries.metadata.schemas.table.namespace": "Namespace", + + // "admin.registries.metadata.title": "Metadata Registry", + // TODO New key - Add a translation + "admin.registries.metadata.title": "Metadata registry", + + // "admin.registries.schema.breadcrumbs": "Metadata schema", + // TODO New key - Add a translation + "admin.registries.schema.breadcrumbs": "Metadataschema", + + // "admin.registries.schema.description": "This is the metadata schema for \"{{namespace}}\".", + // TODO New key - Add a translation + "admin.registries.schema.description": "Metadatascema för \"{{namespace}}\".", + + // "admin.registries.schema.fields.head": "Schema metadata fields", + // TODO New key - Add a translation + "admin.registries.schema.fields.head": "Schema metadata fält", + + // "admin.registries.schema.fields.no-items": "No metadata fields to show.", + // TODO New key - Add a translation + "admin.registries.schema.fields.no-items": "Det finns inga metadatafält att visa.", + + // "admin.registries.schema.fields.table.delete": "Delete selected", + // TODO New key - Add a translation + "admin.registries.schema.fields.table.delete": "Radera markerade", + + // "admin.registries.schema.fields.table.field": "Field", + // TODO New key - Add a translation + "admin.registries.schema.fields.table.field": "Fält", + + // "admin.registries.schema.fields.table.scopenote": "Scope Note", + // TODO New key - Add a translation + "admin.registries.schema.fields.table.scopenote": "Anmärkning (scope note)", + + // "admin.registries.schema.form.create": "Create metadata field", + // TODO New key - Add a translation + "admin.registries.schema.form.create": "Skapa metadatafält", + + // "admin.registries.schema.form.edit": "Edit metadata field", + // TODO New key - Add a translation + "admin.registries.schema.form.edit": "Redigera metadatafält", + + // "admin.registries.schema.form.element": "Element", + // TODO New key - Add a translation + "admin.registries.schema.form.element": "Element", + + // "admin.registries.schema.form.qualifier": "Qualifier", + // TODO New key - Add a translation + "admin.registries.schema.form.qualifier": "Qualifier", + + // "admin.registries.schema.form.scopenote": "Scope Note", + // TODO New key - Add a translation + "admin.registries.schema.form.scopenote": "Anmärkning (scope note)", + + // "admin.registries.schema.head": "Metadata Schema", + // TODO New key - Add a translation + "admin.registries.schema.head": "Metadataschema", + + // "admin.registries.schema.notification.created": "Successfully created metadata schema \"{{prefix}}\"", + // TODO New key - Add a translation + "admin.registries.schema.notification.created": "ar skapat metadataschemat \"{{prefix}}\"", + + // "admin.registries.schema.notification.deleted.failure": "Failed to delete {{amount}} metadata schemas", + // TODO New key - Add a translation + "admin.registries.schema.notification.deleted.failure": "Misslyckades med att radera {{amount}} metadatascheman", + + // "admin.registries.schema.notification.deleted.success": "Successfully deleted {{amount}} metadata schemas", + // TODO New key - Add a translation + "admin.registries.schema.notification.deleted.success": "Har raderat {{amount}} metadatascheman", + + // "admin.registries.schema.notification.edited": "Successfully edited metadata schema \"{{prefix}}\"", + // TODO New key - Add a translation + "admin.registries.schema.notification.edited": "Metadataschema \"{{prefix}}\" har redigerats", + + // "admin.registries.schema.notification.failure": "Error", + // TODO New key - Add a translation + "admin.registries.schema.notification.failure": "Fel", + + // "admin.registries.schema.notification.field.created": "Successfully created metadata field \"{{field}}\"", + // TODO New key - Add a translation + "admin.registries.schema.notification.field.created": "har skapat metadatafält \"{{field}}\"", + + // "admin.registries.schema.notification.field.deleted.failure": "Failed to delete {{amount}} metadata fields", + // TODO New key - Add a translation + "admin.registries.schema.notification.field.deleted.failure": "Misslyckades med att radera {{amount}} metadatafält", + + // "admin.registries.schema.notification.field.deleted.success": "Successfully deleted {{amount}} metadata fields", + // TODO New key - Add a translation + "admin.registries.schema.notification.field.deleted.success": "Har raderat {{amount}} metadatafält", + + // "admin.registries.schema.notification.field.edited": "Successfully edited metadata field \"{{field}}\"", + // TODO New key - Add a translation + "admin.registries.schema.notification.field.edited": "Har redigerat metadatafält \"{{field}}\"", + + // "admin.registries.schema.notification.success": "Success", + // TODO New key - Add a translation + "admin.registries.schema.notification.success": "Lyckades", + + // "admin.registries.schema.return": "Back", + // TODO New key - Add a translation + "admin.registries.schema.return": "Tillbaka", + + // "admin.registries.schema.title": "Metadata Schema Registry", + // TODO New key - Add a translation + "admin.registries.schema.title": "Metadata Schema Registry", + + + + // "admin.access-control.epeople.actions.delete": "Delete EPerson", + // TODO New key - Add a translation + "admin.access-control.epeople.actions.delete": "Radera EPerson", + + // "admin.access-control.epeople.actions.impersonate": "Impersonate EPerson", + // TODO New key - Add a translation + "admin.access-control.epeople.actions.impersonate": "Agera som EPerson", + + // "admin.access-control.epeople.actions.reset": "Reset password", + // TODO New key - Add a translation + "admin.access-control.epeople.actions.reset": "Återställ lösenord", + + // "admin.access-control.epeople.actions.stop-impersonating": "Stop impersonating EPerson", + // TODO New key - Add a translation + "admin.access-control.epeople.actions.stop-impersonating": "Sluta agera som EPerson", + + // "admin.access-control.epeople.breadcrumbs": "EPeople", + // TODO New key - Add a translation + "admin.access-control.epeople.breadcrumbs": "EPersoner", + + // "admin.access-control.epeople.title": "EPeople", + // TODO New key - Add a translation + "admin.access-control.epeople.title": "EPersoner", + + // "admin.access-control.epeople.head": "EPeople", + // TODO New key - Add a translation + "admin.access-control.epeople.head": "EPersoner", + + // "admin.access-control.epeople.search.head": "Search", + // TODO New key - Add a translation + "admin.access-control.epeople.search.head": "Sök", + + // "admin.access-control.epeople.button.see-all": "Browse All", + // TODO New key - Add a translation + "admin.access-control.epeople.button.see-all": "Bläddra bland alla", + + // "admin.access-control.epeople.search.scope.metadata": "Metadata", + // TODO New key - Add a translation + "admin.access-control.epeople.search.scope.metadata": "Metadata", + + // "admin.access-control.epeople.search.scope.email": "E-mail (exact)", + // TODO New key - Add a translation + "admin.access-control.epeople.search.scope.email": "E-post (exakt)", + + // "admin.access-control.epeople.search.button": "Search", + // TODO New key - Add a translation + "admin.access-control.epeople.search.button": "Sök", + + // "admin.access-control.epeople.search.placeholder": "Search people...", + // TODO New key - Add a translation + "admin.access-control.epeople.search.placeholder": "Sök personer...", + + // "admin.access-control.epeople.button.add": "Add EPerson", + // TODO New key - Add a translation + "admin.access-control.epeople.button.add": "Lägg till EPerson", + + // "admin.access-control.epeople.table.id": "ID", + // TODO New key - Add a translation + "admin.access-control.epeople.table.id": "ID", + + // "admin.access-control.epeople.table.name": "Name", + // TODO New key - Add a translation + "admin.access-control.epeople.table.name": "Namn", + + // "admin.access-control.epeople.table.email": "E-mail (exact)", + // TODO New key - Add a translation + "admin.access-control.epeople.table.email": "E-post (exakt)", + + // "admin.access-control.epeople.table.edit": "Edit", + // TODO New key - Add a translation + "admin.access-control.epeople.table.edit": "Redigera", + + // "admin.access-control.epeople.table.edit.buttons.edit": "Edit \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.epeople.table.edit.buttons.edit": "Redigera \"{{name}}\"", + + // "admin.access-control.epeople.table.edit.buttons.edit-disabled": "You are not authorized to edit this group", + // TODO New key - Add a translation + "admin.access-control.epeople.table.edit.buttons.edit-disabled": "Du har inte behöriget att redigera denna grupp", + + // "admin.access-control.epeople.table.edit.buttons.remove": "Delete \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.epeople.table.edit.buttons.remove": "Radera \"{{name}}\"", + + // "admin.access-control.epeople.no-items": "No EPeople to show.", + // TODO New key - Add a translation + "admin.access-control.epeople.no-items": "Det finns inga Epersoner att visa.", + + // "admin.access-control.epeople.form.create": "Create EPerson", + // TODO New key - Add a translation + "admin.access-control.epeople.form.create": "Skapa EPerson", + + // "admin.access-control.epeople.form.edit": "Edit EPerson", + // TODO New key - Add a translation + "admin.access-control.epeople.form.edit": "Redigera EPerson", + + // "admin.access-control.epeople.form.firstName": "First name", + // TODO New key - Add a translation + "admin.access-control.epeople.form.firstName": "Förnamn", + + // "admin.access-control.epeople.form.lastName": "Last name", + // TODO New key - Add a translation + "admin.access-control.epeople.form.lastName": "Efternamn", + + // "admin.access-control.epeople.form.email": "E-mail", + // TODO New key - Add a translation + "admin.access-control.epeople.form.email": "E-post", + + // "admin.access-control.epeople.form.emailHint": "Must be valid e-mail address", + // TODO New key - Add a translation + "admin.access-control.epeople.form.emailHint": "Det måste vara en giltig e-postadress", + + // "admin.access-control.epeople.form.canLogIn": "Can log in", + // TODO New key - Add a translation + "admin.access-control.epeople.form.canLogIn": "Kan logga in", + + // "admin.access-control.epeople.form.requireCertificate": "Requires certificate", + // TODO New key - Add a translation + "admin.access-control.epeople.form.requireCertificate": "Kräver certificate", + + // "admin.access-control.epeople.form.return": "Back", + // TODO New key - Add a translation + "admin.access-control.epeople.form.return": "Tillbaka", + + // "admin.access-control.epeople.form.notification.created.success": "Successfully created EPerson \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.epeople.form.notification.created.success": "EPerson \"{{name}}\" har skapats", + + // "admin.access-control.epeople.form.notification.created.failure": "Failed to create EPerson \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.epeople.form.notification.created.failure": "Misslyckades med att skapa EPerson \"{{name}}\"", + + // "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Failed to create EPerson \"{{name}}\", email \"{{email}}\" already in use.", + // TODO New key - Add a translation + "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Misslyckades med att skapa EPerson \"{{name}}\", e-postadressen \"{{email}}\" används redan.", + + // "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Failed to edit EPerson \"{{name}}\", email \"{{email}}\" already in use.", + // TODO New key - Add a translation + "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Misslyckades med att redigera EPerson \"{{name}}\", e-postadressen \"{{email}}\" används redan.", + + // "admin.access-control.epeople.form.notification.edited.success": "Successfully edited EPerson \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.epeople.form.notification.edited.success": "EPerson \"{{name}}\" har redigerats", + + // "admin.access-control.epeople.form.notification.edited.failure": "Failed to edit EPerson \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.epeople.form.notification.edited.failure": "Misslyckades med att redigera EPerson \"{{name}}\"", + + // "admin.access-control.epeople.form.notification.deleted.success": "Successfully deleted EPerson \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.epeople.form.notification.deleted.success": "EPerson \"{{name}}\" har raderats", + + // "admin.access-control.epeople.form.notification.deleted.failure": "Failed to delete EPerson \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.epeople.form.notification.deleted.failure": "Misslyckades med att radera EPerson \"{{name}}\"", + + // "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Member of these groups:", + // TODO New key - Add a translation + "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Medlem i följande grupper:", + + // "admin.access-control.epeople.form.table.id": "ID", + // TODO New key - Add a translation + "admin.access-control.epeople.form.table.id": "ID", + + // "admin.access-control.epeople.form.table.name": "Name", + // TODO New key - Add a translation + "admin.access-control.epeople.form.table.name": "Namn", + + // "admin.access-control.epeople.form.table.collectionOrCommunity": "Collection/Community", + // TODO New key - Add a translation + "admin.access-control.epeople.form.table.collectionOrCommunity": "Samling/Enhet", + + // "admin.access-control.epeople.form.memberOfNoGroups": "This EPerson is not a member of any groups", + // TODO New key - Add a translation + "admin.access-control.epeople.form.memberOfNoGroups": "Denna EPerson är inte medlem i någon grupp", + + // "admin.access-control.epeople.form.goToGroups": "Add to groups", + // TODO New key - Add a translation + "admin.access-control.epeople.form.goToGroups": "Lägg till i grupper", + + // "admin.access-control.epeople.notification.deleted.failure": "Failed to delete EPerson: \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.epeople.notification.deleted.failure": "Misslyckades med att radera EPerson: \"{{name}}\"", + + // "admin.access-control.epeople.notification.deleted.success": "Successfully deleted EPerson: \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.epeople.notification.deleted.success": "EPerson: \"{{name}}\" har raderats", + + + + // "admin.access-control.groups.title": "Groups", + // TODO New key - Add a translation + "admin.access-control.groups.title": "Grupper", + + // "admin.access-control.groups.breadcrumbs": "Groups", + // TODO New key - Add a translation + "admin.access-control.groups.breadcrumbs": "Grupper", + + // "admin.access-control.groups.singleGroup.breadcrumbs": "Edit Group", + // TODO New key - Add a translation + "admin.access-control.groups.singleGroup.breadcrumbs": "Redigera grupp", + + // "admin.access-control.groups.title.singleGroup": "Edit Group", + // TODO New key - Add a translation + "admin.access-control.groups.title.singleGroup": "Redigera grupp", + + // "admin.access-control.groups.title.addGroup": "New Group", + // TODO New key - Add a translation + "admin.access-control.groups.title.addGroup": "Ny grupp", + + // "admin.access-control.groups.addGroup.breadcrumbs": "New Group", + // TODO New key - Add a translation + "admin.access-control.groups.addGroup.breadcrumbs": "Ny grupp", + + // "admin.access-control.groups.head": "Groups", + // TODO New key - Add a translation + "admin.access-control.groups.head": "Grupper", + + // "admin.access-control.groups.button.add": "Add group", + // TODO New key - Add a translation + "admin.access-control.groups.button.add": "Lägg till grupp", + + // "admin.access-control.groups.search.head": "Search groups", + // TODO New key - Add a translation + "admin.access-control.groups.search.head": "Sök grupper", + + // "admin.access-control.groups.button.see-all": "Browse all", + // TODO New key - Add a translation + "admin.access-control.groups.button.see-all": "Browsa alla", + + // "admin.access-control.groups.search.button": "Search", + // TODO New key - Add a translation + "admin.access-control.groups.search.button": "Sök", + + // "admin.access-control.groups.search.placeholder": "Search groups...", + // TODO New key - Add a translation + "admin.access-control.groups.search.placeholder": "Sök grupper...", + + // "admin.access-control.groups.table.id": "ID", + // TODO New key - Add a translation + "admin.access-control.groups.table.id": "ID", + + // "admin.access-control.groups.table.name": "Name", + // TODO New key - Add a translation + "admin.access-control.groups.table.name": "Namn", + + // "admin.access-control.groups.table.collectionOrCommunity": "Collection/Community", + // TODO New key - Add a translation + "admin.access-control.groups.table.collectionOrCommunity": "Samling/Enhet", + + // "admin.access-control.groups.table.members": "Members", + // TODO New key - Add a translation + "admin.access-control.groups.table.members": "Medlemmar", + + // "admin.access-control.groups.table.edit": "Edit", + // TODO New key - Add a translation + "admin.access-control.groups.table.edit": "Redigera", + + // "admin.access-control.groups.table.edit.buttons.edit": "Edit \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.table.edit.buttons.edit": "Redigera \"{{name}}\"", + + // "admin.access-control.groups.table.edit.buttons.remove": "Delete \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.table.edit.buttons.remove": "Radera \"{{name}}\"", + + // "admin.access-control.groups.no-items": "No groups found with this in their name or this as UUID", + // TODO New key - Add a translation + "admin.access-control.groups.no-items": "Ingan grupper kunde hittas", + + // "admin.access-control.groups.notification.deleted.success": "Successfully deleted group \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.notification.deleted.success": "Grupp \"{{name}}\" har raderats", + + // "admin.access-control.groups.notification.deleted.failure.title": "Failed to delete group \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.notification.deleted.failure.title": "Misslyckades med att radera grupp \"{{name}}\"", + + // "admin.access-control.groups.notification.deleted.failure.content": "Cause: \"{{cause}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.notification.deleted.failure.content": "Orsak: \"{{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.", + // TODO New key - Add a translation + "admin.access-control.groups.form.alert.permanent": "Denna grupp är permant och kan inte raderas eller redigeras. Du kan fortfarande lägga till eller ta bort medlemmar i gruppen här.", + + // "admin.access-control.groups.form.alert.workflowGroup": "This group can’t be modified or deleted because it corresponds to a role in the submission and workflow process in the \"{{name}}\" {{comcol}}. You can delete it from the \"assign roles\" tab on the edit {{comcol}} page. You can still add and remove group members using this page.", + // TODO New key - Add a translation + "admin.access-control.groups.form.alert.workflowGroup": "Denna grupp kan inte raderas eller redigeras eftersom den används i submission eller workflow process i \"{{name}}\" {{comcol}}. Du kan radera den från fliken \"tilldela roller\" på sidan {{comcol}} för att redigera. Du kan fortfarande lägga till eller ta bort medlemmar i gruppen här.", + + // "admin.access-control.groups.form.head.create": "Create group", + // TODO New key - Add a translation + "admin.access-control.groups.form.head.create": "Skapa grupp", + + // "admin.access-control.groups.form.head.edit": "Edit group", + // TODO New key - Add a translation + "admin.access-control.groups.form.head.edit": "Redigera grupp", + + // "admin.access-control.groups.form.groupName": "Group name", + // TODO New key - Add a translation + "admin.access-control.groups.form.groupName": "Gruppens namn", + + // "admin.access-control.groups.form.groupCommunity": "Community or Collection", + // TODO New key - Add a translation + "admin.access-control.groups.form.groupCommunity": "Enhet eller samling", + + // "admin.access-control.groups.form.groupDescription": "Beskrivning", + // TODO New key - Add a translation + "admin.access-control.groups.form.groupDescription": "Beskrivning", + + // "admin.access-control.groups.form.notification.created.success": "Successfully created Group \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.form.notification.created.success": "Gruppen \"{{name}}\" har skapats", + + // "admin.access-control.groups.form.notification.created.failure": "Failed to create Group \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.form.notification.created.failure": "Misslyckades med att skapa grupp \"{{name}}\"", + + // "admin.access-control.groups.form.notification.created.failure.groupNameInUse": "Failed to create Group with name: \"{{name}}\", make sure the name is not already in use.", + // TODO New key - Add a translation + "admin.access-control.groups.form.notification.created.failure.groupNameInUse": "Misslyckades med att skapa grupp: \"{{name}}\", kontrollera om namnet redan används.", + + // "admin.access-control.groups.form.notification.edited.failure": "Failed to edit Group \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.form.notification.edited.failure": "Misslyckades med att redigera grupp \"{{name}}\"", + + // "admin.access-control.groups.form.notification.edited.failure.groupNameInUse": "Name \"{{name}}\" already in use!", + // TODO New key - Add a translation + "admin.access-control.groups.form.notification.edited.failure.groupNameInUse": "Namnet \"{{name}}\" används redan!", + + // "admin.access-control.groups.form.notification.edited.success": "Successfully edited Group \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.form.notification.edited.success": "Gruppen \"{{name}}\" har redigerats", + + // "admin.access-control.groups.form.actions.delete": "Delete Group", + // TODO New key - Add a translation + "admin.access-control.groups.form.actions.delete": "Radera grupp", + + // "admin.access-control.groups.form.delete-group.modal.header": "Delete Group \"{{ dsoName }}\"", + // TODO New key - Add a translation + "admin.access-control.groups.form.delete-group.modal.header": "Radera grupp \"{{ dsoName }}\"", + + // "admin.access-control.groups.form.delete-group.modal.info": "Are you sure you want to delete Group \"{{ dsoName }}\"", + // TODO New key - Add a translation + "admin.access-control.groups.form.delete-group.modal.info": "Är du säker på att du vill radera gruppen \"{{ dsoName }}\"", + + // "admin.access-control.groups.form.delete-group.modal.cancel": "Cancel", + // TODO New key - Add a translation + "admin.access-control.groups.form.delete-group.modal.cancel": "Avbryt", + + // "admin.access-control.groups.form.delete-group.modal.confirm": "Delete", + // TODO New key - Add a translation + "admin.access-control.groups.form.delete-group.modal.confirm": "Radera", + + // "admin.access-control.groups.form.notification.deleted.success": "Successfully deleted group \"{{ name }}\"", + // TODO New key - Add a translation + "admin.access-control.groups.form.notification.deleted.success": "Gruppen \"{{ name }}\" har raderats", + + // "admin.access-control.groups.form.notification.deleted.failure.title": "Failed to delete group \"{{ name }}\"", + // TODO New key - Add a translation + "admin.access-control.groups.form.notification.deleted.failure.title": "Misslyckades med att radera grupp \"{{ name }}\"", + + // "admin.access-control.groups.form.notification.deleted.failure.content": "Cause: \"{{ cause }}\"", + // TODO New key - Add a translation + "admin.access-control.groups.form.notification.deleted.failure.content": "Orsak: \"{{ cause }}\"", + + // "admin.access-control.groups.form.members-list.head": "EPeople", + // TODO New key - Add a translation + "admin.access-control.groups.form.members-list.head": "EPersoner", + + // "admin.access-control.groups.form.members-list.search.head": "Add EPeople", + // TODO New key - Add a translation + "admin.access-control.groups.form.members-list.search.head": "Lägg till EPersoner", + + // "admin.access-control.groups.form.members-list.button.see-all": "Browse All", + // TODO New key - Add a translation + "admin.access-control.groups.form.members-list.button.see-all": "Browsa alla", + + // "admin.access-control.groups.form.members-list.headMembers": "Current Members", + // TODO New key - Add a translation + "admin.access-control.groups.form.members-list.headMembers": "Nuvarande medlemmar", + + // "admin.access-control.groups.form.members-list.search.scope.metadata": "Metadata", + // TODO New key - Add a translation + "admin.access-control.groups.form.members-list.search.scope.metadata": "Metadata", + + // "admin.access-control.groups.form.members-list.search.scope.email": "E-mail (exact)", + // TODO New key - Add a translation + "admin.access-control.groups.form.members-list.search.scope.email": "E-post (exakt)", + + // "admin.access-control.groups.form.members-list.search.button": "Search", + // TODO New key - Add a translation + "admin.access-control.groups.form.members-list.search.button": "Sök", + + // "admin.access-control.groups.form.members-list.table.id": "ID", + // TODO New key - Add a translation + "admin.access-control.groups.form.members-list.table.id": "ID", + + // "admin.access-control.groups.form.members-list.table.name": "Name", + // TODO New key - Add a translation + "admin.access-control.groups.form.members-list.table.name": "Namn", + + // "admin.access-control.groups.form.members-list.table.identity": "Identity", + // TODO New key - Add a translation + "admin.access-control.groups.form.members-list.table.identity": "Identitet", + + // "admin.access-control.groups.form.members-list.table.email": "Email", + // TODO New key - Add a translation + "admin.access-control.groups.form.members-list.table.email": "E-post", + + // "admin.access-control.groups.form.members-list.table.netid": "NetID", + // TODO New key - Add a translation + "admin.access-control.groups.form.members-list.table.netid": "NetID", + + // "admin.access-control.groups.form.members-list.table.edit": "Remove / Add", + // TODO New key - Add a translation + "admin.access-control.groups.form.members-list.table.edit": "Radera / Lägg till", + + // "admin.access-control.groups.form.members-list.table.edit.buttons.remove": "Remove member with name \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.form.members-list.table.edit.buttons.remove": "Ta bort medlem \"{{name}}\"", + + // "admin.access-control.groups.form.members-list.notification.success.addMember": "Successfully added member: \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.form.members-list.notification.success.addMember": "Medlem: \"{{name}}\" har lagts till", + + // "admin.access-control.groups.form.members-list.notification.failure.addMember": "Failed to add member: \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.form.members-list.notification.failure.addMember": "Misslyckades med att lägga till medlem: \"{{name}}\"", + + // "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Successfully deleted member: \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Medlem: \"{{name}}\" har tagits bort", + + // "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Failed to delete member: \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Misslyckades med att ta bort medlem: \"{{name}}\"", + + // "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Add member with name \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Lägg till medlem \"{{name}}\"", + + // "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", + // TODO New key - Add a translation + "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup": "Det finns ingen aktiv grupp, ange ett namn först.", + + // "admin.access-control.groups.form.members-list.no-members-yet": "No members in group yet, search and add.", + // TODO New key - Add a translation + "admin.access-control.groups.form.members-list.no-members-yet": "Det finns inga medlemmar i gruppen, sök och Lägg till.", + + // "admin.access-control.groups.form.members-list.no-items": "No EPeople found in that search", + // TODO New key - Add a translation + "admin.access-control.groups.form.members-list.no-items": "Inga EPersoner hittades", + + // "admin.access-control.groups.form.subgroups-list.notification.failure": "Something went wrong: \"{{cause}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.form.subgroups-list.notification.failure": "Något gick fel: \"{{cause}}\"", + + // "admin.access-control.groups.form.subgroups-list.head": "Groups", + // TODO New key - Add a translation + "admin.access-control.groups.form.subgroups-list.head": "Grupper", + + // "admin.access-control.groups.form.subgroups-list.search.head": "Add Subgroup", + // TODO New key - Add a translation + "admin.access-control.groups.form.subgroups-list.search.head": "Lägg till undergrupp", + + // "admin.access-control.groups.form.subgroups-list.button.see-all": "Browse All", + // TODO New key - Add a translation + "admin.access-control.groups.form.subgroups-list.button.see-all": "Browsa alla", + + // "admin.access-control.groups.form.subgroups-list.headSubgroups": "Current Subgroups", + // TODO New key - Add a translation + "admin.access-control.groups.form.subgroups-list.headSubgroups": "Nuvarande undergrupper", + + // "admin.access-control.groups.form.subgroups-list.search.button": "Search", + // TODO New key - Add a translation + "admin.access-control.groups.form.subgroups-list.search.button": "Sök", + + // "admin.access-control.groups.form.subgroups-list.table.id": "ID", + // TODO New key - Add a translation + "admin.access-control.groups.form.subgroups-list.table.id": "ID", + + // "admin.access-control.groups.form.subgroups-list.table.name": "Name", + // TODO New key - Add a translation + "admin.access-control.groups.form.subgroups-list.table.name": "Namn", + + // "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Collection/Community", + // TODO New key - Add a translation + "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Samling/Enhet", + + // "admin.access-control.groups.form.subgroups-list.table.edit": "Remove / Add", + // TODO New key - Add a translation + "admin.access-control.groups.form.subgroups-list.table.edit": "Ta bort / Lägg till", + + // "admin.access-control.groups.form.subgroups-list.table.edit.buttons.remove": "Remove subgroup with name \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.form.subgroups-list.table.edit.buttons.remove": "Ta bort undergrupp \"{{name}}\"", + + // "admin.access-control.groups.form.subgroups-list.table.edit.buttons.add": "Add subgroup with name \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.form.subgroups-list.table.edit.buttons.add": "Lägg till undergrupp \"{{name}}\"", + + // "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Current group", + // TODO New key - Add a translation + "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Nuvarande grupp", + + // "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup": "Successfully added subgroup: \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup": "Undergrupp: \"{{name}}\" har lagts till", + + // "admin.access-control.groups.form.subgroups-list.notification.failure.addSubgroup": "Failed to add subgroup: \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.form.subgroups-list.notification.failure.addSubgroup": "Misslyckades med att lägga till undergrupp: \"{{name}}\"", + + // "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Successfully deleted subgroup: \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Undergrupp: \"{{name}}\" har raderats", + + // "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Failed to delete subgroup: \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Misslyckades med att radera undergrupp: \"{{name}}\"", + + // "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", + // TODO New key - Add a translation + "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "Det finns ingen aktiv grupp, ange ett namn först.", + + // "admin.access-control.groups.form.subgroups-list.notification.failure.subgroupToAddIsActiveGroup": "This is the current group, can't be added.", + // TODO New key - Add a translation + "admin.access-control.groups.form.subgroups-list.notification.failure.subgroupToAddIsActiveGroup": "Detta är den aktiva gruppen, den kan inte läggas till.", + + // "admin.access-control.groups.form.subgroups-list.no-items": "No groups found with this in their name or this as UUID", + // TODO New key - Add a translation + "admin.access-control.groups.form.subgroups-list.no-items": "Inga grupper kunde hittas", + + // "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "No subgroups in group yet.", + // TODO New key - Add a translation + "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "Det finns inga undergrupper i denna grupp ännu.", + + // "admin.access-control.groups.form.return": "Back", + // TODO New key - Add a translation + "admin.access-control.groups.form.return": "Tillbaka", + + + + // "admin.search.breadcrumbs": "Administrative Search", + // TODO New key - Add a translation + "admin.search.breadcrumbs": "Admin sökning", + + // "admin.search.collection.edit": "Edit", + // TODO New key - Add a translation + "admin.search.collection.edit": "Redigera", + + // "admin.search.community.edit": "Edit", + // TODO New key - Add a translation + "admin.search.community.edit": "Redigera", + + // "admin.search.item.delete": "Delete", + // TODO New key - Add a translation + "admin.search.item.delete": "Radera", + + // "admin.search.item.edit": "Edit", + // TODO New key - Add a translation + "admin.search.item.edit": "Redigera", + + // "admin.search.item.make-private": "Make non-discoverable", + // TODO New key - Add a translation + "admin.search.item.make-private": "Undanta från sökning", + + // "admin.search.item.make-public": "Make discoverable", + // TODO New key - Add a translation + "admin.search.item.make-public": "Gör sökbar", + + // "admin.search.item.move": "Move", + // TODO New key - Add a translation + "admin.search.item.move": "Flytta", + + // "admin.search.item.reinstate": "Reinstate", + // TODO New key - Add a translation + "admin.search.item.reinstate": "Återställ", + + // "admin.search.item.withdraw": "Withdraw", + // TODO New key - Add a translation + "admin.search.item.withdraw": "Återkalla", + + // "admin.search.title": "Administrative Search", + // TODO New key - Add a translation + "admin.search.title": "Admin sökning", + + // "administrativeView.search.results.head": "Administrative Search", + // TODO New key - Add a translation + "administrativeView.search.results.head": "Admin sökning", + + + + + // "admin.workflow.breadcrumbs": "Administer Workflow", + // TODO New key - Add a translation + "admin.workflow.breadcrumbs": "Administrera arbetsflöde", + + // "admin.workflow.title": "Administer Workflow", + // TODO New key - Add a translation + "admin.workflow.title": "Administrera arbetsflöde", + + // "admin.workflow.item.workflow": "Workflow", + // TODO New key - Add a translation + "admin.workflow.item.workflow": "Arbetsflöde", + + // "admin.workflow.item.delete": "Delete", + // TODO New key - Add a translation + "admin.workflow.item.delete": "Radera", + + // "admin.workflow.item.send-back": "Send back", + // TODO New key - Add a translation + "admin.workflow.item.send-back": "Skicka tillbaka", + + + + // "admin.metadata-import.breadcrumbs": "Import Metadata", + // TODO New key - Add a translation + "admin.metadata-import.breadcrumbs": "Importera metadata", + + // "admin.metadata-import.title": "Import Metadata", + // TODO New key - Add a translation + "admin.metadata-import.title": "Importera metadata", + + // "admin.metadata-import.page.header": "Import Metadata", + // TODO New key - Add a translation + "admin.metadata-import.page.header": "Importera metadata", + + // "admin.metadata-import.page.help": "You can drop or browse CSV files that contain batch metadata operations on files here", + // TODO New key - Add a translation + "admin.metadata-import.page.help": "Du kan öppna eller dra och släppa CSV-filer som innehåller batchvisa metadaåtgärder på filer här", + + // "admin.metadata-import.page.dropMsg": "Drop a metadata CSV to import", + // TODO New key - Add a translation + "admin.metadata-import.page.dropMsg": "Dra och släpp CSV-fil för att importera", + + // "admin.metadata-import.page.dropMsgReplace": "Drop to replace the metadata CSV to import", + // TODO New key - Add a translation + "admin.metadata-import.page.dropMsgReplace": "Dra och släpp för att ersätta CSV-fil att importera", + + // "admin.metadata-import.page.button.return": "Back", + // TODO New key - Add a translation + "admin.metadata-import.page.button.return": "Tillbaka", + + // "admin.metadata-import.page.button.proceed": "Proceed", + // TODO New key - Add a translation + "admin.metadata-import.page.button.proceed": "Fortsätt", + + // "admin.metadata-import.page.error.addFile": "Select file first!", + // TODO New key - Add a translation + "admin.metadata-import.page.error.addFile": "Välj fil först!", + + + + + // "auth.errors.invalid-user": "Invalid email address or password.", + // TODO New key - Add a translation + "auth.errors.invalid-user": "Ogiltig e-postadress eller lösenord.", + + // "auth.messages.expired": "Your session has expired. Please log in again.", + // TODO New key - Add a translation + "auth.messages.expired": "Din session har upphört. Logga in igen.", + + // "auth.messages.token-refresh-failed": "Refreshing your session token failed. Please log in again.", + // TODO New key - Add a translation + "auth.messages.token-refresh-failed": "Misslyckades med att förnya session token. Logga in igen.", + + + + // "bitstream.download.page": "Now downloading {{bitstream}}..." , + // TODO New key - Add a translation + "bitstream.download.page": "Laddar ner {{bitstream}}..." , + + // "bitstream.download.page.back": "Back" , + // TODO New key - Add a translation + "bitstream.download.page.back": "Tillbaka" , + + + // "bitstream.edit.authorizations.link": "Edit bitstream's Policies", + // TODO New key - Add a translation + "bitstream.edit.authorizations.link": "Redigera policy för fil", + + // "bitstream.edit.authorizations.title": "Edit bitstream's Policies", + // TODO New key - Add a translation + "bitstream.edit.authorizations.title": "Redigera policy för fil", + + // "bitstream.edit.return": "Back", + // TODO New key - Add a translation + "bitstream.edit.return": "Tillbaka", + + // "bitstream.edit.bitstream": "Bitstream: ", + // TODO New key - Add a translation + "bitstream.edit.bitstream": "Fil: ", + + // "bitstream.edit.form.description.hint": "Optionally, provide a brief description of the file, for example \"Main article\" or \"Experiment data readings\".", + // TODO New key - Add a translation + "bitstream.edit.form.description.hint": "Du kan ange en kort beskrivning av innehållet, t ex \"Main article\" or \"Experiment data readings\".", + + // "bitstream.edit.form.description.label": "Beskrivning", + // TODO New key - Add a translation + "bitstream.edit.form.description.label": "Beskrivning", + + // "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.", + // TODO New key - Add a translation + "bitstream.edit.form.embargo.hint": "Tidigaste datum när filen skall vara åtkomplig. Detta datum kan inte ändras här. För att ange embargodatum för en post, gå till fliken Poststatus, klicka Behörigheter..., skapa eller redigera filens READ policy, och ange startdatum.", + + // "bitstream.edit.form.embargo.label": "Embargo until specific date", + // TODO New key - Add a translation + "bitstream.edit.form.embargo.label": "Skall vara under embrgo till angivet datum", + + // "bitstream.edit.form.fileName.hint": "Change the filename for the bitstream. Note that this will change the display bitstream URL, but old links will still resolve as long as the sequence ID does not change.", + // TODO New key - Add a translation + "bitstream.edit.form.fileName.hint": "Ändra filnamnet. Detta kommer att förändra den publika URL:en, men tidigare länkar kommer att fortätta fungera som vanligt.", + + // "bitstream.edit.form.fileName.label": "Filename", + // TODO New key - Add a translation + "bitstream.edit.form.fileName.label": "Filnamn", + + // "bitstream.edit.form.newFormat.label": "Describe new format", + // TODO New key - Add a translation + "bitstream.edit.form.newFormat.label": "Beskriv nytt format", + + // "bitstream.edit.form.newFormat.hint": "The application you used to create the file, and the version number (for example, \"ACMESoft SuperApp version 1.5\").", + // TODO New key - Add a translation + "bitstream.edit.form.newFormat.hint": "Programmet som använts för att skapa filen, samt versionsnummer (t ex, \"ACMESoft SuperApp version 1.5\").", + + // "bitstream.edit.form.primaryBitstream.label": "Primary bitstream", + // TODO New key - Add a translation + "bitstream.edit.form.primaryBitstream.label": "Primär fil", + + // "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\".", + // TODO New key - Add a translation + "bitstream.edit.form.selectedFormat.hint": "Om formatet inte visas i listan ovan, välj \"formatet saknas\" och lägg till beskrivning under \"Beskriv nytt format\".", + + // "bitstream.edit.form.selectedFormat.label": "Selected Format", + // TODO New key - Add a translation + "bitstream.edit.form.selectedFormat.label": "Välj format", + + // "bitstream.edit.form.selectedFormat.unknown": "Format not in list", + // TODO New key - Add a translation + "bitstream.edit.form.selectedFormat.unknown": "Formatet saknas", + + // "bitstream.edit.notifications.error.format.title": "An error occurred saving the bitstream's format", + // TODO New key - Add a translation + "bitstream.edit.notifications.error.format.title": "Det uppstod ett fel när formatet skulle sparas", + + // "bitstream.edit.form.iiifLabel.label": "IIIF Label", + // TODO New key - Add a translation + "bitstream.edit.form.iiifLabel.label": "IIIF Label", + + // "bitstream.edit.form.iiifLabel.hint": "Canvas label for this image. If not provided default label will be used.", + // TODO New key - Add a translation + "bitstream.edit.form.iiifLabel.hint": "Canvas label for this image. If not provided default label will be used.", + + // "bitstream.edit.form.iiifToc.label": "IIIF Table of Contents", + // TODO New key - Add a translation + "bitstream.edit.form.iiifToc.label": "IIIF Table of Contents", + + // "bitstream.edit.form.iiifToc.hint": "Adding text here makes this the start of a new table of contents range.", + // TODO New key - Add a translation + "bitstream.edit.form.iiifToc.hint": "Adding text here makes this the start of a new table of contents range.", + + // "bitstream.edit.form.iiifWidth.label": "IIIF Canvas Width", + // TODO New key - Add a translation + "bitstream.edit.form.iiifWidth.label": "IIIF Canvas Width", + + // "bitstream.edit.form.iiifWidth.hint": "The canvas width should usually match the image width.", + // TODO New key - Add a translation + "bitstream.edit.form.iiifWidth.hint": "The canvas width should usually match the image width.", + + // "bitstream.edit.form.iiifHeight.label": "IIIF Canvas Height", + // TODO New key - Add a translation + "bitstream.edit.form.iiifHeight.label": "IIIF Canvas Height", + + // "bitstream.edit.form.iiifHeight.hint": "The canvas height should usually match the image height.", + // TODO New key - Add a translation + "bitstream.edit.form.iiifHeight.hint": "The canvas height should usually match the image height.", + + + // "bitstream.edit.notifications.saved.content": "Your changes to this bitstream were saved.", + // TODO New key - Add a translation + "bitstream.edit.notifications.saved.content": "Ändringarna sparades.", + + // "bitstream.edit.notifications.saved.title": "Bitstream saved", + // TODO New key - Add a translation + "bitstream.edit.notifications.saved.title": "Filen har sparats", + + // "bitstream.edit.title": "Edit bitstream", + // TODO New key - Add a translation + "bitstream.edit.title": "Redigera fil", + + // "bitstream-request-a-copy.alert.canDownload1": "You already have access to this file. If you want to download the file, click ", + // TODO New key - Add a translation + "bitstream-request-a-copy.alert.canDownload1": "Du har redan åtkomst till denna, för att ladda ner den, klicka ", + + // "bitstream-request-a-copy.alert.canDownload2": "here", + // TODO New key - Add a translation + "bitstream-request-a-copy.alert.canDownload2": "här", + + // "bitstream-request-a-copy.header": "Request a copy of the file", + // TODO New key - Add a translation + "bitstream-request-a-copy.header": "Begär en kopia av filen", + + // "bitstream-request-a-copy.intro": "Enter the following information to request a copy for the following item: ", + // TODO New key - Add a translation + "bitstream-request-a-copy.intro": "Ange följande information för att begära en kopia: ", + + // "bitstream-request-a-copy.intro.bitstream.one": "Requesting the following file: ", + // TODO New key - Add a translation + "bitstream-request-a-copy.intro.bitstream.one": "Önskar följande fil: ", + // "bitstream-request-a-copy.intro.bitstream.all": "Requesting all files. ", + // TODO New key - Add a translation + "bitstream-request-a-copy.intro.bitstream.all": "Önskar samtliga filer. ", + + // "bitstream-request-a-copy.name.label": "Name *", + // TODO New key - Add a translation + "bitstream-request-a-copy.name.label": "Namn *", + + // "bitstream-request-a-copy.name.error": "The name is required", + // TODO New key - Add a translation + "bitstream-request-a-copy.name.error": "Namn måste anges", + + // "bitstream-request-a-copy.email.label": "Your e-mail address *", + // TODO New key - Add a translation + "bitstream-request-a-copy.email.label": "E-post *", + + // "bitstream-request-a-copy.email.hint": "This email address is used for sending the file.", + // TODO New key - Add a translation + "bitstream-request-a-copy.email.hint": "Filen kommer skickas till denna e-postadress.", + + // "bitstream-request-a-copy.email.error": "Please enter a valid email address.", + // TODO New key - Add a translation + "bitstream-request-a-copy.email.error": "Ange en giltig e-postadress.", + + // "bitstream-request-a-copy.allfiles.label": "Files", + // TODO New key - Add a translation + "bitstream-request-a-copy.allfiles.label": "Filer", + + // "bitstream-request-a-copy.files-all-false.label": "Only the requested file", + // TODO New key - Add a translation + "bitstream-request-a-copy.files-all-false.label": "Endast den begärda filen", + + // "bitstream-request-a-copy.files-all-true.label": "All files (of this item) in restricted access", + // TODO New key - Add a translation + "bitstream-request-a-copy.files-all-true.label": "Alla filer (i denna post) som har begränsad åtkomst", + + // "bitstream-request-a-copy.message.label": "Message", + // TODO New key - Add a translation + "bitstream-request-a-copy.message.label": "Meddelande", + + // "bitstream-request-a-copy.return": "Back", + // TODO New key - Add a translation + "bitstream-request-a-copy.return": "Tillbaka", + + // "bitstream-request-a-copy.submit": "Request copy", + // TODO New key - Add a translation + "bitstream-request-a-copy.submit": "Begär kopia", + + // "bitstream-request-a-copy.submit.success": "The item request was submitted successfully.", + // TODO New key - Add a translation + "bitstream-request-a-copy.submit.success": "Begäran har skickats.", + + // "bitstream-request-a-copy.submit.error": "Something went wrong with submitting the item request.", + // TODO New key - Add a translation + "bitstream-request-a-copy.submit.error": "Ett fel uppstod när begäran skulle skickas.", + + + + // "browse.comcol.by.author": "By Author", + // TODO New key - Add a translation + "browse.comcol.by.author": "Författare", + + // "browse.comcol.by.dateissued": "By Issue Date", + // TODO New key - Add a translation + "browse.comcol.by.dateissued": "Datum", + + // "browse.comcol.by.subject": "By Subject", + // TODO New key - Add a translation + "browse.comcol.by.subject": "Ämne", + + // "browse.comcol.by.title": "By Title", + // TODO New key - Add a translation + "browse.comcol.by.title": "Titel", + + // "browse.comcol.head": "Browse", + // TODO New key - Add a translation + "browse.comcol.head": "Browse", + + // "browse.empty": "No items to show.", + // TODO New key - Add a translation + "browse.empty": "Inga poster att visa.", + + // "browse.metadata.author": "Author", + // TODO New key - Add a translation + "browse.metadata.author": "Författare", + + // "browse.metadata.dateissued": "Issue Date", + // TODO New key - Add a translation + "browse.metadata.dateissued": "Publicerad", + + // "browse.metadata.subject": "Subject", + // TODO New key - Add a translation + "browse.metadata.subject": "Ämnesord", + + // "browse.metadata.title": "Title", + // TODO New key - Add a translation + "browse.metadata.title": "Titel", + + // "browse.metadata.author.breadcrumbs": "Browse by Author", + // TODO New key - Add a translation + "browse.metadata.author.breadcrumbs": "Författare", + + // "browse.metadata.dateissued.breadcrumbs": "Browse by Date", + // TODO New key - Add a translation + "browse.metadata.dateissued.breadcrumbs": "Publiceringsdatum", + + // "browse.metadata.subject.breadcrumbs": "Browse by Subject", + // TODO New key - Add a translation + "browse.metadata.subject.breadcrumbs": "Ämnen", + + // "browse.metadata.title.breadcrumbs": "Browse by Title", + // TODO New key - Add a translation + "browse.metadata.title.breadcrumbs": "Titlar", + + // "pagination.next.button": "Next", + // TODO New key - Add a translation + "pagination.next.button": "Nästa", + + // "pagination.previous.button": "Föregående", + // TODO New key - Add a translation + "pagination.previous.button": "Föregående", + + // "browse.startsWith.choose_start": "(Choose start)", + // TODO New key - Add a translation + "browse.startsWith.choose_start": "(Välj startdatum)", + + // "browse.startsWith.choose_year": "(Välj årtal)", + // TODO New key - Add a translation + "browse.startsWith.choose_year": "(Välj årtal)", + + // "browse.startsWith.choose_year.label": "Choose the issue year", + // TODO New key - Add a translation + "browse.startsWith.choose_year.label": "Välj år", + + // "browse.startsWith.jump": "Jump to a point in the index:", + // TODO New key - Add a translation + "browse.startsWith.jump": "Gå direkt till:", + + // "browse.startsWith.months.april": "April", + // TODO New key - Add a translation + "browse.startsWith.months.april": "April", + + // "browse.startsWith.months.august": "August", + // TODO New key - Add a translation + "browse.startsWith.months.august": "Augusti", + + // "browse.startsWith.months.december": "December", + // TODO New key - Add a translation + "browse.startsWith.months.december": "December", + + // "browse.startsWith.months.february": "February", + // TODO New key - Add a translation + "browse.startsWith.months.february": "Februari", + + // "browse.startsWith.months.january": "January", + // TODO New key - Add a translation + "browse.startsWith.months.january": "Januari", + + // "browse.startsWith.months.july": "July", + // TODO New key - Add a translation + "browse.startsWith.months.july": "Juli", + + // "browse.startsWith.months.june": "June", + // TODO New key - Add a translation + "browse.startsWith.months.june": "June", + + // "browse.startsWith.months.march": "March", + // TODO New key - Add a translation + "browse.startsWith.months.march": "Mars", + + // "browse.startsWith.months.may": "May", + // TODO New key - Add a translation + "browse.startsWith.months.may": "Maj", + + // "browse.startsWith.months.none": "(Välj månad)", + // TODO New key - Add a translation + "browse.startsWith.months.none": "(Välj månad)", + + // "browse.startsWith.months.none.label": "Choose the issue month", + // TODO New key - Add a translation + "browse.startsWith.months.none.label": "Välj utgivningsmånad", + + // "browse.startsWith.months.november": "November", + // TODO New key - Add a translation + "browse.startsWith.months.november": "November", + + // "browse.startsWith.months.october": "October", + // TODO New key - Add a translation + "browse.startsWith.months.october": "Oktober", + + // "browse.startsWith.months.september": "September", + // TODO New key - Add a translation + "browse.startsWith.months.september": "September", + + // "browse.startsWith.submit": "Browse", + // TODO New key - Add a translation + "browse.startsWith.submit": "Browse", + + // "browse.startsWith.type_date": "Or type in a date (year-month) and click 'Browse'", + // TODO New key - Add a translation + "browse.startsWith.type_date": "Eller skriv in ett datum (år-månad) och klicka på 'Browse'", + + // "browse.startsWith.type_date.label": "Or type in a date (year-month) and click on the Browse button", + // TODO New key - Add a translation + "browse.startsWith.type_date.label": "Eller skriv in ett datum (år-månad) och klicka på 'Browse'", + + // "browse.startsWith.type_text": "Type the first few letters and click on the Browse button", + // TODO New key - Add a translation + "browse.startsWith.type_text": "Ange de första bokstäverna och klicka på 'Browse'", + + // "browse.title": "Browsing {{ collection }} by {{ field }} {{ value }}", + // TODO New key - Add a translation + "browse.title": "Browsar {{ collection }} efter {{ field }} {{ value }}", + + + // "chips.remove": "Remove chip", + // TODO New key - Add a translation + "chips.remove": "Radera chip", + + + + // "collection.create.head": "Create a Collection", + // TODO New key - Add a translation + "collection.create.head": "Skapa samling", + + // "collection.create.notifications.success": "Successfully created the Collection", + // TODO New key - Add a translation + "collection.create.notifications.success": "Samlingen har skapats", + + // "collection.create.sub-head": "Create a Collection for Community {{ parent }}", + // TODO New key - Add a translation + "collection.create.sub-head": "Skapa en samling i enhet {{ parent }}", + + // "collection.curate.header": "Curate Collection: {{collection}}", + // TODO New key - Add a translation + "collection.curate.header": "Kurera samling: {{collection}}", + + // "collection.delete.cancel": "Cancel", + // TODO New key - Add a translation + "collection.delete.cancel": "Avbryt", + + // "collection.delete.confirm": "Confirm", + // TODO New key - Add a translation + "collection.delete.confirm": "Bekräfta", + + // "collection.delete.processing": "Deleting", + // TODO New key - Add a translation + "collection.delete.processing": "Raderar", + + // "collection.delete.head": "Delete Collection", + // TODO New key - Add a translation + "collection.delete.head": "Radera samling", + + // "collection.delete.notification.fail": "Collection could not be deleted", + // TODO New key - Add a translation + "collection.delete.notification.fail": "Samlingen kunde inte raderas", + + // "collection.delete.notification.success": "Successfully deleted collection", + // TODO New key - Add a translation + "collection.delete.notification.success": "Samlingen har raderats", + + // "collection.delete.text": "Are you sure you want to delete collection \"{{ dso }}\"", + // TODO New key - Add a translation + "collection.delete.text": "Är du säker på att du vill radera denna samling: \"{{ dso }}\"", + + + + // "collection.edit.delete": "Delete this collection", + // TODO New key - Add a translation + "collection.edit.delete": "Radera denna samling", + + // "collection.edit.head": "Edit Collection", + // TODO New key - Add a translation + "collection.edit.head": "Redigera denna samling", + + // "collection.edit.breadcrumbs": "Edit Collection", + // TODO New key - Add a translation + "collection.edit.breadcrumbs": "Redigera samling", + + + + // "collection.edit.tabs.mapper.head": "Item Mapper", + // TODO New key - Add a translation + "collection.edit.tabs.mapper.head": "Mappa poster", + + // "collection.edit.tabs.item-mapper.title": "Collection Edit - Item Mapper", + // TODO New key - Add a translation + "collection.edit.tabs.item-mapper.title": "Redigera samling - Mappa poster", + + // "collection.edit.item-mapper.cancel": "Cancel", + // TODO New key - Add a translation + "collection.edit.item-mapper.cancel": "Avbryt", + + // "collection.edit.item-mapper.collection": "Collection: \"{{name}}\"", + // TODO New key - Add a translation + "collection.edit.item-mapper.collection": "Samling: \"{{name}}\"", + + // "collection.edit.item-mapper.confirm": "Map selected items", + // TODO New key - Add a translation + "collection.edit.item-mapper.confirm": "Mappa markerade poster", + + // "collection.edit.item-mapper.description": "This is the item mapper tool that allows collection administrators to map items from other collections into this collection. You can search for items from other collections and map them, or browse the list of currently mapped items.", + // TODO New key - Add a translation + "collection.edit.item-mapper.description": "Detta är ett verktyg som möjliggör för administratörer att mappa poster från andra samlingar till denna. Sök efter poster för att mappa, eller lista redan mappade poster.", + + // "collection.edit.item-mapper.head": "Item Mapper - Map Items from Other Collections", + // TODO New key - Add a translation + "collection.edit.item-mapper.head": "Mappa poster - Mappa poster från andra samlingar", + + // "collection.edit.item-mapper.no-search": "Please enter a query to search", + // TODO New key - Add a translation + "collection.edit.item-mapper.no-search": "Ange en sökfråga", + + // "collection.edit.item-mapper.notifications.map.error.content": "Errors occurred for mapping of {{amount}} items.", + // TODO New key - Add a translation + "collection.edit.item-mapper.notifications.map.error.content": "Ett fel uppstod vid mappningen för {{amount}} poster.", + + // "collection.edit.item-mapper.notifications.map.error.head": "Mapping errors", + // TODO New key - Add a translation + "collection.edit.item-mapper.notifications.map.error.head": "Mappningsfel", + + // "collection.edit.item-mapper.notifications.map.success.content": "Successfully mapped {{amount}} items.", + // TODO New key - Add a translation + "collection.edit.item-mapper.notifications.map.success.content": "{{amount}} poster har mappats.", + + // "collection.edit.item-mapper.notifications.map.success.head": "Mapping completed", + // TODO New key - Add a translation + "collection.edit.item-mapper.notifications.map.success.head": "Mappningen har slutförts", + + // "collection.edit.item-mapper.notifications.unmap.error.content": "Errors occurred for removing the mappings of {{amount}} items.", + // TODO New key - Add a translation + "collection.edit.item-mapper.notifications.unmap.error.content": "Fel vid mappningen uppstod för {{amount}} poster.", + + // "collection.edit.item-mapper.notifications.unmap.error.head": "Remove mapping errors", + // TODO New key - Add a translation + "collection.edit.item-mapper.notifications.unmap.error.head": "Ta bort mappningsfel", + + // "collection.edit.item-mapper.notifications.unmap.success.content": "Successfully removed the mappings of {{amount}} items.", + // TODO New key - Add a translation + "collection.edit.item-mapper.notifications.unmap.success.content": "Mappningen för {{amount}} poster har tagits bort.", + + // "collection.edit.item-mapper.notifications.unmap.success.head": "Remove mapping completed", + // TODO New key - Add a translation + "collection.edit.item-mapper.notifications.unmap.success.head": "Mappning har tagits bort", + + // "collection.edit.item-mapper.remove": "Remove selected item mappings", + // TODO New key - Add a translation + "collection.edit.item-mapper.remove": "Ta bort markerade mappningar", + + // "collection.edit.item-mapper.search-form.placeholder": "Search items...", + // TODO New key - Add a translation + "collection.edit.item-mapper.search-form.placeholder": "Sök...", + + // "collection.edit.item-mapper.tabs.browse": "Browse mapped items", + // TODO New key - Add a translation + "collection.edit.item-mapper.tabs.browse": "Browsa mappade poster", + + // "collection.edit.item-mapper.tabs.map": "Map new items", + // TODO New key - Add a translation + "collection.edit.item-mapper.tabs.map": "Mappa nya poster", + + + // "collection.edit.logo.delete.title": "Delete logo", + // TODO New key - Add a translation + "collection.edit.logo.delete.title": "Radera logga", + + // "collection.edit.logo.delete-undo.title": "Undo delete", + // TODO New key - Add a translation + "collection.edit.logo.delete-undo.title": "Ångra radera", + + // "collection.edit.logo.label": "Collection logo", + // TODO New key - Add a translation + "collection.edit.logo.label": "Logga för samlingen", + + // "collection.edit.logo.notifications.add.error": "Uploading Collection logo failed. Please verify the content before retrying.", + // TODO New key - Add a translation + "collection.edit.logo.notifications.add.error": "Uppladdning av logga för samlingen misslyckades. Kontrollera filen och försök igen.", + + // "collection.edit.logo.notifications.add.success": "Upload Collection logo successful.", + // TODO New key - Add a translation + "collection.edit.logo.notifications.add.success": "Logga för samlingen har laddats upp.", + + // "collection.edit.logo.notifications.delete.success.title": "Logo deleted", + // TODO New key - Add a translation + "collection.edit.logo.notifications.delete.success.title": "Logga har raderats", + + // "collection.edit.logo.notifications.delete.success.content": "Successfully deleted the collection's logo", + // TODO New key - Add a translation + "collection.edit.logo.notifications.delete.success.content": "Samlingens logga har raderats", + + // "collection.edit.logo.notifications.delete.error.title": "Error deleting logo", + // TODO New key - Add a translation + "collection.edit.logo.notifications.delete.error.title": "Ett fel uppstod när logga skulle raderas", + + // "collection.edit.logo.upload": "Drop a Collection Logo to upload", + // TODO New key - Add a translation + "collection.edit.logo.upload": "Släpp en logga här för att ladda upp", + + + + // "collection.edit.notifications.success": "Successfully edited the Collection", + // TODO New key - Add a translation + "collection.edit.notifications.success": "Samlingen har redigerats", + + // "collection.edit.return": "Back", + // TODO New key - Add a translation + "collection.edit.return": "Tillbaka", + + + + // "collection.edit.tabs.curate.head": "Curate", + // TODO New key - Add a translation + "collection.edit.tabs.curate.head": "Kurera", + + // "collection.edit.tabs.curate.title": "Collection Edit - Curate", + // TODO New key - Add a translation + "collection.edit.tabs.curate.title": "Redigera samling - kurera", + + // "collection.edit.tabs.authorizations.head": "Authorizations", + // TODO New key - Add a translation + "collection.edit.tabs.authorizations.head": "Behörigheter", + + // "collection.edit.tabs.authorizations.title": "Collection Edit - Authorizations", + // TODO New key - Add a translation + "collection.edit.tabs.authorizations.title": "Redigera samling - Behörigheter", + + // "collection.edit.tabs.metadata.head": "Edit Metadata", + // TODO New key - Add a translation + "collection.edit.tabs.metadata.head": "Redigera metadata", + + // "collection.edit.tabs.metadata.title": "Collection Edit - Metadata", + // TODO New key - Add a translation + "collection.edit.tabs.metadata.title": "Redigera samling - Metadata", + + // "collection.edit.tabs.roles.head": "Assign Roles", + // TODO New key - Add a translation + "collection.edit.tabs.roles.head": "Tilldela behörighet (roller)", + + // "collection.edit.tabs.roles.title": "Collection Edit - Roles", + // TODO New key - Add a translation + "collection.edit.tabs.roles.title": "Redigera samling - Behörigheter", + + // "collection.edit.tabs.source.external": "This collection harvests its content from an external source", + // TODO New key - Add a translation + "collection.edit.tabs.source.external": "Denna samling höstar in sitt innehåll från en extern källa", + + // "collection.edit.tabs.source.form.errors.oaiSource.required": "You must provide a set id of the target collection.", + // TODO New key - Add a translation + "collection.edit.tabs.source.form.errors.oaiSource.required": "Du måste ange set id för målsamlingen.", + + // "collection.edit.tabs.source.form.harvestType": "Content being harvested", + // TODO New key - Add a translation + "collection.edit.tabs.source.form.harvestType": "Innehåll höstas in", + + // "collection.edit.tabs.source.form.head": "Configure an external source", + // TODO New key - Add a translation + "collection.edit.tabs.source.form.head": "Konfigurera en extern källa", + + // "collection.edit.tabs.source.form.metadataConfigId": "Metadata Format", + // TODO New key - Add a translation + "collection.edit.tabs.source.form.metadataConfigId": "Metadataformat", + + // "collection.edit.tabs.source.form.oaiSetId": "OAI specific set id", + // TODO New key - Add a translation + "collection.edit.tabs.source.form.oaiSetId": "OAI specifikt set id", + + // "collection.edit.tabs.source.form.oaiSource": "OAI Provider", + // TODO New key - Add a translation + "collection.edit.tabs.source.form.oaiSource": "OAI Provider", + + // "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_BITSTREAMS": "Harvest metadata and bitstreams (requires ORE support)", + // TODO New key - Add a translation + "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_BITSTREAMS": "Hösta både metadata och filer (kräver stöd för ORE)", + + // "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_REF": "Harvest metadata and references to bitstreams (requires ORE support)", + // TODO New key - Add a translation + "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_REF": "Hösta både metadata och referenser till filer (kräver stöd för ORE)", + + // "collection.edit.tabs.source.form.options.harvestType.METADATA_ONLY": "Harvest metadata only", + // TODO New key - Add a translation + "collection.edit.tabs.source.form.options.harvestType.METADATA_ONLY": "Hösta enbart metadata", + + // "collection.edit.tabs.source.head": "Content Source", + // TODO New key - Add a translation + "collection.edit.tabs.source.head": "Källa för innehåll", + + // "collection.edit.tabs.source.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", + // TODO New key - Add a translation + "collection.edit.tabs.source.notifications.discarded.content": "Ändringarna sparades inte. För att återkalla dina förändringar, klicka 'Ångra'", + + // "collection.edit.tabs.source.notifications.discarded.title": "Changed discarded", + // TODO New key - Add a translation + "collection.edit.tabs.source.notifications.discarded.title": "Changed discarded", + + // "collection.edit.tabs.source.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", + // TODO New key - Add a translation + "collection.edit.tabs.source.notifications.invalid.content": "Ändringarna sparades inte. Kontrollera att alla fält är giltiga och försök att spara igen.", + + // "collection.edit.tabs.source.notifications.invalid.title": "Metadata invalid", + // TODO New key - Add a translation + "collection.edit.tabs.source.notifications.invalid.title": "Metadatan är ogiltig", + + // "collection.edit.tabs.source.notifications.saved.content": "Your changes to this collection's content source were saved.", + // TODO New key - Add a translation + "collection.edit.tabs.source.notifications.saved.content": "Ändringarna har sparats.", + + // "collection.edit.tabs.source.notifications.saved.title": "Content Source saved", + // TODO New key - Add a translation + "collection.edit.tabs.source.notifications.saved.title": "Källa sparades.", + + // "collection.edit.tabs.source.title": "Collection Edit - Content Source", + // TODO New key - Add a translation + "collection.edit.tabs.source.title": "Redigera samling - Källa för innehåll", + + + + // "collection.edit.template.add-button": "Add", + // TODO New key - Add a translation + "collection.edit.template.add-button": "Lägg till", + + // "collection.edit.template.breadcrumbs": "Item template", + // TODO New key - Add a translation + "collection.edit.template.breadcrumbs": "postmall", + + // "collection.edit.template.cancel": "Cancel", + // TODO New key - Add a translation + "collection.edit.template.cancel": "Avbryt", + + // "collection.edit.template.delete-button": "Delete", + // TODO New key - Add a translation + "collection.edit.template.delete-button": "Radera", + + // "collection.edit.template.edit-button": "Edit", + // TODO New key - Add a translation + "collection.edit.template.edit-button": "Redigera", + + // "collection.edit.template.error": "An error occurred retrieving the template item", + // TODO New key - Add a translation + "collection.edit.template.error": "Ett fel uppstod när mallen hämtades", + + // "collection.edit.template.head": "Edit Template Item for Collection \"{{ collection }}\"", + // TODO New key - Add a translation + "collection.edit.template.head": "Redigera postmall för samlingen \"{{ collection }}\"", + + // "collection.edit.template.label": "Template item", + // TODO New key - Add a translation + "collection.edit.template.label": "Postmall", + + // "collection.edit.template.loading": "Loading template item...", + // TODO New key - Add a translation + "collection.edit.template.loading": "Laddar postmall...", + + // "collection.edit.template.notifications.delete.error": "Failed to delete the item template", + // TODO New key - Add a translation + "collection.edit.template.notifications.delete.error": "Misslickades med att radera postmall", + + // "collection.edit.template.notifications.delete.success": "Successfully deleted the item template", + // TODO New key - Add a translation + "collection.edit.template.notifications.delete.success": "Postmall har raderats", + + // "collection.edit.template.title": "Edit Template Item", + // TODO New key - Add a translation + "collection.edit.template.title": "Redigera postmall", + + + + // "collection.form.abstract": "Short Beskrivning", + // TODO New key - Add a translation + "collection.form.abstract": "Kort beskrivning", + + // "collection.form.description": "Introductory text (HTML)", + // TODO New key - Add a translation + "collection.form.description": "Inledande text (HTML)", + + // "collection.form.errors.title.required": "Please enter a collection name", + // TODO New key - Add a translation + "collection.form.errors.title.required": "Ange ett namn för samlingen", + + // "collection.form.license": "License", + // TODO New key - Add a translation + "collection.form.license": "Licens", + + // "collection.form.provenance": "Provenance", + // TODO New key - Add a translation + "collection.form.provenance": "Provenance", + + // "collection.form.rights": "Copyright text (HTML)", + // TODO New key - Add a translation + "collection.form.rights": "Copyright text (HTML)", + + // "collection.form.tableofcontents": "News (HTML)", + // TODO New key - Add a translation + "collection.form.tableofcontents": "Nyheter (HTML)", + + // "collection.form.title": "Name", + // TODO New key - Add a translation + "collection.form.title": "Namn", + + // "collection.form.entityType": "Entity Type", + // TODO New key - Add a translation + "collection.form.entityType": "Entitetstyp", + + + + // "collection.listelement.badge": "Collection", + // TODO New key - Add a translation + "collection.listelement.badge": "Samling", + + + + // "collection.page.browse.recent.head": "Recent Submissions", + // TODO New key - Add a translation + "collection.page.browse.recent.head": "Senast publicerade", + + // "collection.page.browse.recent.empty": "No items to show", + // TODO New key - Add a translation + "collection.page.browse.recent.empty": "Det finns ingenting att visa", + + // "collection.page.edit": "Edit this collection", + // TODO New key - Add a translation + "collection.page.edit": "Redigera denna samling", + + // "collection.page.handle": "Permanent URI for this collection", + // TODO New key - Add a translation + "collection.page.handle": "Använd denna länk för att länka till denna samling:", + + // "collection.page.license": "License", + // TODO New key - Add a translation + "collection.page.license": "Licens", + + // "collection.page.news": "News", + // TODO New key - Add a translation + "collection.page.news": "Nyheter", + + + + // "collection.select.confirm": "Confirm selected", + // TODO New key - Add a translation + "collection.select.confirm": "Bekräfta val", + + // "collection.select.empty": "No collections to show", + // TODO New key - Add a translation + "collection.select.empty": "Det finns inga samlingar att visa", + + // "collection.select.table.title": "Title", + // TODO New key - Add a translation + "collection.select.table.title": "Titel", + + + // "collection.source.controls.head": "Harvest Controls", + // TODO New key - Add a translation + "collection.source.controls.head": "Inställningar för höstning", + // "collection.source.controls.test.submit.error": "Something went wrong with initiating the testing of the settings", + // TODO New key - Add a translation + "collection.source.controls.test.submit.error": "Något gick fel när testet av inställningarna initierades", + // "collection.source.controls.test.failed": "The script to test the settings has failed", + // TODO New key - Add a translation + "collection.source.controls.test.failed": "Skriptet som testar inställningarna kunde inte köras", + // "collection.source.controls.test.completed": "The script to test the settings has successfully finished", + // TODO New key - Add a translation + "collection.source.controls.test.completed": "Skriptet som testar inställningarna har körts med lyckat resultat", + // "collection.source.controls.test.submit": "Test configuration", + // TODO New key - Add a translation + "collection.source.controls.test.submit": "Testa konfigurationen", + // "collection.source.controls.test.running": "Testing configuration...", + // TODO New key - Add a translation + "collection.source.controls.test.running": "Testar konfigurationen...", + // "collection.source.controls.import.submit.success": "The import has been successfully initiated", + // TODO New key - Add a translation + "collection.source.controls.import.submit.success": "Importen har initierats", + // "collection.source.controls.import.submit.error": "Something went wrong with initiating the import", + // TODO New key - Add a translation + "collection.source.controls.import.submit.error": "Något gick fel när importen skulle initieras", + // "collection.source.controls.import.submit": "Import now", + // TODO New key - Add a translation + "collection.source.controls.import.submit": "Importera nu", + // "collection.source.controls.import.running": "Importing...", + // TODO New key - Add a translation + "collection.source.controls.import.running": "Importerar...", + // "collection.source.controls.import.failed": "An error occurred during the import", + // TODO New key - Add a translation + "collection.source.controls.import.failed": "Ett fel uppstod under importen", + // "collection.source.controls.import.completed": "The import completed", + // TODO New key - Add a translation + "collection.source.controls.import.completed": "Importen har slutförts", + // "collection.source.controls.reset.submit.success": "The reset and reimport has been successfully initiated", + // TODO New key - Add a translation + "collection.source.controls.reset.submit.success": "Återställning och omimport har initierats", + // "collection.source.controls.reset.submit.error": "Something went wrong with initiating the reset and reimport", + // TODO New key - Add a translation + "collection.source.controls.reset.submit.error": "Något gick fel vid initiering av återställning och omimport", + // "collection.source.controls.reset.failed": "An error occurred during the reset and reimport", + // TODO New key - Add a translation + "collection.source.controls.reset.failed": "Ett fel uppstod under återställning och omimport", + // "collection.source.controls.reset.completed": "The reset and reimport completed", + // TODO New key - Add a translation + "collection.source.controls.reset.completed": "Återställningen och omimporten har slutförts", + // "collection.source.controls.reset.submit": "Reset and reimport", + // TODO New key - Add a translation + "collection.source.controls.reset.submit": "Återställ och importera om", + // "collection.source.controls.reset.running": "Resetting and reimporting...", + // TODO New key - Add a translation + "collection.source.controls.reset.running": "Återställer och importerar om...", + // "collection.source.controls.harvest.status": "Harvest status:", + // TODO New key - Add a translation + "collection.source.controls.harvest.status": "Status:", + // "collection.source.controls.harvest.start": "Harvest start time:", + // TODO New key - Add a translation + "collection.source.controls.harvest.start": "Starttid:", + // "collection.source.controls.harvest.last": "Last time harvested:", + // TODO New key - Add a translation + "collection.source.controls.harvest.last": "Senaste höstning:", + // "collection.source.controls.harvest.message": "Harvest info:", + // TODO New key - Add a translation + "collection.source.controls.harvest.message": "Info om höstning:", + // "collection.source.controls.harvest.no-information": "N/A", + // TODO New key - Add a translation + "collection.source.controls.harvest.no-information": "saknas", + + + // "collection.source.update.notifications.error.content": "The provided settings have been tested and didn't work.", + // TODO New key - Add a translation + "collection.source.update.notifications.error.content": "Inställningarna har testats och fungerade inte.", + + // "collection.source.update.notifications.error.title": "Server Error", + // TODO New key - Add a translation + "collection.source.update.notifications.error.title": "Serverfel", + + + + // "communityList.breadcrumbs": "Community List", + // TODO New key - Add a translation + "communityList.breadcrumbs": "Enheter", + + // "communityList.tabTitle": "Community List", + // TODO New key - Add a translation + "communityList.tabTitle": "Enheter", + + // "communityList.title": "Samlingar i Chalmers ODR", + // TODO New key - Add a translation + "communityList.title": "Samlingar i Chalmers ODR", + + // "communityList.showMore": "Show More", + // TODO New key - Add a translation + "communityList.showMore": "Visa fler", + + + + // "community.create.head": "Create a Community", + // TODO New key - Add a translation + "community.create.head": "Skapa en ny enhet", + + // "community.create.notifications.success": "Successfully created the Community", + // TODO New key - Add a translation + "community.create.notifications.success": "Enheten har skapats", + + // "community.create.sub-head": "Create a Sub-Community for Community {{ parent }}", + // TODO New key - Add a translation + "community.create.sub-head": "Skapa en underenhet till enheten {{ parent }}", + + // "community.curate.header": "Curate Community: {{community}}", + // TODO New key - Add a translation + "community.curate.header": "Kurera enhet: {{community}}", + + // "community.delete.cancel": "Cancel", + // TODO New key - Add a translation + "community.delete.cancel": "Avbryt", + + // "community.delete.confirm": "Confirm", + // TODO New key - Add a translation + "community.delete.confirm": "Bekräfta", + + // "community.delete.processing": "Deleting...", + // TODO New key - Add a translation + "community.delete.processing": "Raderar...", + + // "community.delete.head": "Delete Community", + // TODO New key - Add a translation + "community.delete.head": "Radera enhet", + + // "community.delete.notification.fail": "Community could not be deleted", + // TODO New key - Add a translation + "community.delete.notification.fail": "Eneten kunde inte raderas", + + // "community.delete.notification.success": "Successfully deleted community", + // TODO New key - Add a translation + "community.delete.notification.success": "Enheten har raderats", + + // "community.delete.text": "Are you sure you want to delete community \"{{ dso }}\"", + // TODO New key - Add a translation + "community.delete.text": "Är du säker på att du vill radera denna enhet \"{{ dso }}\"", + + // "community.edit.delete": "Delete this community", + // TODO New key - Add a translation + "community.edit.delete": "Radera denna enhet", + + // "community.edit.head": "Edit Community", + // TODO New key - Add a translation + "community.edit.head": "Redigera enhet", + + // "community.edit.breadcrumbs": "Edit Community", + // TODO New key - Add a translation + "community.edit.breadcrumbs": "Redigera enhet", + + + // "community.edit.logo.delete.title": "Delete logo", + // TODO New key - Add a translation + "community.edit.logo.delete.title": "Radera logga", + + // "community.edit.logo.delete-undo.title": "Undo delete", + // TODO New key - Add a translation + "community.edit.logo.delete-undo.title": "Ångra radering", + + // "community.edit.logo.label": "Community logo", + // TODO New key - Add a translation + "community.edit.logo.label": "Enhetens logga", + + // "community.edit.logo.notifications.add.error": "Uploading Community logo failed. Please verify the content before retrying.", + // TODO New key - Add a translation + "community.edit.logo.notifications.add.error": "Uppladdningen misslyckades. Kontrollera filen och försök igen.", + + // "community.edit.logo.notifications.add.success": "Upload Community logo successful.", + // TODO New key - Add a translation + "community.edit.logo.notifications.add.success": "Uppladdningen lyckades.", + + // "community.edit.logo.notifications.delete.success.title": "Logo deleted", + // TODO New key - Add a translation + "community.edit.logo.notifications.delete.success.title": "Loggan har raderats", + + // "community.edit.logo.notifications.delete.success.content": "Successfully deleted the community's logo", + // TODO New key - Add a translation + "community.edit.logo.notifications.delete.success.content": "Loggan har raderats", + + // "community.edit.logo.notifications.delete.error.title": "Error deleting logo", + // TODO New key - Add a translation + "community.edit.logo.notifications.delete.error.title": "Logga kunde inte raderas", + + // "community.edit.logo.upload": "Drop a Community Logo to upload", + // TODO New key - Add a translation + "community.edit.logo.upload": "Släpp en logga här för att ladda upp", + + + + // "community.edit.notifications.success": "Successfully edited the Community", + // TODO New key - Add a translation + "community.edit.notifications.success": "Enheten har redigerats", + + // "community.edit.notifications.unauthorized": "You do not have privileges to make this change", + // TODO New key - Add a translation + "community.edit.notifications.unauthorized": "Du har inte behörighet att göra denna ändring", + + // "community.edit.notifications.error": "An error occured while editing the Community", + // TODO New key - Add a translation + "community.edit.notifications.error": "Ett fel uppstod när enheten redigerades", + + // "community.edit.return": "Back", + // TODO New key - Add a translation + "community.edit.return": "Tillbaka", + + + + // "community.edit.tabs.curate.head": "Curate", + // TODO New key - Add a translation + "community.edit.tabs.curate.head": "Kurera", + + // "community.edit.tabs.curate.title": "Community Edit - Curate", + // TODO New key - Add a translation + "community.edit.tabs.curate.title": "Redigera enhet - Kurera", + + // "community.edit.tabs.metadata.head": "Edit Metadata", + // TODO New key - Add a translation + "community.edit.tabs.metadata.head": "Redigera metadata", + + // "community.edit.tabs.metadata.title": "Community Edit - Metadata", + // TODO New key - Add a translation + "community.edit.tabs.metadata.title": "Redigera enhet - Metadata", + + // "community.edit.tabs.roles.head": "Assign Roles", + // TODO New key - Add a translation + "community.edit.tabs.roles.head": "Tilldela roller", + + // "community.edit.tabs.roles.title": "Community Edit - Roles", + // TODO New key - Add a translation + "community.edit.tabs.roles.title": "Redigera enhet - Roller", + + // "community.edit.tabs.authorizations.head": "Authorizations", + // TODO New key - Add a translation + "community.edit.tabs.authorizations.head": "Behörigheter", + + // "community.edit.tabs.authorizations.title": "Community Edit - Authorizations", + // TODO New key - Add a translation + "community.edit.tabs.authorizations.title": "Redigera enhet - Behörigheter", + + + + // "community.listelement.badge": "Community", + // TODO New key - Add a translation + "community.listelement.badge": "Enhet", + + + + // "comcol-role.edit.no-group": "None", + // TODO New key - Add a translation + "comcol-role.edit.no-group": "Ingen", + + // "comcol-role.edit.create": "Create", + // TODO New key - Add a translation + "comcol-role.edit.create": "Skapa", + + // "comcol-role.edit.restrict": "Restrict", + // TODO New key - Add a translation + "comcol-role.edit.restrict": "Begränsa", + + // "comcol-role.edit.delete": "Delete", + // TODO New key - Add a translation + "comcol-role.edit.delete": "Radera", + + + // "comcol-role.edit.community-admin.name": "Administrators", + // TODO New key - Add a translation + "comcol-role.edit.community-admin.name": "Administratörer", + + // "comcol-role.edit.collection-admin.name": "Administrators", + // TODO New key - Add a translation + "comcol-role.edit.collection-admin.name": "Administratörer", + + + // "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).", + // TODO New key - Add a translation + "comcol-role.edit.community-admin.description": "Administratörer för enheter kan skapa underenheter eller samlingar och administrera dessa. De kan också avgöra vem skall ha behörighet till dessa, redigera metadata (på befintliga poster), och mappa existerande poster från andra samlingar (beroende på behörighet till dessa).", + + // "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).", + // TODO New key - Add a translation + "comcol-role.edit.collection-admin.description": "Administratörer för samlingar avgör vem som kan skapa nya poster i dessa, redigera metadata (på befintliga poster) och mappa existerande poster från andra samlingar till denna (beroende på behörighet).", + + + // "comcol-role.edit.submitters.name": "Submitters", + // TODO New key - Add a translation + "comcol-role.edit.submitters.name": "Submitters", + + // "comcol-role.edit.submitters.description": "The E-People and Groups that have permission to submit new items to this collection.", + // TODO New key - Add a translation + "comcol-role.edit.submitters.description": "EPersoner och grupper som har behörighet att skapa nya poster i denna samling.", + + + // "comcol-role.edit.item_read.name": "Default item read access", + // TODO New key - Add a translation + "comcol-role.edit.item_read.name": "Default läsåtkomst till post", + + // "comcol-role.edit.item_read.description": "E-People and Groups that can read new items submitted to this collection. Changes to this role are not retroactive. Existing items in the system will still be viewable by those who had read access at the time of their addition.", + // TODO New key - Add a translation + "comcol-role.edit.item_read.description": "EPersoner och grupper som kan läsa nya poster som skapats i denna samling. Förändringar i rollen är inte retroaktiva. Existerande poster kommer fortfarande att vara synliga för dem som hade läsåtkomst när de skapades.", + + // "comcol-role.edit.item_read.anonymous-group": "Default read for incoming items is currently set to Anonymous.", + // TODO New key - Add a translation + "comcol-role.edit.item_read.anonymous-group": "Default läsåtkomst till nyskapade poster är för närvarande satt till Anonymous.", + + + // "comcol-role.edit.bitstream_read.name": "Default bitstream read access", + // TODO New key - Add a translation + "comcol-role.edit.bitstream_read.name": "Default läsåtkomst till filer", + + // "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).", + // TODO New key - Add a translation + "comcol-role.edit.bitstream_read.description": "Administratörer för enheter kan skapa underenheter eller samlingar och administrera dessa. De kan också avgöra vem skall ha behörighet till dessa, redigera metadata (på befintliga poster), och mappa existerande poster från andra samlingar (beroende på behörighet till dessa).", + + // "comcol-role.edit.bitstream_read.anonymous-group": "Default read for incoming bitstreams is currently set to Anonymous.", + // TODO New key - Add a translation + "comcol-role.edit.bitstream_read.anonymous-group": "Default läsåtkomst till nyuppladdade filer är för närvarande satt till Anonymous.", + + + // "comcol-role.edit.editor.name": "Editors", + // TODO New key - Add a translation + "comcol-role.edit.editor.name": "Editors", + + // "comcol-role.edit.editor.description": "Editors are able to edit the metadata of incoming submissions, and then accept or reject them.", + // TODO New key - Add a translation + "comcol-role.edit.editor.description": "Dessa kan redigera metadata på inkommande bidrag, samt acceptera eller neka dessa.", + + + // "comcol-role.edit.finaleditor.name": "Final editors", + // TODO New key - Add a translation + "comcol-role.edit.finaleditor.name": "Final editors", + + // "comcol-role.edit.finaleditor.description": "Final editors are able to edit the metadata of incoming submissions, but will not be able to reject them.", + // TODO New key - Add a translation + "comcol-role.edit.finaleditor.description": "Dessa kan redigera metadata på inkommande bidrag, men har inte möjlighet att neka dem.", + + + // "comcol-role.edit.reviewer.name": "Reviewers", + // TODO New key - Add a translation + "comcol-role.edit.reviewer.name": "Reviewers", + + // "comcol-role.edit.reviewer.description": "Reviewers are able to accept or reject incoming submissions. However, they are not able to edit the submission's metadata.", + // TODO New key - Add a translation + "comcol-role.edit.reviewer.description": "Reviewers kan acceptera eller neka inkommande bidrag. Men de kan inte redigera metadata.", + + + + // "community.form.abstract": "Short Beskrivning", + // TODO New key - Add a translation + "community.form.abstract": "Kort beskrivning", + + // "community.form.description": "Introductory text (HTML)", + // TODO New key - Add a translation + "community.form.description": "Inledande text (HTML)", + + // "community.form.errors.title.required": "Please enter a community name", + // TODO New key - Add a translation + "community.form.errors.title.required": "Ange ett namn på enheten", + + // "community.form.rights": "Copyright text (HTML)", + // TODO New key - Add a translation + "community.form.rights": "Copyright text (HTML)", + + // "community.form.tableofcontents": "News (HTML)", + // TODO New key - Add a translation + "community.form.tableofcontents": "Nyheter (HTML)", + + // "community.form.title": "Name", + // TODO New key - Add a translation + "community.form.title": "Namn", + + // "community.page.edit": "Edit this community", + // TODO New key - Add a translation + "community.page.edit": "Redigera denna enhet", + + // "community.page.handle": "Permanent URI for this community", + // TODO New key - Add a translation + "community.page.handle": "Använd denna länk för att länka till samlingen:", + + // "community.page.license": "License", + // TODO New key - Add a translation + "community.page.license": "Licens", + + // "community.page.news": "News", + // TODO New key - Add a translation + "community.page.news": "News", + + // "community.all-lists.head": "Subcommunities and Collections", + // TODO New key - Add a translation + "community.all-lists.head": "Samling", + + // "community.sub-collection-list.head": "Samlingar Community", + // TODO New key - Add a translation + "community.sub-collection-list.head": "Samlingar", + + // "community.sub-community-list.head": "Communities of this Community", + // TODO New key - Add a translation + "community.sub-community-list.head": "Enheter under denna enhet", + + + + // "cookies.consent.accept-all": "Accept all", + // TODO New key - Add a translation + "cookies.consent.accept-all": "Acceptera alla", + + // "cookies.consent.accept-selected": "Accept selected", + // TODO New key - Add a translation + "cookies.consent.accept-selected": "Acceptera markerade", + + // "cookies.consent.app.opt-out.description": "This app is loaded by default (but you can opt out)", + // TODO New key - Add a translation + "cookies.consent.app.opt-out.description": "Denna app har laddats per default (men du kan välja opt out)", + + // "cookies.consent.app.opt-out.title": "(opt-out)", + // TODO New key - Add a translation + "cookies.consent.app.opt-out.title": "(opt-out)", + + // "cookies.consent.app.purpose": "purpose", + // TODO New key - Add a translation + "cookies.consent.app.purpose": "syfte", + + // "cookies.consent.app.required.description": "This application is always required", + // TODO New key - Add a translation + "cookies.consent.app.required.description": "Denna applikation krävs alltid", + + // "cookies.consent.app.required.title": "(always required)", + // TODO New key - Add a translation + "cookies.consent.app.required.title": "(krävs alltid)", + + // "cookies.consent.update": "There were changes since your last visit, please update your consent.", + // TODO New key - Add a translation + "cookies.consent.update": "Ändringar har gjorts sedan ditt senaste besök, vänligen uppdatera ditt medgivande.", + + // "cookies.consent.close": "Close", + // TODO New key - Add a translation + "cookies.consent.close": "Stäng", + + // "cookies.consent.decline": "Decline", + // TODO New key - Add a translation + "cookies.consent.decline": "Avböj", + + // "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}.", + // TODO New key - Add a translation + "cookies.consent.content-notice.description": "Vi samlar in och hanterar dina persondata för följande syften: Autenticering, inställningar, godkännanden och statistik.
    För mer information, läs {privacyPolicy}.", + + // "cookies.consent.content-notice.learnMore": "Customize", + // TODO New key - Add a translation + "cookies.consent.content-notice.learnMore": "Anpassa", + + // "cookies.consent.content-modal.description": "Here you can see and customize the information that we collect about you.", + // TODO New key - Add a translation + "cookies.consent.content-modal.description": "Se och anpassa den information som vi samlar in.", + + // "cookies.consent.content-modal.privacy-policy.name": "privacy policy", + // TODO New key - Add a translation + "cookies.consent.content-modal.privacy-policy.name": "personuppgifter och cookies", + + // "cookies.consent.content-modal.privacy-policy.text": "To learn more, please read our {privacyPolicy}.", + // TODO New key - Add a translation + "cookies.consent.content-modal.privacy-policy.text": "För mer information, läs {privacyPolicy}.", + + // "cookies.consent.content-modal.title": "Information that we collect", + // TODO New key - Add a translation + "cookies.consent.content-modal.title": "Information som vi samlar in", + + + + // "cookies.consent.app.title.authentication": "Authentication", + // TODO New key - Add a translation + "cookies.consent.app.title.authentication": "Autenticering", + + // "cookies.consent.app.description.authentication": "Required for signing you in", + // TODO New key - Add a translation + "cookies.consent.app.description.authentication": "Behövs för att du skall kunna logga in", + + + // "cookies.consent.app.title.preferences": "Preferences", + // TODO New key - Add a translation + "cookies.consent.app.title.preferences": "Inställningar", + + // "cookies.consent.app.description.preferences": "Required for saving your preferences", + // TODO New key - Add a translation + "cookies.consent.app.description.preferences": "Behövs för att kunna spara dina inställningar", + + + + // "cookies.consent.app.title.acknowledgement": "Acknowledgement", + // TODO New key - Add a translation + "cookies.consent.app.title.acknowledgement": "Godkännande", + + // "cookies.consent.app.description.acknowledgement": "Required for saving your acknowledgements and consents", + // TODO New key - Add a translation + "cookies.consent.app.description.acknowledgement": "Behövs för att spara dina godkännanden och medgivanden", + + + + // "cookies.consent.app.title.google-analytics": "Google Analytics", + // TODO New key - Add a translation + "cookies.consent.app.title.google-analytics": "Google Analytics", + + // "cookies.consent.app.description.google-analytics": "Allows us to track statistical data", + // TODO New key - Add a translation + "cookies.consent.app.description.google-analytics": "Tillåt oss att spåra statistiska data", + + + + // "cookies.consent.purpose.functional": "Functional", + // TODO New key - Add a translation + "cookies.consent.purpose.functional": "Funktionella", + + // "cookies.consent.purpose.statistical": "Statistical", + // TODO New key - Add a translation + "cookies.consent.purpose.statistical": "Statistiska", + + + // "curation-task.task.checklinks.label": "Check Links in Metadata", + // TODO New key - Add a translation + "curation-task.task.checklinks.label": "Kontrollera länkar i metadata", + + // "curation-task.task.noop.label": "NOOP", + // TODO New key - Add a translation + "curation-task.task.noop.label": "NOOP", + + // "curation-task.task.profileformats.label": "Profile Bitstream Formats", + // TODO New key - Add a translation + "curation-task.task.profileformats.label": "Profile Bitstream Formats", + + // "curation-task.task.requiredmetadata.label": "Check for Required Metadata", + // TODO New key - Add a translation + "curation-task.task.requiredmetadata.label": "Kontrollera obligatoriska metadata", + + // "curation-task.task.translate.label": "Microsoft Translator", + // TODO New key - Add a translation + "curation-task.task.translate.label": "Microsoft Translator", + + // "curation-task.task.vscan.label": "Virus Scan", + // TODO New key - Add a translation + "curation-task.task.vscan.label": "Virus Scan", + + // "curation.form.task-select.label": "Task:", + // TODO New key - Add a translation + "curation.form.task-select.label": "Uppgift:", + + // "curation.form.submit": "Start", + // TODO New key - Add a translation + "curation.form.submit": "Starta", + + // "curation.form.submit.success.head": "The curation task has been started successfully", + // TODO New key - Add a translation + "curation.form.submit.success.head": "Kureringsjobbet har startats", + + // "curation.form.submit.success.content": "You will be redirected to the corresponding process page.", + // TODO New key - Add a translation + "curation.form.submit.success.content": "Du kommer att skickas till sidan för att övervaka processen.", + + // "curation.form.submit.error.head": "Running the curation task failed", + // TODO New key - Add a translation + "curation.form.submit.error.head": "Kureringsjobbet misslyckades", + + // "curation.form.submit.error.content": "An error occured when trying to start the curation task.", + // TODO New key - Add a translation + "curation.form.submit.error.content": "Ett fel uppstod när kureringsjobbet skulle startas.", + + // "curation.form.handle.label": "Handle:", + // TODO New key - Add a translation + "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)", + // TODO New key - Add a translation + "curation.form.handle.hint": "Tips: Ange [your-handle-prefix]/0 för att köra ett jobb för hela sajten (alla jobb kanske inte stöder detta)", + + + + // "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 }}>", + // TODO New key - Add a translation + "deny-request-copy.email.message": "Hej {{ recipientName }},\nDet är tyvärr inte möjligt att skicka den eller de filer som du har begärt. Angående: \"{{ itemUrl }}\" ({{ itemName }}), som jag har författat.\n\nMed vänliga hälsningar,\n{{ authorName }} <{{ authorEmail }}>", + + // "deny-request-copy.email.subject": "Request copy of document", + // TODO New key - Add a translation + "deny-request-copy.email.subject": "Begär en kopia av dokument", + + // "deny-request-copy.error": "An error occurred", + // TODO New key - Add a translation + "deny-request-copy.error": "Ett fel uppstod", + + // "deny-request-copy.header": "Deny document copy request", + // TODO New key - Add a translation + "deny-request-copy.header": "Neka begäran", + + // "deny-request-copy.intro": "This message will be sent to the applicant of the request", + // TODO New key - Add a translation + "deny-request-copy.intro": "Detta meddelande kommer att skickas till personen som har begärt kopian", + + // "deny-request-copy.success": "Successfully denied item request", + // TODO New key - Add a translation + "deny-request-copy.success": "Begäran nekades", + + + + // "dso.name.untitled": "Untitled", + // TODO New key - Add a translation + "dso.name.untitled": "Utan titel", + + + + // "dso-selector.create.collection.head": "New collection", + // TODO New key - Add a translation + "dso-selector.create.collection.head": "Ny samling", + + // "dso-selector.create.collection.sub-level": "Create a new collection in", + // TODO New key - Add a translation + "dso-selector.create.collection.sub-level": "Skapa en ny samling i", + + // "dso-selector.create.community.head": "New community", + // TODO New key - Add a translation + "dso-selector.create.community.head": "Ny enhet", + + // "dso-selector.create.community.sub-level": "Create a new community in", + // TODO New key - Add a translation + "dso-selector.create.community.sub-level": "Skapa en ny enhet i", + + // "dso-selector.create.community.top-level": "Create a new top-level community", + // TODO New key - Add a translation + "dso-selector.create.community.top-level": "Skapa en ny enhet på toppnivå", + + // "dso-selector.create.item.head": "New item", + // TODO New key - Add a translation + "dso-selector.create.item.head": "Ny post", + + // "dso-selector.create.item.sub-level": "Create a new item in", + // TODO New key - Add a translation + "dso-selector.create.item.sub-level": "Skapa en ny post i", + + // "dso-selector.create.submission.head": "New submission", + // TODO New key - Add a translation + "dso-selector.create.submission.head": "Nytt bidrag", + + // "dso-selector.edit.collection.head": "Edit collection", + // TODO New key - Add a translation + "dso-selector.edit.collection.head": "Redigera samling", + + // "dso-selector.edit.community.head": "Edit community", + // TODO New key - Add a translation + "dso-selector.edit.community.head": "Redigera enhet", + + // "dso-selector.edit.item.head": "Edit item", + // TODO New key - Add a translation + "dso-selector.edit.item.head": "Redigera post", + + // "dso-selector.error.title": "An error occurred searching for a {{ type }}", + // TODO New key - Add a translation + "dso-selector.error.title": "Ett fel uppstod vid sökning på {{ type }}", + + // "dso-selector.export-metadata.dspaceobject.head": "Export metadata from", + // TODO New key - Add a translation + "dso-selector.export-metadata.dspaceobject.head": "Exportera metadata från", + + // "dso-selector.no-results": "No {{ type }} found", + // TODO New key - Add a translation + "dso-selector.no-results": "Ingen {{ type }} kunde hittas", + + // "dso-selector.placeholder": "Search for a {{ type }}", + // TODO New key - Add a translation + "dso-selector.placeholder": "Sök efter en {{ type }}", + + // "dso-selector.select.collection.head": "Select a collection", + // TODO New key - Add a translation + "dso-selector.select.collection.head": "Välj en samling", + + // "dso-selector.set-scope.community.head": "Select a search scope", + // TODO New key - Add a translation + "dso-selector.set-scope.community.head": "Välj ett scope för sökning", + + // "dso-selector.set-scope.community.button": "Search all of DSpace", + // TODO New key - Add a translation + "dso-selector.set-scope.community.button": "Sök i hela arkivet", + + // "dso-selector.set-scope.community.input-header": "Search for a community or collection", + // TODO New key - Add a translation + "dso-selector.set-scope.community.input-header": "Sök efter en samling eller enhet", + + + + // "confirmation-modal.export-metadata.header": "Export metadata for {{ dsoName }}", + // TODO New key - Add a translation + "confirmation-modal.export-metadata.header": "Exportera metadata från {{ dsoName }}", + + // "confirmation-modal.export-metadata.info": "Are you sure you want to export metadata for {{ dsoName }}", + // TODO New key - Add a translation + "confirmation-modal.export-metadata.info": "Vill du exportera metadata från {{ dsoName }}", + + // "confirmation-modal.export-metadata.cancel": "Cancel", + // TODO New key - Add a translation + "confirmation-modal.export-metadata.cancel": "Avbryt", + + // "confirmation-modal.export-metadata.confirm": "Export", + // TODO New key - Add a translation + "confirmation-modal.export-metadata.confirm": "Exportera", + + // "confirmation-modal.delete-eperson.header": "Delete EPerson \"{{ dsoName }}\"", + // TODO New key - Add a translation + "confirmation-modal.delete-eperson.header": "Radera e-Person \"{{ dsoName }}\"", + + // "confirmation-modal.delete-eperson.info": "Are you sure you want to delete EPerson \"{{ dsoName }}\"", + // TODO New key - Add a translation + "confirmation-modal.delete-eperson.info": "Vill du radera e-Person \"{{ dsoName }}\"", + + // "confirmation-modal.delete-eperson.cancel": "Cancel", + // TODO New key - Add a translation + "confirmation-modal.delete-eperson.cancel": "Avbryt", + + // "confirmation-modal.delete-eperson.confirm": "Delete", + // TODO New key - Add a translation + "confirmation-modal.delete-eperson.confirm": "Radera", + + + // "error.bitstream": "Error fetching bitstream", + // TODO New key - Add a translation + "error.bitstream": "Ett fel uppstod när felen hämtades", + + // "error.browse-by": "Error fetching items", + // TODO New key - Add a translation + "error.browse-by": "Ett fel uppstod när posterna hämtades", + + // "error.collection": "Error fetching collection", + // TODO New key - Add a translation + "error.collection": "Ett fel uppstod när samling hämtades", + + // "error.collections": "Error fetching collections", + // TODO New key - Add a translation + "error.collections": "Ett fel uppstod när samlingar hämtades", + + // "error.community": "Error fetching community", + // TODO New key - Add a translation + "error.community": "Ett fel uppstod när enhet hämtades", + + // "error.identifier": "No item found for the identifier", + // TODO New key - Add a translation + "error.identifier": "Inga post med denna identifiererare kunde hittas", + + // "error.default": "Error", + // TODO New key - Add a translation + "error.default": "Fel", + + // "error.item": "Error fetching item", + // TODO New key - Add a translation + "error.item": "Ett fel uppstod när posten hämtades", + + // "error.items": "Error fetching items", + // TODO New key - Add a translation + "error.items": "Ett fel uppstod när poster hämtades", + + // "error.objects": "Error fetching objects", + // TODO New key - Add a translation + "error.objects": "Ett fel uppstod när objekt hämtades", + + // "error.recent-submissions": "Error fetching recent submissions", + // TODO New key - Add a translation + "error.recent-submissions": "Ett fel uppstod när senste bidrag hämtades", + + // "error.search-results": "Error fetching search results", + // TODO New key - Add a translation + "error.search-results": "Ett fel uppstod när sökresultaten hämtades", + + // "error.invalid-search-query": "Search query is not valid. Please check Solr query syntax best practices for further information about this error.", + // TODO New key - Add a translation + "error.invalid-search-query": "Ogiltig sökfråga. Se Solr query syntax för hjälp och mer information.", + + // "error.sub-collections": "Error fetching sub-collections", + // TODO New key - Add a translation + "error.sub-collections": "Ett fel uppstod när undersamlingar hämtades", + + // "error.sub-communities": "Error fetching sub-communities", + // TODO New key - Add a translation + "error.sub-communities": "Ett fel uppstod när underenheter hämtades", + + // "error.submission.sections.init-form-error": "An error occurred during section initialize, please check your input-form configuration. Details are below :

    ", + // TODO New key - Add a translation + "error.submission.sections.init-form-error": "An error occurred during section initialize, please check your input-form configuration. Details are below :

    ", + + // "error.top-level-communities": "Error fetching top-level communities", + // TODO New key - Add a translation + "error.top-level-communities": "Ett fel uppstod när enheter på toppnivå hämtades", + + // "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.", + // TODO New key - Add a translation + "error.validation.license.notgranted": "Du måste godkänna dessa villkor för att skutföra registreringen. Om detta inte är möjligt så kan du spara nu och återvända hit senare, eller radera bidraget.", + + // "error.validation.pattern": "This input is restricted by the current pattern: {{ pattern }}.", + // TODO New key - Add a translation + "error.validation.pattern": "This input is restricted by the current pattern: {{ pattern }}.", + + // "error.validation.filerequired": "The file upload is mandatory", + // TODO New key - Add a translation + "error.validation.filerequired": "Filuppladdning är obligatorisk", + + // "error.validation.required": "This field is required", + // TODO New key - Add a translation + "error.validation.required": "Detta fält är obligatoriskt", + + // "error.validation.NotValidEmail": "This E-mail is not a valid email", + // TODO New key - Add a translation + "error.validation.NotValidEmail": "Ogiltig e-postadress", + + // "error.validation.emailTaken": "This E-mail is already taken", + // TODO New key - Add a translation + "error.validation.emailTaken": "E-postadressen finns redan", + + // "error.validation.groupExists": "This group already exists", + // TODO New key - Add a translation + "error.validation.groupExists": "Denna grupp existerar redan", + + + // "file-section.error.header": "Error obtaining files for this item", + // TODO New key - Add a translation + "file-section.error.header": "Det gick inte att hämta filerna till denna post", + + + + // "footer.copyright": "copyright © 2002-{{ year }}", + // TODO New key - Add a translation + "footer.copyright": "copyright © 2002-{{ year }}", + + // "footer.link.dspace": "DSpace software", + // TODO New key - Add a translation + "footer.link.dspace": "DSpace software", + + // "footer.link.lyrasis": "LYRASIS", + // TODO New key - Add a translation + "footer.link.lyrasis": "LYRASIS", + + // "footer.link.cookies": "Cookie settings", + // TODO New key - Add a translation + "footer.link.cookies": "Cookieinställningar", + + // "footer.link.privacy-policy": "Privacy policy", + // TODO New key - Add a translation + "footer.link.privacy-policy": "Privacy policy", + + // "footer.link.end-user-agreement":"End User Agreement", + // TODO New key - Add a translation + "footer.link.end-user-agreement":"End User Agreement", + + // "footer.link.feedback":"Send Feedback", + // TODO New key - Add a translation + "footer.link.feedback":"Skicka feedback", + + + + // "forgot-email.form.header": "Forgot Password", + // TODO New key - Add a translation + "forgot-email.form.header": "Glömt lösenord", + + // "forgot-email.form.info": "Enter Register an account to subscribe to collections for email updates, and submit new items to DSpace.", + // TODO New key - Add a translation + "forgot-email.form.info": "Registrera dig som användare för att prenumerera på nyheter eller ladda upp nya filer till arkivet.", + + // "forgot-email.form.email": "E-post *", + // TODO New key - Add a translation + "forgot-email.form.email": "E-post *", + + // "forgot-email.form.email.error.required": "Please fill in an email address", + // TODO New key - Add a translation + "forgot-email.form.email.error.required": "Ange en giltig e-postadress", + + // "forgot-email.form.email.error.pattern": "Please fill in a valid email address", + // TODO New key - Add a translation + "forgot-email.form.email.error.pattern": "Ange en giltig e-postadress", + + // "forgot-email.form.email.hint": "This address will be verified and used as your login name.", + // TODO New key - Add a translation + "forgot-email.form.email.hint": "E-postadressen kommer att verifieras och användas som ditt användarnamn.", + + // "forgot-email.form.submit": "Save", + // TODO New key - Add a translation + "forgot-email.form.submit": "Spara", + + // "forgot-email.form.success.head": "Verification email sent", + // TODO New key - Add a translation + "forgot-email.form.success.head": "Ett verifieringsmejl har skickats", + + // "forgot-email.form.success.content": "An email has been sent to {{ email }} containing a special URL and further instructions.", + // TODO New key - Add a translation + "forgot-email.form.success.content": "Ett mejl med vidare instruktioner har skickats till {{ email }}.", + + // "forgot-email.form.error.head": "Error when trying to register email", + // TODO New key - Add a translation + "forgot-email.form.error.head": "Ett fel har uppstått", + + // "forgot-email.form.error.content": "An error occured when registering the following email address: {{ email }}", + // TODO New key - Add a translation + "forgot-email.form.error.content": "Ett fel uppstod när följande e-postadress skulle registreras: {{ email }}", + + + + // "forgot-password.title": "Forgot Password", + // TODO New key - Add a translation + "forgot-password.title": "Glömt lösenord", + + // "forgot-password.form.head": "Forgot Password", + // TODO New key - Add a translation + "forgot-password.form.head": "Glömt lösenord", + + // "forgot-password.form.info": "Enter a new password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", + // TODO New key - Add a translation + "forgot-password.form.info": "Ange och bekräfta ett nytt lösenord nedan (minst 6 tecken).", + + // "forgot-password.form.card.security": "Säkerhet", + // TODO New key - Add a translation + "forgot-password.form.card.security": "Säkerhet", + + // "forgot-password.form.identification.header": "Identify", + // TODO New key - Add a translation + "forgot-password.form.identification.header": "Identifiera", + + // "forgot-password.form.identification.email": "Email address: ", + // TODO New key - Add a translation + "forgot-password.form.identification.email": "E-post: ", + + // "forgot-password.form.label.password": "Password", + // TODO New key - Add a translation + "forgot-password.form.label.password": "Lösenord", + + // "forgot-password.form.label.passwordrepeat": "Bekräfta", + // TODO New key - Add a translation + "forgot-password.form.label.passwordrepeat": "Bekräfta", + + // "forgot-password.form.error.empty-password": "Please enter a password in the box below.", + // TODO New key - Add a translation + "forgot-password.form.error.empty-password": "Ange ett lösenord nedan.", + + // "forgot-password.form.error.matching-passwords": "Lösenorden överensstämmer inte.", + // TODO New key - Add a translation + "forgot-password.form.error.matching-passwords": "Lösenorden överensstämmer inte.", + + // "forgot-password.form.error.password-length": "The password should be at least 6 characters long.", + // TODO New key - Add a translation + "forgot-password.form.error.password-length": "Lösenordet måste bestå av minst 6 tecken.", + + // "forgot-password.form.notification.error.title": "Error when trying to submit new password", + // TODO New key - Add a translation + "forgot-password.form.notification.error.title": "Ett fel uppstod när det nya lösenordet skulle sparas", + + // "forgot-password.form.notification.success.content": "The password reset was successful. You have been logged in as the created user.", + // TODO New key - Add a translation + "forgot-password.form.notification.success.content": "Lösenordet har återställts. Du är nu inloggad.", + + // "forgot-password.form.notification.success.title": "Password reset completed", + // TODO New key - Add a translation + "forgot-password.form.notification.success.title": "Lösenordet har återställts", + + // "forgot-password.form.submit": "Submit password", + // TODO New key - Add a translation + "forgot-password.form.submit": "Spara lösenord", + + + // "form.add": "Add more", + // TODO New key - Add a translation + "form.add": "Lägg till fler", + + // "form.add-help": "Click here to add the current entry and to add another one", + // TODO New key - Add a translation + "form.add-help": "Klicka här för att spara nuvarande post och lägga till en ny", + + // "form.cancel": "Cancel", + // TODO New key - Add a translation + "form.cancel": "Avbryt", + + // "form.clear": "Clear", + // TODO New key - Add a translation + "form.clear": "Rensa", + + // "form.clear-help": "Click here to remove the selected value", + // TODO New key - Add a translation + "form.clear-help": "Klicka för att avmarkera", + + // "form.discard": "Discard", + // TODO New key - Add a translation + "form.discard": "Dra tillbaka", + + // "form.drag": "Drag", + // TODO New key - Add a translation + "form.drag": "Dra", + + // "form.edit": "Edit", + // TODO New key - Add a translation + "form.edit": "Redigera", + + // "form.edit-help": "Click here to edit the selected value", + // TODO New key - Add a translation + "form.edit-help": "Klicka för att redigera det markerade", + + // "form.first-name": "First name", + // TODO New key - Add a translation + "form.first-name": "Förnamn", + + // "form.group-collapse": "Collapse", + // TODO New key - Add a translation + "form.group-collapse": "Fäll ihop", + + // "form.group-collapse-help": "Click here to collapse", + // TODO New key - Add a translation + "form.group-collapse-help": "Klicka här för att fälla ihop", + + // "form.group-expand": "Expand", + // TODO New key - Add a translation + "form.group-expand": "Expandera", + + // "form.group-expand-help": "Click here to expand and add more elements", + // TODO New key - Add a translation + "form.group-expand-help": "Klicka här för att expandera och lägga till fler element", + + // "form.last-name": "Last name", + // TODO New key - Add a translation + "form.last-name": "Efternamn", + + // "form.loading": "Loading...", + // TODO New key - Add a translation + "form.loading": "Laddar...", + + // "form.lookup": "Lookup", + // TODO New key - Add a translation + "form.lookup": "Slå upp", + + // "form.lookup-help": "Click here to look up an existing relation", + // TODO New key - Add a translation + "form.lookup-help": "Klicka för att leta upp en befintlig relation", + + // "form.no-results": "No results found", + // TODO New key - Add a translation + "form.no-results": "Inga resultat", + + // "form.no-value": "No value entered", + // TODO New key - Add a translation + "form.no-value": "Inget värde har angivits", + + // "form.other-information": {}, + // TODO New key - Add a translation + "form.other-information": {}, + + // "form.remove": "Remove", + // TODO New key - Add a translation + "form.remove": "Ta bort", + + // "form.save": "Save", + // TODO New key - Add a translation + "form.save": "Spara", + + // "form.save-help": "Save changes", + // TODO New key - Add a translation + "form.save-help": "Spara ändringar", + + // "form.search": "Search", + // TODO New key - Add a translation + "form.search": "Sök", + + // "form.search-help": "Click here to look for an existing correspondence", + // TODO New key - Add a translation + "form.search-help": "Klicka här för att leta efter en befintlig korrespondens", + + // "form.submit": "Save", + // TODO New key - Add a translation + "form.submit": "Spara", + + // "form.repeatable.sort.tip": "Drop the item in the new position", + // TODO New key - Add a translation + "form.repeatable.sort.tip": "Släpp posten i den nya positionen", + + + + // "grant-deny-request-copy.deny": "Don't send copy", + // TODO New key - Add a translation + "grant-deny-request-copy.deny": "Skicka inte kopia", + + // "grant-deny-request-copy.email.back": "Back", + // TODO New key - Add a translation + "grant-deny-request-copy.email.back": "Tillbaka", + + // "grant-deny-request-copy.email.message": "Message", + // TODO New key - Add a translation + "grant-deny-request-copy.email.message": "Meddelande", + + // "grant-deny-request-copy.email.message.empty": "Please enter a message", + // TODO New key - Add a translation + "grant-deny-request-copy.email.message.empty": "Skriv ett meddelande", + + // "grant-deny-request-copy.email.permissions.info": "You may use this occasion to reconsider the access restrictions on the document, to avoid having to respond to these requests. If you’d like to ask the repository administrators to remove these restrictions, please check the box below.", + // TODO New key - Add a translation + "grant-deny-request-copy.email.permissions.info": "You may use this occasion to reconsider the access restrictions on the document, to avoid having to respond to these requests. If you’d like to ask the repository administrators to remove these restrictions, please check the box below.", + + // "grant-deny-request-copy.email.permissions.label": "Change to open access", + // TODO New key - Add a translation + "grant-deny-request-copy.email.permissions.label": "Ändra till öppen tillgång", + + // "grant-deny-request-copy.email.send": "Send", + // TODO New key - Add a translation + "grant-deny-request-copy.email.send": "Skicka", + + // "grant-deny-request-copy.email.subject": "Subject", + // TODO New key - Add a translation + "grant-deny-request-copy.email.subject": "Ämne", + + // "grant-deny-request-copy.email.subject.empty": "Please enter a subject", + // TODO New key - Add a translation + "grant-deny-request-copy.email.subject.empty": "Ange ett ämne", + + // "grant-deny-request-copy.grant": "Send copy", + // TODO New key - Add a translation + "grant-deny-request-copy.grant": "Skicka kopia", + + // "grant-deny-request-copy.header": "Document copy request", + // TODO New key - Add a translation + "grant-deny-request-copy.header": "Begäran om kopia", + + // "grant-deny-request-copy.home-page": "Take me to the home page", + // TODO New key - Add a translation + "grant-deny-request-copy.home-page": "Till startsidan", + + // "grant-deny-request-copy.intro1": "If you are one of the Författare of the document {{ name }}, then please use one of the options below to respond to the user's request.", + // TODO New key - Add a translation + "grant-deny-request-copy.intro1": "Om du är en av författarna av {{ name }}, välj svar på användarens förfrågan nedan.", + + // "grant-deny-request-copy.intro2": "After choosing an option, you will be presented with a suggested email reply which you may edit.", + // TODO New key - Add a translation + "grant-deny-request-copy.intro2": "När du har gjort ditt val kommer du att se det mejl som skall skickas till användaren. Du kan redigera innehållet i detta.", + + // "grant-deny-request-copy.processed": "This request has already been processed. You can use the button below to get back to the home page.", + // TODO New key - Add a translation + "grant-deny-request-copy.processed": "Denna begäran har redan behandlats. Använd knappen nedan för att komma till startsidan.", + + + + // "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 }}>", + // TODO New key - Add a translation + "grant-request-copy.email.message": "Hej {{ recipientName }},\nDet dokument du har begärt, och som jag är författare till, bifogas i detta mejl: \"{{ itemUrl }}\" ({{ itemName }}).\n\nMed vänliga hälsningar,\n{{ authorName }} <{{ authorEmail }}>", + + // "grant-request-copy.email.subject": "Request copy of document", + // TODO New key - Add a translation + "grant-request-copy.email.subject": "Begär kopia av dokument", + + // "grant-request-copy.error": "An error occurred", + // TODO New key - Add a translation + "grant-request-copy.error": "Ett fel uppstod", + + // "grant-request-copy.header": "Grant document copy request", + // TODO New key - Add a translation + "grant-request-copy.header": "Bevilja begäran av kopia", + + // "grant-request-copy.intro": "This message will be sent to the applicant of the request. The requested document(s) will be attached.", + // TODO New key - Add a translation + "grant-request-copy.intro": "Detta meddelande kommer att skickas till personen som begärt detta. Filer kommer att bifogas.", + + // "grant-request-copy.success": "Successfully granted item request", + // TODO New key - Add a translation + "grant-request-copy.success": "Begäran beviljades.", + + + + // "home.description": "", + // TODO New key - Add a translation + "home.description": "Till startsidan", + + // "home.breadcrumbs": "Home", + // TODO New key - Add a translation + "home.breadcrumbs": "Hem", + + // "home.search-form.placeholder": "Search the repository ...", + // TODO New key - Add a translation + "home.search-form.placeholder": "Sök i arkivet ...", + + // "home.title": "Home", + // TODO New key - Add a translation + "home.title": "Hem", + + // "home.top-level-communities.head": "Enheter i ODR", + // TODO New key - Add a translation + "home.top-level-communities.head": "Enheter i DSpace", + + // "home.top-level-communities.help": "Select a community to browse its collections.", + // TODO New key - Add a translation + "home.top-level-communities.help": "Välj en enhet för att se alla samlingar.", + + + + // "info.end-user-agreement.accept": "I have read and I agree to the End User Agreement", + // TODO New key - Add a translation + "info.end-user-agreement.accept": "Jag har läst och förstått villkoren i användaravtalet", + + // "info.end-user-agreement.accept.error": "An error occurred accepting the End User Agreement", + // TODO New key - Add a translation + "info.end-user-agreement.accept.error": "Ett fel uppstod när användaravtalet godkändes", + + // "info.end-user-agreement.accept.success": "Successfully updated the End User Agreement", + // TODO New key - Add a translation + "info.end-user-agreement.accept.success": "Användaravtalet har uppdaterats", + + // "info.end-user-agreement.breadcrumbs": "End User Agreement", + // TODO New key - Add a translation + "info.end-user-agreement.breadcrumbs": "Användaravtal", + + // "info.end-user-agreement.buttons.cancel": "Cancel", + // TODO New key - Add a translation + "info.end-user-agreement.buttons.cancel": "Avbryt", + + // "info.end-user-agreement.buttons.save": "Save", + // TODO New key - Add a translation + "info.end-user-agreement.buttons.save": "Spara", + + // "info.end-user-agreement.head": "End User Agreement", + // TODO New key - Add a translation + "info.end-user-agreement.head": "Användaravtal", + + // "info.end-user-agreement.title": "End User Agreement", + // TODO New key - Add a translation + "info.end-user-agreement.title": "Användaravtal", + + // "info.privacy.breadcrumbs": "Privacy Statement", + // TODO New key - Add a translation + "info.privacy.breadcrumbs": "Integritetspolicy", + + // "info.privacy.head": "Privacy Statement", + // TODO New key - Add a translation + "info.privacy.head": "Integritetspolicy", + + // "info.privacy.title": "Privacy Statement", + // TODO New key - Add a translation + "info.privacy.title": "Integritetspolicy", + + // "info.feedback.breadcrumbs": "Feedback", + // TODO New key - Add a translation + "info.feedback.breadcrumbs": "Feedback", + + // "info.feedback.head": "Feedback", + // TODO New key - Add a translation + "info.feedback.head": "Feedback", + + // "info.feedback.title": "Feedback", + // TODO New key - Add a translation + "info.feedback.title": "Feedback", + + // "info.feedback.info": "Thanks for sharing your feedback about the DSpace system. Your comments are appreciated!", + // TODO New key - Add a translation + "info.feedback.info": "Tack för att du lämnar dina synpunkter på tjänsten. Dina åsikter betyder mycket för oss!", + + // "info.feedback.email_help": "This address will be used to follow up on your feedback.", + // TODO New key - Add a translation + "info.feedback.email_help": "Denna adress kommer att användas för att återkoppla till dig.", + + // "info.feedback.send": "Send Feedback", + // TODO New key - Add a translation + "info.feedback.send": "Skicka feedback", + + // "info.feedback.comments": "Comments", + // TODO New key - Add a translation + "info.feedback.comments": "Kommentarer", + + // "info.feedback.email-label": "Your Email", + // TODO New key - Add a translation + "info.feedback.email-label": "Din e-postadress", + + // "info.feedback.create.success" : "Feedback Sent Successfully!", + // TODO New key - Add a translation + "info.feedback.create.success" : "Feedback har skickats!", + + // "info.feedback.error.email.required" : "A valid email address is required", + // TODO New key - Add a translation + "info.feedback.error.email.required" : "Du måste ange en giltig e-postadress", + + // "info.feedback.error.message.required" : "A comment is required", + // TODO New key - Add a translation + "info.feedback.error.message.required" : "Du måste skriva en kommentar", + + // "info.feedback.page-label" : "Page", + // TODO New key - Add a translation + "info.feedback.page-label" : "Sida", + + // "info.feedback.page_help" : "Tha page related to your feedback", + // TODO New key - Add a translation + "info.feedback.page_help" : "Den är sidan är relaterad till din feedback", + + + + // "item.alerts.private": "This item is non-discoverable", + // TODO New key - Add a translation + "item.alerts.private": "Denna post är dold vid sökning", + + // "item.alerts.withdrawn": "This item has been withdrawn", + // TODO New key - Add a translation + "item.alerts.withdrawn": "Denna post har återkallats", + + + + // "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.", + // TODO New key - Add a translation + "item.edit.authorizations.heading": "Här kan du se och ändra de villkor som gäller för en post och dess ingående komponenter: buntar (bundles) och filer. En post är en container som innehåller en eller flera buntar (bundles), som i sin tur är en container med en eller flera filer. Buntar har behörigheter för att LÄGGA TILL/RADERA/LÄSA/SKRIVA, medan filer bara har behörigheter för att LÄSA och SKRIVA.", + + // "item.edit.authorizations.title": "Edit item's Policies", + // TODO New key - Add a translation + "item.edit.authorizations.title": "Redigera behörigheter för post", + + + + // "item.badge.private": "Non-discoverable", + // TODO New key - Add a translation + "item.badge.private": "Dold vid sökning", + + // "item.badge.withdrawn": "Withdrawn", + // TODO New key - Add a translation + "item.badge.withdrawn": "Återkallad", + + + + // "item.bitstreams.upload.bundle": "Bundle", + // TODO New key - Add a translation + "item.bitstreams.upload.bundle": "Bunt", + + // "item.bitstreams.upload.bundle.placeholder": "Select a bundle", + // TODO New key - Add a translation + "item.bitstreams.upload.bundle.placeholder": "Välj en bunt", + + // "item.bitstreams.upload.bundle.new": "Create bundle", + // TODO New key - Add a translation + "item.bitstreams.upload.bundle.new": "Skapa bunt", + + // "item.bitstreams.upload.bundles.empty": "This item doesn\'t contain any bundles to upload a bitstream to.", + // TODO New key - Add a translation + "item.bitstreams.upload.bundles.empty": "Denna post innehåller inga buntar som man kan ladda upp filer i.", + + // "item.bitstreams.upload.cancel": "Cancel", + // TODO New key - Add a translation + "item.bitstreams.upload.cancel": "Avbryt", + + // "item.bitstreams.upload.drop-message": "Drop a file to upload", + // TODO New key - Add a translation + "item.bitstreams.upload.drop-message": "Dra och släpp en fil här för att ladda upp", + + // "item.bitstreams.upload.item": "Item: ", + // TODO New key - Add a translation + "item.bitstreams.upload.item": "Post: ", + + // "item.bitstreams.upload.notifications.bundle.created.content": "Successfully created new bundle.", + // TODO New key - Add a translation + "item.bitstreams.upload.notifications.bundle.created.content": "En ny bunt har skapats.", + + // "item.bitstreams.upload.notifications.bundle.created.title": "Created bundle", + // TODO New key - Add a translation + "item.bitstreams.upload.notifications.bundle.created.title": "Skapad bunt", + + // "item.bitstreams.upload.notifications.upload.failed": "Upload failed. Please verify the content before retrying.", + // TODO New key - Add a translation + "item.bitstreams.upload.notifications.upload.failed": "Uppladdningen misslyckades. Kontrollera filen och försök igen.", + + // "item.bitstreams.upload.title": "Upload bitstream", + // TODO New key - Add a translation + "item.bitstreams.upload.title": "Ladda upp fil", + + + + // "item.edit.bitstreams.bundle.edit.buttons.upload": "Upload", + // TODO New key - Add a translation + "item.edit.bitstreams.bundle.edit.buttons.upload": "Ladda upp", + + // "item.edit.bitstreams.bundle.displaying": "Currently displaying {{ amount }} bitstreams of {{ total }}.", + // TODO New key - Add a translation + "item.edit.bitstreams.bundle.displaying": "Visar {{ amount }} av {{ total }} filer.", + + // "item.edit.bitstreams.bundle.load.all": "Load all ({{ total }})", + // TODO New key - Add a translation + "item.edit.bitstreams.bundle.load.all": "Ladda alla ({{ total }})", + + // "item.edit.bitstreams.bundle.load.more": "Load more", + // TODO New key - Add a translation + "item.edit.bitstreams.bundle.load.more": "Ladda fler", + + // "item.edit.bitstreams.bundle.name": "BUNDLE: {{ name }}", + // TODO New key - Add a translation + "item.edit.bitstreams.bundle.name": "BUNT: {{ name }}", + + // "item.edit.bitstreams.discard-button": "Discard", + // TODO New key - Add a translation + "item.edit.bitstreams.discard-button": "Förkasta", + + // "item.edit.bitstreams.edit.buttons.download": "Download", + // TODO New key - Add a translation + "item.edit.bitstreams.edit.buttons.download": "Ladda ner", + + // "item.edit.bitstreams.edit.buttons.drag": "Drag", + // TODO New key - Add a translation + "item.edit.bitstreams.edit.buttons.drag": "Dra", + + // "item.edit.bitstreams.edit.buttons.edit": "Edit", + // TODO New key - Add a translation + "item.edit.bitstreams.edit.buttons.edit": "Redigera", + + // "item.edit.bitstreams.edit.buttons.remove": "Remove", + // TODO New key - Add a translation + "item.edit.bitstreams.edit.buttons.remove": "Radera", + + // "item.edit.bitstreams.edit.buttons.undo": "Undo changes", + // TODO New key - Add a translation + "item.edit.bitstreams.edit.buttons.undo": "Ångra ändringar", + + // "item.edit.bitstreams.empty": "This item doesn't contain any bitstreams. Click the upload button to create one.", + // TODO New key - Add a translation + "item.edit.bitstreams.empty": "Posten innehåller inga filer. Välj ladda upp.", + + // "item.edit.bitstreams.headers.actions": "Actions", + // TODO New key - Add a translation + "item.edit.bitstreams.headers.actions": "Händelser", + + // "item.edit.bitstreams.headers.bundle": "Bundle", + // TODO New key - Add a translation + "item.edit.bitstreams.headers.bundle": "Bunt", + + // "item.edit.bitstreams.headers.description": "Beskrivning", + // TODO New key - Add a translation + "item.edit.bitstreams.headers.description": "Beskrivning", + + // "item.edit.bitstreams.headers.format": "Format", + // TODO New key - Add a translation + "item.edit.bitstreams.headers.format": "Format", + + // "item.edit.bitstreams.headers.name": "Name", + // TODO New key - Add a translation + "item.edit.bitstreams.headers.name": "Namn", + + // "item.edit.bitstreams.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", + // TODO New key - Add a translation + "item.edit.bitstreams.notifications.discarded.content": "Dina ändringar förkastades. Klicka på 'Ångra' för att göra om", + + // "item.edit.bitstreams.notifications.discarded.title": "Changes discarded", + // TODO New key - Add a translation + "item.edit.bitstreams.notifications.discarded.title": "Ändringarna förkastades", + + // "item.edit.bitstreams.notifications.move.failed.title": "Error moving bitstreams", + // TODO New key - Add a translation + "item.edit.bitstreams.notifications.move.failed.title": "Ett fel uppstod när fil skulle flyttas", + + // "item.edit.bitstreams.notifications.move.saved.content": "Your move changes to this item's bitstreams and bundles have been saved.", + // TODO New key - Add a translation + "item.edit.bitstreams.notifications.move.saved.content": "Ändringarna har sparats.", + + // "item.edit.bitstreams.notifications.move.saved.title": "Move changes saved", + // TODO New key - Add a translation + "item.edit.bitstreams.notifications.move.saved.title": "Ändringarna har sparats", + + // "item.edit.bitstreams.notifications.outdated.content": "The item you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", + // TODO New key - Add a translation + "item.edit.bitstreams.notifications.outdated.content": "Den aktuella posten har ändrats av en annan användare. Dina ändringar har förkastats för att undvika konflikter", + + // "item.edit.bitstreams.notifications.outdated.title": "Changes outdated", + // TODO New key - Add a translation + "item.edit.bitstreams.notifications.outdated.title": "Ändringarna är föråldrade", + + // "item.edit.bitstreams.notifications.remove.failed.title": "Error deleting bitstream", + // TODO New key - Add a translation + "item.edit.bitstreams.notifications.remove.failed.title": "Ett fel uppstod när filen skulle raderas", + + // "item.edit.bitstreams.notifications.remove.saved.content": "Your removal changes to this item's bitstreams have been saved.", + // TODO New key - Add a translation + "item.edit.bitstreams.notifications.remove.saved.content": "Ändringarna har sparats.", + + // "item.edit.bitstreams.notifications.remove.saved.title": "Removal changes saved", + // TODO New key - Add a translation + "item.edit.bitstreams.notifications.remove.saved.title": "Ändringarna har sparats", + + // "item.edit.bitstreams.reinstate-button": "Undo", + // TODO New key - Add a translation + "item.edit.bitstreams.reinstate-button": "Ångra", + + // "item.edit.bitstreams.save-button": "Save", + // TODO New key - Add a translation + "item.edit.bitstreams.save-button": "Spara", + + // "item.edit.bitstreams.upload-button": "Upload", + // TODO New key - Add a translation + "item.edit.bitstreams.upload-button": "Ladda upp", + + + + // "item.edit.delete.cancel": "Cancel", + // TODO New key - Add a translation + "item.edit.delete.cancel": "Avbryt", + + // "item.edit.delete.confirm": "Delete", + // TODO New key - Add a translation + "item.edit.delete.confirm": "Radera", + + // "item.edit.delete.description": "Are you sure this item should be completely deleted? Caution: At present, no tombstone would be left.", + // TODO New key - Add a translation + "item.edit.delete.description": "Är du säker på att du vill radera denna post? Notera: Posten kommer att raderas helt från systemet, utan historik.", + + // "item.edit.delete.error": "An error occurred while deleting the item", + // TODO New key - Add a translation + "item.edit.delete.error": "Ett fel uppstod när posten skulle raderas", + + // "item.edit.delete.header": "Delete item: {{ id }}", + // TODO New key - Add a translation + "item.edit.delete.header": "Radera post: {{ id }}", + + // "item.edit.delete.success": "The item has been deleted", + // TODO New key - Add a translation + "item.edit.delete.success": "Posten har raderats", + + // "item.edit.head": "Edit Item", + // TODO New key - Add a translation + "item.edit.head": "Redigera post", + + // "item.edit.breadcrumbs": "Edit Item", + // TODO New key - Add a translation + "item.edit.breadcrumbs": "Redigera post", + + // "item.edit.tabs.disabled.tooltip": "You're not authorized to access this tab", + // TODO New key - Add a translation + "item.edit.tabs.disabled.tooltip": "Du har inte behöriget att använda denna flik", + + + // "item.edit.tabs.mapper.head": "Collection Mapper", + // TODO New key - Add a translation + "item.edit.tabs.mapper.head": "Mappa samlingar", + + // "item.edit.tabs.item-mapper.title": "Item Edit - Collection Mapper", + // TODO New key - Add a translation + "item.edit.tabs.item-mapper.title": "Redigera post - mappa samlingar", + + // "item.edit.item-mapper.buttons.add": "Map item to selected collections", + // TODO New key - Add a translation + "item.edit.item-mapper.buttons.add": "Mappa post till denna samling", + + // "item.edit.item-mapper.buttons.remove": "Remove item's mapping for selected collections", + // TODO New key - Add a translation + "item.edit.item-mapper.buttons.remove": "Ta bort postens mappning till markerade samlingar", + + // "item.edit.item-mapper.cancel": "Cancel", + // TODO New key - Add a translation + "item.edit.item-mapper.cancel": "Avbryt", + + // "item.edit.item-mapper.description": "This is the item mapper tool that allows administrators to map this item to other collections. You can search for collections and map them, or browse the list of collections the item is currently mapped to.", + // TODO New key - Add a translation + "item.edit.item-mapper.description": "Detta är ett verktyg för att mappa poster till samlingar. Du kan söka efter samlingar eller bläddra i listan över samlingar som posten är mappad till nu.", + + // "item.edit.item-mapper.head": "Item Mapper - Map Item to Collections", + // TODO New key - Add a translation + "item.edit.item-mapper.head": "Mappa post till samling(ar)", + + // "item.edit.item-mapper.item": "Item: \"{{name}}\"", + // TODO New key - Add a translation + "item.edit.item-mapper.item": "Post: \"{{name}}\"", + + // "item.edit.item-mapper.no-search": "Please enter a query to search", + // TODO New key - Add a translation + "item.edit.item-mapper.no-search": "Ange en sökfråga", + + // "item.edit.item-mapper.notifications.add.error.content": "Errors occurred for mapping of item to {{amount}} collections.", + // TODO New key - Add a translation + "item.edit.item-mapper.notifications.add.error.content": "Ett fel uppstod när post skulle mappas till {{amount}} samling(ar).", + + // "item.edit.item-mapper.notifications.add.error.head": "Mapping errors", + // TODO New key - Add a translation + "item.edit.item-mapper.notifications.add.error.head": "Fel uppstod vid mappning", + + // "item.edit.item-mapper.notifications.add.success.content": "Successfully mapped item to {{amount}} collections.", + // TODO New key - Add a translation + "item.edit.item-mapper.notifications.add.success.content": "Posten har mappats till {{amount}} samling(ar)s.", + + // "item.edit.item-mapper.notifications.add.success.head": "Mapping completed", + // TODO New key - Add a translation + "item.edit.item-mapper.notifications.add.success.head": "Mappning har avslutats", + + // "item.edit.item-mapper.notifications.remove.error.content": "Errors occurred for the removal of the mapping to {{amount}} collections.", + // TODO New key - Add a translation + "item.edit.item-mapper.notifications.remove.error.content": "Det uppstod ett fel när posten skulle mappas till {{amount}} samling(ar).", + + // "item.edit.item-mapper.notifications.remove.error.head": "Removal of mapping errors", + // TODO New key - Add a translation + "item.edit.item-mapper.notifications.remove.error.head": "Ett fel uppstod när mappning skulle tas bort", + + // "item.edit.item-mapper.notifications.remove.success.content": "Successfully removed mapping of item to {{amount}} collections.", + // TODO New key - Add a translation + "item.edit.item-mapper.notifications.remove.success.content": "Mappning till {{amount}} samling(ar) har tagits bort.", + + // "item.edit.item-mapper.notifications.remove.success.head": "Removal of mapping completed", + // TODO New key - Add a translation + "item.edit.item-mapper.notifications.remove.success.head": "Mappning borttagen", + + // "item.edit.item-mapper.search-form.placeholder": "Search collections...", + // TODO New key - Add a translation + "item.edit.item-mapper.search-form.placeholder": "Sök samlingar...", + + // "item.edit.item-mapper.tabs.browse": "Browse mapped collections", + // TODO New key - Add a translation + "item.edit.item-mapper.tabs.browse": "Bläddra bland mappade samlingar", + + // "item.edit.item-mapper.tabs.map": "Map new collections", + // TODO New key - Add a translation + "item.edit.item-mapper.tabs.map": "Mappa en ny samling", + + + + // "item.edit.metadata.add-button": "Add", + // TODO New key - Add a translation + "item.edit.metadata.add-button": "Lägg till", + + // "item.edit.metadata.discard-button": "Discard", + // TODO New key - Add a translation + "item.edit.metadata.discard-button": "Avbryt", + + // "item.edit.metadata.edit.buttons.edit": "Edit", + // TODO New key - Add a translation + "item.edit.metadata.edit.buttons.edit": "Radera", + + // "item.edit.metadata.edit.buttons.remove": "Remove", + // TODO New key - Add a translation + "item.edit.metadata.edit.buttons.remove": "Ta bort", + + // "item.edit.metadata.edit.buttons.undo": "Undo changes", + // TODO New key - Add a translation + "item.edit.metadata.edit.buttons.undo": "Ängra ändringar", + + // "item.edit.metadata.edit.buttons.unedit": "Stop editing", + // TODO New key - Add a translation + "item.edit.metadata.edit.buttons.unedit": "Avbryt redigering", + + // "item.edit.metadata.empty": "The item currently doesn't contain any metadata. Click Add to start adding a metadata value.", + // TODO New key - Add a translation + "item.edit.metadata.empty": "Denna post innehåller inga metadata. Klicka på Lägg till.", + + // "item.edit.metadata.headers.edit": "Edit", + // TODO New key - Add a translation + "item.edit.metadata.headers.edit": "Redigera", + + // "item.edit.metadata.headers.field": "Field", + // TODO New key - Add a translation + "item.edit.metadata.headers.field": "Fält", + + // "item.edit.metadata.headers.language": "Lang", + // TODO New key - Add a translation + "item.edit.metadata.headers.language": "Språk", + + // "item.edit.metadata.headers.value": "Value", + // TODO New key - Add a translation + "item.edit.metadata.headers.value": "Värde", + + // "item.edit.metadata.metadatafield.invalid": "Please choose a valid metadata field", + // TODO New key - Add a translation + "item.edit.metadata.metadatafield.invalid": "Välj ett giltigt metadatafält", + + // "item.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", + // TODO New key - Add a translation + "item.edit.metadata.notifications.discarded.content": "Dina ändringar förkastades. För att återställa, klicka på 'Ångra'", + + // "item.edit.metadata.notifications.discarded.title": "Changed discarded", + // TODO New key - Add a translation + "item.edit.metadata.notifications.discarded.title": "Ändringar förkastade", + + // "item.edit.metadata.notifications.error.title": "An error occurred", + // TODO New key - Add a translation + "item.edit.metadata.notifications.error.title": "Ett fel har uppstått", + + // "item.edit.metadata.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", + // TODO New key - Add a translation + "item.edit.metadata.notifications.invalid.content": "Dina ändringar sparades inte. Kontrollera att alla fält innehåller giltiga värden.", + + // "item.edit.metadata.notifications.invalid.title": "Metadata invalid", + // TODO New key - Add a translation + "item.edit.metadata.notifications.invalid.title": "Ogiltiga metadata", + + // "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", + // TODO New key - Add a translation + "item.edit.metadata.notifications.outdated.content": "Posten har ändrats av en annan användare. Dina ändringar har inte sparats", + + // "item.edit.metadata.notifications.outdated.title": "Changed outdated", + // TODO New key - Add a translation + "item.edit.metadata.notifications.outdated.title": "Ändring är föräldrad", + + // "item.edit.metadata.notifications.saved.content": "Your changes to this item's metadata were saved.", + // TODO New key - Add a translation + "item.edit.metadata.notifications.saved.content": "Dina ändringar har sparats.", + + // "item.edit.metadata.notifications.saved.title": "Metadata saved", + // TODO New key - Add a translation + "item.edit.metadata.notifications.saved.title": "Metadata har sparats", + + // "item.edit.metadata.reinstate-button": "Undo", + // TODO New key - Add a translation + "item.edit.metadata.reinstate-button": "Ångra", + + // "item.edit.metadata.save-button": "Save", + // TODO New key - Add a translation + "item.edit.metadata.save-button": "Spara", + + + + // "item.edit.modify.overview.field": "Field", + // TODO New key - Add a translation + "item.edit.modify.overview.field": "Fält", + + // "item.edit.modify.overview.language": "Språk", + // TODO New key - Add a translation + "item.edit.modify.overview.language": "Språk", + + // "item.edit.modify.overview.value": "Value", + // TODO New key - Add a translation + "item.edit.modify.overview.value": "Värde", + + + + // "item.edit.move.cancel": "Back", + // TODO New key - Add a translation + "item.edit.move.cancel": "Tillbaka", + + // "item.edit.move.save-button": "Save", + // TODO New key - Add a translation + "item.edit.move.save-button": "Spara", + + // "item.edit.move.discard-button": "Discard", + // TODO New key - Add a translation + "item.edit.move.discard-button": "Ta bort", + + // "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.", + // TODO New key - Add a translation + "item.edit.move.description": "Välj samling som du vill flytta denna post till. Du kan söka efter samling(ar) i fältet nedan.", + + // "item.edit.move.error": "An error occurred when attempting to move the item", + // TODO New key - Add a translation + "item.edit.move.error": "Ett fel uppstod när posten skulle flyttas", + + // "item.edit.move.head": "Move item: {{id}}", + // TODO New key - Add a translation + "item.edit.move.head": "Flytta post: {{id}}", + + // "item.edit.move.inheritpolicies.checkbox": "Inherit policies", + // TODO New key - Add a translation + "item.edit.move.inheritpolicies.checkbox": "Ärv policies", + + // "item.edit.move.inheritpolicies.description": "Inherit the default policies of the destination collection", + // TODO New key - Add a translation + "item.edit.move.inheritpolicies.description": "Använd samma policies som i den mottagande samlingen", + + // "item.edit.move.move": "Move", + // TODO New key - Add a translation + "item.edit.move.move": "Flytta", + + // "item.edit.move.processing": "Moving...", + // TODO New key - Add a translation + "item.edit.move.processing": "Flyttar...", + + // "item.edit.move.search.placeholder": "Enter a search query to look for collections", + // TODO New key - Add a translation + "item.edit.move.search.placeholder": "Ange sökord för att söka efter samling", + + // "item.edit.move.success": "The item has been moved successfully", + // TODO New key - Add a translation + "item.edit.move.success": "Posten har flyttats", + + // "item.edit.move.title": "Move item", + // TODO New key - Add a translation + "item.edit.move.title": "Flytta post", + + + + // "item.edit.private.cancel": "Cancel", + // TODO New key - Add a translation + "item.edit.private.cancel": "Avbryt", + + // "item.edit.private.confirm": "Make it non-discoverable", + // TODO New key - Add a translation + "item.edit.private.confirm": "Gör posten ej sökbar", + + // "item.edit.private.description": "Are you sure this item should be made non-discoverable in the archive?", + // TODO New key - Add a translation + "item.edit.private.description": "Är du säker på att posten inte skall vara sökbar i arkivet?", + + // "item.edit.private.error": "An error occurred while making the item non-discoverable", + // TODO New key - Add a translation + "item.edit.private.error": "Ett fel uppstod", + + // "item.edit.private.header": "Make item non-discoverable: {{ id }}", + // TODO New key - Add a translation + "item.edit.private.header": "Gör denna post ej sökbar: {{ id }}", + + // "item.edit.private.success": "The item is now non-discoverable", + // TODO New key - Add a translation + "item.edit.private.success": "Denna post är nu inte längre sökbar", + + + + // "item.edit.public.cancel": "Cancel", + // TODO New key - Add a translation + "item.edit.public.cancel": "Avbryt", + + // "item.edit.public.confirm": "Make it discoverable", + // TODO New key - Add a translation + "item.edit.public.confirm": "Gör denna sökbar", + + // "item.edit.public.description": "Are you sure this item should be made discoverable in the archive?", + // TODO New key - Add a translation + "item.edit.public.description": "Är du säker på att denna post skall vara sökbar i arkivet?", + + // "item.edit.public.error": "An error occurred while making the item discoverable", + // TODO New key - Add a translation + "item.edit.public.error": "Ett fel uppstod", + + // "item.edit.public.header": "Make item discoverable: {{ id }}", + // TODO New key - Add a translation + "item.edit.public.header": "Gör post sökbar: {{ id }}", + + // "item.edit.public.success": "The item is now discoverable", + // TODO New key - Add a translation + "item.edit.public.success": "Posten är nu sökbar", + + + + // "item.edit.reinstate.cancel": "Cancel", + // TODO New key - Add a translation + "item.edit.reinstate.cancel": "Avbryt", + + // "item.edit.reinstate.confirm": "Reinstate", + // TODO New key - Add a translation + "item.edit.reinstate.confirm": "Återställ", + + // "item.edit.reinstate.description": "Are you sure this item should be reinstated to the archive?", + // TODO New key - Add a translation + "item.edit.reinstate.description": "Är du säker på att denna post skall återställas?", + + // "item.edit.reinstate.error": "An error occurred while reinstating the item", + // TODO New key - Add a translation + "item.edit.reinstate.error": "Ett fel uppstod", + + // "item.edit.reinstate.header": "Reinstate item: {{ id }}", + // TODO New key - Add a translation + "item.edit.reinstate.header": "Återställ post: {{ id }}", + + // "item.edit.reinstate.success": "The item was reinstated successfully", + // TODO New key - Add a translation + "item.edit.reinstate.success": "Posten har nu återställts", + + + + + // "item.edit.relationships.discard-button": "Discard", + // TODO New key - Add a translation + "item.edit.relationships.discard-button": "Kasta bort", + + // "item.edit.relationships.edit.buttons.add": "Add", + // TODO New key - Add a translation + "item.edit.relationships.edit.buttons.add": "Lägg till", + + // "item.edit.relationships.edit.buttons.remove": "Remove", + // TODO New key - Add a translation + "item.edit.relationships.edit.buttons.remove": "Ta bort", + + // "item.edit.relationships.edit.buttons.undo": "Undo changes", + // TODO New key - Add a translation + "item.edit.relationships.edit.buttons.undo": "Ångra ändringar", + + // "item.edit.relationships.no-relationships": "No relationships", + // TODO New key - Add a translation + "item.edit.relationships.no-relationships": "Relationer saknas", + + // "item.edit.relationships.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", + // TODO New key - Add a translation + "item.edit.relationships.notifications.discarded.content": "Dina ändringar sparades inte. Klicka på 'Ångra' för att göra om", + + // "item.edit.relationships.notifications.discarded.title": "Changes discarded", + // TODO New key - Add a translation + "item.edit.relationships.notifications.discarded.title": "Ändringarna sparades inte", + + // "item.edit.relationships.notifications.failed.title": "Error editing relationships", + // TODO New key - Add a translation + "item.edit.relationships.notifications.failed.title": "Ett fel uppstod när relationer redigerades", + + // "item.edit.relationships.notifications.outdated.content": "The item you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", + // TODO New key - Add a translation + "item.edit.relationships.notifications.outdated.content": "Denna post har nyligen ändrats av en annan användare. Dina ändringar har inte sparats, för att undvika konflikterer", + + // "item.edit.relationships.notifications.outdated.title": "Changes outdated", + // TODO New key - Add a translation + "item.edit.relationships.notifications.outdated.title": "Ändringarna är föråldrade", + + // "item.edit.relationships.notifications.saved.content": "Your changes to this item's relationships were saved.", + // TODO New key - Add a translation + "item.edit.relationships.notifications.saved.content": "Ändringarna har sparats.", + + // "item.edit.relationships.notifications.saved.title": "Relationships saved", + // TODO New key - Add a translation + "item.edit.relationships.notifications.saved.title": "Relationerna har sparats", + + // "item.edit.relationships.reinstate-button": "Undo", + // TODO New key - Add a translation + "item.edit.relationships.reinstate-button": "Ångra", + + // "item.edit.relationships.save-button": "Save", + // TODO New key - Add a translation + "item.edit.relationships.save-button": "Spara", + + // "item.edit.relationships.no-entity-type": "Add 'dspace.entity.type' metadata to enable relationships for this item", + // TODO New key - Add a translation + "item.edit.relationships.no-entity-type": "Lägg till 'dspace.entity.type' metadata för att möjliggöra relationer till denna post", + // "item.edit.return": "Back", + // TODO New key - Add a translation + "item.edit.return": "Tillbaka", + + + // "item.edit.tabs.bitstreams.head": "Bitstreams", + // TODO New key - Add a translation + "item.edit.tabs.bitstreams.head": "Filer", + + // "item.edit.tabs.bitstreams.title": "Item Edit - Bitstreams", + // TODO New key - Add a translation + "item.edit.tabs.bitstreams.title": "Redigera post - Filer", + + // "item.edit.tabs.curate.head": "Curate", + // TODO New key - Add a translation + "item.edit.tabs.curate.head": "Kurera", + + // "item.edit.tabs.curate.title": "Item Edit - Curate", + // TODO New key - Add a translation + "item.edit.tabs.curate.title": "Redigera post - Kurera", + + // "item.edit.tabs.metadata.head": "Metadata", + // TODO New key - Add a translation + "item.edit.tabs.metadata.head": "Metadata", + + // "item.edit.tabs.metadata.title": "Item Edit - Metadata", + // TODO New key - Add a translation + "item.edit.tabs.metadata.title": "Redigera post - Metadata", + + // "item.edit.tabs.relationships.head": "Relationships", + // TODO New key - Add a translation + "item.edit.tabs.relationships.head": "Relationer", + + // "item.edit.tabs.relationships.title": "Item Edit - Relationships", + // TODO New key - Add a translation + "item.edit.tabs.relationships.title": "Redigera post - Relationer", + + // "item.edit.tabs.status.buttons.authorizations.button": "Authorizations...", + // TODO New key - Add a translation + "item.edit.tabs.status.buttons.authorizations.button": "Behörigheter...", + + // "item.edit.tabs.status.buttons.authorizations.label": "Edit item's authorization policies", + // TODO New key - Add a translation + "item.edit.tabs.status.buttons.authorizations.label": "Redigera behörigheter för post", + + // "item.edit.tabs.status.buttons.delete.button": "Permanently delete", + // TODO New key - Add a translation + "item.edit.tabs.status.buttons.delete.button": "Radera permanent", + + // "item.edit.tabs.status.buttons.delete.label": "Completely expunge item", + // TODO New key - Add a translation + "item.edit.tabs.status.buttons.delete.label": "Radera fullständigt", + + // "item.edit.tabs.status.buttons.mappedCollections.button": "Mapped collections", + // TODO New key - Add a translation + "item.edit.tabs.status.buttons.mappedCollections.button": "Mappade samlingar", + + // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", + // TODO New key - Add a translation + "item.edit.tabs.status.buttons.mappedCollections.label": "Hantera mappade samlingar", + + // "item.edit.tabs.status.buttons.move.button": "Move...", + // TODO New key - Add a translation + "item.edit.tabs.status.buttons.move.button": "Flytta...", + + // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", + // TODO New key - Add a translation + "item.edit.tabs.status.buttons.move.label": "Flytta post till en annan samling", + + // "item.edit.tabs.status.buttons.private.button": "Make it non-discoverable...", + // TODO New key - Add a translation + "item.edit.tabs.status.buttons.private.button": "Exkludera posten från sökningar...", + + // "item.edit.tabs.status.buttons.private.label": "Make item non-discoverable", + // TODO New key - Add a translation + "item.edit.tabs.status.buttons.private.label": "Gör post ej sökbar", + + // "item.edit.tabs.status.buttons.public.button": "Make it discoverable...", + // TODO New key - Add a translation + "item.edit.tabs.status.buttons.public.button": "Gör posten sökbar...", + + // "item.edit.tabs.status.buttons.public.label": "Make item discoverable", + // TODO New key - Add a translation + "item.edit.tabs.status.buttons.public.label": "Gör posten sökbar", + + // "item.edit.tabs.status.buttons.reinstate.button": "Reinstate...", + // TODO New key - Add a translation + "item.edit.tabs.status.buttons.reinstate.button": "Återställ...", + + // "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", + // TODO New key - Add a translation + "item.edit.tabs.status.buttons.reinstate.label": "Återställ post i arkivet", + + // "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", + // TODO New key - Add a translation + "item.edit.tabs.status.buttons.unauthorized": "Du saknar behörighet att utföra detta", + + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", + // TODO New key - Add a translation + "item.edit.tabs.status.buttons.withdraw.button": "Återkalla...", + + // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", + // TODO New key - Add a translation + "item.edit.tabs.status.buttons.withdraw.label": "Återkalla post från arkivet", + + // "item.edit.tabs.status.description": "Welcome to the item management page. From here you can withdraw, reinstate, move or delete the item. You may also update or add new metadata / bitstreams on the other tabs.", + // TODO New key - Add a translation + "item.edit.tabs.status.description": "Detta är sidan för att hantera poster. Här kan du återkalla, återställa, flytta eller radera poster. Du kan också redigera postens metadata och/eller filer.", + + // "item.edit.tabs.status.head": "Status", + // TODO New key - Add a translation + "item.edit.tabs.status.head": "Status", + + // "item.edit.tabs.status.labels.handle": "Handle", + // TODO New key - Add a translation + "item.edit.tabs.status.labels.handle": "Handle", + + // "item.edit.tabs.status.labels.id": "Item Internal ID", + // TODO New key - Add a translation + "item.edit.tabs.status.labels.id": "Postens interna ID", + + // "item.edit.tabs.status.labels.itemPage": "Item Page", + // TODO New key - Add a translation + "item.edit.tabs.status.labels.itemPage": "Post", + + // "item.edit.tabs.status.labels.lastModified": "Last Modified", + // TODO New key - Add a translation + "item.edit.tabs.status.labels.lastModified": "Senast ändrad", + + // "item.edit.tabs.status.title": "Item Edit - Status", + // TODO New key - Add a translation + "item.edit.tabs.status.title": "Redigera post - Status", + + // "item.edit.tabs.versionhistory.head": "Version History", + // TODO New key - Add a translation + "item.edit.tabs.versionhistory.head": "Versionshistorik", + + // "item.edit.tabs.versionhistory.title": "Item Edit - Version History", + // TODO New key - Add a translation + "item.edit.tabs.versionhistory.title": "Redigera post - Versionshistorik", + + // "item.edit.tabs.versionhistory.under-construction": "Editing or adding new versions is not yet possible in this user interface.", + // TODO New key - Add a translation + "item.edit.tabs.versionhistory.under-construction": "Det är inte möjligt att redigera eller skapa nya versioner på denna sida.", + + // "item.edit.tabs.view.head": "View Item", + // TODO New key - Add a translation + "item.edit.tabs.view.head": "Visa post", + + // "item.edit.tabs.view.title": "Item Edit - View", + // TODO New key - Add a translation + "item.edit.tabs.view.title": "Redigera post - Visa", + + + + // "item.edit.withdraw.cancel": "Cancel", + // TODO New key - Add a translation + "item.edit.withdraw.cancel": "Avbryt", + + // "item.edit.withdraw.confirm": "Withdraw", + // TODO New key - Add a translation + "item.edit.withdraw.confirm": "Återkalla", + + // "item.edit.withdraw.description": "Are you sure this item should be withdrawn from the archive?", + // TODO New key - Add a translation + "item.edit.withdraw.description": "Är du säker på att du vill återkalla denna post från arkivet?", + + // "item.edit.withdraw.error": "An error occurred while withdrawing the item", + // TODO New key - Add a translation + "item.edit.withdraw.error": "Ett fel uppstod när posten skulle återkallas", + + // "item.edit.withdraw.header": "Withdraw item: {{ id }}", + // TODO New key - Add a translation + "item.edit.withdraw.header": "Återkalla post: {{ id }}", + + // "item.edit.withdraw.success": "The item was withdrawn successfully", + // TODO New key - Add a translation + "item.edit.withdraw.success": "Posten har återkallats", + + + + // "item.listelement.badge": "Item", + // TODO New key - Add a translation + "item.listelement.badge": "Post", + + // "item.page.description": "Beskrivning", + // TODO New key - Add a translation + "item.page.description": "Beskrivning", + + // "item.page.journal-issn": "Journal ISSN", + // TODO New key - Add a translation + "item.page.journal-issn": "ISSN", + + // "item.page.journal-title": "Journal Title", + // TODO New key - Add a translation + "item.page.journal-title": "Tidskriftstitel", + + // "item.page.publisher": "Publisher", + // TODO New key - Add a translation + "item.page.publisher": "Utgivare", + + // "item.page.titleprefix": "Item: ", + // TODO New key - Add a translation + "item.page.titleprefix": "Post: ", + + // "item.page.volume-title": "Volume Title", + // TODO New key - Add a translation + "item.page.volume-title": "Volymtitel", + + // "item.search.results.head": "Item Search Results", + // TODO New key - Add a translation + "item.search.results.head": "Sökresultat", + + // "item.search.title": "Item Search", + // TODO New key - Add a translation + "item.search.title": "Sökresultat", + + + + // "item.page.abstract": "Abstract", + // TODO New key - Add a translation + "item.page.abstract": "Sammanfattning", + + // "item.page.author": "Författare", + // TODO New key - Add a translation + "item.page.author": "Författare", + + // "item.page.citation": "Citation", + // TODO New key - Add a translation + "item.page.citation": "Citation", + + // "item.page.collections": "Collections", + // TODO New key - Add a translation + "item.page.collections": "Samling", + + // "item.page.collections.loading": "Loading...", + // TODO New key - Add a translation + "item.page.collections.loading": "Laddar..", + + // "item.page.collections.load-more": "Load more", + // TODO New key - Add a translation + "item.page.collections.load-more": "Ladda fler", + + // "item.page.date": "Date", + // TODO New key - Add a translation + "item.page.date": "Publicerad", + + // "item.page.edit": "Edit this item", + // TODO New key - Add a translation + "item.page.edit": "Redigera denna post", + + // "item.page.files": "Files", + // TODO New key - Add a translation + "item.page.files": "Filer", + + // "item.page.filesection.description": "Beskrivning:", + // TODO New key - Add a translation + "item.page.filesection.description": "Beskrivning:", + + // "item.page.filesection.download": "Download", + // TODO New key - Add a translation + "item.page.filesection.download": "Ladda ner", + + // "item.page.filesection.format": "Format:", + // TODO New key - Add a translation + "item.page.filesection.format": "Format:", + + // "item.page.filesection.name": "Name:", + // TODO New key - Add a translation + "item.page.filesection.name": "Namn:", + + // "item.page.filesection.size": "Storlek:", + // TODO New key - Add a translation + "item.page.filesection.size": "Storlek:", + + // "item.page.journal.search.title": "Articles in this journal", + // TODO New key - Add a translation + "item.page.journal.search.title": "Artiklar i denna tidskrift", + + // "item.page.link.full": "Full item page", + // TODO New key - Add a translation + "item.page.link.full": "Visa fullständig post", + + // "item.page.link.simple": "Simple item page", + // TODO New key - Add a translation + "item.page.link.simple": "Visa enkel post", + + // "item.page.person.search.title": "Articles by this author", + // TODO New key - Add a translation + "item.page.person.search.title": "Artiklar av denna författare", + + // "item.page.related-items.view-more": "Show {{ amount }} more", + // TODO New key - Add a translation + "item.page.related-items.view-more": "Visa {{ amount }} fler", + + // "item.page.related-items.view-less": "Hide last {{ amount }}", + // TODO New key - Add a translation + "item.page.related-items.view-less": "Göm senaste {{ amount }}", + + // "item.page.relationships.isAuthorOfPublication": "Publications", + // TODO New key - Add a translation + "item.page.relationships.isAuthorOfPublication": "Publikationer", + + // "item.page.relationships.isJournalOfPublication": "Publications", + // TODO New key - Add a translation + "item.page.relationships.isJournalOfPublication": "Publikationer", + + // "item.page.relationships.isOrgUnitOfPerson": "Författare", + // TODO New key - Add a translation + "item.page.relationships.isOrgUnitOfPerson": "Författare", + + // "item.page.relationships.isOrgUnitOfProject": "Research Projects", + // TODO New key - Add a translation + "item.page.relationships.isOrgUnitOfProject": "Forskningsprojekt", + + // "item.page.subject": "Keywords", + // TODO New key - Add a translation + "item.page.subject": "Ämne/nyckelord", + + // "item.page.uri": "URI", + // TODO New key - Add a translation + "item.page.uri": "URI", + + // "item.page.bitstreams.view-more": "Show more", + // TODO New key - Add a translation + "item.page.bitstreams.view-more": "Visa mer", + + // "item.page.bitstreams.collapse": "Collapse", + // TODO New key - Add a translation + "item.page.bitstreams.collapse": "Fäll ihop", + + // "item.page.filesection.original.bundle" : "Original bundle", + // TODO New key - Add a translation + "item.page.filesection.original.bundle" : "Original bundle", + + // "item.page.filesection.license.bundle" : "License bundle", + // TODO New key - Add a translation + "item.page.filesection.license.bundle" : "License bundle", + + // "item.page.return": "Back", + // TODO New key - Add a translation + "item.page.return": "Tillbaka", + + // "item.page.version.create": "Create new version", + // TODO New key - Add a translation + "item.page.version.create": "Skapa ny version", + + // "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // TODO New key - Add a translation + "item.page.version.hasDraft": "Ny version kan inte skapas pga pågående uppladdning i versionshistoriken", + + // "item.preview.dc.identifier.uri": "Identifier:", + // TODO New key - Add a translation + "item.preview.dc.identifier.uri": "Identifierare:", + + // "item.preview.dc.contributor.author": "Författare:", + // TODO New key - Add a translation + "item.preview.dc.contributor.author": "Författare:", + + // "item.preview.dc.date.issued": "Published date:", + // TODO New key - Add a translation + "item.preview.dc.date.issued": "Publicerad:", + + // "item.preview.dc.description.abstract": "Abstract:", + // TODO New key - Add a translation + "item.preview.dc.description.abstract": "Sammanfattning:", + + // "item.preview.dc.identifier.other": "Other identifier:", + // TODO New key - Add a translation + "item.preview.dc.identifier.other": "Annan identifierare:", + + // "item.preview.dc.language.iso": "Språk:", + // TODO New key - Add a translation + "item.preview.dc.language.iso": "Språk:", + + // "item.preview.dc.subject": "Subjects:", + // TODO New key - Add a translation + "item.preview.dc.subject": "Ämnen:", + + // "item.preview.dc.title": "Title:", + // TODO New key - Add a translation + "item.preview.dc.title": "Titel:", + + // "item.preview.person.familyName": "Surname:", + // TODO New key - Add a translation + "item.preview.person.familyName": "Förnamn:", + + // "item.preview.person.givenName": "Name:", + // TODO New key - Add a translation + "item.preview.person.givenName": "Namn:", + + // "item.preview.person.identifier.orcid": "ORCID:", + // TODO New key - Add a translation + "item.preview.person.identifier.orcid": "ORCID:", + + // "item.preview.project.funder.name": "Funder:", + // TODO New key - Add a translation + "item.preview.project.funder.name": "Finansiär:", + + // "item.preview.project.funder.identifier": "Funder Identifier:", + // TODO New key - Add a translation + "item.preview.project.funder.identifier": "Finansiär ID:", + + // "item.preview.oaire.awardNumber": "Funding ID:", + // TODO New key - Add a translation + "item.preview.oaire.awardNumber": "Finansiering ID:", + + // "item.preview.dc.title.alternative": "Acronym:", + // TODO New key - Add a translation + "item.preview.dc.title.alternative": "Akronym:", + + // "item.preview.dc.coverage.spatial": "Jurisdiction:", + // TODO New key - Add a translation + "item.preview.dc.coverage.spatial": "Jurisdiktion:", + + // "item.preview.oaire.fundingStream": "Funding Stream:", + // TODO New key - Add a translation + "item.preview.oaire.fundingStream": "Funding Stream:", + + + + // "item.select.confirm": "Confirm selected", + // TODO New key - Add a translation + "item.select.confirm": "Bekräfta valda", + + // "item.select.empty": "No items to show", + // TODO New key - Add a translation + "item.select.empty": "Inga poster att visa. ", + + // "item.select.table.author": "Author", + // TODO New key - Add a translation + "item.select.table.author": "Författare", + + // "item.select.table.collection": "Collection", + // TODO New key - Add a translation + "item.select.table.collection": "Samling", + + // "item.select.table.title": "Title", + // TODO New key - Add a translation + "item.select.table.title": "Titel", + + + // "item.version.history.empty": "There are no other versions for this item yet.", + // TODO New key - Add a translation + "item.version.history.empty": "Det finns inga andra versioner av denna post.", + + // "item.version.history.head": "Version History", + // TODO New key - Add a translation + "item.version.history.head": "Versionshistorik", + + // "item.version.history.return": "Back", + // TODO New key - Add a translation + "item.version.history.return": "Tillbaka", + + // "item.version.history.selected": "Selected version", + // TODO New key - Add a translation + "item.version.history.selected": "Vald version", + + // "item.version.history.selected.alert": "You are currently viewing version {{version}} of the item.", + // TODO New key - Add a translation + "item.version.history.selected.alert": "Du tittat på version {{version}} av denna post.", + + // "item.version.history.table.version": "Version", + // TODO New key - Add a translation + "item.version.history.table.version": "Version", + + // "item.version.history.table.item": "Item", + // TODO New key - Add a translation + "item.version.history.table.item": "Post", + + // "item.version.history.table.editor": "Editor", + // TODO New key - Add a translation + "item.version.history.table.editor": "Redaktör", + + // "item.version.history.table.date": "Date", + // TODO New key - Add a translation + "item.version.history.table.date": "Datum", + + // "item.version.history.table.summary": "Summary", + // TODO New key - Add a translation + "item.version.history.table.summary": "Sammanfattning", + + // "item.version.history.table.workspaceItem": "Workspace item", + // TODO New key - Add a translation + "item.version.history.table.workspaceItem": "Workspace item", + + // "item.version.history.table.workflowItem": "Workflow item", + // TODO New key - Add a translation + "item.version.history.table.workflowItem": "Post i arbetsflöde", + + // "item.version.history.table.actions": "Action", + // TODO New key - Add a translation + "item.version.history.table.actions": "Åtgärd", + + // "item.version.history.table.action.editWorkspaceItem": "Edit workspace item", + // TODO New key - Add a translation + "item.version.history.table.action.editWorkspaceItem": "Redigera post", + + // "item.version.history.table.action.editSummary": "Edit summary", + // TODO New key - Add a translation + "item.version.history.table.action.editSummary": "Redigera sammanfattning", + + // "item.version.history.table.action.saveSummary": "Save summary edits", + // TODO New key - Add a translation + "item.version.history.table.action.saveSummary": "Spara ändringar", + + // "item.version.history.table.action.discardSummary": "Discard summary edits", + // TODO New key - Add a translation + "item.version.history.table.action.discardSummary": "Förkasta ändringar", + + // "item.version.history.table.action.newVersion": "Create new version from this one", + // TODO New key - Add a translation + "item.version.history.table.action.newVersion": "Skapa ny version av denna", + + // "item.version.history.table.action.deleteVersion": "Delete version", + // TODO New key - Add a translation + "item.version.history.table.action.deleteVersion": "Radera version", + + // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // TODO New key - Add a translation + "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + + + // "item.version.notice": "This is not the latest version of this item. The latest version can be found here.", + // TODO New key - Add a translation + "item.version.notice": "Detta är inte den senaste versionen. Senaste versionen finns här.", + + + // "item.version.create.modal.header": "New version", + // TODO New key - Add a translation + "item.version.create.modal.header": "Ny version", + + // "item.version.create.modal.text": "Create a new version for this item", + // TODO New key - Add a translation + "item.version.create.modal.text": "Skapa ny version av denna post", + + // "item.version.create.modal.text.startingFrom": "starting from version {{version}}", + // TODO New key - Add a translation + "item.version.create.modal.text.startingFrom": "med början från version {{version}}", + + // "item.version.create.modal.button.confirm": "Create", + // TODO New key - Add a translation + "item.version.create.modal.button.confirm": "Skapa", + + // "item.version.create.modal.button.confirm.tooltip": "Create new version", + // TODO New key - Add a translation + "item.version.create.modal.button.confirm.tooltip": "Skapa ny version", + + // "item.version.create.modal.button.cancel": "Cancel", + // TODO New key - Add a translation + "item.version.create.modal.button.cancel": "Avbryt", + + // "item.version.create.modal.button.cancel.tooltip": "Do not create new version", + // TODO New key - Add a translation + "item.version.create.modal.button.cancel.tooltip": "Skapa inte ny version", + + // "item.version.create.modal.form.summary.label": "Summary", + // TODO New key - Add a translation + "item.version.create.modal.form.summary.label": "Sammanfattning", + + // "item.version.create.modal.form.summary.placeholder": "Insert the summary for the new version", + // TODO New key - Add a translation + "item.version.create.modal.form.summary.placeholder": "Lägg till sammanfattning av den nya versionen", + + // "item.version.create.notification.success" : "New version has been created with version number {{version}}", + // TODO New key - Add a translation + "item.version.create.notification.success" : "En ny version med nummer {{version}} har skapats", + + // "item.version.create.notification.failure" : "New version has not been created", + // TODO New key - Add a translation + "item.version.create.notification.failure" : "Ny version har inte skapats", + + // "item.version.create.notification.inProgress" : "A new version cannot be created because there is an inprogress submission in the version history", + // TODO New key - Add a translation + "item.version.create.notification.inProgress" : "A new version cannot be created because there is an inprogress submission in the version history", + + + // "item.version.delete.modal.header": "Delete version", + // TODO New key - Add a translation + "item.version.delete.modal.header": "Radera version", + + // "item.version.delete.modal.text": "Do you want to delete version {{version}}?", + // TODO New key - Add a translation + "item.version.delete.modal.text": "Vill du radera version {{version}}?", + + // "item.version.delete.modal.button.confirm": "Delete", + // TODO New key - Add a translation + "item.version.delete.modal.button.confirm": "Radera", + + // "item.version.delete.modal.button.confirm.tooltip": "Delete this version", + // TODO New key - Add a translation + "item.version.delete.modal.button.confirm.tooltip": "Radera denna version", + + // "item.version.delete.modal.button.cancel": "Cancel", + // TODO New key - Add a translation + "item.version.delete.modal.button.cancel": "Avbryt", + + // "item.version.delete.modal.button.cancel.tooltip": "Do not delete this version", + // TODO New key - Add a translation + "item.version.delete.modal.button.cancel.tooltip": "Radera inte denna version", + + // "item.version.delete.notification.success" : "Version number {{version}} has been deleted", + // TODO New key - Add a translation + "item.version.delete.notification.success" : "Version {{version}} har raderats", + + // "item.version.delete.notification.failure" : "Version number {{version}} has not been deleted", + // TODO New key - Add a translation + "item.version.delete.notification.failure" : "Version {{version}} har inte raderats", + + + // "item.version.edit.notification.success" : "The summary of version number {{version}} has been changed", + // TODO New key - Add a translation + "item.version.edit.notification.success" : "Sammanfattningen av version {{version}} har ändrats", + + // "item.version.edit.notification.failure" : "The summary of version number {{version}} has not been changed", + // TODO New key - Add a translation + "item.version.edit.notification.failure" : "Sammanfattningen av version {{version}} har inte ändrats", + + + + // "journal.listelement.badge": "Journal", + // TODO New key - Add a translation + "journal.listelement.badge": "Tidskrift", + + // "journal.page.description": "Beskrivning", + // TODO New key - Add a translation + "journal.page.description": "Beskrivning", + + // "journal.page.edit": "Edit this item", + // TODO New key - Add a translation + "journal.page.edit": "Redigera denna", + + // "journal.page.editor": "Editor-in-Chief", + // TODO New key - Add a translation + "journal.page.editor": "Editor-in-Chief", + + // "journal.page.issn": "ISSN", + // TODO New key - Add a translation + "journal.page.issn": "ISSN", + + // "journal.page.publisher": "Publisher", + // TODO New key - Add a translation + "journal.page.publisher": "Utgivare", + + // "journal.page.titleprefix": "Journal: ", + // TODO New key - Add a translation + "journal.page.titleprefix": "Tidskrift: ", + + // "journal.search.results.head": "Journal Search Results", + // TODO New key - Add a translation + "journal.search.results.head": "Sökresultat", + + // "journal.search.title": "Journal Search", + // TODO New key - Add a translation + "journal.search.title": "Sök tidskrift", + + + + // "journalissue.listelement.badge": "Journal Issue", + // TODO New key - Add a translation + "journalissue.listelement.badge": "Journal Issue", + + // "journalissue.page.description": "Beskrivning", + // TODO New key - Add a translation + "journalissue.page.description": "Beskrivning", + + // "journalissue.page.edit": "Edit this item", + // TODO New key - Add a translation + "journalissue.page.edit": "Edit this item", + + // "journalissue.page.issuedate": "Issue Date", + // TODO New key - Add a translation + "journalissue.page.issuedate": "Issue Date", + + // "journalissue.page.journal-issn": "Journal ISSN", + // TODO New key - Add a translation + "journalissue.page.journal-issn": "Journal ISSN", + + // "journalissue.page.journal-title": "Journal Title", + // TODO New key - Add a translation + "journalissue.page.journal-title": "Journal Title", + + // "journalissue.page.keyword": "Keywords", + // TODO New key - Add a translation + "journalissue.page.keyword": "Ämne/nyckelord", + + // "journalissue.page.number": "Number", + // TODO New key - Add a translation + "journalissue.page.number": "Number", + + // "journalissue.page.titleprefix": "Journal Issue: ", + // TODO New key - Add a translation + "journalissue.page.titleprefix": "Journal Issue: ", + + + + // "journalvolume.listelement.badge": "Journal Volume", + // TODO New key - Add a translation + "journalvolume.listelement.badge": "Journal Volume", + + // "journalvolume.page.description": "Beskrivning", + // TODO New key - Add a translation + "journalvolume.page.description": "Beskrivning", + + // "journalvolume.page.edit": "Edit this item", + // TODO New key - Add a translation + "journalvolume.page.edit": "Edit this item", + + // "journalvolume.page.issuedate": "Issue Date", + // TODO New key - Add a translation + "journalvolume.page.issuedate": "Issue Date", + + // "journalvolume.page.titleprefix": "Journal Volume: ", + // TODO New key - Add a translation + "journalvolume.page.titleprefix": "Journal Volume: ", + + // "journalvolume.page.volume": "Volume", + // TODO New key - Add a translation + "journalvolume.page.volume": "Volume", + + + // "iiifsearchable.listelement.badge": "Document Media", + // TODO New key - Add a translation + "iiifsearchable.listelement.badge": "Document Media", + + // "iiifsearchable.page.titleprefix": "Document: ", + // TODO New key - Add a translation + "iiifsearchable.page.titleprefix": "Document: ", + + // "iiifsearchable.page.doi": "Permanent Link: ", + // TODO New key - Add a translation + "iiifsearchable.page.doi": "Permanent Link: ", + + // "iiifsearchable.page.issue": "Issue: ", + // TODO New key - Add a translation + "iiifsearchable.page.issue": "Issue: ", + + // "iiifsearchable.page.description": "Beskrivning: ", + // TODO New key - Add a translation + "iiifsearchable.page.description": "Beskrivning: ", + + // "iiifviewer.fullscreen.notice": "Use full screen for better viewing.", + // TODO New key - Add a translation + "iiifviewer.fullscreen.notice": "Use full screen for better viewing.", + + // "iiif.listelement.badge": "Image Media", + // TODO New key - Add a translation + "iiif.listelement.badge": "Image Media", + + // "iiif.page.titleprefix": "Image: ", + // TODO New key - Add a translation + "iiif.page.titleprefix": "Image: ", + + // "iiif.page.doi": "Permanent Link: ", + // TODO New key - Add a translation + "iiif.page.doi": "Permanent Link: ", + + // "iiif.page.issue": "Issue: ", + // TODO New key - Add a translation + "iiif.page.issue": "Issue: ", + + // "iiif.page.description": "Beskrivning: ", + // TODO New key - Add a translation + "iiif.page.description": "Beskrivning: ", + + + // "loading.bitstream": "Loading bitstream...", + // TODO New key - Add a translation + "loading.bitstream": "Hämtar fil...", + + // "loading.bitstreams": "Loading bitstreams...", + // TODO New key - Add a translation + "loading.bitstreams": "Hämtar filer...", + + // "loading.browse-by": "Loading items...", + // TODO New key - Add a translation + "loading.browse-by": "Hämtar poster...", + + // "loading.browse-by-page": "Loading page...", + // TODO New key - Add a translation + "loading.browse-by-page": "Hämtar sida...", + + // "loading.collection": "Loading collection...", + // TODO New key - Add a translation + "loading.collection": "Hämtar samling...", + + // "loading.collections": "Loading collections...", + // TODO New key - Add a translation + "loading.collections": "Hämtar samlingar..", + + // "loading.content-source": "Loading content source...", + // TODO New key - Add a translation + "loading.content-source": "Hämtar källa...", + + // "loading.community": "Loading community...", + // TODO New key - Add a translation + "loading.community": "Hämtar enhet...", + + // "loading.default": "Loading...", + // TODO New key - Add a translation + "loading.default": "Hämtar...", + + // "loading.item": "Loading item...", + // TODO New key - Add a translation + "loading.item": "Hämtar post...", + + // "loading.items": "Loading items...", + // TODO New key - Add a translation + "loading.items": "Hämtar poster...", + + // "loading.mydspace-results": "Loading items...", + // TODO New key - Add a translation + "loading.mydspace-results": "Hämtar poster...", + + // "loading.objects": "Loading...", + // TODO New key - Add a translation + "loading.objects": "Hämtar...", + + // "loading.recent-submissions": "Loading recent submissions...", + // TODO New key - Add a translation + "loading.recent-submissions": "Hämtar de senaste bidragen...", + + // "loading.search-results": "Loading search results...", + // TODO New key - Add a translation + "loading.search-results": "Hämtar sökresultat...", + + // "loading.sub-collections": "Loading sub-collections...", + // TODO New key - Add a translation + "loading.sub-collections": "Hämtar underavdelningar...", + + // "loading.sub-communities": "Loading sub-communities...", + // TODO New key - Add a translation + "loading.sub-communities": "Hämtar underenheter...", + + // "loading.top-level-communities": "Loading top-level communities...", + // TODO New key - Add a translation + "loading.top-level-communities": "Hämtar enheter på toppnivå...", + + + + // "login.form.email": "Email address", + // TODO New key - Add a translation + "login.form.email": "E-postadress", + + // "login.form.forgot-password": "Have you forgotten your password?", + // TODO New key - Add a translation + "login.form.forgot-password": "Har du glömt lösenordet?", + + // "login.form.header": "Please log in to DSpace", + // TODO New key - Add a translation + "login.form.header": "Logga in i ODR", + + // "login.form.new-user": "New user? Click here to register.", + // TODO New key - Add a translation + "login.form.new-user": "Ny användare? Klicka här för att skapa ett användarkonto.", + + // "login.form.or-divider": "or", + // TODO New key - Add a translation + "login.form.or-divider": "eller", + + // "login.form.oidc": "Log in with OIDC", + // TODO New key - Add a translation + "login.form.oidc": "Logga in med OIDC", + + // "login.form.password": "Password", + // TODO New key - Add a translation + "login.form.password": "Lösenord", + + // "login.form.shibboleth": "Log in with Shibboleth", + // TODO New key - Add a translation + "login.form.shibboleth": "Logga in med Shibboleth", + + // "login.form.submit": "Log in", + // TODO New key - Add a translation + "login.form.submit": "Logga in", + + // "login.title": "Login", + // TODO New key - Add a translation + "login.title": "Logga in", + + // "login.breadcrumbs": "Login", + // TODO New key - Add a translation + "login.breadcrumbs": "Logga in", + + + + // "logout.form.header": "Log out from DSpace", + // TODO New key - Add a translation + "logout.form.header": "Logga ut", + + // "logout.form.submit": "Log out", + // TODO New key - Add a translation + "logout.form.submit": "Logga ut", + + // "logout.title": "Logout", + // TODO New key - Add a translation + "logout.title": "Logga ut", + + + + // "menu.header.admin": "Management", + // TODO New key - Add a translation + "menu.header.admin": "Administration", + + // "menu.header.image.logo": "Repository logo", + // TODO New key - Add a translation + "menu.header.image.logo": "Logga för arkivet", + + // "menu.header.admin.description": "Management menu", + // TODO New key - Add a translation + "menu.header.admin.description": "Administration meny", + + + + // "menu.section.access_control": "Access Control", + // TODO New key - Add a translation + "menu.section.access_control": "Åtkomst", + + // "menu.section.access_control_authorizations": "Authorizations", + // TODO New key - Add a translation + "menu.section.access_control_authorizations": "Behörigheter", + + // "menu.section.access_control_groups": "Groups", + // TODO New key - Add a translation + "menu.section.access_control_groups": "Grupper", + + // "menu.section.access_control_people": "People", + // TODO New key - Add a translation + "menu.section.access_control_people": "EPersoner", + + + + // "menu.section.admin_search": "Admin Search", + // TODO New key - Add a translation + "menu.section.admin_search": "Admin sök", + + + + // "menu.section.browse_community": "This Community", + // TODO New key - Add a translation + "menu.section.browse_community": "Denna samling", + + // "menu.section.browse_community_by_author": "By Author", + // TODO New key - Add a translation + "menu.section.browse_community_by_author": "Författare", + + // "menu.section.browse_community_by_issue_date": "By Issue Date", + // TODO New key - Add a translation + "menu.section.browse_community_by_issue_date": "Utgivningsår", + + // "menu.section.browse_community_by_title": "By Title", + // TODO New key - Add a translation + "menu.section.browse_community_by_title": "Titel", + + // "menu.section.browse_global": "All of DSpace", + // TODO New key - Add a translation + "menu.section.browse_global": "Hela arkivet", + + // "menu.section.browse_global_by_author": "By Author", + // TODO New key - Add a translation + "menu.section.browse_global_by_author": "Författare", + + // "menu.section.browse_global_by_dateissued": "By Issue Date", + // TODO New key - Add a translation + "menu.section.browse_global_by_dateissued": "Utgivningsår", + + // "menu.section.browse_global_by_subject": "By Subject", + // TODO New key - Add a translation + "menu.section.browse_global_by_subject": "Ämne", + + // "menu.section.browse_global_by_title": "By Title", + // TODO New key - Add a translation + "menu.section.browse_global_by_title": "Titel", + + // "menu.section.browse_global_communities_and_collections": "Communities & Collections", + // TODO New key - Add a translation + "menu.section.browse_global_communities_and_collections": "Enheter och samlingar", + + + + // "menu.section.control_panel": "Control Panel", + // TODO New key - Add a translation + "menu.section.control_panel": "Kontrollpanel", + + // "menu.section.curation_task": "Curation Task", + // TODO New key - Add a translation + "menu.section.curation_task": "Kurationsuppgift", + + + + // "menu.section.edit": "Edit", + // TODO New key - Add a translation + "menu.section.edit": "Redigera", + + // "menu.section.edit_collection": "Collection", + // TODO New key - Add a translation + "menu.section.edit_collection": "Samling", + + // "menu.section.edit_community": "Community", + // TODO New key - Add a translation + "menu.section.edit_community": "Enhet", + + // "menu.section.edit_item": "Item", + // TODO New key - Add a translation + "menu.section.edit_item": "Post", + + + + // "menu.section.export": "Export", + // TODO New key - Add a translation + "menu.section.export": "Exportera", + + // "menu.section.export_collection": "Collection", + // TODO New key - Add a translation + "menu.section.export_collection": "Samling", + + // "menu.section.export_community": "Community", + // TODO New key - Add a translation + "menu.section.export_community": "Enhet", + + // "menu.section.export_item": "Item", + // TODO New key - Add a translation + "menu.section.export_item": "Post", + + // "menu.section.export_metadata": "Metadata", + // TODO New key - Add a translation + "menu.section.export_metadata": "Metadata", + + + + // "menu.section.icon.access_control": "Access Control menu section", + // TODO New key - Add a translation + "menu.section.icon.access_control": "Åtkomstkontroll - meny", + + // "menu.section.icon.admin_search": "Admin search menu section", + // TODO New key - Add a translation + "menu.section.icon.admin_search": "Admin sök - meny", + + // "menu.section.icon.control_panel": "Control Panel menu section", + // TODO New key - Add a translation + "menu.section.icon.control_panel": "Kontrollpanel - meny", + + // "menu.section.icon.curation_tasks": "Curation Task menu section", + // TODO New key - Add a translation + "menu.section.icon.curation_tasks": "Kureringsuppgift - meny", + + // "menu.section.icon.edit": "Edit menu section", + // TODO New key - Add a translation + "menu.section.icon.edit": "Redigera - meny", + + // "menu.section.icon.export": "Export menu section", + // TODO New key - Add a translation + "menu.section.icon.export": "Exportera - meny", + + // "menu.section.icon.find": "Find menu section", + // TODO New key - Add a translation + "menu.section.icon.find": "Sök - meny", + + // "menu.section.icon.import": "Import menu section", + // TODO New key - Add a translation + "menu.section.icon.import": "Importera - meny", + + // "menu.section.icon.new": "New menu section", + // TODO New key - Add a translation + "menu.section.icon.new": "Ny - meny", + + // "menu.section.icon.pin": "Pin sidebar", + // TODO New key - Add a translation + "menu.section.icon.pin": "Fäst sidomenyn", + + // "menu.section.icon.processes": "Processes menu section", + // TODO New key - Add a translation + "menu.section.icon.processes": "Processer - meny", + + // "menu.section.icon.registries": "Registries menu section", + // TODO New key - Add a translation + "menu.section.icon.registries": "Registries- meny", + + // "menu.section.icon.statistics_task": "Statistics Task menu section", + // TODO New key - Add a translation + "menu.section.icon.statistics_task": "Statistik - meny", + + // "menu.section.icon.workflow": "Administer workflow menu section", + // TODO New key - Add a translation + "menu.section.icon.workflow": "Administrera arbetsflöde - meny", + + // "menu.section.icon.unpin": "Unpin sidebar", + // TODO New key - Add a translation + "menu.section.icon.unpin": "Koppla loss sidomenyn", + + + + // "menu.section.import": "Import", + // TODO New key - Add a translation + "menu.section.import": "Importera", + + // "menu.section.import_batch": "Batch Import (ZIP)", + // TODO New key - Add a translation + "menu.section.import_batch": "Importera batch (ZIP)", + + // "menu.section.import_metadata": "Metadata", + // TODO New key - Add a translation + "menu.section.import_metadata": "Metadata", + + + + // "menu.section.new": "New", + // TODO New key - Add a translation + "menu.section.new": "Ny", + + // "menu.section.new_collection": "Collection", + // TODO New key - Add a translation + "menu.section.new_collection": "Samling", + + // "menu.section.new_community": "Community", + // TODO New key - Add a translation + "menu.section.new_community": "Enhet", + + // "menu.section.new_item": "Item", + // TODO New key - Add a translation + "menu.section.new_item": "Post", + + // "menu.section.new_item_version": "Item Version", + // TODO New key - Add a translation + "menu.section.new_item_version": "Post version", + + // "menu.section.new_process": "Process", + // TODO New key - Add a translation + "menu.section.new_process": "Process", + + + + // "menu.section.pin": "Pin sidebar", + // TODO New key - Add a translation + "menu.section.pin": "Fäst sidomenyn", + + // "menu.section.unpin": "Unpin sidebar", + // TODO New key - Add a translation + "menu.section.unpin": "Koppla loss sidomenyn", + + + + // "menu.section.processes": "Processes", + // TODO New key - Add a translation + "menu.section.processes": "Processer", + + + + // "menu.section.registries": "Registries", + // TODO New key - Add a translation + "menu.section.registries": "Registries", + + // "menu.section.registries_format": "Format", + // TODO New key - Add a translation + "menu.section.registries_format": "Format", + + // "menu.section.registries_metadata": "Metadata", + // TODO New key - Add a translation + "menu.section.registries_metadata": "Metadata", + + + + // "menu.section.statistics": "Statistics", + // TODO New key - Add a translation + "menu.section.statistics": "Statistik", + + // "menu.section.statistics_task": "Statistics Task", + // TODO New key - Add a translation + "menu.section.statistics_task": "Statistik uppgift", + + + + // "menu.section.toggle.access_control": "Toggle Access Control section", + // TODO New key - Add a translation + "menu.section.toggle.access_control": "Växla till åtkomstkontroll", + + // "menu.section.toggle.control_panel": "Toggle Control Panel section", + // TODO New key - Add a translation + "menu.section.toggle.control_panel": "Växla till kontrollpanel", + + // "menu.section.toggle.curation_task": "Toggle Curation Task section", + // TODO New key - Add a translation + "menu.section.toggle.curation_task": "Växla till kureringsuppgift", + + // "menu.section.toggle.edit": "Toggle Edit section", + // TODO New key - Add a translation + "menu.section.toggle.edit": "Växla till redigera", + + // "menu.section.toggle.export": "Toggle Export section", + // TODO New key - Add a translation + "menu.section.toggle.export": "Växla till exportera", + + // "menu.section.toggle.find": "Toggle Find section", + // TODO New key - Add a translation + "menu.section.toggle.find": "Växla till sök", + + // "menu.section.toggle.import": "Toggle Import section", + // TODO New key - Add a translation + "menu.section.toggle.import": "Växla till importera", + + // "menu.section.toggle.new": "Toggle New section", + // TODO New key - Add a translation + "menu.section.toggle.new": "Växla till ny", + + // "menu.section.toggle.registries": "Toggle Registries section", + // TODO New key - Add a translation + "menu.section.toggle.registries": "Växla till registries", + + // "menu.section.toggle.statistics_task": "Toggle Statistics Task section", + // TODO New key - Add a translation + "menu.section.toggle.statistics_task": "Växla till statistik", + + + // "menu.section.workflow": "Administer Workflow", + // TODO New key - Add a translation + "menu.section.workflow": "Administrera arbetsflöde", + + + // "mydspace.breadcrumbs": "MyDSpace", + // TODO New key - Add a translation + "mydspace.breadcrumbs": "Mitt DSpace", + + // "mydspace.description": "", + // TODO New key - Add a translation + "mydspace.description": "", + + // "mydspace.general.text-here": "here", + // TODO New key - Add a translation + "mydspace.general.text-here": "här", + + // "mydspace.messages.controller-help": "Select this option to send a message to item's submitter.", + // TODO New key - Add a translation + "mydspace.messages.controller-help": "Välj detta för att skicka ett meddelande till uppladdare.", + + // "mydspace.messages.description-placeholder": "Insert your message here...", + // TODO New key - Add a translation + "mydspace.messages.description-placeholder": "Skriv meddelande här...", + + // "mydspace.messages.hide-msg": "Hide message", + // TODO New key - Add a translation + "mydspace.messages.hide-msg": "Göm meddelande", + + // "mydspace.messages.mark-as-read": "Mark as read", + // TODO New key - Add a translation + "mydspace.messages.mark-as-read": "Markera som läst", + + // "mydspace.messages.mark-as-unread": "Mark as unread", + // TODO New key - Add a translation + "mydspace.messages.mark-as-unread": "Markera som oläst", + + // "mydspace.messages.no-content": "No content.", + // TODO New key - Add a translation + "mydspace.messages.no-content": "Innehåll saknas.", + + // "mydspace.messages.no-messages": "No messages yet.", + // TODO New key - Add a translation + "mydspace.messages.no-messages": "Inga meddelanden finns.", + + // "mydspace.messages.send-btn": "Send", + // TODO New key - Add a translation + "mydspace.messages.send-btn": "Skicka", + + // "mydspace.messages.show-msg": "Show message", + // TODO New key - Add a translation + "mydspace.messages.show-msg": "Visa meddelande", + + // "mydspace.messages.subject-placeholder": "Subject...", + // TODO New key - Add a translation + "mydspace.messages.subject-placeholder": "Ämne...", + + // "mydspace.messages.submitter-help": "Select this option to send a message to controller.", + // TODO New key - Add a translation + "mydspace.messages.submitter-help": "Välj detta för att skicka ett meddelande till kontrollant.", + + // "mydspace.messages.title": "Messages", + // TODO New key - Add a translation + "mydspace.messages.title": "Meddelanden", + + // "mydspace.messages.to": "To", + // TODO New key - Add a translation + "mydspace.messages.to": "Till", + + // "mydspace.new-submission": "New submission", + // TODO New key - Add a translation + "mydspace.new-submission": "Nytt bidrag", + + // "mydspace.new-submission-external": "Import metadata from external source", + // TODO New key - Add a translation + "mydspace.new-submission-external": "Importera metadada från extern källa", + + // "mydspace.new-submission-external-short": "Import metadata", + // TODO New key - Add a translation + "mydspace.new-submission-external-short": "Importera metadata", + + // "mydspace.results.head": "Your submissions", + // TODO New key - Add a translation + "mydspace.results.head": "Dina registreringar", + + // "mydspace.results.no-abstract": "No Abstract", + // TODO New key - Add a translation + "mydspace.results.no-abstract": "Ingen sammanfattning", + + // "mydspace.results.no-Författare": "No Författare", + // TODO New key - Add a translation + "mydspace.results.no-Författare": "Inga författare", + + // "mydspace.results.no-collections": "No Collections", + // TODO New key - Add a translation + "mydspace.results.no-collections": "Inga samlingar", + + // "mydspace.results.no-date": "No Date", + // TODO New key - Add a translation + "mydspace.results.no-date": "Inget datum", + + // "mydspace.results.no-files": "No Files", + // TODO New key - Add a translation + "mydspace.results.no-files": "Inga filer", + + // "mydspace.results.no-results": "There were no items to show", + // TODO New key - Add a translation + "mydspace.results.no-results": "Det finns inga poster att visa", + + // "mydspace.results.no-title": "No title", + // TODO New key - Add a translation + "mydspace.results.no-title": "Ingen titel", + + // "mydspace.results.no-uri": "No Uri", + // TODO New key - Add a translation + "mydspace.results.no-uri": "Ingen Uri", + + // "mydspace.search-form.placeholder": "Search in mydspace...", + // TODO New key - Add a translation + "mydspace.search-form.placeholder": "Sök i mydspace...", + + // "mydspace.show.workflow": "Workflow tasks", + // TODO New key - Add a translation + "mydspace.show.workflow": "Arbetsflöde uppgifter", + + // "mydspace.show.workspace": "Your Submissions", + // TODO New key - Add a translation + "mydspace.show.workspace": "Dina registreringar", + + // "mydspace.status.archived": "Archived", + // TODO New key - Add a translation + "mydspace.status.archived": "I arkivet", + + // "mydspace.status.validation": "Validation", + // TODO New key - Add a translation + "mydspace.status.validation": "Validering", + + // "mydspace.status.waiting-for-controller": "Waiting for controller", + // TODO New key - Add a translation + "mydspace.status.waiting-for-controller": "Väntar på kontrollant", + + // "mydspace.status.workflow": "Workflow", + // TODO New key - Add a translation + "mydspace.status.workflow": "Arbetsflöde", + + // "mydspace.status.workspace": "Workspace", + // TODO New key - Add a translation + "mydspace.status.workspace": "I arbetsflödet", + + // "mydspace.title": "MyDSpace", + // TODO New key - Add a translation + "mydspace.title": "MyDSpace", + + // "mydspace.upload.upload-failed": "Error creating new workspace. Please verify the content uploaded before retry.", + // TODO New key - Add a translation + "mydspace.upload.upload-failed": "Ett fel uppstod när arbetsyta skulle skapas. Verifiera inneållet i det som skall laddas upp och försök igen.", + + // "mydspace.upload.upload-failed-manyentries": "Unprocessable file. Detected too many entries but allowed only one for file.", + // TODO New key - Add a translation + "mydspace.upload.upload-failed-manyentries": "Fil kan inte processes. Detected too many entries but allowed only one for file.", + + // "mydspace.upload.upload-failed-moreonefile": "Unprocessable request. Only one file is allowed.", + // TODO New key - Add a translation + "mydspace.upload.upload-failed-moreonefile": "Begäran kunde inte bearbetas. Endast en fil är möjlig.", + + // "mydspace.upload.upload-multiple-successful": "{{qty}} new workspace items created.", + // TODO New key - Add a translation + "mydspace.upload.upload-multiple-successful": "{{qty}} nya poster har skapats i arbetsytan.", + + // "mydspace.upload.upload-successful": "New workspace item created. Click {{here}} for edit it.", + // TODO New key - Add a translation + "mydspace.upload.upload-successful": "Ny post har skapats i arbetsytan. Klicka {{here}} för att redigera den.", + + // "mydspace.view-btn": "View", + // TODO New key - Add a translation + "mydspace.view-btn": "Visa", + + + + // "nav.browse.header": "All of DSpace", + // TODO New key - Add a translation + "nav.browse.header": "Hela DSpace", + + // "nav.community-browse.header": "By Community", + // TODO New key - Add a translation + "nav.community-browse.header": "Efter enhet", + + // "nav.language": "Språk switch", + // TODO New key - Add a translation + "nav.language": "Välj språk", + + // "nav.login": "Log In", + // TODO New key - Add a translation + "nav.login": "Logga in", + + // "nav.logout": "User profile menu and Log Out", + // TODO New key - Add a translation + "nav.logout": "User profile menu and Log Out", + + // "nav.main.description": "Main navigation bar", + // TODO New key - Add a translation + "nav.main.description": "Main navigation bar", + + // "nav.mydspace": "MyDSpace", + // TODO New key - Add a translation + "nav.mydspace": "Mitt ODR", + + // "nav.profile": "Profile", + // TODO New key - Add a translation + "nav.profile": "Profil", + + // "nav.search": "Search", + // TODO New key - Add a translation + "nav.search": "Sök", + + // "nav.statistics.header": "Statistics", + // TODO New key - Add a translation + "nav.statistics.header": "Statistik", + + // "nav.stop-impersonating": "Stop impersonating EPerson", + // TODO New key - Add a translation + "nav.stop-impersonating": "Stop impersonating EPerson", + + // "nav.toggle" : "Toggle navigation", + // TODO New key - Add a translation + "nav.toggle" : "Toggle navigation", + + // "nav.user.description" : "User profile bar", + // TODO New key - Add a translation + "nav.user.description" : "User profile bar", + + // "none.listelement.badge": "Item", + // TODO New key - Add a translation + "none.listelement.badge": "Item", + + + // "orgunit.listelement.badge": "Organizational Unit", + // TODO New key - Add a translation + "orgunit.listelement.badge": "Organizational Unit", + + // "orgunit.page.city": "City", + // TODO New key - Add a translation + "orgunit.page.city": "City", + + // "orgunit.page.country": "Country", + // TODO New key - Add a translation + "orgunit.page.country": "Country", + + // "orgunit.page.dateestablished": "Date established", + // TODO New key - Add a translation + "orgunit.page.dateestablished": "Date established", + + // "orgunit.page.description": "Beskrivning", + // TODO New key - Add a translation + "orgunit.page.description": "Beskrivning", + + // "orgunit.page.edit": "Edit this item", + // TODO New key - Add a translation + "orgunit.page.edit": "Edit this item", + + // "orgunit.page.id": "ID", + // TODO New key - Add a translation + "orgunit.page.id": "ID", + + // "orgunit.page.titleprefix": "Organizational Unit: ", + // TODO New key - Add a translation + "orgunit.page.titleprefix": "Organizational Unit: ", + + // "pagination.options.description": "Pagination options", + // TODO New key - Add a translation + "pagination.options.description": "Träffar per sida", + + // "pagination.results-per-page": "Results Per Page", + // TODO New key - Add a translation + "pagination.results-per-page": "Sökresultat per sida", + + // "pagination.showing.detail": "{{ range }} of {{ total }}", + // TODO New key - Add a translation + "pagination.showing.detail": "{{ range }} av {{ total }}", + + // "pagination.showing.label": "Now showing ", + // TODO New key - Add a translation + "pagination.showing.label": "Visar ", + + // "pagination.sort-direction": "Sort Options", + // TODO New key - Add a translation + "pagination.sort-direction": "Sortera efter", + + + + // "person.listelement.badge": "Person", + // TODO New key - Add a translation + "person.listelement.badge": "Person", + + // "person.listelement.no-title": "No name found", + // TODO New key - Add a translation + "person.listelement.no-title": "No name found", + + // "person.page.birthdate": "Birth Date", + // TODO New key - Add a translation + "person.page.birthdate": "Birth Date", + + // "person.page.edit": "Edit this item", + // TODO New key - Add a translation + "person.page.edit": "Edit this item", + + // "person.page.email": "E-post", + // TODO New key - Add a translation + "person.page.email": "E-post", + + // "person.page.firstname": "First Name", + // TODO New key - Add a translation + "person.page.firstname": "Förnamn", + + // "person.page.jobtitle": "Job Title", + // TODO New key - Add a translation + "person.page.jobtitle": "Job Title", + + // "person.page.lastname": "Last Name", + // TODO New key - Add a translation + "person.page.lastname": "Efternamn", + + // "person.page.link.full": "Show all metadata", + // TODO New key - Add a translation + "person.page.link.full": "Show all metadata", + + // "person.page.orcid": "ORCID", + // TODO New key - Add a translation + "person.page.orcid": "ORCID", + + // "person.page.staffid": "Staff ID", + // TODO New key - Add a translation + "person.page.staffid": "Staff ID", + + // "person.page.titleprefix": "Person: ", + // TODO New key - Add a translation + "person.page.titleprefix": "Person: ", + + // "person.search.results.head": "Person Search Results", + // TODO New key - Add a translation + "person.search.results.head": "Person Search Results", + + // "person.search.title": "Person Search", + // TODO New key - Add a translation + "person.search.title": "Person Search", + + + + // "process.new.select-parameters": "Parameters", + // TODO New key - Add a translation + "process.new.select-parameters": "Parameters", + + // "process.new.cancel": "Cancel", + // TODO New key - Add a translation + "process.new.cancel": "Cancel", + + // "process.new.submit": "Save", + // TODO New key - Add a translation + "process.new.submit": "Spara", + + // "process.new.select-script": "Script", + // TODO New key - Add a translation + "process.new.select-script": "Script", + + // "process.new.select-script.placeholder": "Choose a script...", + // TODO New key - Add a translation + "process.new.select-script.placeholder": "Choose a script...", + + // "process.new.select-script.required": "Script is required", + // TODO New key - Add a translation + "process.new.select-script.required": "Script is required", + + // "process.new.parameter.file.upload-button": "Select file...", + // TODO New key - Add a translation + "process.new.parameter.file.upload-button": "Select file...", + + // "process.new.parameter.file.required": "Please select a file", + // TODO New key - Add a translation + "process.new.parameter.file.required": "Please select a file", + + // "process.new.parameter.string.required": "Parameter value is required", + // TODO New key - Add a translation + "process.new.parameter.string.required": "Parameter value is required", + + // "process.new.parameter.type.value": "value", + // TODO New key - Add a translation + "process.new.parameter.type.value": "value", + + // "process.new.parameter.type.file": "file", + // TODO New key - Add a translation + "process.new.parameter.type.file": "file", + + // "process.new.parameter.required.missing": "The following parameters are required but still missing:", + // TODO New key - Add a translation + "process.new.parameter.required.missing": "The following parameters are required but still missing:", + + // "process.new.notification.success.title": "Success", + // TODO New key - Add a translation + "process.new.notification.success.title": "Success", + + // "process.new.notification.success.content": "The process was successfully created", + // TODO New key - Add a translation + "process.new.notification.success.content": "The process was successfully created", + + // "process.new.notification.error.title": "Error", + // TODO New key - Add a translation + "process.new.notification.error.title": "Error", + + // "process.new.notification.error.content": "An error occurred while creating this process", + // TODO New key - Add a translation + "process.new.notification.error.content": "An error occurred while creating this process", + + // "process.new.header": "Create a new process", + // TODO New key - Add a translation + "process.new.header": "Create a new process", + + // "process.new.title": "Create a new process", + // TODO New key - Add a translation + "process.new.title": "Create a new process", + + // "process.new.breadcrumbs": "Create a new process", + // TODO New key - Add a translation + "process.new.breadcrumbs": "Create a new process", + + + + // "process.detail.arguments" : "Arguments", + // TODO New key - Add a translation + "process.detail.arguments" : "Arguments", + + // "process.detail.arguments.empty" : "This process doesn't contain any arguments", + // TODO New key - Add a translation + "process.detail.arguments.empty" : "This process doesn't contain any arguments", + + // "process.detail.back" : "Back", + // TODO New key - Add a translation + "process.detail.back" : "Back", + + // "process.detail.output" : "Process Output", + // TODO New key - Add a translation + "process.detail.output" : "Process Output", + + // "process.detail.logs.button": "Retrieve process output", + // TODO New key - Add a translation + "process.detail.logs.button": "Retrieve process output", + + // "process.detail.logs.loading": "Retrieving", + // TODO New key - Add a translation + "process.detail.logs.loading": "Retrieving", + + // "process.detail.logs.none": "This process has no output", + // TODO New key - Add a translation + "process.detail.logs.none": "This process has no output", + + // "process.detail.output-files" : "Output Files", + // TODO New key - Add a translation + "process.detail.output-files" : "Output Files", + + // "process.detail.output-files.empty" : "This process doesn't contain any output files", + // TODO New key - Add a translation + "process.detail.output-files.empty" : "This process doesn't contain any output files", + + // "process.detail.script" : "Script", + // TODO New key - Add a translation + "process.detail.script" : "Script", + + // "process.detail.title" : "Process: {{ id }} - {{ name }}", + // TODO New key - Add a translation + "process.detail.title" : "Process: {{ id }} - {{ name }}", + + // "process.detail.start-time" : "Start time", + // TODO New key - Add a translation + "process.detail.start-time" : "Start time", + + // "process.detail.end-time" : "Finish time", + // TODO New key - Add a translation + "process.detail.end-time" : "Finish time", + + // "process.detail.status" : "Status", + // TODO New key - Add a translation + "process.detail.status" : "Status", + + // "process.detail.create" : "Create similar process", + // TODO New key - Add a translation + "process.detail.create" : "Create similar process", + + + + // "process.overview.table.finish" : "Finish time (UTC)", + // TODO New key - Add a translation + "process.overview.table.finish" : "Sluttid (UTC)", + + // "process.overview.table.id" : "Process ID", + // TODO New key - Add a translation + "process.overview.table.id" : "Process ID", + + // "process.overview.table.name" : "Name", + // TODO New key - Add a translation + "process.overview.table.name" : "Namn", + + // "process.overview.table.start" : "Start time (UTC)", + // TODO New key - Add a translation + "process.overview.table.start" : "Starttid (UTC)", + + // "process.overview.table.status" : "Status", + // TODO New key - Add a translation + "process.overview.table.status" : "Status", + + // "process.overview.table.user" : "User", + // TODO New key - Add a translation + "process.overview.table.user" : "Användare", + + // "process.overview.title": "Processes Overview", + // TODO New key - Add a translation + "process.overview.title": "Processer översikt", + + // "process.overview.breadcrumbs": "Processes Overview", + // TODO New key - Add a translation + "process.overview.breadcrumbs": "Processer översikt", + + // "process.overview.new": "New", + // TODO New key - Add a translation + "process.overview.new": "Ny", + + + // "profile.breadcrumbs": "Update Profile", + // TODO New key - Add a translation + "profile.breadcrumbs": "Uppdatera profil", + + // "profile.card.identify": "Identify", + // TODO New key - Add a translation + "profile.card.identify": "Identifiera", + + // "profile.card.security": "Säkerhet", + // TODO New key - Add a translation + "profile.card.security": "Säkerhet och inloggning", + + // "profile.form.submit": "Save", + // TODO New key - Add a translation + "profile.form.submit": "Spara", + + // "profile.groups.head": "Authorization groups you belong to", + // TODO New key - Add a translation + "profile.groups.head": "Behörighetsgrupper som du är medlem i", + + // "profile.head": "Update Profile", + // TODO New key - Add a translation + "profile.head": "Uppdatera profil", + + // "profile.metadata.form.error.firstname.required": "First Name is required", + // TODO New key - Add a translation + "profile.metadata.form.error.firstname.required": "Förnamn är obligatotiskt", + + // "profile.metadata.form.error.lastname.required": "Last Name is required", + // TODO New key - Add a translation + "profile.metadata.form.error.lastname.required": "Efternamn är obligatoriskt", + + // "profile.metadata.form.label.email": "E-post", + // TODO New key - Add a translation + "profile.metadata.form.label.email": "E-post", + + // "profile.metadata.form.label.firstname": "First Name", + // TODO New key - Add a translation + "profile.metadata.form.label.firstname": "Förnamn", + + // "profile.metadata.form.label.language": "Språk", + // TODO New key - Add a translation + "profile.metadata.form.label.language": "Språk", + + // "profile.metadata.form.label.lastname": "Last Name", + // TODO New key - Add a translation + "profile.metadata.form.label.lastname": "Efternamn", + + // "profile.metadata.form.label.phone": "Telefonnummer", + // TODO New key - Add a translation + "profile.metadata.form.label.phone": "Telefonnummer", + + // "profile.metadata.form.notifications.success.content": "Your changes to the profile were saved.", + // TODO New key - Add a translation + "profile.metadata.form.notifications.success.content": "Dina ändringar har sparats.", + + // "profile.metadata.form.notifications.success.title": "Profile saved", + // TODO New key - Add a translation + "profile.metadata.form.notifications.success.title": "Profilen har sparats", + + // "profile.notifications.warning.no-changes.content": "No changes were made to the Profile.", + // TODO New key - Add a translation + "profile.notifications.warning.no-changes.content": "Inga ändringar gjordes.", + + // "profile.notifications.warning.no-changes.title": "No changes", + // TODO New key - Add a translation + "profile.notifications.warning.no-changes.title": "Inga ändringar", + + // "profile.security.form.error.matching-passwords": "Lösenorden överensstämmer inte.", + // TODO New key - Add a translation + "profile.security.form.error.matching-passwords": "Lösenorden överensstämmer inte.", + + // "profile.security.form.error.password-length": "The password should be at least 6 characters long.", + // TODO New key - Add a translation + "profile.security.form.error.password-length": "Lösenordet måste bestå av minst 6 tecken.", + + // "profile.security.form.info": "Optionally, you can enter a new password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", + // TODO New key - Add a translation + "profile.security.form.info": "Om du vill byta lösenord så kan du göra det nedan. Lösenordet måste bestå av minst 6 tecken.", + + // "profile.security.form.label.password": "Password", + // TODO New key - Add a translation + "profile.security.form.label.password": "Lösenord", + + // "profile.security.form.label.passwordrepeat": "Bekräfta", + // TODO New key - Add a translation + "profile.security.form.label.passwordrepeat": "Bekräfta", + + // "profile.security.form.notifications.success.content": "Your changes to the password were saved.", + // TODO New key - Add a translation + "profile.security.form.notifications.success.content": "Det nya lösenordet har sparats.", + + // "profile.security.form.notifications.success.title": "Password saved", + // TODO New key - Add a translation + "profile.security.form.notifications.success.title": "Lösenordet har sparats", + + // "profile.security.form.notifications.error.title": "Error changing passwords", + // TODO New key - Add a translation + "profile.security.form.notifications.error.title": "Ett del uppstod när lösenordet skulle sparas", + + // "profile.security.form.notifications.error.not-long-enough": "The password has to be at least 6 characters long.", + // TODO New key - Add a translation + "profile.security.form.notifications.error.not-long-enough": "Lösenordet måste bestå av minst 6 tecken.", + + // "profile.security.form.notifications.error.not-same": "The provided passwords are not the same.", + // TODO New key - Add a translation + "profile.security.form.notifications.error.not-same": "Lösenorden överensstämmer inte.", + + // "profile.title": "Update Profile", + // TODO New key - Add a translation + "profile.title": "Uppdatera profil", + + + + // "project.listelement.badge": "Research Project", + // TODO New key - Add a translation + "project.listelement.badge": "Research Project", + + // "project.page.contributor": "Contributors", + // TODO New key - Add a translation + "project.page.contributor": "Contributors", + + // "project.page.description": "Beskrivning", + // TODO New key - Add a translation + "project.page.description": "Beskrivning", + + // "project.page.edit": "Edit this item", + // TODO New key - Add a translation + "project.page.edit": "Edit this item", + + // "project.page.expectedcompletion": "Expected Completion", + // TODO New key - Add a translation + "project.page.expectedcompletion": "Expected Completion", + + // "project.page.funder": "Funders", + // TODO New key - Add a translation + "project.page.funder": "Funders", + + // "project.page.id": "ID", + // TODO New key - Add a translation + "project.page.id": "ID", + + // "project.page.keyword": "Keywords", + // TODO New key - Add a translation + "project.page.keyword": "Ämne/nyckelord", + + // "project.page.status": "Status", + // TODO New key - Add a translation + "project.page.status": "Status", + + // "project.page.titleprefix": "Research Project: ", + // TODO New key - Add a translation + "project.page.titleprefix": "Research Project: ", + + // "project.search.results.head": "Project Search Results", + // TODO New key - Add a translation + "project.search.results.head": "Project Search Results", + + + + // "publication.listelement.badge": "Publication", + // TODO New key - Add a translation + "publication.listelement.badge": "Publication", + + // "publication.page.description": "Beskrivning", + // TODO New key - Add a translation + "publication.page.description": "Beskrivning", + + // "publication.page.edit": "Edit this item", + // TODO New key - Add a translation + "publication.page.edit": "Edit this item", + + // "publication.page.journal-issn": "Journal ISSN", + // TODO New key - Add a translation + "publication.page.journal-issn": "Journal ISSN", + + // "publication.page.journal-title": "Journal Title", + // TODO New key - Add a translation + "publication.page.journal-title": "Journal Title", + + // "publication.page.publisher": "Publisher", + // TODO New key - Add a translation + "publication.page.publisher": "Utgivare", + + // "publication.page.titleprefix": "Publication: ", + // TODO New key - Add a translation + "publication.page.titleprefix": "Publication: ", + + // "publication.page.volume-title": "Volume Title", + // TODO New key - Add a translation + "publication.page.volume-title": "Volume Title", + + // "publication.search.results.head": "Publication Search Results", + // TODO New key - Add a translation + "publication.search.results.head": "Publication Search Results", + + // "publication.search.title": "Publication Search", + // TODO New key - Add a translation + "publication.search.title": "Publication Search", + + + // "media-viewer.next": "Next", + // TODO New key - Add a translation + "media-viewer.next": "Nästa", + + // "media-viewer.previous": "Föregående", + // TODO New key - Add a translation + "media-viewer.previous": "Föregående", + + // "media-viewer.playlist": "Playlist", + // TODO New key - Add a translation + "media-viewer.playlist": "Playlist", + + + // "register-email.title": "Ny användare", + // TODO New key - Add a translation + "register-email.title": "Ny användare", + + // "register-page.create-profile.header": "Create Profile", + // TODO New key - Add a translation + "register-page.create-profile.header": "Skapa profil", + + // "register-page.create-profile.identification.header": "Identify", + // TODO New key - Add a translation + "register-page.create-profile.identification.header": "Identifera", + + // "register-page.create-profile.identification.email": "E-post", + // TODO New key - Add a translation + "register-page.create-profile.identification.email": "E-post", + + // "register-page.create-profile.identification.first-name": "First Name *", + // TODO New key - Add a translation + "register-page.create-profile.identification.first-name": "Förnamn *", + + // "register-page.create-profile.identification.first-name.error": "Please fill in a First Name", + // TODO New key - Add a translation + "register-page.create-profile.identification.first-name.error": "Ange förnamn", + + // "register-page.create-profile.identification.last-name": "Last Name *", + // TODO New key - Add a translation + "register-page.create-profile.identification.last-name": "Efternamn *", + + // "register-page.create-profile.identification.last-name.error": "Please fill in a Last Name", + // TODO New key - Add a translation + "register-page.create-profile.identification.last-name.error": "Ange efternamn", + + // "register-page.create-profile.identification.contact": "Telefonnummer", + // TODO New key - Add a translation + "register-page.create-profile.identification.contact": "Telefonnummer", + + // "register-page.create-profile.identification.language": "Språk", + // TODO New key - Add a translation + "register-page.create-profile.identification.language": "Språk", + + // "register-page.create-profile.security.header": "Säkerhet", + // TODO New key - Add a translation + "register-page.create-profile.security.header": "Säkerhet", + + // "register-page.create-profile.security.info": "Please enter a password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", + // TODO New key - Add a translation + "register-page.create-profile.security.info": "Ange och bekräfta ett lösenord nedan. Det måste bestå av minst 6 tecken.", + + // "register-page.create-profile.security.label.password": "Password *", + // TODO New key - Add a translation + "register-page.create-profile.security.label.password": "Lösenord *", + + // "register-page.create-profile.security.label.passwordrepeat": "Bekräfta *", + // TODO New key - Add a translation + "register-page.create-profile.security.label.passwordrepeat": "Bekräfta *", + + // "register-page.create-profile.security.error.empty-password": "Please enter a password in the box below.", + // TODO New key - Add a translation + "register-page.create-profile.security.error.empty-password": "Ange ett lösnord nedan.", + + // "register-page.create-profile.security.error.matching-passwords": "Lösenorden överensstämmer inte.", + // TODO New key - Add a translation + "register-page.create-profile.security.error.matching-passwords": "Lösenorden överensstämmer inte.", + + // "register-page.create-profile.security.error.password-length": "The password should be at least 6 characters long.", + // TODO New key - Add a translation + "register-page.create-profile.security.error.password-length": "Lösenordet måste bestå av minst 6 tecken.", + + // "register-page.create-profile.submit": "Complete Registration", + // TODO New key - Add a translation + "register-page.create-profile.submit": "Slutför registrering", + + // "register-page.create-profile.submit.error.content": "Something went wrong while registering a new user.", + // TODO New key - Add a translation + "register-page.create-profile.submit.error.content": "Ett fel uppstod när ny användare registrerades.", + + // "register-page.create-profile.submit.error.head": "Registration failed", + // TODO New key - Add a translation + "register-page.create-profile.submit.error.head": "Registreringen misslyckades", + + // "register-page.create-profile.submit.success.content": "The registration was successful. You have been logged in as the created user.", + // TODO New key - Add a translation + "register-page.create-profile.submit.success.content": "Regsitreringen är klar. Du är nu inloggad som den nya användaren.", + + // "register-page.create-profile.submit.success.head": "Registration completed", + // TODO New key - Add a translation + "register-page.create-profile.submit.success.head": "Registreringen är klar", + + + // "register-page.registration.header": "Ny användare", + // TODO New key - Add a translation + "register-page.registration.header": "Ny användare", + + // "register-page.registration.info": "Register an account to subscribe to collections for email updates, and submit new items to DSpace.", + // TODO New key - Add a translation + "register-page.registration.info": "Skapa ett konto för att få uppdateringar eller för att kunna registrera nya bidrag i arkivet.", + + // "register-page.registration.email": "E-post *", + // TODO New key - Add a translation + "register-page.registration.email": "E-post *", + + // "register-page.registration.email.error.required": "Please fill in an email address", + // TODO New key - Add a translation + "register-page.registration.email.error.required": "Ange e-post", + + // "register-page.registration.email.error.pattern": "Please fill in a valid email address", + // TODO New key - Add a translation + "register-page.registration.email.error.pattern": "Ange en giltig e-postadress", + + // "register-page.registration.email.hint": "This address will be verified and used as your login name.", + // TODO New key - Add a translation + "register-page.registration.email.hint": "Denna adress kommer att verifieras och användas när du loggar in.", + + // "register-page.registration.submit": "Register", + // TODO New key - Add a translation + "register-page.registration.submit": "Skapa konto", + + // "register-page.registration.success.head": "Verification email sent", + // TODO New key - Add a translation + "register-page.registration.success.head": "Ett verifieringsmejl har skickats", + + // "register-page.registration.success.content": "An email has been sent to {{ email }} containing a special URL and further instructions.", + // TODO New key - Add a translation + "register-page.registration.success.content": "Ett mejl med instruktioner har skickats till {{ email }}.", + + // "register-page.registration.error.head": "Error when trying to register email", + // TODO New key - Add a translation + "register-page.registration.error.head": "Ett fel uppstod när kontot skulle skapas", + + // "register-page.registration.error.content": "An error occured when registering the following email address: {{ email }}", + // TODO New key - Add a translation + "register-page.registration.error.content": "Ett fel uppstod när kontot skulle skapas för: {{ email }}", + + + + // "relationships.add.error.relationship-type.content": "No suitable match could be found for relationship type {{ type }} between the two items", + // TODO New key - Add a translation + "relationships.add.error.relationship-type.content": "Det gick inte att hitta något som matchade relationstyp {{ type }} mellan dessa poster", + + // "relationships.add.error.server.content": "The server returned an error", + // TODO New key - Add a translation + "relationships.add.error.server.content": "Servern returnerade ett fel", + + // "relationships.add.error.title": "Unable to add relationship", + // TODO New key - Add a translation + "relationships.add.error.title": "Det gick inte att skapa relation", + + // "relationships.isAuthorOf": "Författare", + // TODO New key - Add a translation + "relationships.isAuthorOf": "Författare", + + // "relationships.isAuthorOf.Person": "Författare (persons)", + // TODO New key - Add a translation + "relationships.isAuthorOf.Person": "Författare (personer)", + + // "relationships.isAuthorOf.OrgUnit": "Författare (organizational units)", + // TODO New key - Add a translation + "relationships.isAuthorOf.OrgUnit": "Författare (organisatoriska enheter)", + + // "relationships.isIssueOf": "Journal Issues", + // TODO New key - Add a translation + "relationships.isIssueOf": "Tidskriftsexemplar", + + // "relationships.isJournalIssueOf": "Journal Issue", + // TODO New key - Add a translation + "relationships.isJournalIssueOf": "Tidskriftsexemplar", + + // "relationships.isJournalOf": "Journals", + // TODO New key - Add a translation + "relationships.isJournalOf": "Tidskrifter", + + // "relationships.isOrgUnitOf": "Organizational Units", + // TODO New key - Add a translation + "relationships.isOrgUnitOf": "Organisatoriska enheter", + + // "relationships.isPersonOf": "Författare", + // TODO New key - Add a translation + "relationships.isPersonOf": "Författare", + + // "relationships.isProjectOf": "Research Projects", + // TODO New key - Add a translation + "relationships.isProjectOf": "Forskningsprojekt", + + // "relationships.isPublicationOf": "Publications", + // TODO New key - Add a translation + "relationships.isPublicationOf": "Publikationer", + + // "relationships.isPublicationOfJournalIssue": "Articles", + // TODO New key - Add a translation + "relationships.isPublicationOfJournalIssue": "Artiklar", + + // "relationships.isSingleJournalOf": "Journal", + // TODO New key - Add a translation + "relationships.isSingleJournalOf": "Tidskrift", + + // "relationships.isSingleVolumeOf": "Journal Volume", + // TODO New key - Add a translation + "relationships.isSingleVolumeOf": "Tidskriftsexemplar", + + // "relationships.isVolumeOf": "Journal Volumes", + // TODO New key - Add a translation + "relationships.isVolumeOf": "Tidskriftsvolymer", + + // "relationships.isContributorOf": "Contributors", + // TODO New key - Add a translation + "relationships.isContributorOf": "Medverkande", + + // "relationships.isContributorOf.OrgUnit": "Contributor (Organizational Unit)", + // TODO New key - Add a translation + "relationships.isContributorOf.OrgUnit": "Medverkande (organisatorisk enhet)", + + // "relationships.isContributorOf.Person": "Contributor", + // TODO New key - Add a translation + "relationships.isContributorOf.Person": "Medverkande", + + // "relationships.isFundingAgencyOf.OrgUnit": "Funder", + // TODO New key - Add a translation + "relationships.isFundingAgencyOf.OrgUnit": "Finansiär", + + + // "repository.image.logo": "Repository logo", + // TODO New key - Add a translation + "repository.image.logo": "Repositoriets logga", + + // "repository.title.prefix": "DSpace Angular :: ", + // TODO New key - Add a translation + "repository.title.prefix": "DSpace Angular :: ", + + // "repository.title.prefixDSpace": "DSpace Angular ::", + // TODO New key - Add a translation + "repository.title.prefixDSpace": "DSpace Angular ::", + + + // "resource-policies.add.button": "Add", + // TODO New key - Add a translation + "resource-policies.add.button": "Lägg till", + + // "resource-policies.add.for.": "Add a new policy", + // TODO New key - Add a translation + "resource-policies.add.for.": "Lägg till ny policy", + + // "resource-policies.add.for.bitstream": "Add a new Bitstream policy", + // TODO New key - Add a translation + "resource-policies.add.for.bitstream": "Lägg till ny policy för fil", + + // "resource-policies.add.for.bundle": "Add a new Bundle policy", + // TODO New key - Add a translation + "resource-policies.add.for.bundle": "Lägg till ny policy för bunt", + + // "resource-policies.add.for.item": "Add a new Item policy", + // TODO New key - Add a translation + "resource-policies.add.for.item": "Lägg till ny policy för post", + + // "resource-policies.add.for.community": "Add a new Community policy", + // TODO New key - Add a translation + "resource-policies.add.for.community": "Lägg till ny policy för enhet", + + // "resource-policies.add.for.collection": "Add a new Collection policy", + // TODO New key - Add a translation + "resource-policies.add.for.collection": "Lägg till ny policy för samling", + + // "resource-policies.create.page.heading": "Create new resource policy for ", + // TODO New key - Add a translation + "resource-policies.create.page.heading": "Lägg till ny policy för ", + + // "resource-policies.create.page.failure.content": "An error occurred while creating the resource policy.", + // TODO New key - Add a translation + "resource-policies.create.page.failure.content": "Ett fel har uppstått.", + + // "resource-policies.create.page.success.content": "Operation successful", + // TODO New key - Add a translation + "resource-policies.create.page.success.content": "Operationen lyckades", + + // "resource-policies.create.page.title": "Create new resource policy", + // TODO New key - Add a translation + "resource-policies.create.page.title": "Skapa ny policy för resurs", + + // "resource-policies.delete.btn": "Delete selected", + // TODO New key - Add a translation + "resource-policies.delete.btn": "Radera valda", + + // "resource-policies.delete.btn.title": "Delete selected resource policies", + // TODO New key - Add a translation + "resource-policies.delete.btn.title": "Radera valda policies", + + // "resource-policies.delete.failure.content": "An error occurred while deleting selected resource policies.", + // TODO New key - Add a translation + "resource-policies.delete.failure.content": "Ett fel uppstod när policies skulle raderas.", + + // "resource-policies.delete.success.content": "Operation successful", + // TODO New key - Add a translation + "resource-policies.delete.success.content": "Operationen lyckades", + + // "resource-policies.edit.page.heading": "Edit resource policy ", + // TODO New key - Add a translation + "resource-policies.edit.page.heading": "Redigera policy för resurs ", + + // "resource-policies.edit.page.failure.content": "An error occurred while editing the resource policy.", + // TODO New key - Add a translation + "resource-policies.edit.page.failure.content": "Ett fel uppstod när policy redigerades.", + + // "resource-policies.edit.page.success.content": "Operation successful", + // TODO New key - Add a translation + "resource-policies.edit.page.success.content": "Operationen lyckades", + + // "resource-policies.edit.page.title": "Edit resource policy", + // TODO New key - Add a translation + "resource-policies.edit.page.title": "Redigera policy för resurs", + + // "resource-policies.form.action-type.label": "Select the action type", + // TODO New key - Add a translation + "resource-policies.form.action-type.label": "Välj typ av åtgärd", + + // "resource-policies.form.action-type.required": "You must select the resource policy action.", + // TODO New key - Add a translation + "resource-policies.form.action-type.required": "Du måste välja typ av åtgärd.", + + // "resource-policies.form.eperson-group-list.label": "The eperson or group that will be granted the permission", + // TODO New key - Add a translation + "resource-policies.form.eperson-group-list.label": "ePerson och/eller grupp som kommer att beviljas åtkomst", + + // "resource-policies.form.eperson-group-list.select.btn": "Select", + // TODO New key - Add a translation + "resource-policies.form.eperson-group-list.select.btn": "Välj", + + // "resource-policies.form.eperson-group-list.tab.eperson": "Search for a ePerson", + // TODO New key - Add a translation + "resource-policies.form.eperson-group-list.tab.eperson": "Sök ePerson", + + // "resource-policies.form.eperson-group-list.tab.group": "Search for a group", + // TODO New key - Add a translation + "resource-policies.form.eperson-group-list.tab.group": "Sök grupp", + + // "resource-policies.form.eperson-group-list.table.headers.action": "Action", + // TODO New key - Add a translation + "resource-policies.form.eperson-group-list.table.headers.action": "Åtgärd", + + // "resource-policies.form.eperson-group-list.table.headers.id": "ID", + // TODO New key - Add a translation + "resource-policies.form.eperson-group-list.table.headers.id": "ID", + + // "resource-policies.form.eperson-group-list.table.headers.name": "Name", + // TODO New key - Add a translation + "resource-policies.form.eperson-group-list.table.headers.name": "Namn", + + // "resource-policies.form.date.end.label": "End Date", + // TODO New key - Add a translation + "resource-policies.form.date.end.label": "Slutdatum", + + // "resource-policies.form.date.start.label": "Start Date", + // TODO New key - Add a translation + "resource-policies.form.date.start.label": "Startdatum", + + // "resource-policies.form.description.label": "Beskrivning", + // TODO New key - Add a translation + "resource-policies.form.description.label": "Beskrivning", + + // "resource-policies.form.name.label": "Name", + // TODO New key - Add a translation + "resource-policies.form.name.label": "Namn", + + // "resource-policies.form.policy-type.label": "Select the policy type", + // TODO New key - Add a translation + "resource-policies.form.policy-type.label": "Välj typ av policy", + + // "resource-policies.form.policy-type.required": "You must select the resource policy type.", + // TODO New key - Add a translation + "resource-policies.form.policy-type.required": "YDu måste välja typ av policy.", + + // "resource-policies.table.headers.action": "Action", + // TODO New key - Add a translation + "resource-policies.table.headers.action": "Åtgärd", + + // "resource-policies.table.headers.date.end": "End Date", + // TODO New key - Add a translation + "resource-policies.table.headers.date.end": "Slutdatum", + + // "resource-policies.table.headers.date.start": "Start Date", + // TODO New key - Add a translation + "resource-policies.table.headers.date.start": "Startdatum", + + // "resource-policies.table.headers.edit": "Edit", + // TODO New key - Add a translation + "resource-policies.table.headers.edit": "Redigera", + + // "resource-policies.table.headers.edit.group": "Edit group", + // TODO New key - Add a translation + "resource-policies.table.headers.edit.group": "Redigera grupp", + + // "resource-policies.table.headers.edit.policy": "Edit policy", + // TODO New key - Add a translation + "resource-policies.table.headers.edit.policy": "Redigera policy", + + // "resource-policies.table.headers.eperson": "EPerson", + // TODO New key - Add a translation + "resource-policies.table.headers.eperson": "EPerson", + + // "resource-policies.table.headers.group": "Group", + // TODO New key - Add a translation + "resource-policies.table.headers.group": "Grupp", + + // "resource-policies.table.headers.id": "ID", + // TODO New key - Add a translation + "resource-policies.table.headers.id": "ID", + + // "resource-policies.table.headers.name": "Name", + // TODO New key - Add a translation + "resource-policies.table.headers.name": "Namn", + + // "resource-policies.table.headers.policyType": "type", + // TODO New key - Add a translation + "resource-policies.table.headers.policyType": "typ", + + // "resource-policies.table.headers.title.for.bitstream": "Policies for Bitstream", + // TODO New key - Add a translation + "resource-policies.table.headers.title.for.bitstream": "Policies för fil", + + // "resource-policies.table.headers.title.for.bundle": "Policies for Bundle", + // TODO New key - Add a translation + "resource-policies.table.headers.title.for.bundle": "Policies för bunt", + + // "resource-policies.table.headers.title.for.item": "Policies for Item", + // TODO New key - Add a translation + "resource-policies.table.headers.title.for.item": "Policies för post", + + // "resource-policies.table.headers.title.for.community": "Policies for Community", + // TODO New key - Add a translation + "resource-policies.table.headers.title.for.community": "Policies för enhet", + + // "resource-policies.table.headers.title.for.collection": "Policies for Collection", + // TODO New key - Add a translation + "resource-policies.table.headers.title.for.collection": "Policies för samling", + + + // "search.description": "", + // TODO New key - Add a translation + "search.description": "", + + // "search.switch-configuration.title": "Show", + // TODO New key - Add a translation + "search.switch-configuration.title": "Visa", + + // "search.title": "Search", + // TODO New key - Add a translation + "search.title": "Sök", + + // "search.breadcrumbs": "Search", + // TODO New key - Add a translation + "search.breadcrumbs": "Sök", + + // "search.search-form.placeholder": "Search the repository ...", + // TODO New key - Add a translation + "search.search-form.placeholder": "Sök i DSpace...", + + + // "search.filters.applied.f.author": "Author", + // TODO New key - Add a translation + "search.filters.applied.f.author": "Författare", + + // "search.filters.applied.f.dateIssued.max": "End date", + // TODO New key - Add a translation + "search.filters.applied.f.dateIssued.max": "Slut", + + // "search.filters.applied.f.dateIssued.min": "Start date", + // TODO New key - Add a translation + "search.filters.applied.f.dateIssued.min": "Start", + + // "search.filters.applied.f.dateSubmitted": "Date submitted", + // TODO New key - Add a translation + "search.filters.applied.f.dateSubmitted": "Skapad", + + // "search.filters.applied.f.discoverable": "Non-discoverable", + // TODO New key - Add a translation + "search.filters.applied.f.discoverable": "Ej sökbar", + + // "search.filters.applied.f.entityType": "Item Type", + // TODO New key - Add a translation + "search.filters.applied.f.entityType": "Typ", + + // "search.filters.applied.f.has_content_in_original_bundle": "Has files", + // TODO New key - Add a translation + "search.filters.applied.f.has_content_in_original_bundle": "Innehåller filer", + + // "search.filters.applied.f.itemtype": "Type", + // TODO New key - Add a translation + "search.filters.applied.f.itemtype": "Typ", + + // "search.filters.applied.f.namedresourcetype": "Status", + // TODO New key - Add a translation + "search.filters.applied.f.namedresourcetype": "Status", + + // "search.filters.applied.f.subject": "Subject", + // TODO New key - Add a translation + "search.filters.applied.f.subject": "Ämne", + + // "search.filters.applied.f.submitter": "Submitter", + // TODO New key - Add a translation + "search.filters.applied.f.submitter": "Skapad av", + + // "search.filters.applied.f.jobTitle": "Job Title", + // TODO New key - Add a translation + "search.filters.applied.f.jobTitle": "Job Title", + + // "search.filters.applied.f.birthDate.max": "End birth date", + // TODO New key - Add a translation + "search.filters.applied.f.birthDate.max": "Födelsedatum (till)", + + // "search.filters.applied.f.birthDate.min": "Start birth date", + // TODO New key - Add a translation + "search.filters.applied.f.birthDate.min": "Födelsedatum (från)", + + // "search.filters.applied.f.withdrawn": "Withdrawn", + // TODO New key - Add a translation + "search.filters.applied.f.withdrawn": "Återkallad", + + + + // "search.filters.filter.author.head": "Author", + // TODO New key - Add a translation + "search.filters.filter.author.head": "Författare", + + // "search.filters.filter.author.placeholder": "Author name", + // TODO New key - Add a translation + "search.filters.filter.author.placeholder": "Författare (namn)", + + // "search.filters.filter.author.label": "Search author name", + // TODO New key - Add a translation + "search.filters.filter.author.label": "Sök författare", + + // "search.filters.filter.birthDate.head": "Birth Date", + // TODO New key - Add a translation + "search.filters.filter.birthDate.head": "Födelsedatum", + + // "search.filters.filter.birthDate.placeholder": "Birth Date", + // TODO New key - Add a translation + "search.filters.filter.birthDate.placeholder": "Födelsedatum", + + // "search.filters.filter.birthDate.label": "Search birth date", + // TODO New key - Add a translation + "search.filters.filter.birthDate.label": "Sök födelsedatum", + + // "search.filters.filter.collapse": "Collapse filter", + // TODO New key - Add a translation + "search.filters.filter.collapse": "Fäll ihop filter", + + // "search.filters.filter.creativeDatePublished.head": "Date Published", + // TODO New key - Add a translation + "search.filters.filter.creativeDatePublished.head": "Publicerad", + + // "search.filters.filter.creativeDatePublished.placeholder": "Date Published", + // TODO New key - Add a translation + "search.filters.filter.creativeDatePublished.placeholder": "Publicerad", + + // "search.filters.filter.creativeDatePublished.label": "Search date published", + // TODO New key - Add a translation + "search.filters.filter.creativeDatePublished.label": "Sök på publiceringsdatum", + + // "search.filters.filter.creativeWorkEditor.head": "Editor", + // TODO New key - Add a translation + "search.filters.filter.creativeWorkEditor.head": "Redaktör", + + // "search.filters.filter.creativeWorkEditor.placeholder": "Editor", + // TODO New key - Add a translation + "search.filters.filter.creativeWorkEditor.placeholder": "Redaktör", + + // "search.filters.filter.creativeWorkEditor.label": "Search editor", + // TODO New key - Add a translation + "search.filters.filter.creativeWorkEditor.label": "Sök redaktör", + + // "search.filters.filter.creativeWorkKeywords.head": "Subject", + // TODO New key - Add a translation + "search.filters.filter.creativeWorkKeywords.head": "Ämne", + + // "search.filters.filter.creativeWorkKeywords.placeholder": "Subject", + // TODO New key - Add a translation + "search.filters.filter.creativeWorkKeywords.placeholder": "Ämne", + + // "search.filters.filter.creativeWorkKeywords.label": "Search subject", + // TODO New key - Add a translation + "search.filters.filter.creativeWorkKeywords.label": "Sök ämne", + + // "search.filters.filter.creativeWorkPublisher.head": "Publisher", + // TODO New key - Add a translation + "search.filters.filter.creativeWorkPublisher.head": "Utgivare", + + // "search.filters.filter.creativeWorkPublisher.placeholder": "Publisher", + // TODO New key - Add a translation + "search.filters.filter.creativeWorkPublisher.placeholder": "Utgivare", + + // "search.filters.filter.creativeWorkPublisher.label": "Search publisher", + // TODO New key - Add a translation + "search.filters.filter.creativeWorkPublisher.label": "Sök utgivare", + + // "search.filters.filter.dateIssued.head": "Date", + // TODO New key - Add a translation + "search.filters.filter.dateIssued.head": "Datum", + + // "search.filters.filter.dateIssued.max.placeholder": "Maximum Date", + // TODO New key - Add a translation + "search.filters.filter.dateIssued.max.placeholder": "Datum (max)", + + // "search.filters.filter.dateIssued.max.label": "End", + // TODO New key - Add a translation + "search.filters.filter.dateIssued.max.label": "Till", + + // "search.filters.filter.dateIssued.min.placeholder": "Minimum Date", + // TODO New key - Add a translation + "search.filters.filter.dateIssued.min.placeholder": "Datum (min)", + + // "search.filters.filter.dateIssued.min.label": "Start", + // TODO New key - Add a translation + "search.filters.filter.dateIssued.min.label": "Från", + + // "search.filters.filter.dateSubmitted.head": "Date submitted", + // TODO New key - Add a translation + "search.filters.filter.dateSubmitted.head": "Skapad", + + // "search.filters.filter.dateSubmitted.placeholder": "Date submitted", + // TODO New key - Add a translation + "search.filters.filter.dateSubmitted.placeholder": "Skapad", + + // "search.filters.filter.dateSubmitted.label": "Search date submitted", + // TODO New key - Add a translation + "search.filters.filter.dateSubmitted.label": "Sök skapad datum", + + // "search.filters.filter.discoverable.head": "Non-discoverable", + // TODO New key - Add a translation + "search.filters.filter.discoverable.head": "Ej sökbar", + + // "search.filters.filter.withdrawn.head": "Withdrawn", + // TODO New key - Add a translation + "search.filters.filter.withdrawn.head": "Återkallad", + + // "search.filters.filter.entityType.head": "Item Type", + // TODO New key - Add a translation + "search.filters.filter.entityType.head": "Typ", + + // "search.filters.filter.entityType.placeholder": "Item Type", + // TODO New key - Add a translation + "search.filters.filter.entityType.placeholder": "Typ", + + // "search.filters.filter.entityType.label": "Search item type", + // TODO New key - Add a translation + "search.filters.filter.entityType.label": "Sök typ av post", + + // "search.filters.filter.expand": "Expand filter", + // TODO New key - Add a translation + "search.filters.filter.expand": "Expandera filter", + + // "search.filters.filter.has_content_in_original_bundle.head": "Has files", + // TODO New key - Add a translation + "search.filters.filter.has_content_in_original_bundle.head": "Innehåller filer", + + // "search.filters.filter.itemtype.head": "Type", + // TODO New key - Add a translation + "search.filters.filter.itemtype.head": "Typ", + + // "search.filters.filter.itemtype.placeholder": "Type", + // TODO New key - Add a translation + "search.filters.filter.itemtype.placeholder": "Typ", + + // "search.filters.filter.itemtype.label": "Search type", + // TODO New key - Add a translation + "search.filters.filter.itemtype.label": "Sök typ", + + // "search.filters.filter.jobTitle.head": "Job Title", + // TODO New key - Add a translation + "search.filters.filter.jobTitle.head": "Job Title", + + // "search.filters.filter.jobTitle.placeholder": "Job Title", + // TODO New key - Add a translation + "search.filters.filter.jobTitle.placeholder": "Job Title", + + // "search.filters.filter.jobTitle.label": "Search job title", + // TODO New key - Add a translation + "search.filters.filter.jobTitle.label": "Sök job title", + + // "search.filters.filter.knowsLanguage.head": "Known language", + // TODO New key - Add a translation + "search.filters.filter.knowsLanguage.head": "Känt språk", + + // "search.filters.filter.knowsLanguage.placeholder": "Known language", + // TODO New key - Add a translation + "search.filters.filter.knowsLanguage.placeholder": "Känt språk", + + // "search.filters.filter.knowsLanguage.label": "Search known language", + // TODO New key - Add a translation + "search.filters.filter.knowsLanguage.label": "Sök språk", + + // "search.filters.filter.namedresourcetype.head": "Status", + // TODO New key - Add a translation + "search.filters.filter.namedresourcetype.head": "Status", + + // "search.filters.filter.namedresourcetype.placeholder": "Status", + // TODO New key - Add a translation + "search.filters.filter.namedresourcetype.placeholder": "Status", + + // "search.filters.filter.namedresourcetype.label": "Search status", + // TODO New key - Add a translation + "search.filters.filter.namedresourcetype.label": "Sök status", + + // "search.filters.filter.objectpeople.head": "People", + // TODO New key - Add a translation + "search.filters.filter.objectpeople.head": "Personer", + + // "search.filters.filter.objectpeople.placeholder": "People", + // TODO New key - Add a translation + "search.filters.filter.objectpeople.placeholder": "Personer", + + // "search.filters.filter.objectpeople.label": "Search people", + // TODO New key - Add a translation + "search.filters.filter.objectpeople.label": "Sök personer", + + // "search.filters.filter.organizationAddressCountry.head": "Country", + // TODO New key - Add a translation + "search.filters.filter.organizationAddressCountry.head": "Land", + + // "search.filters.filter.organizationAddressCountry.placeholder": "Country", + // TODO New key - Add a translation + "search.filters.filter.organizationAddressCountry.placeholder": "Land", + + // "search.filters.filter.organizationAddressCountry.label": "Search country", + // TODO New key - Add a translation + "search.filters.filter.organizationAddressCountry.label": "Sök land", + + // "search.filters.filter.organizationAddressLocality.head": "City", + // TODO New key - Add a translation + "search.filters.filter.organizationAddressLocality.head": "Stad", + + // "search.filters.filter.organizationAddressLocality.placeholder": "City", + // TODO New key - Add a translation + "search.filters.filter.organizationAddressLocality.placeholder": "Stad", + + // "search.filters.filter.organizationAddressLocality.label": "Search city", + // TODO New key - Add a translation + "search.filters.filter.organizationAddressLocality.label": "Sök stad", + + // "search.filters.filter.organizationFoundingDate.head": "Date Founded", + // TODO New key - Add a translation + "search.filters.filter.organizationFoundingDate.head": "Grundad", + + // "search.filters.filter.organizationFoundingDate.placeholder": "Date Founded", + // TODO New key - Add a translation + "search.filters.filter.organizationFoundingDate.placeholder": "Grundad", + + // "search.filters.filter.organizationFoundingDate.label": "Search date founded", + // TODO New key - Add a translation + "search.filters.filter.organizationFoundingDate.label": "Sök grundad (datum)", + + // "search.filters.filter.scope.head": "Scope", + // TODO New key - Add a translation + "search.filters.filter.scope.head": "Scope", + + // "search.filters.filter.scope.placeholder": "Scope filter", + // TODO New key - Add a translation + "search.filters.filter.scope.placeholder": "Scope filter", + + // "search.filters.filter.scope.label": "Search scope filter", + // TODO New key - Add a translation + "search.filters.filter.scope.label": "Search scope filter", + + // "search.filters.filter.show-less": "Collapse", + // TODO New key - Add a translation + "search.filters.filter.show-less": "Visa färre", + + // "search.filters.filter.show-more": "Show more", + // TODO New key - Add a translation + "search.filters.filter.show-more": "Visa fler", + + // "search.filters.filter.subject.head": "Subject", + // TODO New key - Add a translation + "search.filters.filter.subject.head": "Ämne", + + // "search.filters.filter.subject.placeholder": "Subject", + // TODO New key - Add a translation + "search.filters.filter.subject.placeholder": "Ämne", + + // "search.filters.filter.subject.label": "Search subject", + // TODO New key - Add a translation + "search.filters.filter.subject.label": "Sök ämne", + + // "search.filters.filter.submitter.head": "Submitter", + // TODO New key - Add a translation + "search.filters.filter.submitter.head": "Skapad av", + + // "search.filters.filter.submitter.placeholder": "Submitter", + // TODO New key - Add a translation + "search.filters.filter.submitter.placeholder": "Skapad av", + + // "search.filters.filter.submitter.label": "Search submitter", + // TODO New key - Add a translation + "search.filters.filter.submitter.label": "Sök skapad av", + + + + // "search.filters.entityType.JournalIssue": "Journal Issue", + // TODO New key - Add a translation + "search.filters.entityType.JournalIssue": "Utgåva", + + // "search.filters.entityType.JournalVolume": "Journal Volume", + // TODO New key - Add a translation + "search.filters.entityType.JournalVolume": "Volym", + + // "search.filters.entityType.OrgUnit": "Organizational Unit", + // TODO New key - Add a translation + "search.filters.entityType.OrgUnit": "Organisatorisk enhet", + + // "search.filters.has_content_in_original_bundle.true": "Yes", + // TODO New key - Add a translation + "search.filters.has_content_in_original_bundle.true": "Ja", + + // "search.filters.has_content_in_original_bundle.false": "No", + // TODO New key - Add a translation + "search.filters.has_content_in_original_bundle.false": "Nej", + + // "search.filters.discoverable.true": "No", + // TODO New key - Add a translation + "search.filters.discoverable.true": "Nej", + + // "search.filters.discoverable.false": "Yes", + // TODO New key - Add a translation + "search.filters.discoverable.false": "Ja", + + // "search.filters.withdrawn.true": "Yes", + // TODO New key - Add a translation + "search.filters.withdrawn.true": "Ja", + + // "search.filters.withdrawn.false": "No", + // TODO New key - Add a translation + "search.filters.withdrawn.false": "Nej", + + + // "search.filters.head": "Filters", + // TODO New key - Add a translation + "search.filters.head": "Filtrera", + + // "search.filters.reset": "Reset filters", + // TODO New key - Add a translation + "search.filters.reset": "Rensa filter", + + // "search.filters.search.submit": "Submit", + // TODO New key - Add a translation + "search.filters.search.submit": "Submit", + + + + // "search.form.search": "Search", + // TODO New key - Add a translation + "search.form.search": "Sök", + + // "search.form.search_dspace": "All repository", + // TODO New key - Add a translation + "search.form.search_dspace": "Hela arkivet", + + // "search.form.scope.all": "All of DSpace", + // TODO New key - Add a translation + "search.form.scope.all": "Hela arkivet", + + + + // "search.results.head": "Search Results", + // TODO New key - Add a translation + "search.results.head": "Sökresultat", + + // "search.results.no-results": "Your search returned no results. Having trouble finding what you're looking for? Try putting", + // TODO New key - Add a translation + "search.results.no-results": "Sökningen resulterade inte i några träffar. Du kan testa att använda", + + // "search.results.no-results-link": "quotes around it", + // TODO New key - Add a translation + "search.results.no-results-link": "citationstecken före och efter sökfrågan", + + // "search.results.empty": "Your search returned no results.", + // TODO New key - Add a translation + "search.results.empty": "Sökningen resulterade inte i några träffar.", + + // "search.results.view-result": "View", + // TODO New key - Add a translation + "search.results.view-result": "Visa", + + + // "default.search.results.head": "Search Results", + // TODO New key - Add a translation + "default.search.results.head": "Sökresultat", + + + // "search.sidebar.close": "Back to results", + // TODO New key - Add a translation + "search.sidebar.close": "Tillbaka till sökresultaten", + + // "search.sidebar.filters.title": "Filters", + // TODO New key - Add a translation + "search.sidebar.filters.title": "Filtrera", + + // "search.sidebar.open": "Search Tools", + // TODO New key - Add a translation + "search.sidebar.open": "Sökverktyg", + + // "search.sidebar.results": "results", + // TODO New key - Add a translation + "search.sidebar.results": "resultat", + + // "search.sidebar.settings.rpp": "Results per page", + // TODO New key - Add a translation + "search.sidebar.settings.rpp": "Träffar per sida", + + // "search.sidebar.settings.sort-by": "Sort By", + // TODO New key - Add a translation + "search.sidebar.settings.sort-by": "Sortera efter", + + // "search.sidebar.settings.title": "Settings", + // TODO New key - Add a translation + "search.sidebar.settings.title": "Inställningar", + + + + // "search.view-switch.show-detail": "Show detail", + // TODO New key - Add a translation + "search.view-switch.show-detail": "Visa detaljer", + + // "search.view-switch.show-grid": "Show as grid", + // TODO New key - Add a translation + "search.view-switch.show-grid": "Visa som rutmönster", + + // "search.view-switch.show-list": "Show as list", + // TODO New key - Add a translation + "search.view-switch.show-list": "Visa som lista", + + // "sorting.ASC": "Ascending", + // TODO New key - Add a translation + "sorting.ASC": "Stigande", + + // "sorting.DESC": "Descending", + // TODO New key - Add a translation + "sorting.DESC": "Fallande", + + // "sorting.dc.title.ASC": "Title Ascending", + // TODO New key - Add a translation + "sorting.dc.title.ASC": "Titel", + + // "sorting.dc.title.DESC": "Title Descending", + // TODO New key - Add a translation + "sorting.dc.title.DESC": "Titel", + + // "sorting.score.ASC": "Least Relevant", + // TODO New key - Add a translation + "sorting.score.ASC": "Minst relevant", + + // "sorting.score.DESC": "Most Relevant", + // TODO New key - Add a translation + "sorting.score.DESC": "Mest relevant", + + // "sorting.dc.date.issued.ASC": "Date Issued Ascending", + // TODO New key - Add a translation + "sorting.dc.date.issued.ASC": "Datum (stigande)", + + // "sorting.dc.date.issued.DESC": "Date Issued Descending", + // TODO New key - Add a translation + "sorting.dc.date.issued.DESC": "Datum (fallande)", + + // "sorting.dc.date.accessioned.ASC": "Accessioned Date Ascending", + // TODO New key - Add a translation + "sorting.dc.date.accessioned.ASC": "Accessioned Date Ascending", + + // "sorting.dc.date.accessioned.DESC": "Accessioned Date Descending", + // TODO New key - Add a translation + "sorting.dc.date.accessioned.DESC": "Accessioned Date Descending", + + // "sorting.lastModified.ASC": "Last modified Ascending", + // TODO New key - Add a translation + "sorting.lastModified.ASC": "Senast ändrad (stigande)", + + // "sorting.lastModified.DESC": "Last modified Descending", + // TODO New key - Add a translation + "sorting.lastModified.DESC": "Senast ändrad (fallande)", + + + // "statistics.title": "Statistics", + // TODO New key - Add a translation + "statistics.title": "Statistik", + + // "statistics.header": "Statistics for {{ scope }}", + // TODO New key - Add a translation + "statistics.header": "Statistik för {{ scope }}", + + // "statistics.breadcrumbs": "Statistics", + // TODO New key - Add a translation + "statistics.breadcrumbs": "Statistik", + + // "statistics.page.no-data": "No data available", + // TODO New key - Add a translation + "statistics.page.no-data": "Data saknas", + + // "statistics.table.no-data": "No data available", + // TODO New key - Add a translation + "statistics.table.no-data": "Data saknas", + + // "statistics.table.title.TotalVisits": "Totalt antal besök", + // TODO New key - Add a translation + "statistics.table.title.TotalVisits": "Totalt antal besök", + + // "statistics.table.title.TotalVisitsPerMonth": "Totalt antal besök per month", + // TODO New key - Add a translation + "statistics.table.title.TotalVisitsPerMonth": "Totalt antal besök per månad", + + // "statistics.table.title.TotalDownloads": "File Visits", + // TODO New key - Add a translation + "statistics.table.title.TotalDownloads": "Nedladdningar", + + // "statistics.table.title.TopCountries": "Top country views", + // TODO New key - Add a translation + "statistics.table.title.TopCountries": "Visningar per land (topp)", + + // "statistics.table.title.TopCities": "Top city views", + // TODO New key - Add a translation + "statistics.table.title.TopCities": "Visningar per stad (topp)", + + // "statistics.table.header.views": "Views", + // TODO New key - Add a translation + "statistics.table.header.views": "Visningar", + + + + // "submission.edit.breadcrumbs": "Edit Submission", + // TODO New key - Add a translation + "submission.edit.breadcrumbs": "Redigera bidrag", + + // "submission.edit.title": "Edit Submission", + // TODO New key - Add a translation + "submission.edit.title": "Redigera bidrag", + + // "submission.general.cancel": "Cancel", + // TODO New key - Add a translation + "submission.general.cancel": "Avbryt", + + // "submission.general.cannot_submit": "You have not the privilege to make a new submission.", + // TODO New key - Add a translation + "submission.general.cannot_submit": "Du har inte behörighet att ladda upp nya bidrag.", + + // "submission.general.deposit": "Deposit", + // TODO New key - Add a translation + "submission.general.deposit": "Spara och publicera", + + // "submission.general.discard.confirm.cancel": "Cancel", + // TODO New key - Add a translation + "submission.general.discard.confirm.cancel": "Avbryt", + + // "submission.general.discard.confirm.info": "This operation can't be undone. Are you sure?", + // TODO New key - Add a translation + "submission.general.discard.confirm.info": "Är du säker? Denna åtgärd kan inte ångras.", + + // "submission.general.discard.confirm.submit": "Yes, I'm sure", + // TODO New key - Add a translation + "submission.general.discard.confirm.submit": "Ja", + + // "submission.general.discard.confirm.title": "Discard submission", + // TODO New key - Add a translation + "submission.general.discard.confirm.title": "Återkalla bidrag", + + // "submission.general.discard.submit": "Discard", + // TODO New key - Add a translation + "submission.general.discard.submit": "Återkalla", + + // "submission.general.info.saved": "Saved", + // TODO New key - Add a translation + "submission.general.info.saved": "Sparat", + + // "submission.general.info.pending-changes": "Unsaved changes", + // TODO New key - Add a translation + "submission.general.info.pending-changes": "Ändringar som inte har sparats", + + // "submission.general.save": "Save", + // TODO New key - Add a translation + "submission.general.save": "Spara", + + // "submission.general.save-later": "Save for later", + // TODO New key - Add a translation + "submission.general.save-later": "Spara till senare", + + + // "submission.import-external.page.title": "Import metadata from an external source", + // TODO New key - Add a translation + "submission.import-external.page.title": "Importera metadata från extern källa", + + // "submission.import-external.title": "Import metadata from an external source", + // TODO New key - Add a translation + "submission.import-external.title": "Importera metadata från extern källa", + + // "submission.import-external.title.Journal": "Import a journal from an external source", + // TODO New key - Add a translation + "submission.import-external.title.Journal": "Importera tidskrift från extern källa", + + // "submission.import-external.title.JournalIssue": "Import a journal issue from an external source", + // TODO New key - Add a translation + "submission.import-external.title.JournalIssue": "Importera tidskrift från extern källa", + + // "submission.import-external.title.JournalVolume": "Import a journal volume from an external source", + // TODO New key - Add a translation + "submission.import-external.title.JournalVolume": "Importera tidskriftsvolym från extern källa", + + // "submission.import-external.title.OrgUnit": "Import a publisher from an external source", + // TODO New key - Add a translation + "submission.import-external.title.OrgUnit": "Importera förlag från extern källa", + + // "submission.import-external.title.Person": "Import a person from an external source", + // TODO New key - Add a translation + "submission.import-external.title.Person": "Importera person från extern källa", + + // "submission.import-external.title.Project": "Import a project from an external source", + // TODO New key - Add a translation + "submission.import-external.title.Project": "Importera projekt från extern källa", + + // "submission.import-external.title.Publication": "Import a publication from an external source", + // TODO New key - Add a translation + "submission.import-external.title.Publication": "Importera publikation från extern källa", + + // "submission.import-external.title.none": "Import metadata from an external source", + // TODO New key - Add a translation + "submission.import-external.title.none": "Importera metadata från extern källa", + + // "submission.import-external.page.hint": "Enter a query above to find items from the web to import in to DSpace.", + // TODO New key - Add a translation + "submission.import-external.page.hint": "Ange en sökfråga för att hitta information på webben att importera.", + + // "submission.import-external.back-to-my-dspace": "Back to MyDSpace", + // TODO New key - Add a translation + "submission.import-external.back-to-my-dspace": "Tillbaka till MyDSpace", + + // "submission.import-external.search.placeholder": "Search the external source", + // TODO New key - Add a translation + "submission.import-external.search.placeholder": "Sök i extern källa", + + // "submission.import-external.search.button": "Search", + // TODO New key - Add a translation + "submission.import-external.search.button": "Sök", + + // "submission.import-external.search.button.hint": "Write some words to search", + // TODO New key - Add a translation + "submission.import-external.search.button.hint": "Ange sökord", + + // "submission.import-external.search.source.hint": "Pick an external source", + // TODO New key - Add a translation + "submission.import-external.search.source.hint": "Välj extern källa", + + // "submission.import-external.source.arxiv": "arXiv", + // TODO New key - Add a translation + "submission.import-external.source.arxiv": "arXiv", + + // "submission.import-external.source.loading": "Loading ...", + // TODO New key - Add a translation + "submission.import-external.source.loading": "Laddar ...", + + // "submission.import-external.source.sherpaJournal": "SHERPA Journals", + // TODO New key - Add a translation + "submission.import-external.source.sherpaJournal": "SHERPA Journals", + + // "submission.import-external.source.sherpaJournalIssn": "SHERPA Journals by ISSN", + // TODO New key - Add a translation + "submission.import-external.source.sherpaJournalIssn": "SHERPA Journals by ISSN", + + // "submission.import-external.source.sherpaPublisher": "SHERPA Publishers", + // TODO New key - Add a translation + "submission.import-external.source.sherpaPublisher": "SHERPA Publishers", + + // "submission.import-external.source.openAIREFunding": "Funding OpenAIRE API", + // TODO New key - Add a translation + "submission.import-external.source.openAIREFunding": "Funding OpenAIRE API", + + // "submission.import-external.source.orcid": "ORCID", + // TODO New key - Add a translation + "submission.import-external.source.orcid": "ORCID", + + // "submission.import-external.source.pubmed": "Pubmed", + // TODO New key - Add a translation + "submission.import-external.source.pubmed": "Pubmed", + + // "submission.import-external.source.lcname": "Library of Congress Names", + // TODO New key - Add a translation + "submission.import-external.source.lcname": "Library of Congress Names", + + // "submission.import-external.preview.title": "Item Preview", + // TODO New key - Add a translation + "submission.import-external.preview.title": "Förandsgranska post", + + // "submission.import-external.preview.subtitle": "The metadata below was imported from an external source. It will be pre-filled when you start the submission.", + // TODO New key - Add a translation + "submission.import-external.preview.subtitle": "Informationen nedan har importats från en extern källa. Den kommer att vara ifylld när du påbörjar ett nytt bidrag.", + + // "submission.import-external.preview.button.import": "Start submission", + // TODO New key - Add a translation + "submission.import-external.preview.button.import": "Påbörja bidrag", + + // "submission.import-external.preview.error.import.title": "Submission error", + // TODO New key - Add a translation + "submission.import-external.preview.error.import.title": "Fel", + + // "submission.import-external.preview.error.import.body": "An error occurs during the external source entry import process.", + // TODO New key - Add a translation + "submission.import-external.preview.error.import.body": "Ett fel uppstod när externa data skulle importeras.", + + // "submission.sections.describe.relationship-lookup.close": "Close", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.close": "Stäng", + + // "submission.sections.describe.relationship-lookup.external-source.added": "Successfully added local entry to the selection", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.added": "Successfully added local entry to the selection", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Import remote author", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Importera författare", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Import remote journal", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Importera tidskrift", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Import remote journal issue", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Importera tidskriftsexemplar", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Import remote journal volume", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Importera tidskriftsvolym", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Project", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Projekt", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "New Entity Added!", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "Ny information har lagts till!", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Project", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Projekt", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Funding OpenAIRE API", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Funding OpenAIRE API", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Import Remote Author", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Importera författare", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Successfully added local author to the selection", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Lokal författare har lagts till", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.new-entity": "Successfully imported and added external author to the selection", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.new-entity": "Extern författare har lagts till", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.authority": "Authority", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.authority": "Auktoritet", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.authority.new": "Import as a new local authority entry", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.authority.new": "Importera som ny lokal auktoritet", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel": "Cancel", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel": "Avbryt", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Select a collection to import new entries to", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Välj samling att importera till", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Entities", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Beståndsdelar", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.entities.new": "Import as a new local entity", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.entities.new": "Importera som ny lokal beståndsdel", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "Importing from LC Name", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "Importera från LC Name", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "Importing from ORCID", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "Importera från ORCID", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "Importing from Sherpa Journal", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "Importera från Sherpa Journal", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "Importing from Sherpa Publisher", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "Importera från Sherpa Publisher", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "Importing from PubMed", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "Importera från PubMed", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "Importing from arXiv", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "Importera från arXiv", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Import", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Importera", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Import Remote Journal", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Importera tidskrift", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Successfully added local journal to the selection", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Lokal tidskrift har lagts till", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Successfully imported and added external journal to the selection", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Extern tidskrift har importerats och lagts till", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title": "Import Remote Journal Issue", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title": "Importera externt tidskriftsexemplar", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Successfully added local journal issue to the selection", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Lokal tidskrift har lagts till", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity": "Successfully imported and added external journal issue to the selection", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity": "Externt tidskriftsexemplar har importerats och lagts till", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.title": "Import Remote Journal Volume", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.title": "Importera tidskriftsvolym", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Successfully added local journal volume to the selection", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Lokal tidskriftsvolym har lagts till", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Successfully imported and added external journal volume to the selection", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Extern tidskriftsvolym har importerats och lagts till", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Select a local match:", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Välj lokal träff:", + + // "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Deselect all", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Avmarkera alla", + + // "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Deselect page", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Avmarkera sida", + + // "submission.sections.describe.relationship-lookup.search-tab.loading": "Loading...", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.loading": "Laddar...", + + // "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Search query", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Sökfråga", + + // "submission.sections.describe.relationship-lookup.search-tab.search": "Go", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.search": "Kör", + + // "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Search...", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Sök...", + + // "submission.sections.describe.relationship-lookup.search-tab.select-all": "Select all", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.select-all": "Välj alla", + + // "submission.sections.describe.relationship-lookup.search-tab.select-page": "Select page", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.select-page": "Välj sida", + + // "submission.sections.describe.relationship-lookup.selected": "Selected {{ size }} items", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selected": "Har markerat {{ size }} poster", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Local Författare ({{ count }})", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Lokal författare ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Local Journals ({{ count }})", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Lokala tidskrifter ({{ count }})", + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Local Projects ({{ count }})", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Lokala projekt ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Local Publications ({{ count }})", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Lokala publikationer ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Local Författare ({{ count }})", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Lokala författare ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Local Organizational Units ({{ count }})", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Locala organisatoriska enheter ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Local Data Packages ({{ count }})", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Lokala datapaket ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Local Data Files ({{ count }})", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Lokala filer ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Local Journals ({{ count }})", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Lokala tidskrifter ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Local Journal Issues ({{ count }})", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Local Journal Issues ({{ count }})", + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Local Journal Issues ({{ count }})", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Lokala tidskriftsexemplar ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Local Journal Volumes ({{ count }})", + // TODO New key - Add a translation + "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 }})", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Lokala tidskriftsvolymer ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Sherpa Journals ({{ count }})", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Sherpa Journals ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaPublisher": "Sherpa Publishers ({{ count }})", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaPublisher": "Sherpa Publishers ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid": "ORCID ({{ count }})", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid": "ORCID ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "LC Names ({{ count }})", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "LC Names ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.arxiv": "arXiv ({{ count }})", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.arxiv": "arXiv ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Search for Funding Agencies", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Sök finansiärer", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Search for Funding", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Sök finansiering", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Search for Organizational Units", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Sök organisatoriska enheter", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Funding OpenAIRE API", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Funding OpenAIRE API", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projects", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projekt", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Funder of the Project", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Finansiär", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Funding OpenAIRE API", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Funding OpenAIRE API", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Project", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Projekt", + + // "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projects", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projekt", + + // "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Funder of the Project", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Projektets finansiär", + + + + + // "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Search...", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Sök...", + + // "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Current Selection ({{ count }})", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Aktuellt urval ({{ count }})", + + // "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Journal Issues", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Journal Issues", + // "submission.sections.describe.relationship-lookup.title.JournalIssue": "Journal Issues", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.title.JournalIssue": "Tidskriftsexemplar", + + // "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Journal Volumes", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Journal Volumes", + // "submission.sections.describe.relationship-lookup.title.JournalVolume": "Journal Volumes", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.title.JournalVolume": "Tidskriftsvolymer", + + // "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Journals", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Tidskrifter", + + // "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication": "Författare", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication": "Författare", + + // "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Funding Agency", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Finansiär", + // "submission.sections.describe.relationship-lookup.title.Project": "Projects", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.title.Project": "Projekt", + + // "submission.sections.describe.relationship-lookup.title.Publication": "Publications", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.title.Publication": "Publikationer", + + // "submission.sections.describe.relationship-lookup.title.Person": "Författare", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.title.Person": "Författare", + + // "submission.sections.describe.relationship-lookup.title.OrgUnit": "Organizational Units", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.title.OrgUnit": "Organisatoriska enheter", + + // "submission.sections.describe.relationship-lookup.title.DataPackage": "Data Packages", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.title.DataPackage": "Datapaket", + + // "submission.sections.describe.relationship-lookup.title.DataFile": "Data Files", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.title.DataFile": "Filer", + + // "submission.sections.describe.relationship-lookup.title.Funding Agency": "Funding Agency", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.title.Funding Agency": "Finansiär", + + // "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Funding", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Finansiering", + + // "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Parent Organizational Unit", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Organisatorisk förälder", + + // "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Toggle dropdown", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Växla dropdown", + + // "submission.sections.describe.relationship-lookup.selection-tab.settings": "Settings", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.settings": "Inställningar", + + // "submission.sections.describe.relationship-lookup.selection-tab.no-selection": "Your selection is currently empty.", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.no-selection": "Inget har valts.", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Selected Författare", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Valdra författare", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Selected Journals", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Valda tidskrifter", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Selected Journal Volume", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Valda tidskriftsvolymer", + // "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Selected Projects", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Valda projekt", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Selected Publications", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Valda publikationer", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Selected Författare", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Valda författare", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Selected Organizational Units", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Valda organisatoriska enheter", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Selected Data Packages", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Valda datapaket", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.DataFile": "Selected Data Files", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.DataFile": "Valda filer", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Selected Journals", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Valda tidskrifter", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Selected Issue", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Valt exemnplar", + // "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Selected Journal Volume", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Vald volym", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Selected Funding Agency", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Vald finansiär", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Selected Funding", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Vald finansiering", + // "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Selected Issue", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Valt exemplar ", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Selected Organizational Unit", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Vald organisatorisk enet", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Search Results", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Sökresultat", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Search Results", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Sökresultat", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Search Results", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Sökresultat", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Search Results", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Sökresultat", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Search Results", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Sökresultat", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Search Results", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Sökresultat", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Search Results", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Sökresultat", + + // "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.", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Vill du spara \"{{ value }}\" som en namnvariation för denna person? Om inte så kan du fortfarande använda det i detta bidrag.", + + // "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Save a new name variant", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Spara en ny namnvariation", + + // "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Use only for this submission", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Använd bara i detta bidrag", + + // "submission.sections.ccLicense.type": "License Type", + // TODO New key - Add a translation + "submission.sections.ccLicense.type": "Typ av license", + + // "submission.sections.ccLicense.select": "Select a license type…", + // TODO New key - Add a translation + "submission.sections.ccLicense.select": "Välj licenstyp…", + + // "submission.sections.ccLicense.change": "Change your license type…", + // TODO New key - Add a translation + "submission.sections.ccLicense.change": "Ändra licenstyp…", + + // "submission.sections.ccLicense.none": "No licenses available", + // TODO New key - Add a translation + "submission.sections.ccLicense.none": "Det finns inga licenser", + + // "submission.sections.ccLicense.option.select": "Select an option…", + // TODO New key - Add a translation + "submission.sections.ccLicense.option.select": "Välj…", + + // "submission.sections.ccLicense.link": "You’ve selected the following license:", + // TODO New key - Add a translation + "submission.sections.ccLicense.link": "Du har valt följande licens:", + + // "submission.sections.ccLicense.confirmation": "I grant the license above", + // TODO New key - Add a translation + "submission.sections.ccLicense.confirmation": "Jag beviljar licensen ovan", + + // "submission.sections.general.add-more": "Add more", + // TODO New key - Add a translation + "submission.sections.general.add-more": "Lägg till fler", + + // "submission.sections.general.collection": "Collection", + // TODO New key - Add a translation + "submission.sections.general.collection": "Samling", + + // "submission.sections.general.deposit_error_notice": "There was an issue when submitting the item, please try again later.", + // TODO New key - Add a translation + "submission.sections.general.deposit_error_notice": "Ett fel uppstod, försök igen senare.", + + // "submission.sections.general.deposit_success_notice": "Submission deposited successfully.", + // TODO New key - Add a translation + "submission.sections.general.deposit_success_notice": "Bidraget har deponerats.", + + // "submission.sections.general.discard_error_notice": "There was an issue when discarding the item, please try again later.", + // TODO New key - Add a translation + "submission.sections.general.discard_error_notice": "Ett fel har uppstått. Försök igen senare.", + + // "submission.sections.general.discard_success_notice": "Submission discarded successfully.", + // TODO New key - Add a translation + "submission.sections.general.discard_success_notice": "Bidraget har dragits tillbaka.", + + // "submission.sections.general.metadata-extracted": "New metadata have been extracted and added to the {{sectionId}} section.", + // TODO New key - Add a translation + "submission.sections.general.metadata-extracted": "Nya metadata har extraherats och lagts till i {{sectionId}}.", + + // "submission.sections.general.metadata-extracted-new-section": "New {{sectionId}} section has been added to submission.", + // TODO New key - Add a translation + "submission.sections.general.metadata-extracted-new-section": "Ny sektion {{sectionId}} har lagts till i bidraget.", + + // "submission.sections.general.no-collection": "No collection found", + // TODO New key - Add a translation + "submission.sections.general.no-collection": "Ingen samling kunde hittas", + + // "submission.sections.general.no-sections": "No options available", + // TODO New key - Add a translation + "submission.sections.general.no-sections": "Det finns inga alternativ att välja", + + // "submission.sections.general.save_error_notice": "There was an issue when saving the item, please try again later.", + // TODO New key - Add a translation + "submission.sections.general.save_error_notice": "Ett fel uppstod när posten skulle sparas. Försök igen senare.", + + // "submission.sections.general.save_success_notice": "Submission saved successfully.", + // TODO New key - Add a translation + "submission.sections.general.save_success_notice": "Bidraget har sparats.", + + // "submission.sections.general.search-collection": "Search for a collection", + // TODO New key - Add a translation + "submission.sections.general.search-collection": "Sök efter samling", + + // "submission.sections.general.sections_not_valid": "There are incomplete sections.", + // TODO New key - Add a translation + "submission.sections.general.sections_not_valid": "Det saknas data i vissa delar.", + + + + // "submission.sections.submit.progressbar.accessCondition": "Item access conditions", + // TODO New key - Add a translation + "submission.sections.submit.progressbar.accessCondition": "Villkor för åtkomst till post", + + // "submission.sections.submit.progressbar.CClicense": "Creative commons license", + // TODO New key - Add a translation + "submission.sections.submit.progressbar.CClicense": "Creative commons licens", + + // "submission.sections.submit.progressbar.describe.recycle": "Recycle", + // TODO New key - Add a translation + "submission.sections.submit.progressbar.describe.recycle": "Återanvänd", + + // "submission.sections.submit.progressbar.describe.stepcustom": "Describe", + // TODO New key - Add a translation + "submission.sections.submit.progressbar.describe.stepcustom": "Beskriv", + + // "submission.sections.submit.progressbar.describe.stepone": "Describe", + // TODO New key - Add a translation + "submission.sections.submit.progressbar.describe.stepone": "Beskriv", + + // "submission.sections.submit.progressbar.describe.steptwo": "Describe", + // TODO New key - Add a translation + "submission.sections.submit.progressbar.describe.steptwo": "Beskriv", + + // "submission.sections.submit.progressbar.detect-duplicate": "Potential duplicates", + // TODO New key - Add a translation + "submission.sections.submit.progressbar.detect-duplicate": "Potentiell dubblett", + + // "submission.sections.submit.progressbar.license": "Deposit license", + // TODO New key - Add a translation + "submission.sections.submit.progressbar.license": "Licensvillkor", + + // "submission.sections.submit.progressbar.upload": "Upload files", + // TODO New key - Add a translation + "submission.sections.submit.progressbar.upload": "Ladda upp filer", + + + + // "submission.sections.status.errors.title": "Errors", + // TODO New key - Add a translation + "submission.sections.status.errors.title": "Fel", + + // "submission.sections.status.valid.title": "Valid", + // TODO New key - Add a translation + "submission.sections.status.valid.title": "Giltig", + + // "submission.sections.status.warnings.title": "Warnings", + // TODO New key - Add a translation + "submission.sections.status.warnings.title": "Varningar", + + // "submission.sections.status.errors.aria": "has errors", + // TODO New key - Add a translation + "submission.sections.status.errors.aria": "inneåller fel", + + // "submission.sections.status.valid.aria": "is valid", + // TODO New key - Add a translation + "submission.sections.status.valid.aria": "är giltig", + + // "submission.sections.status.warnings.aria": "has warnings", + // TODO New key - Add a translation + "submission.sections.status.warnings.aria": "ger varningar", + + // "submission.sections.toggle.open": "Open section", + // TODO New key - Add a translation + "submission.sections.toggle.open": "Öppna sektion", + + // "submission.sections.toggle.close": "Close section", + // TODO New key - Add a translation + "submission.sections.toggle.close": "Stäng sektion", + + // "submission.sections.toggle.aria.open": "Expand {{sectionHeader}} section", + // TODO New key - Add a translation + "submission.sections.toggle.aria.open": "Expandera {{sectionHeader}} sektion", + + // "submission.sections.toggle.aria.close": "Collapse {{sectionHeader}} section", + // TODO New key - Add a translation + "submission.sections.toggle.aria.close": "Fäll ihop {{sectionHeader}} sektion", + + // "submission.sections.upload.delete.confirm.cancel": "Cancel", + // TODO New key - Add a translation + "submission.sections.upload.delete.confirm.cancel": "Avbryt", + + // "submission.sections.upload.delete.confirm.info": "This operation can't be undone. Are you sure?", + // TODO New key - Add a translation + "submission.sections.upload.delete.confirm.info": "Är du säker? Detta kan inte ångras.", + + // "submission.sections.upload.delete.confirm.submit": "Yes, I'm sure", + // TODO New key - Add a translation + "submission.sections.upload.delete.confirm.submit": "Ja", + + // "submission.sections.upload.delete.confirm.title": "Delete bitstream", + // TODO New key - Add a translation + "submission.sections.upload.delete.confirm.title": "Radera fil", + + // "submission.sections.upload.delete.submit": "Delete", + // TODO New key - Add a translation + "submission.sections.upload.delete.submit": "Radera", + + // "submission.sections.upload.download.title": "Download bitstream", + // TODO New key - Add a translation + "submission.sections.upload.download.title": "Ladda ner fil", + + // "submission.sections.upload.drop-message": "Drop files to attach them to the item", + // TODO New key - Add a translation + "submission.sections.upload.drop-message": "Släpp filer för att lägga till dem i posten", + + // "submission.sections.upload.edit.title": "Edit bitstream", + // TODO New key - Add a translation + "submission.sections.upload.edit.title": "Redigera fil", + + // "submission.sections.upload.form.access-condition-label": "Access condition type", + // TODO New key - Add a translation + "submission.sections.upload.form.access-condition-label": "Typ av villkor för åtkomst", + + // "submission.sections.upload.form.access-condition-hint": "Select an access condition to apply on the bitstream once the item is deposited", + // TODO New key - Add a translation + "submission.sections.upload.form.access-condition-hint": "Välj typ av villkor för åtkomst till filen när posten har sparats", + + // "submission.sections.upload.form.date-required": "Date is required.", + // TODO New key - Add a translation + "submission.sections.upload.form.date-required": "Datum krävs.", + + // "submission.sections.upload.form.date-required-from": "Grant access from date is required.", + // TODO New key - Add a translation + "submission.sections.upload.form.date-required-from": "Du måste ange från vilket datum den skall vara tillgänglig.", + + // "submission.sections.upload.form.date-required-until": "Grant access until date is required.", + // TODO New key - Add a translation + "submission.sections.upload.form.date-required-until": "Du måste ange till vilket datum den skall vara tillgänglig.", + + // "submission.sections.upload.form.from-label": "Grant access from", + // TODO New key - Add a translation + "submission.sections.upload.form.from-label": "Tillåt åtkomst från", + + // "submission.sections.upload.form.from-hint": "Select the date from which the related access condition is applied", + // TODO New key - Add a translation + "submission.sections.upload.form.from-hint": "Välj datum från när villkoren för åtkomst skall gälla", + + // "submission.sections.upload.form.from-placeholder": "From", + // TODO New key - Add a translation + "submission.sections.upload.form.from-placeholder": "Från", + + // "submission.sections.upload.form.group-label": "Group", + // TODO New key - Add a translation + "submission.sections.upload.form.group-label": "Grupp", + + // "submission.sections.upload.form.group-required": "Group is required.", + // TODO New key - Add a translation + "submission.sections.upload.form.group-required": "Du måste välja en grupp.", + + // "submission.sections.upload.form.until-label": "Grant access until", + // TODO New key - Add a translation + "submission.sections.upload.form.until-label": "Bevilja åtkomst till", + + // "submission.sections.upload.form.until-hint": "Select the date until which the related access condition is applied", + // TODO New key - Add a translation + "submission.sections.upload.form.until-hint": "Välj datum till när villkoren för åtkomst skall gälla", + + // "submission.sections.upload.form.until-placeholder": "Until", + // TODO New key - Add a translation + "submission.sections.upload.form.until-placeholder": "Till", + + // "submission.sections.upload.header.policy.default.nolist": "Uploaded files in the {{collectionName}} collection will be accessible according to the following group(s):", + // TODO New key - Add a translation + "submission.sections.upload.header.policy.default.nolist": "Uppladdade filer i samlingen {{collectionName}} kommer att vara åtkomliga för följande grupp(er):", + + // "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):", + // TODO New key - Add a translation + "submission.sections.upload.header.policy.default.withlist": "Notera att uppladdade filer i samlingen {{collectionName}} också kommer att vara åtkompliga för följande grupp(er):", + + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // TODO New key - Add a translation + "submission.sections.upload.info": "Här visas samtliga filer som ingår i posten. Du kan uppdatera filernas metadata och villkor för åtkomst, samt ladda upp nya filer genom att dra och släppa dem här", + + // "submission.sections.upload.no-entry": "No", + // TODO New key - Add a translation + "submission.sections.upload.no-entry": "Nej", + + // "submission.sections.upload.no-file-uploaded": "No file uploaded yet.", + // TODO New key - Add a translation + "submission.sections.upload.no-file-uploaded": "Inga filer har laddats upp.", + + // "submission.sections.upload.save-metadata": "Save metadata", + // TODO New key - Add a translation + "submission.sections.upload.save-metadata": "Spara metadata", + + // "submission.sections.upload.undo": "Cancel", + // TODO New key - Add a translation + "submission.sections.upload.undo": "Avbryt", + + // "submission.sections.upload.upload-failed": "Upload failed", + // TODO New key - Add a translation + "submission.sections.upload.upload-failed": "Uppladdningen misslyckades", + + // "submission.sections.upload.upload-successful": "Upload successful", + // TODO New key - Add a translation + "submission.sections.upload.upload-successful": "Uppladdningen lyckades", + + // "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.", + // TODO New key - Add a translation + "submission.sections.accesses.form.discoverable-description": "När denna är markerad kommer posten att vara sökbar och visas i listor. I annat fall så kommer den bara att kunna nås med en direktlänk.", + + // "submission.sections.accesses.form.discoverable-label": "Discoverable", + // TODO New key - Add a translation + "submission.sections.accesses.form.discoverable-label": "Synlig och sökbar", + + // "submission.sections.accesses.form.access-condition-label": "Access condition type", + // TODO New key - Add a translation + "submission.sections.accesses.form.access-condition-label": "Typ av villkor för åtkomst", + + // "submission.sections.accesses.form.access-condition-hint": "Select an access condition to apply on the item once it is deposited", + // TODO New key - Add a translation + "submission.sections.accesses.form.access-condition-hint": "Välj typ av åtkomst som skall gälla när posten har deponerats", + + // "submission.sections.accesses.form.date-required": "Date is required.", + // TODO New key - Add a translation + "submission.sections.accesses.form.date-required": "Du måste ange datum.", + + // "submission.sections.accesses.form.date-required-from": "Grant access from date is required.", + // TODO New key - Add a translation + "submission.sections.accesses.form.date-required-from": "Du måste ange datum från när villkoren skall gälla.", + + // "submission.sections.accesses.form.date-required-until": "Grant access until date is required.", + // TODO New key - Add a translation + "submission.sections.accesses.form.date-required-until": "Du måste ange datum till när villkoren skall gälla.", + + // "submission.sections.accesses.form.from-label": "Grant access from", + // TODO New key - Add a translation + "submission.sections.accesses.form.from-label": "Bevilja åtkomst från", + + // "submission.sections.accesses.form.from-hint": "Select the date from which the related access condition is applied", + // TODO New key - Add a translation + "submission.sections.accesses.form.from-hint": "Välj datum från när villkoren för åtkomst skall gälla", + + // "submission.sections.accesses.form.from-placeholder": "From", + // TODO New key - Add a translation + "submission.sections.accesses.form.from-placeholder": "Från", + + // "submission.sections.accesses.form.group-label": "Group", + // TODO New key - Add a translation + "submission.sections.accesses.form.group-label": "Grupp", + + // "submission.sections.accesses.form.group-required": "Group is required.", + // TODO New key - Add a translation + "submission.sections.accesses.form.group-required": "Du måste välja grupp.", + + // "submission.sections.accesses.form.until-label": "Grant access until", + // TODO New key - Add a translation + "submission.sections.accesses.form.until-label": "Bevilja åtkomst till", + + // "submission.sections.accesses.form.until-hint": "Select the date until which the related access condition is applied", + // TODO New key - Add a translation + "submission.sections.accesses.form.until-hint": "Välj datum till när villkoren för åtkomst skall gälla", + + // "submission.sections.accesses.form.until-placeholder": "Until", + // TODO New key - Add a translation + "submission.sections.accesses.form.until-placeholder": "Till", + + + // "submission.submit.breadcrumbs": "New submission", + // TODO New key - Add a translation + "submission.submit.breadcrumbs": "Nytt bidrag", + + // "submission.submit.title": "New submission", + // TODO New key - Add a translation + "submission.submit.title": "Nytt bidrag", + + + + // "submission.workflow.generic.delete": "Delete", + // TODO New key - Add a translation + "submission.workflow.generic.delete": "Radera", + + // "submission.workflow.generic.delete-help": "If you would to discard this item, select \"Delete\". You will then be asked to confirm it.", + // TODO New key - Add a translation + "submission.workflow.generic.delete-help": "Välj \"Radera\" om du vill ta bort detta bidrag. Du kommer att få bekräfta detta.", + + // "submission.workflow.generic.edit": "Edit", + // TODO New key - Add a translation + "submission.workflow.generic.edit": "Redigera", + + // "submission.workflow.generic.edit-help": "Select this option to change the item's metadata.", + // TODO New key - Add a translation + "submission.workflow.generic.edit-help": "Redigera postens metadata.", + + // "submission.workflow.generic.view": "View", + // TODO New key - Add a translation + "submission.workflow.generic.view": "Visa", + + // "submission.workflow.generic.view-help": "Select this option to view the item's metadata.", + // TODO New key - Add a translation + "submission.workflow.generic.view-help": "Visa postens metadata.", + + + + // "submission.workflow.tasks.claimed.approve": "Approve", + // TODO New key - Add a translation + "submission.workflow.tasks.claimed.approve": "Godkänn", + + // "submission.workflow.tasks.claimed.approve_help": "If you have reviewed the item and it is suitable for inclusion in the collection, select \"Approve\".", + // TODO New key - Add a translation + "submission.workflow.tasks.claimed.approve_help": "Om du har granskat posten och funnit att den kan ingå i samlingen, välj \"Godkänn\".", + + // "submission.workflow.tasks.claimed.edit": "Edit", + // TODO New key - Add a translation + "submission.workflow.tasks.claimed.edit": "Redigera", + + // "submission.workflow.tasks.claimed.edit_help": "Select this option to change the item's metadata.", + // TODO New key - Add a translation + "submission.workflow.tasks.claimed.edit_help": "Redigera postens metadata.", + + // "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.", + // TODO New key - Add a translation + "submission.workflow.tasks.claimed.reject.reason.info": "Ange orsaken till att du inte godkänner bidraget i rutan nedan, samt om uppladdaren skall ändra något och skicka in igen.", + + // "submission.workflow.tasks.claimed.reject.reason.placeholder": "Describe the reason of reject", + // TODO New key - Add a translation + "submission.workflow.tasks.claimed.reject.reason.placeholder": "Beskriv orsak", + + // "submission.workflow.tasks.claimed.reject.reason.submit": "Reject item", + // TODO New key - Add a translation + "submission.workflow.tasks.claimed.reject.reason.submit": "Godkänn inte bidrag", + + // "submission.workflow.tasks.claimed.reject.reason.title": "Reason", + // TODO New key - Add a translation + "submission.workflow.tasks.claimed.reject.reason.title": "Orsak", + + // "submission.workflow.tasks.claimed.reject.submit": "Reject", + // TODO New key - Add a translation + "submission.workflow.tasks.claimed.reject.submit": "Neka", + + // "submission.workflow.tasks.claimed.reject_help": "If you have reviewed the item and found it is not suitable for inclusion in the collection, select \"Reject\". You will then be asked to enter a message indicating why the item is unsuitable, and whether the submitter should change something and resubmit.", + // TODO New key - Add a translation + "submission.workflow.tasks.claimed.reject_help": "Om du har granskat posten och funnit att den inte uppfyller villkoren för att ingå i samlingen, välj \"Neka\". Du kommer du att få ange orsaken till detta, samt om uppladdaren skall ändra något och försöka igen.", + + // "submission.workflow.tasks.claimed.return": "Return to pool", + // TODO New key - Add a translation + "submission.workflow.tasks.claimed.return": "Returnera till uppladdningspoolen", + + // "submission.workflow.tasks.claimed.return_help": "Return the task to the pool so that another user may perform the task.", + // TODO New key - Add a translation + "submission.workflow.tasks.claimed.return_help": "Returnera till uppladdningspoolen så att den blir tillgänglig för andra användare.", + + + + // "submission.workflow.tasks.generic.error": "Error occurred during operation...", + // TODO New key - Add a translation + "submission.workflow.tasks.generic.error": "Ett fel har uppstått...", + + // "submission.workflow.tasks.generic.processing": "Processing...", + // TODO New key - Add a translation + "submission.workflow.tasks.generic.processing": "Bearbetar...", + + // "submission.workflow.tasks.generic.submitter": "Submitter", + // TODO New key - Add a translation + "submission.workflow.tasks.generic.submitter": "Uppladdare", + + // "submission.workflow.tasks.generic.success": "Operation successful", + // TODO New key - Add a translation + "submission.workflow.tasks.generic.success": "Operationen lyckades", + + + + // "submission.workflow.tasks.pool.claim": "Claim", + // TODO New key - Add a translation + "submission.workflow.tasks.pool.claim": "Claim", + + // "submission.workflow.tasks.pool.claim_help": "Assign this task to yourself.", + // TODO New key - Add a translation + "submission.workflow.tasks.pool.claim_help": "Ta denna uppgift själv.", + + // "submission.workflow.tasks.pool.hide-detail": "Hide detail", + // TODO New key - Add a translation + "submission.workflow.tasks.pool.hide-detail": "Göm detaljvy", + + // "submission.workflow.tasks.pool.show-detail": "Show detail", + // TODO New key - Add a translation + "submission.workflow.tasks.pool.show-detail": "Visa detaljvy", + + + + // "thumbnail.default.alt": "Thumbnail Image", + // TODO New key - Add a translation + "thumbnail.default.alt": "Bild (thumbnail)", + + // "thumbnail.default.placeholder": "No Thumbnail Available", + // TODO New key - Add a translation + "thumbnail.default.placeholder": "Bild saknas", + + // "thumbnail.project.alt": "Project Logo", + // TODO New key - Add a translation + "thumbnail.project.alt": "Projekt logotyp", + + // "thumbnail.project.placeholder": "Project Placeholder Image", + // TODO New key - Add a translation + "thumbnail.project.placeholder": "Projekt bild (platshållare)", + + // "thumbnail.orgunit.alt": "OrgUnit Logo", + // TODO New key - Add a translation + "thumbnail.orgunit.alt": "Organisationens logotyp", + + // "thumbnail.orgunit.placeholder": "OrgUnit Placeholder Image", + // TODO New key - Add a translation + "thumbnail.orgunit.placeholder": "Organisationens bild (platshållare)", + + // "thumbnail.person.alt": "Profile Picture", + // TODO New key - Add a translation + "thumbnail.person.alt": "Profilbild", + + // "thumbnail.person.placeholder": "No Profile Picture Available", + // TODO New key - Add a translation + "thumbnail.person.placeholder": "Profilbild saknas", + + + + // "title": "DSpace", + // TODO New key - Add a translation + "title": "DSpace", + + + + // "vocabulary-treeview.header": "Hierarchical tree view", + // TODO New key - Add a translation + "vocabulary-treeview.header": "Hierarkisk trädvy", + + // "vocabulary-treeview.load-more": "Load more", + // TODO New key - Add a translation + "vocabulary-treeview.load-more": "Ladda fler", + + // "vocabulary-treeview.search.form.reset": "Reset", + // TODO New key - Add a translation + "vocabulary-treeview.search.form.reset": "Återställ", + + // "vocabulary-treeview.search.form.search": "Search", + // TODO New key - Add a translation + "vocabulary-treeview.search.form.search": "Sök", + + // "vocabulary-treeview.search.no-result": "There were no items to show", + // TODO New key - Add a translation + "vocabulary-treeview.search.no-result": "Det finns inga poster att visa", + + // "vocabulary-treeview.tree.description.nsi": "The Norwegian Science Index", + // TODO New key - Add a translation + "vocabulary-treeview.tree.description.nsi": "The Norwegian Science Index", + + // "vocabulary-treeview.tree.description.srsc": "Research Subject Categories", + // TODO New key - Add a translation + "vocabulary-treeview.tree.description.srsc": "Research Subject Categories", + + + + // "uploader.browse": "browse", + // TODO New key - Add a translation + "uploader.browse": "sök efter filen på din dator", + + // "uploader.drag-message": "Drag & Drop your files here", + // TODO New key - Add a translation + "uploader.drag-message": "Dra och släpp filerna här", + + // "uploader.delete.btn-title": "Delete", + // TODO New key - Add a translation + "uploader.delete.btn-title": "Radera", + + // "uploader.or": ", or ", + // TODO New key - Add a translation + "uploader.or": ", eller ", + + // "uploader.processing": "Processing", + // TODO New key - Add a translation + "uploader.processing": "Bearbetar", + + // "uploader.queue-length": "Queue length", + // TODO New key - Add a translation + "uploader.queue-length": "Kölängd", + + // "virtual-metadata.delete-item.info": "Select the types for which you want to save the virtual metadata as real metadata", + // TODO New key - Add a translation + "virtual-metadata.delete-item.info": "Välj vilka typer ", + + // "virtual-metadata.delete-item.modal-head": "The virtual metadata of this relation", + // TODO New key - Add a translation + "virtual-metadata.delete-item.modal-head": "Denna relations virtuella metadata", + + // "virtual-metadata.delete-relationship.modal-head": "Select the items for which you want to save the virtual metadata as real metadata", + // TODO New key - Add a translation + "virtual-metadata.delete-relationship.modal-head": "Välj poster som dessa metadata skall sparas för", + + + + // "workspace.search.results.head": "Your submissions", + // TODO New key - Add a translation + "workspace.search.results.head": "Dina registreringar", + + // "workflowAdmin.search.results.head": "Administer Workflow", + // TODO New key - Add a translation + "workflowAdmin.search.results.head": "Administrera arbetsflöde", + + // "workflow.search.results.head": "Workflow tasks", + // TODO New key - Add a translation + "workflow.search.results.head": "Uppgifter", + + + + // "workflow-item.edit.breadcrumbs": "Edit workflowitem", + // TODO New key - Add a translation + "workflow-item.edit.breadcrumbs": "Redigera post i arbetsflöde", + + // "workflow-item.edit.title": "Edit workflowitem", + // TODO New key - Add a translation + "workflow-item.edit.title": "Redigera post i arbetsflöde", + + // "workflow-item.delete.notification.success.title": "Deleted", + // TODO New key - Add a translation + "workflow-item.delete.notification.success.title": "Raderad", + + // "workflow-item.delete.notification.success.content": "This workflow item was successfully deleted", + // TODO New key - Add a translation + "workflow-item.delete.notification.success.content": "Posten har raderats", + + // "workflow-item.delete.notification.error.title": "Something went wrong", + // TODO New key - Add a translation + "workflow-item.delete.notification.error.title": "Något gick fel", + + // "workflow-item.delete.notification.error.content": "The workflow item could not be deleted", + // TODO New key - Add a translation + "workflow-item.delete.notification.error.content": "Posten kunde inte raderas", + + // "workflow-item.delete.title": "Delete workflow item", + // TODO New key - Add a translation + "workflow-item.delete.title": "Radera post i arbetsflöde", + + // "workflow-item.delete.header": "Delete workflow item", + // TODO New key - Add a translation + "workflow-item.delete.header": "Radera post i arbetsflöde", + + // "workflow-item.delete.button.cancel": "Cancel", + // TODO New key - Add a translation + "workflow-item.delete.button.cancel": "Avbryt", + + // "workflow-item.delete.button.confirm": "Delete", + // TODO New key - Add a translation + "workflow-item.delete.button.confirm": "Radera", + + + // "workflow-item.send-back.notification.success.title": "Sent back to submitter", + // TODO New key - Add a translation + "workflow-item.send-back.notification.success.title": "Skicka tillbaka till uppladdare", + + // "workflow-item.send-back.notification.success.content": "This workflow item was successfully sent back to the submitter", + // TODO New key - Add a translation + "workflow-item.send-back.notification.success.content": "Posten i arbetsflödet har skickats tillbaka till uppladdaren", + + // "workflow-item.send-back.notification.error.title": "Something went wrong", + // TODO New key - Add a translation + "workflow-item.send-back.notification.error.title": "Något gick fel", + + // "workflow-item.send-back.notification.error.content": "The workflow item could not be sent back to the submitter", + // TODO New key - Add a translation + "workflow-item.send-back.notification.error.content": "Posten i arbetsflödet kunde inte skickas tillbaka", + + // "workflow-item.send-back.title": "Send workflow item back to submitter", + // TODO New key - Add a translation + "workflow-item.send-back.title": "Skicka tillbaka post i arbetsflödet till uppladdare", + + // "workflow-item.send-back.header": "Send workflow item back to submitter", + // TODO New key - Add a translation + "workflow-item.send-back.header": "Skicka tillbaka post i arbetsflödet till uppladdare", + + // "workflow-item.send-back.button.cancel": "Cancel", + // TODO New key - Add a translation + "workflow-item.send-back.button.cancel": "Avbryt", + + // "workflow-item.send-back.button.confirm": "Send back", + // TODO New key - Add a translation + "workflow-item.send-back.button.confirm": "Skicka tillbaka", + + // "workflow-item.view.breadcrumbs": "Workflow View", + // TODO New key - Add a translation + "workflow-item.view.breadcrumbs": "Arbetsflöde", + + + // "idle-modal.header": "Session will expire soon", + // TODO New key - Add a translation + "idle-modal.header": "Sessionen kommer att upphöra snart", + + // "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?", + // TODO New key - Add a translation + "idle-modal.info": "Sessionen kommer att upphöra efter {{ timeToExpire }} minuters inaktivitet. Vill du fortsätta eller logga ut?", + + // "idle-modal.log-out": "Log out", + // TODO New key - Add a translation + "idle-modal.log-out": "Logga ut", + + // "idle-modal.extend-session": "Extend session" + // TODO New key - Add a translation + "idle-modal.extend-session": "Fortsätt" + +} From cb4620e536cd448d26b88891ec6abeb88622f608 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Wed, 24 Aug 2022 10:42:37 -0500 Subject: [PATCH 30/39] Enable Swedish language --- config/config.example.yml | 3 +++ src/config/default-app-config.ts | 1 + 2 files changed, 4 insertions(+) diff --git a/config/config.example.yml b/config/config.example.yml index 9e1fcc8d1e..ae733e0be5 100644 --- a/config/config.example.yml +++ b/config/config.example.yml @@ -150,6 +150,9 @@ languages: - code: fi label: Suomi active: true + - code: sv + label: Svenska + active: true - code: tr label: Türkçe active: true diff --git a/src/config/default-app-config.ts b/src/config/default-app-config.ts index 11761af49a..d2d0608a03 100644 --- a/src/config/default-app-config.ts +++ b/src/config/default-app-config.ts @@ -193,6 +193,7 @@ export class DefaultAppConfig implements AppConfig { { code: 'pt-PT', label: 'Português', active: true }, { code: 'pt-BR', label: 'Português do Brasil', active: true }, { code: 'fi', label: 'Suomi', active: true }, + { code: 'sv', label: 'Svenska', active: true }, { code: 'tr', label: 'Türkçe', active: true }, { code: 'bn', label: 'বাংলা', active: true } ]; From 528c4c31ea3a5c495f9306340d256d73f5e8e3b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Fern=C3=A1ndez=20Celorio?= Date: Thu, 25 Aug 2022 11:41:24 +0000 Subject: [PATCH 31/39] Spanish translation updated --- src/assets/i18n/es.json5 | 8487 ++++++++++++++++++++++---------------- 1 file changed, 4950 insertions(+), 3537 deletions(-) diff --git a/src/assets/i18n/es.json5 b/src/assets/i18n/es.json5 index 5d40c501f1..b738578fc6 100644 --- a/src/assets/i18n/es.json5 +++ b/src/assets/i18n/es.json5 @@ -1,5318 +1,6265 @@ { - // "401.help": "You're not authorized to access this page. You can use the button below to get back to the home page.", - "401.help": "No está autorizado a acceder a esta página. Puede utilizar el botón de abajo para volver a la página de inicio.", + // "401.help": "You're not authorized to access this page. You can use the button below to get back to the home page.", + "401.help": "No está autorizado a acceder a esta página. Puede utilizar el botón de abajo para volver a la página de inicio.", - // "401.link.home-page": "Take me to the home page", - "401.link.home-page": "Llévame a la página de inicio", + // "401.link.home-page": "Take me to the home page", + "401.link.home-page": "Llévame a la página de inicio", - // "401.unauthorized": "unauthorized", - "401.unauthorized": "no autorizado", + // "401.unauthorized": "unauthorized", + "401.unauthorized": "no autorizado", + // "403.help": "You don't have permission to access this page. You can use the button below to get back to the home page.", + "403.help": "No tiene permisos para acceder a esta página. Puede utilizar el botón de abajo para volver a la página de inicio.", - // "403.help": "You don't have permission to access this page. You can use the button below to get back to the home page.", - "403.help": "No tiene permiso para acceder a esta página. Puede utilizar el botón de abajo para volver a la página de inicio.", + // "403.link.home-page": "Take me to the home page", + "403.link.home-page": "Llévame a la página de inicio", - // "403.link.home-page": "Take me to the home page", - "403.link.home-page": "Llévame a la página de inicio", + // "403.forbidden": "forbidden", + "403.forbidden": "prohibido", - // "403.forbidden": "forbidden", - "403.forbidden": "prohibido", + // "500.page-internal-server-error": "Service Unavailable", + "500.page-internal-server-error": "Servicio no disponible", + // "500.help": "The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.", + "500.help": "No se puede atender su petición debido a problemas de capacidad o mantenimeintos programados del servidor. Inténtelo mas adelante, por favor.", + // "500.link.home-page": "Take me to the home page", + "500.link.home-page": "Llévame a la página de inicio", - // "404.help": "We can't find the page you're looking for. The page may have been moved or deleted. You can use the button below to get back to the home page. ", - "404.help": "No podemos encontrar la página que buscas. La página puede haber sido movida o eliminada. Puedes utilizar el botón de abajo para volver a la página de inicio. ", - // "404.link.home-page": "Take me to the home page", - "404.link.home-page": "Llévame a la página de inicio", + // "404.help": "We can't find the page you're looking for. The page may have been moved or deleted. You can use the button below to get back to the home page. ", + "404.help": "No podemos encontrar la página que busca. La página puede haber sido movida o eliminada. Puede utilizar el botón de abajo para volver a la página de inicio. ", - // "404.page-not-found": "page not found", - "404.page-not-found": "página no encontrada", + // "404.link.home-page": "Take me to the home page", + "404.link.home-page": "Llévame a la página de inicio", - // "admin.curation-tasks.breadcrumbs": "System curation tasks", - "admin.curation-tasks.breadcrumbs": "Tareas de conservación del sistema", + // "404.page-not-found": "page not found", + "404.page-not-found": "página no encontrada", - // "admin.curation-tasks.title": "System curation tasks", - "admin.curation-tasks.title": "Tareas de conservación del sistema", + // "error-page.description.401": "unauthorized", + "error-page.description.401": "no autorizado", - // "admin.curation-tasks.header": "System curation tasks", - "admin.curation-tasks.header": "Tareas de conservación del sistema", + // "error-page.description.403": "forbidden", + "error-page.description.403": "prohibido", - // "admin.registries.bitstream-formats.breadcrumbs": "Format registry", - "admin.registries.bitstream-formats.breadcrumbs": "Registro de formato", + // "error-page.description.500": "Service Unavailable", + "error-page.description.500": "Servicio no disponible", - // "admin.registries.bitstream-formats.create.breadcrumbs": "Bitstream format", - "admin.registries.bitstream-formats.create.breadcrumbs": "Formato de archivo", + // "error-page.description.404": "page not found", + "error-page.description.404": "página no encontrada", - // "admin.registries.bitstream-formats.create.failure.content": "An error occurred while creating the new bitstream format.", - "admin.registries.bitstream-formats.create.failure.content": "Se produjo un error al crear el nuevo formato de archivo.", + // "error-page.orcid.generic-error": "An error occurred during login via ORCID. Make sure you have shared your ORCID account email address with DSpace. If the error persists, contact the administrator", + "error-page.orcid.generic-error": "Hubo un error en el login via ORCID. Asegúrese que ha compartido el correo electrónico de su cuenta ORCID con Dspace. Si continuase el error, contacte con el administrador", - // "admin.registries.bitstream-formats.create.failure.head": "Failure", - "admin.registries.bitstream-formats.create.failure.head": "Falla", + // "access-status.embargo.listelement.badge": "Embargo", + "access-status.embargo.listelement.badge": "Embargo", - // "admin.registries.bitstream-formats.create.head": "Create Bitstream format", - "admin.registries.bitstream-formats.create.head": "Crear formato Archivo", + // "access-status.metadata.only.listelement.badge": "Metadata only", + "access-status.metadata.only.listelement.badge": "Solo Metadatos", - // "admin.registries.bitstream-formats.create.new": "Add a new bitstream format", - "admin.registries.bitstream-formats.create.new": "Agregar un nuevo formato de archivo", + // "access-status.open.access.listelement.badge": "Open Access", + "access-status.open.access.listelement.badge": "Acceso Abierto", - // "admin.registries.bitstream-formats.create.success.content": "The new bitstream format was successfully created.", - "admin.registries.bitstream-formats.create.success.content": "El nuevo formato de archivo se creó correctamente.", + // "access-status.restricted.listelement.badge": "Restricted", + "access-status.restricted.listelement.badge": "Restringido", - // "admin.registries.bitstream-formats.create.success.head": "Success", - "admin.registries.bitstream-formats.create.success.head": "Éxito", + // "access-status.unknown.listelement.badge": "Unknown", + "access-status.unknown.listelement.badge": "Desconocido", - // "admin.registries.bitstream-formats.delete.failure.amount": "Failed to remove {{ amount }} format(s)", - "admin.registries.bitstream-formats.delete.failure.amount": "Error al eliminar {{ amount }} formato(s)", + // "admin.curation-tasks.breadcrumbs": "System curation tasks", + "admin.curation-tasks.breadcrumbs": "Tareas de curación del sistema", - // "admin.registries.bitstream-formats.delete.failure.head": "Failure", - "admin.registries.bitstream-formats.delete.failure.head": "Falla", + // "admin.curation-tasks.title": "System curation tasks", + "admin.curation-tasks.title": "Tareas de conservación del sistema", - // "admin.registries.bitstream-formats.delete.success.amount": "Successfully removed {{ amount }} format(s)", - "admin.registries.bitstream-formats.delete.success.amount": "Se quitaron correctamente {{ amount }} formato(s)", + // "admin.curation-tasks.header": "System curation tasks", + "admin.curation-tasks.header": "Tareas de curación del sistema", - // "admin.registries.bitstream-formats.delete.success.head": "Success", - "admin.registries.bitstream-formats.delete.success.head": "Éxito", + // "admin.registries.bitstream-formats.breadcrumbs": "Format registry", + "admin.registries.bitstream-formats.breadcrumbs": "Registro de formatos", - // "admin.registries.bitstream-formats.description": "This list of bitstream formats provides information about known formats and their support level.", - "admin.registries.bitstream-formats.description": "Esta lista de formatos de archivo proporciona información sobre formatos conocidos y su nivel de soporte.", + // "admin.registries.bitstream-formats.create.breadcrumbs": "Bitstream format", + "admin.registries.bitstream-formats.create.breadcrumbs": "Formato de archivo", - // "admin.registries.bitstream-formats.edit.breadcrumbs": "Bitstream format", - "admin.registries.bitstream-formats.edit.breadcrumbs": "Formato de archivo", + // "admin.registries.bitstream-formats.create.failure.content": "An error occurred while creating the new bitstream format.", + "admin.registries.bitstream-formats.create.failure.content": "Se produjo un error al crear el nuevo formato de archivo.", - // "admin.registries.bitstream-formats.edit.description.hint": "", - "admin.registries.bitstream-formats.edit.description.hint": "", + // "admin.registries.bitstream-formats.create.failure.head": "Failure", + "admin.registries.bitstream-formats.create.failure.head": "Fallo", - // "admin.registries.bitstream-formats.edit.description.label": "Description", - "admin.registries.bitstream-formats.edit.description.label": "Descripción", + // "admin.registries.bitstream-formats.create.head": "Create Bitstream format", + "admin.registries.bitstream-formats.create.head": "Crear formato de archivo", - // "admin.registries.bitstream-formats.edit.extensions.hint": "Extensions are file extensions that are used to automatically identify the format of uploaded files. You can enter several extensions for each format.", - "admin.registries.bitstream-formats.edit.extensions.hint": "Las extensiones son extensiones de archivos que se utilizan para identificar automáticamente el formato de los archivos cargados. Puede introducir varias extensiones para cada formato.", + // "admin.registries.bitstream-formats.create.new": "Add a new bitstream format", + "admin.registries.bitstream-formats.create.new": "Agregar un nuevo formato de archivo", - // "admin.registries.bitstream-formats.edit.extensions.label": "File extensions", - "admin.registries.bitstream-formats.edit.extensions.label": "Extensiones de archivo", + // "admin.registries.bitstream-formats.create.success.content": "The new bitstream format was successfully created.", + "admin.registries.bitstream-formats.create.success.content": "El nuevo formato de archivo se creó correctamente.", - // "admin.registries.bitstream-formats.edit.extensions.placeholder": "Enter a file extension without the dot", - "admin.registries.bitstream-formats.edit.extensions.placeholder": "Ingrese una extensión de archivo sin el punto", + // "admin.registries.bitstream-formats.create.success.head": "Success", + "admin.registries.bitstream-formats.create.success.head": "Éxito", - // "admin.registries.bitstream-formats.edit.failure.content": "An error occurred while editing the bitstream format.", - "admin.registries.bitstream-formats.edit.failure.content": "Se produjo un error al editar el formato de archivo.", + // "admin.registries.bitstream-formats.delete.failure.amount": "Failed to remove {{ amount }} format(s)", + "admin.registries.bitstream-formats.delete.failure.amount": "Error al eliminar {{ amount }} formato(s)", - // "admin.registries.bitstream-formats.edit.failure.head": "Failure", - "admin.registries.bitstream-formats.edit.failure.head": "Falla", + // "admin.registries.bitstream-formats.delete.failure.head": "Failure", + "admin.registries.bitstream-formats.delete.failure.head": "Fallo", - // "admin.registries.bitstream-formats.edit.head": "Bitstream format: {{ format }}", - "admin.registries.bitstream-formats.edit.head": "Formato de archivo: {{ format }}", + // "admin.registries.bitstream-formats.delete.success.amount": "Successfully removed {{ amount }} format(s)", + "admin.registries.bitstream-formats.delete.success.amount": "Se eliminaron correctamente {{ amount }} formato(s)", - // "admin.registries.bitstream-formats.edit.internal.hint": "Formats marked as internal are hidden from the user, and used for administrative purposes.", - "admin.registries.bitstream-formats.edit.internal.hint": "Los formatos marcados como internos están ocultos al usuario y se utilizan con fines administrativos.", + // "admin.registries.bitstream-formats.delete.success.head": "Success", + "admin.registries.bitstream-formats.delete.success.head": "Éxito", - // "admin.registries.bitstream-formats.edit.internal.label": "Internal", - "admin.registries.bitstream-formats.edit.internal.label": "Interno", + // "admin.registries.bitstream-formats.description": "This list of bitstream formats provides information about known formats and their support level.", + "admin.registries.bitstream-formats.description": "Esta lista de formatos de archivo proporciona información sobre formatos conocidos y su nivel de soporte.", - // "admin.registries.bitstream-formats.edit.mimetype.hint": "The MIME type associated with this format, does not have to be unique.", - "admin.registries.bitstream-formats.edit.mimetype.hint": "El tipo MIME asociado con este formato no tiene por qué ser único.", + // "admin.registries.bitstream-formats.edit.breadcrumbs": "Bitstream format", + "admin.registries.bitstream-formats.edit.breadcrumbs": "Formato de archivo", - // "admin.registries.bitstream-formats.edit.mimetype.label": "MIME Type", - "admin.registries.bitstream-formats.edit.mimetype.label": "Tipo MIME", + // "admin.registries.bitstream-formats.edit.description.hint": "", + "admin.registries.bitstream-formats.edit.description.hint": "", - // "admin.registries.bitstream-formats.edit.shortDescription.hint": "A unique name for this format, (e.g. Microsoft Word XP or Microsoft Word 2000)", - "admin.registries.bitstream-formats.edit.shortDescription.hint": "Un nombre único para este formato, (por ejemplo, Microsoft Word XP o Microsoft Word 2000)", + // "admin.registries.bitstream-formats.edit.description.label": "Description", + "admin.registries.bitstream-formats.edit.description.label": "Descripción", - // "admin.registries.bitstream-formats.edit.shortDescription.label": "Name", - "admin.registries.bitstream-formats.edit.shortDescription.label": "Nombre", + // "admin.registries.bitstream-formats.edit.extensions.hint": "Extensions are file extensions that are used to automatically identify the format of uploaded files. You can enter several extensions for each format.", + "admin.registries.bitstream-formats.edit.extensions.hint": "Las extensiones se refieren a las extensiones de archivos que se utilizan para identificar automáticamente el formato de los archivos cargados. Puede introducir varias extensiones para cada formato.", - // "admin.registries.bitstream-formats.edit.success.content": "The bitstream format was successfully edited.", - "admin.registries.bitstream-formats.edit.success.content": "El formato de archivo se editó correctamente.", + // "admin.registries.bitstream-formats.edit.extensions.label": "File extensions", + "admin.registries.bitstream-formats.edit.extensions.label": "Extensiones de archivo", - // "admin.registries.bitstream-formats.edit.success.head": "Success", - "admin.registries.bitstream-formats.edit.success.head": "Éxito", + // "admin.registries.bitstream-formats.edit.extensions.placeholder": "Enter a file extension without the dot", + "admin.registries.bitstream-formats.edit.extensions.placeholder": "Introduzca una extensión de archivo (sin el punto)", - // "admin.registries.bitstream-formats.edit.supportLevel.hint": "The level of support your institution pledges for this format.", - "admin.registries.bitstream-formats.edit.supportLevel.hint": "El nivel de apoyo que su institución promete para este formato.", + // "admin.registries.bitstream-formats.edit.failure.content": "An error occurred while editing the bitstream format.", + "admin.registries.bitstream-formats.edit.failure.content": "Se produjo un error al editar el formato de archivo.", - // "admin.registries.bitstream-formats.edit.supportLevel.label": "Support level", - "admin.registries.bitstream-formats.edit.supportLevel.label": "Nivel de soporte", + // "admin.registries.bitstream-formats.edit.failure.head": "Failure", + "admin.registries.bitstream-formats.edit.failure.head": "Fallo", - // "admin.registries.bitstream-formats.head": "Bitstream Format Registry", - "admin.registries.bitstream-formats.head": "Registro de formato Archivo", + // "admin.registries.bitstream-formats.edit.head": "Bitstream format: {{ format }}", + "admin.registries.bitstream-formats.edit.head": "Formato de archivo: {{ format }}", - // "admin.registries.bitstream-formats.no-items": "No bitstream formats to show.", - "admin.registries.bitstream-formats.no-items": "No hay formatos de archivo para mostrar.", + // "admin.registries.bitstream-formats.edit.internal.hint": "Formats marked as internal are hidden from the user, and used for administrative purposes.", + "admin.registries.bitstream-formats.edit.internal.hint": "Los formatos marcados como internos están ocultos al usuario y se utilizan con fines administrativos.", - // "admin.registries.bitstream-formats.table.delete": "Delete selected", - "admin.registries.bitstream-formats.table.delete": "Eliminar seleccionado", + // "admin.registries.bitstream-formats.edit.internal.label": "Internal", + "admin.registries.bitstream-formats.edit.internal.label": "Interno", - // "admin.registries.bitstream-formats.table.deselect-all": "Deselect all", - "admin.registries.bitstream-formats.table.deselect-all": "Deseleccionar todo", + // "admin.registries.bitstream-formats.edit.mimetype.hint": "The MIME type associated with this format, does not have to be unique.", + "admin.registries.bitstream-formats.edit.mimetype.hint": "El tipo MIME asociado con este formato no tiene por qué ser único.", - // "admin.registries.bitstream-formats.table.internal": "internal", - "admin.registries.bitstream-formats.table.internal": "interno", + // "admin.registries.bitstream-formats.edit.mimetype.label": "MIME Type", + "admin.registries.bitstream-formats.edit.mimetype.label": "Tipo MIME", - // "admin.registries.bitstream-formats.table.mimetype": "MIME Type", - "admin.registries.bitstream-formats.table.mimetype": "Tipo MIME", + // "admin.registries.bitstream-formats.edit.shortDescription.hint": "A unique name for this format, (e.g. Microsoft Word XP or Microsoft Word 2000)", + "admin.registries.bitstream-formats.edit.shortDescription.hint": "Un nombre único para este formato, (por ejemplo, Microsoft Word XP o Microsoft Word 2000)", - // "admin.registries.bitstream-formats.table.name": "Name", - "admin.registries.bitstream-formats.table.name": "Nombre", + // "admin.registries.bitstream-formats.edit.shortDescription.label": "Name", + "admin.registries.bitstream-formats.edit.shortDescription.label": "Nombre", - // "admin.registries.bitstream-formats.table.return": "Back", - "admin.registries.bitstream-formats.table.return": "atrás", + // "admin.registries.bitstream-formats.edit.success.content": "The bitstream format was successfully edited.", + "admin.registries.bitstream-formats.edit.success.content": "El formato de archivo se editó correctamente.", - // "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Known", - "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Conocido", + // "admin.registries.bitstream-formats.edit.success.head": "Success", + "admin.registries.bitstream-formats.edit.success.head": "Éxito", - // "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Supported", - "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Soportado", + // "admin.registries.bitstream-formats.edit.supportLevel.hint": "The level of support your institution pledges for this format.", + "admin.registries.bitstream-formats.edit.supportLevel.hint": "El nivel de apoyo que su institución promete para este formato.", - // "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Unknown", - "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Desconocido", + // "admin.registries.bitstream-formats.edit.supportLevel.label": "Support level", + "admin.registries.bitstream-formats.edit.supportLevel.label": "Nivel de soporte", - // "admin.registries.bitstream-formats.table.supportLevel.head": "Support Level", - "admin.registries.bitstream-formats.table.supportLevel.head": "Nivel de soporte", + // "admin.registries.bitstream-formats.head": "Bitstream Format Registry", + "admin.registries.bitstream-formats.head": "Registro de formato Archivo", - // "admin.registries.bitstream-formats.title": "Bitstream Format Registry", - "admin.registries.bitstream-formats.title": "Registro de formato Archivo", + // "admin.registries.bitstream-formats.no-items": "No bitstream formats to show.", + "admin.registries.bitstream-formats.no-items": "No hay formatos de archivo para mostrar.", + // "admin.registries.bitstream-formats.table.delete": "Delete selected", + "admin.registries.bitstream-formats.table.delete": "Eliminar seleccionado", + // "admin.registries.bitstream-formats.table.deselect-all": "Deselect all", + "admin.registries.bitstream-formats.table.deselect-all": "Deseleccionar todo", - // "admin.registries.metadata.breadcrumbs": "Metadata registry", - "admin.registries.metadata.breadcrumbs": "Registro de metadatos", + // "admin.registries.bitstream-formats.table.internal": "internal", + "admin.registries.bitstream-formats.table.internal": "interno", - // "admin.registries.metadata.description": "The metadata registry maintains a list of all metadata fields available in the repository. These fields may be divided amongst multiple schemas. However, DSpace requires the qualified Dublin Core schema.", - "admin.registries.metadata.description": "El registro de metadatos mantiene una lista de todos los campos de metadatos disponibles en el repositorio. Estos campos pueden estar divididos entre múltiples esquemas. Sin embargo, DSpace requiere el esquema calificado de Dublin Core.", + // "admin.registries.bitstream-formats.table.mimetype": "MIME Type", + "admin.registries.bitstream-formats.table.mimetype": "Tipo MIME", - // "admin.registries.metadata.form.create": "Create metadata schema", - "admin.registries.metadata.form.create": "Crear esquema de metadatos", + // "admin.registries.bitstream-formats.table.name": "Name", + "admin.registries.bitstream-formats.table.name": "Nombre", - // "admin.registries.metadata.form.edit": "Edit metadata schema", - "admin.registries.metadata.form.edit": "Editar esquema de metadatos", + // "admin.registries.bitstream-formats.table.return": "Back", + "admin.registries.bitstream-formats.table.return": "Atrás", - // "admin.registries.metadata.form.name": "Name", - "admin.registries.metadata.form.name": "Nombre", + // "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Known", + "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Conocido", - // "admin.registries.metadata.form.namespace": "Namespace", - "admin.registries.metadata.form.namespace": "Espacio de nombres", + // "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Supported", + "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Soportado", - // "admin.registries.metadata.head": "Metadata Registry", - "admin.registries.metadata.head": "Registro de metadatos", + // "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Unknown", + "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Desconocido", - // "admin.registries.metadata.schemas.no-items": "No metadata schemas to show.", - "admin.registries.metadata.schemas.no-items": "No hay esquemas de metadatos para mostrar.", + // "admin.registries.bitstream-formats.table.supportLevel.head": "Support Level", + "admin.registries.bitstream-formats.table.supportLevel.head": "Nivel de soporte", - // "admin.registries.metadata.schemas.table.delete": "Delete selected", - "admin.registries.metadata.schemas.table.delete": "Eliminar seleccionado", + // "admin.registries.bitstream-formats.title": "Bitstream Format Registry", + "admin.registries.bitstream-formats.title": "Registro de formato Archivo", - // "admin.registries.metadata.schemas.table.id": "ID", - "admin.registries.metadata.schemas.table.id": "IDENTIFICACIÓN", - // "admin.registries.metadata.schemas.table.name": "Name", - "admin.registries.metadata.schemas.table.name": "Nombre", - // "admin.registries.metadata.schemas.table.namespace": "Namespace", - "admin.registries.metadata.schemas.table.namespace": "Espacio de nombres", + // "admin.registries.metadata.breadcrumbs": "Metadata registry", + "admin.registries.metadata.breadcrumbs": "Registro de metadatos", - // "admin.registries.metadata.title": "Metadata Registry", - "admin.registries.metadata.title": "Registro de metadatos", + // "admin.registries.metadata.description": "The metadata registry maintains a list of all metadata fields available in the repository. These fields may be divided amongst multiple schemas. However, DSpace requires the qualified Dublin Core schema.", + "admin.registries.metadata.description": "El registro de metadatos mantiene una lista de todos los campos de metadatos disponibles en el repositorio. Estos campos pueden estar divididos entre múltiples esquemas. Sin embargo, DSpace requiere el esquema calificado de Dublin Core.", + // "admin.registries.metadata.form.create": "Create metadata schema", + "admin.registries.metadata.form.create": "Crear esquema de metadatos", + // "admin.registries.metadata.form.edit": "Edit metadata schema", + "admin.registries.metadata.form.edit": "Editar esquema de metadatos", - // "admin.registries.schema.breadcrumbs": "Metadata schema", - "admin.registries.schema.breadcrumbs": "Esquema de metadatos", + // "admin.registries.metadata.form.name": "Name", + "admin.registries.metadata.form.name": "Nombre", - // "admin.registries.schema.description": "This is the metadata schema for \"{{namespace}}\".", - "admin.registries.schema.description": "Este es el esquema de metadatos para \"{{ namespace }} \".", + // "admin.registries.metadata.form.namespace": "Namespace", + "admin.registries.metadata.form.namespace": "Espacio de nombres", - // "admin.registries.schema.fields.head": "Schema metadata fields", - "admin.registries.schema.fields.head": "Campos de metadatos de esquema", + // "admin.registries.metadata.head": "Metadata Registry", + "admin.registries.metadata.head": "Registro de metadatos", - // "admin.registries.schema.fields.no-items": "No metadata fields to show.", - "admin.registries.schema.fields.no-items": "No hay campos de metadatos para mostrar.", + // "admin.registries.metadata.schemas.no-items": "No metadata schemas to show.", + "admin.registries.metadata.schemas.no-items": "No hay esquemas de metadatos para mostrar.", - // "admin.registries.schema.fields.table.delete": "Delete selected", - "admin.registries.schema.fields.table.delete": "Eliminar seleccionado", + // "admin.registries.metadata.schemas.table.delete": "Delete selected", + "admin.registries.metadata.schemas.table.delete": "Eliminar seleccionado", - // "admin.registries.schema.fields.table.field": "Field", - "admin.registries.schema.fields.table.field": "Campo", + // "admin.registries.metadata.schemas.table.id": "ID", + "admin.registries.metadata.schemas.table.id": "IDENTIFICACIÓN", - // "admin.registries.schema.fields.table.scopenote": "Scope Note", - "admin.registries.schema.fields.table.scopenote": "Nota de alcance", + // "admin.registries.metadata.schemas.table.name": "Name", + "admin.registries.metadata.schemas.table.name": "Nombre", - // "admin.registries.schema.form.create": "Create metadata field", - "admin.registries.schema.form.create": "Crear campo de metadatos", + // "admin.registries.metadata.schemas.table.namespace": "Namespace", + "admin.registries.metadata.schemas.table.namespace": "Espacio de nombres", - // "admin.registries.schema.form.edit": "Edit metadata field", - "admin.registries.schema.form.edit": "Editar campo de metadatos", + // "admin.registries.metadata.title": "Metadata Registry", + "admin.registries.metadata.title": "Registro de metadatos", - // "admin.registries.schema.form.element": "Element", - "admin.registries.schema.form.element": "Artículo", - // "admin.registries.schema.form.qualifier": "Qualifier", - "admin.registries.schema.form.qualifier": "Calificatorio", - // "admin.registries.schema.form.scopenote": "Scope Note", - "admin.registries.schema.form.scopenote": "Nota de alcance", + // "admin.registries.schema.breadcrumbs": "Metadata schema", + "admin.registries.schema.breadcrumbs": "Esquema de metadatos", - // "admin.registries.schema.head": "Metadata Schema", - "admin.registries.schema.head": "Esquema de metadatos", + // "admin.registries.schema.description": "This is the metadata schema for \"{{namespace}}\".", + "admin.registries.schema.description": "Este es el esquema de metadatos para \"{{ namespace }} \".", - // "admin.registries.schema.notification.created": "Successfully created metadata schema \"{{prefix}}\"", - "admin.registries.schema.notification.created": "Esquema de metadatos creado correctamente \"{{ prefix }} \"", + // "admin.registries.schema.fields.head": "Schema metadata fields", + "admin.registries.schema.fields.head": "Campos de metadatos de esquema", - // "admin.registries.schema.notification.deleted.failure": "Failed to delete {{amount}} metadata schemas", - "admin.registries.schema.notification.deleted.failure": "Error al eliminar {{ amount }} esquemas de metadatos", + // "admin.registries.schema.fields.no-items": "No metadata fields to show.", + "admin.registries.schema.fields.no-items": "No hay campos de metadatos para mostrar.", - // "admin.registries.schema.notification.deleted.success": "Successfully deleted {{amount}} metadata schemas", - "admin.registries.schema.notification.deleted.success": "{{ amount }} esquemas de metadatos eliminados correctamente", + // "admin.registries.schema.fields.table.delete": "Delete selected", + "admin.registries.schema.fields.table.delete": "Eliminar seleccionado", - // "admin.registries.schema.notification.edited": "Successfully edited metadata schema \"{{prefix}}\"", - "admin.registries.schema.notification.edited": "Esquema de metadatos editado correctamente \"{{ prefix }} \"", + // "admin.registries.schema.fields.table.field": "Field", + "admin.registries.schema.fields.table.field": "Campo", - // "admin.registries.schema.notification.failure": "Error", - "admin.registries.schema.notification.failure": "Error", + // "admin.registries.schema.fields.table.scopenote": "Scope Note", + "admin.registries.schema.fields.table.scopenote": "Nota de alcance", - // "admin.registries.schema.notification.field.created": "Successfully created metadata field \"{{field}}\"", - "admin.registries.schema.notification.field.created": "Campo de metadatos creado correctamente \"{{ field }} \"", + // "admin.registries.schema.form.create": "Create metadata field", + "admin.registries.schema.form.create": "Crear campo de metadatos", - // "admin.registries.schema.notification.field.deleted.failure": "Failed to delete {{amount}} metadata fields", - "admin.registries.schema.notification.field.deleted.failure": "No se pudieron borrar los campos de metadatos de {{ amount }}", + // "admin.registries.schema.form.edit": "Edit metadata field", + "admin.registries.schema.form.edit": "Editar campo de metadatos", - // "admin.registries.schema.notification.field.deleted.success": "Successfully deleted {{amount}} metadata fields", - "admin.registries.schema.notification.field.deleted.success": "{{ amount }} campos de metadatos eliminados correctamente", + // "admin.registries.schema.form.element": "Element", + "admin.registries.schema.form.element": "Artículo", - // "admin.registries.schema.notification.field.edited": "Successfully edited metadata field \"{{field}}\"", - "admin.registries.schema.notification.field.edited": "Campo de metadatos editado correctamente \"{{ field }} \"", + // "admin.registries.schema.form.qualifier": "Qualifier", + "admin.registries.schema.form.qualifier": "Calificatorio", - // "admin.registries.schema.notification.success": "Success", - "admin.registries.schema.notification.success": "Éxito", + // "admin.registries.schema.form.scopenote": "Scope Note", + "admin.registries.schema.form.scopenote": "Nota de alcance", - // "admin.registries.schema.return": "Back", - "admin.registries.schema.return": "atrás", + // "admin.registries.schema.head": "Metadata Schema", + "admin.registries.schema.head": "Esquema de metadatos", - // "admin.registries.schema.title": "Metadata Schema Registry", - "admin.registries.schema.title": "Registro de esquemas de metadatos", + // "admin.registries.schema.notification.created": "Successfully created metadata schema \"{{prefix}}\"", + "admin.registries.schema.notification.created": "Esquema de metadatos creado correctamente \"{{ prefix }} \"", + // "admin.registries.schema.notification.deleted.failure": "Failed to delete {{amount}} metadata schemas", + "admin.registries.schema.notification.deleted.failure": "Error al eliminar {{ amount }} esquemas de metadatos", + // "admin.registries.schema.notification.deleted.success": "Successfully deleted {{amount}} metadata schemas", + "admin.registries.schema.notification.deleted.success": "{{ amount }} esquemas de metadatos eliminados correctamente", - // "admin.access-control.epeople.actions.delete": "Delete EPerson", - "admin.access-control.epeople.actions.delete": "Eliminar EPerson", + // "admin.registries.schema.notification.edited": "Successfully edited metadata schema \"{{prefix}}\"", + "admin.registries.schema.notification.edited": "Esquema de metadatos editado correctamente \"{{ prefix }} \"", - // "admin.access-control.epeople.actions.impersonate": "Impersonate EPerson", - "admin.access-control.epeople.actions.impersonate": "Hacerse pasar por EPerson", + // "admin.registries.schema.notification.failure": "Error", + "admin.registries.schema.notification.failure": "Error", - // "admin.access-control.epeople.actions.reset": "Reset password", - "admin.access-control.epeople.actions.reset": "Restablecer la contraseña", + // "admin.registries.schema.notification.field.created": "Successfully created metadata field \"{{field}}\"", + "admin.registries.schema.notification.field.created": "Campo de metadatos creado correctamente \"{{ field }} \"", - // "admin.access-control.epeople.actions.stop-impersonating": "Stop impersonating EPerson", - "admin.access-control.epeople.actions.stop-impersonating": "Deja de hacerse pasar por EPerson", + // "admin.registries.schema.notification.field.deleted.failure": "Failed to delete {{amount}} metadata fields", + "admin.registries.schema.notification.field.deleted.failure": "No se pudieron borrar los campos de metadatos de {{ amount }}", - // "admin.access-control.epeople.breadcrumbs": "EPeople", - "admin.access-control.epeople.breadcrumbs": "EPeople", + // "admin.registries.schema.notification.field.deleted.success": "Successfully deleted {{amount}} metadata fields", + "admin.registries.schema.notification.field.deleted.success": "{{ amount }} campos de metadatos eliminados correctamente", - // "admin.access-control.epeople.title": "EPeople", - "admin.access-control.epeople.title": "EPeople", + // "admin.registries.schema.notification.field.edited": "Successfully edited metadata field \"{{field}}\"", + "admin.registries.schema.notification.field.edited": "Campo de metadatos editado correctamente \"{{ field }} \"", - // "admin.access-control.epeople.head": "EPeople", - "admin.access-control.epeople.head": "EPeople", + // "admin.registries.schema.notification.success": "Success", + "admin.registries.schema.notification.success": "Éxito", - // "admin.access-control.epeople.search.head": "Search", - "admin.access-control.epeople.search.head": "Buscar", + // "admin.registries.schema.return": "Back", + "admin.registries.schema.return": "Atrás", - // "admin.access-control.epeople.button.see-all": "Browse All", - "admin.access-control.epeople.button.see-all": "Examinar todo", + // "admin.registries.schema.title": "Metadata Schema Registry", + "admin.registries.schema.title": "Registro de esquemas de metadatos", - // "admin.access-control.epeople.search.scope.metadata": "Metadata", - "admin.access-control.epeople.search.scope.metadata": "Metadatos", - // "admin.access-control.epeople.search.scope.email": "E-mail (exact)", - "admin.access-control.epeople.search.scope.email": "Correo electrónico (exacto)", - // "admin.access-control.epeople.search.button": "Search", - "admin.access-control.epeople.search.button": "Buscar", + // "admin.access-control.epeople.actions.delete": "Delete EPerson", + "admin.access-control.epeople.actions.delete": "Eliminar EPerson", - // "admin.access-control.epeople.search.placeholder": "Search people...", - "admin.access-control.epeople.search.placeholder": "Busca gente...", + // "admin.access-control.epeople.actions.impersonate": "Impersonate EPerson", + "admin.access-control.epeople.actions.impersonate": "Hacerse pasar por EPerson", - // "admin.access-control.epeople.button.add": "Add EPerson", - "admin.access-control.epeople.button.add": "Agregar una persona", + // "admin.access-control.epeople.actions.reset": "Reset password", + "admin.access-control.epeople.actions.reset": "Restablecer la contraseña", - // "admin.access-control.epeople.table.id": "ID", - "admin.access-control.epeople.table.id": "IDENTIFICACIÓN", + // "admin.access-control.epeople.actions.stop-impersonating": "Stop impersonating EPerson", + "admin.access-control.epeople.actions.stop-impersonating": "Deja de hacerse pasar por EPerson", - // "admin.access-control.epeople.table.name": "Name", - "admin.access-control.epeople.table.name": "Nombre", + // "admin.access-control.epeople.breadcrumbs": "EPeople", + "admin.access-control.epeople.breadcrumbs": "EPeople", - // "admin.access-control.epeople.table.email": "E-mail (exact)", - "admin.access-control.epeople.table.email": "Correo electrónico (exacto)", + // "admin.access-control.epeople.title": "EPeople", + "admin.access-control.epeople.title": "EPeople", - // "admin.access-control.epeople.table.edit": "Edit", - "admin.access-control.epeople.table.edit": "Editar", + // "admin.access-control.epeople.head": "EPeople", + "admin.access-control.epeople.head": "EPeople", - // "admin.access-control.epeople.table.edit.buttons.edit": "Edit \"{{name}}\"", - "admin.access-control.epeople.table.edit.buttons.edit": "Editar \"{{ name }}\"", + // "admin.access-control.epeople.search.head": "Search", + "admin.access-control.epeople.search.head": "Buscar", - // "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": "No tienes autorización para editar este grupo.", + // "admin.access-control.epeople.button.see-all": "Browse All", + "admin.access-control.epeople.button.see-all": "Examinar todo", - // "admin.access-control.epeople.table.edit.buttons.remove": "Delete \"{{name}}\"", - "admin.access-control.epeople.table.edit.buttons.remove": "Eliminar \"{{ name }} \"", + // "admin.access-control.epeople.search.scope.metadata": "Metadata", + "admin.access-control.epeople.search.scope.metadata": "Metadatos", - // "admin.access-control.epeople.no-items": "No EPeople to show.", - "admin.access-control.epeople.no-items": "No hay EPeople para mostrar.", + // "admin.access-control.epeople.search.scope.email": "E-mail (exact)", + "admin.access-control.epeople.search.scope.email": "Correo electrónico (exacto)", - // "admin.access-control.epeople.form.create": "Create EPerson", - "admin.access-control.epeople.form.create": "Crear una persona", + // "admin.access-control.epeople.search.button": "Search", + "admin.access-control.epeople.search.button": "Buscar", - // "admin.access-control.epeople.form.edit": "Edit EPerson", - "admin.access-control.epeople.form.edit": "Editar EPerson", + // "admin.access-control.epeople.search.placeholder": "Search people...", + "admin.access-control.epeople.search.placeholder": "Busca gente...", - // "admin.access-control.epeople.form.firstName": "First name", - "admin.access-control.epeople.form.firstName": "Nombre de pila", + // "admin.access-control.epeople.button.add": "Add EPerson", + "admin.access-control.epeople.button.add": "Agregar una persona", - // "admin.access-control.epeople.form.lastName": "Last name", - "admin.access-control.epeople.form.lastName": "Apellido", + // "admin.access-control.epeople.table.id": "ID", + "admin.access-control.epeople.table.id": "IDENTIFICACIÓN", - // "admin.access-control.epeople.form.email": "E-mail", - "admin.access-control.epeople.form.email": "Correo electrónico", + // "admin.access-control.epeople.table.name": "Name", + "admin.access-control.epeople.table.name": "Nombre", - // "admin.access-control.epeople.form.emailHint": "Must be valid e-mail address", - "admin.access-control.epeople.form.emailHint": "Debe ser una dirección de correo electrónico válida", + // "admin.access-control.epeople.table.email": "E-mail (exact)", + "admin.access-control.epeople.table.email": "Correo electrónico (exacto)", - // "admin.access-control.epeople.form.canLogIn": "Can log in", - "admin.access-control.epeople.form.canLogIn": "Puede iniciar sesión", + // "admin.access-control.epeople.table.edit": "Edit", + "admin.access-control.epeople.table.edit": "Editar", - // "admin.access-control.epeople.form.requireCertificate": "Requires certificate", - "admin.access-control.epeople.form.requireCertificate": "Requiere certificado", + // "admin.access-control.epeople.table.edit.buttons.edit": "Edit \"{{name}}\"", + "admin.access-control.epeople.table.edit.buttons.edit": "Editar \"{{ name }}\"", - // "admin.access-control.epeople.form.return": "Back", - "admin.access-control.epeople.form.return": "atrás", + // "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": "No tienes autorización para editar este grupo.", - // "admin.access-control.epeople.form.notification.created.success": "Successfully created EPerson \"{{name}}\"", - "admin.access-control.epeople.form.notification.created.success": "EPerson \"{{ name }} \" creada correctamente", + // "admin.access-control.epeople.table.edit.buttons.remove": "Delete \"{{name}}\"", + "admin.access-control.epeople.table.edit.buttons.remove": "Eliminar \"{{ name }} \"", - // "admin.access-control.epeople.form.notification.created.failure": "Failed to create EPerson \"{{name}}\"", - "admin.access-control.epeople.form.notification.created.failure": "Error al crear EPerson \"{{ name }} \"", + // "admin.access-control.epeople.no-items": "No EPeople to show.", + "admin.access-control.epeople.no-items": "No hay EPeople para mostrar.", - // "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Failed to create EPerson \"{{name}}\", email \"{{email}}\" already in use.", - "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Error al crear EPerson \"{{ name }}\", el correo electrónico \"{{ email }}\" ya está en uso.", + // "admin.access-control.epeople.form.create": "Create EPerson", + "admin.access-control.epeople.form.create": "Crear una persona", - // "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Failed to edit EPerson \"{{name}}\", email \"{{email}}\" already in use.", - "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Error al editar EPerson \"{{ name }}\", el correo electrónico \"{{ email }}\" ya está en uso.", + // "admin.access-control.epeople.form.edit": "Edit EPerson", + "admin.access-control.epeople.form.edit": "Editar EPerson", - // "admin.access-control.epeople.form.notification.edited.success": "Successfully edited EPerson \"{{name}}\"", - "admin.access-control.epeople.form.notification.edited.success": "EPerson \"{{ name }} \" editado correctamente", + // "admin.access-control.epeople.form.firstName": "First name", + "admin.access-control.epeople.form.firstName": "Nombre de pila", - // "admin.access-control.epeople.form.notification.edited.failure": "Failed to edit EPerson \"{{name}}\"", - "admin.access-control.epeople.form.notification.edited.failure": "Error al editar EPerson \"{{ name }} \"", + // "admin.access-control.epeople.form.lastName": "Last name", + "admin.access-control.epeople.form.lastName": "Apellido", - // "admin.access-control.epeople.form.notification.deleted.success": "Successfully deleted EPerson \"{{name}}\"", - "admin.access-control.epeople.form.notification.deleted.success": "EPerson \"{{ name }} \" eliminada correctamente", + // "admin.access-control.epeople.form.email": "E-mail", + "admin.access-control.epeople.form.email": "Correo electrónico", - // "admin.access-control.epeople.form.notification.deleted.failure": "Failed to delete EPerson \"{{name}}\"", - "admin.access-control.epeople.form.notification.deleted.failure": "No se pudo borrar EPerson \"{{ name }} \"", + // "admin.access-control.epeople.form.emailHint": "Must be valid e-mail address", + "admin.access-control.epeople.form.emailHint": "Debe ser una dirección de correo electrónico válida", - // "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Member of these groups:", - "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Miembro de estos grupos:", + // "admin.access-control.epeople.form.canLogIn": "Can log in", + "admin.access-control.epeople.form.canLogIn": "Puede iniciar sesión", - // "admin.access-control.epeople.form.table.id": "ID", - "admin.access-control.epeople.form.table.id": "IDENTIFICACIÓN", + // "admin.access-control.epeople.form.requireCertificate": "Requires certificate", + "admin.access-control.epeople.form.requireCertificate": "Requiere certificado", - // "admin.access-control.epeople.form.table.name": "Name", - "admin.access-control.epeople.form.table.name": "Nombre", + // "admin.access-control.epeople.form.return": "Back", + "admin.access-control.epeople.form.return": "Atrás", - // "admin.access-control.epeople.form.table.collectionOrCommunity": "Collection/Community", - "admin.access-control.epeople.form.table.collectionOrCommunity": "Colección/Comunidad", + // "admin.access-control.epeople.form.notification.created.success": "Successfully created EPerson \"{{name}}\"", + "admin.access-control.epeople.form.notification.created.success": "EPerson \"{{ name }} \" creada correctamente", - // "admin.access-control.epeople.form.memberOfNoGroups": "This EPerson is not a member of any groups", - "admin.access-control.epeople.form.memberOfNoGroups": "Esta EPerson no es miembro de ningún grupo", + // "admin.access-control.epeople.form.notification.created.failure": "Failed to create EPerson \"{{name}}\"", + "admin.access-control.epeople.form.notification.created.failure": "Error al crear EPerson \"{{ name }} \"", - // "admin.access-control.epeople.form.goToGroups": "Add to groups", - "admin.access-control.epeople.form.goToGroups": "Agregar a grupos", + // "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Failed to create EPerson \"{{name}}\", email \"{{email}}\" already in use.", + "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Error al crear EPerson \"{{ name }}\", el correo electrónico \"{{ email }}\" ya está en uso.", - // "admin.access-control.epeople.notification.deleted.failure": "Failed to delete EPerson: \"{{name}}\"", - "admin.access-control.epeople.notification.deleted.failure": "No se pudo borrar EPerson: \"{{ name }} \"", + // "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Failed to edit EPerson \"{{name}}\", email \"{{email}}\" already in use.", + "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Error al editar EPerson \"{{ name }}\", el correo electrónico \"{{ email }}\" ya está en uso.", - // "admin.access-control.epeople.notification.deleted.success": "Successfully deleted EPerson: \"{{name}}\"", - "admin.access-control.epeople.notification.deleted.success": "EPerson eliminada correctamente: \"{{ name }} \"", + // "admin.access-control.epeople.form.notification.edited.success": "Successfully edited EPerson \"{{name}}\"", + "admin.access-control.epeople.form.notification.edited.success": "EPerson \"{{ name }} \" editado correctamente", + // "admin.access-control.epeople.form.notification.edited.failure": "Failed to edit EPerson \"{{name}}\"", + "admin.access-control.epeople.form.notification.edited.failure": "Error al editar EPerson \"{{ name }} \"", + // "admin.access-control.epeople.form.notification.deleted.success": "Successfully deleted EPerson \"{{name}}\"", + "admin.access-control.epeople.form.notification.deleted.success": "EPerson \"{{ name }} \" eliminada correctamente", - // "admin.access-control.groups.title": "Groups", - "admin.access-control.groups.title": "Grupos", + // "admin.access-control.epeople.form.notification.deleted.failure": "Failed to delete EPerson \"{{name}}\"", + "admin.access-control.epeople.form.notification.deleted.failure": "No se pudo borrar EPerson \"{{ name }} \"", - // "admin.access-control.groups.breadcrumbs": "Groups", - "admin.access-control.groups.breadcrumbs": "Grupos", + // "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Member of these groups:", + "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Miembro de estos grupos:", - // "admin.access-control.groups.singleGroup.breadcrumbs": "Edit Group", - "admin.access-control.groups.singleGroup.breadcrumbs": "Editar grupo", + // "admin.access-control.epeople.form.table.id": "ID", + "admin.access-control.epeople.form.table.id": "IDENTIFICACIÓN", - // "admin.access-control.groups.title.singleGroup": "Edit Group", - "admin.access-control.groups.title.singleGroup": "Editar grupo", + // "admin.access-control.epeople.form.table.name": "Name", + "admin.access-control.epeople.form.table.name": "Nombre", - // "admin.access-control.groups.title.addGroup": "New Group", - "admin.access-control.groups.title.addGroup": "Nuevo grupo", + // "admin.access-control.epeople.form.table.collectionOrCommunity": "Collection/Community", + "admin.access-control.epeople.form.table.collectionOrCommunity": "Colección/Comunidad", - // "admin.access-control.groups.addGroup.breadcrumbs": "New Group", - "admin.access-control.groups.addGroup.breadcrumbs": "Nuevo grupo", + // "admin.access-control.epeople.form.memberOfNoGroups": "This EPerson is not a member of any groups", + "admin.access-control.epeople.form.memberOfNoGroups": "Esta EPerson no es miembro de ningún grupo", - // "admin.access-control.groups.head": "Groups", - "admin.access-control.groups.head": "Grupos", + // "admin.access-control.epeople.form.goToGroups": "Add to groups", + "admin.access-control.epeople.form.goToGroups": "Agregar a grupos", - // "admin.access-control.groups.button.add": "Add group", - "admin.access-control.groups.button.add": "Añadir grupo", + // "admin.access-control.epeople.notification.deleted.failure": "Failed to delete EPerson: \"{{name}}\"", + "admin.access-control.epeople.notification.deleted.failure": "No se pudo borrar EPerson: \"{{ name }} \"", - // "admin.access-control.groups.search.head": "Search groups", - "admin.access-control.groups.search.head": "Grupos de búsqueda", + // "admin.access-control.epeople.notification.deleted.success": "Successfully deleted EPerson: \"{{name}}\"", + "admin.access-control.epeople.notification.deleted.success": "EPerson eliminada correctamente: \"{{ name }} \"", - // "admin.access-control.groups.button.see-all": "Browse all", - "admin.access-control.groups.button.see-all": "Examinar todo", - // "admin.access-control.groups.search.button": "Search", - "admin.access-control.groups.search.button": "Buscar", - // "admin.access-control.groups.search.placeholder": "Search groups...", - "admin.access-control.groups.search.placeholder": "Buscar grupos...", + // "admin.access-control.groups.title": "Groups", + "admin.access-control.groups.title": "Grupos", - // "admin.access-control.groups.table.id": "ID", - "admin.access-control.groups.table.id": "IDENTIFICACIÓN", + // "admin.access-control.groups.breadcrumbs": "Groups", + "admin.access-control.groups.breadcrumbs": "Grupos", - // "admin.access-control.groups.table.name": "Name", - "admin.access-control.groups.table.name": "Nombre", + // "admin.access-control.groups.singleGroup.breadcrumbs": "Edit Group", + "admin.access-control.groups.singleGroup.breadcrumbs": "Editar grupo", - // "admin.access-control.groups.table.collectionOrCommunity": "Collection/Community", - "admin.access-control.groups.table.collectionOrCommunity": "Colección/Comunidad", + // "admin.access-control.groups.title.singleGroup": "Edit Group", + "admin.access-control.groups.title.singleGroup": "Editar grupo", - // "admin.access-control.groups.table.members": "Members", - "admin.access-control.groups.table.members": "Miembros", + // "admin.access-control.groups.title.addGroup": "New Group", + "admin.access-control.groups.title.addGroup": "Nuevo grupo", - // "admin.access-control.groups.table.edit": "Edit", - "admin.access-control.groups.table.edit": "Editar", + // "admin.access-control.groups.addGroup.breadcrumbs": "New Group", + "admin.access-control.groups.addGroup.breadcrumbs": "Nuevo grupo", - // "admin.access-control.groups.table.edit.buttons.edit": "Edit \"{{name}}\"", - "admin.access-control.groups.table.edit.buttons.edit": "Editar \"{{ name }}\"", + // "admin.access-control.groups.head": "Groups", + "admin.access-control.groups.head": "Grupos", - // "admin.access-control.groups.table.edit.buttons.remove": "Delete \"{{name}}\"", - "admin.access-control.groups.table.edit.buttons.remove": "Eliminar \"{{ name }}\"", + // "admin.access-control.groups.button.add": "Add group", + "admin.access-control.groups.button.add": "Añadir grupo", - // "admin.access-control.groups.no-items": "No groups found with this in their name or this as UUID", - "admin.access-control.groups.no-items": "No se encontraron grupos con esto en su nombre o esto como UUID", + // "admin.access-control.groups.search.head": "Search groups", + "admin.access-control.groups.search.head": "Grupos de búsqueda", - // "admin.access-control.groups.notification.deleted.success": "Successfully deleted group \"{{name}}\"", - "admin.access-control.groups.notification.deleted.success": "El grupo \"{{ name }}\" se eliminó correctamente", + // "admin.access-control.groups.button.see-all": "Browse all", + "admin.access-control.groups.button.see-all": "Examinar todo", - // "admin.access-control.groups.notification.deleted.failure.title": "Failed to delete group \"{{name}}\"", - "admin.access-control.groups.notification.deleted.failure.title": "No se pudo borrar el grupo \"{{ name }}\"", + // "admin.access-control.groups.search.button": "Search", + "admin.access-control.groups.search.button": "Buscar", - // "admin.access-control.groups.notification.deleted.failure.content": "Cause: \"{{cause}}\"", - "admin.access-control.groups.notification.deleted.failure.content": "Causa: \"{{ cause }} \"", + // "admin.access-control.groups.search.placeholder": "Search groups...", + "admin.access-control.groups.search.placeholder": "Buscar grupos...", + // "admin.access-control.groups.table.id": "ID", + "admin.access-control.groups.table.id": "IDENTIFICACIÓN", + // "admin.access-control.groups.table.name": "Name", + "admin.access-control.groups.table.name": "Nombre", - // "admin.access-control.groups.form.alert.permanent": "This group is permanent, so it can't be edited or deleted. You can still add and remove group members using this page.", - "admin.access-control.groups.form.alert.permanent": "Este grupo es permanente, por lo que no se puede editar ni eliminar. Sin embargo, puedes añadir y eliminar miembros del grupo utilizando esta página.", + // "admin.access-control.groups.table.collectionOrCommunity": "Collection/Community", + "admin.access-control.groups.table.collectionOrCommunity": "Colección/Comunidad", - // "admin.access-control.groups.form.alert.workflowGroup": "This group can’t be modified or deleted because it corresponds to a role in the submission and workflow process in the \"{{name}}\" {{comcol}}. You can delete it from the \"assign roles\" tab on the edit {{comcol}} page. You can still add and remove group members using this page.", - "admin.access-control.groups.form.alert.workflowGroup": "Este grupo no puede ser modificado o eliminado porque corresponde a un rol en el proceso de presentación y flujo de trabajo en el \"{{ name }}\" {{ comcol }}. Puede eliminarlo desde la pestaña \"asignar roles\" de la página de edición del {{ comcol }}. Todavía puede añadir y eliminar miembros del grupo utilizando esta página.", + // "admin.access-control.groups.table.members": "Members", + "admin.access-control.groups.table.members": "Miembros", - // "admin.access-control.groups.form.head.create": "Create group", - "admin.access-control.groups.form.head.create": "Crea un grupo", + // "admin.access-control.groups.table.edit": "Edit", + "admin.access-control.groups.table.edit": "Editar", - // "admin.access-control.groups.form.head.edit": "Edit group", - "admin.access-control.groups.form.head.edit": "Editar grupo", + // "admin.access-control.groups.table.edit.buttons.edit": "Edit \"{{name}}\"", + "admin.access-control.groups.table.edit.buttons.edit": "Editar \"{{ name }}\"", - // "admin.access-control.groups.form.groupName": "Group name", - "admin.access-control.groups.form.groupName": "Nombre del grupo", + // "admin.access-control.groups.table.edit.buttons.remove": "Delete \"{{name}}\"", + "admin.access-control.groups.table.edit.buttons.remove": "Eliminar \"{{ name }}\"", - // "admin.access-control.groups.form.groupCommunity": "Community or Collection", - "admin.access-control.groups.form.groupCommunity": "Comunidad o Colección", + // "admin.access-control.groups.no-items": "No groups found with this in their name or this as UUID", + "admin.access-control.groups.no-items": "No se encontraron grupos con esto en su nombre o esto como UUID", - // "admin.access-control.groups.form.groupDescription": "Description", - "admin.access-control.groups.form.groupDescription": "Descripción", + // "admin.access-control.groups.notification.deleted.success": "Successfully deleted group \"{{name}}\"", + "admin.access-control.groups.notification.deleted.success": "El grupo \"{{ name }}\" se eliminó correctamente", - // "admin.access-control.groups.form.notification.created.success": "Successfully created Group \"{{name}}\"", - "admin.access-control.groups.form.notification.created.success": "Grupo creado con éxito \"{{ name }} \"", + // "admin.access-control.groups.notification.deleted.failure.title": "Failed to delete group \"{{name}}\"", + "admin.access-control.groups.notification.deleted.failure.title": "No se pudo borrar el grupo \"{{ name }}\"", - // "admin.access-control.groups.form.notification.created.failure": "Failed to create Group \"{{name}}\"", - "admin.access-control.groups.form.notification.created.failure": "No se pudo crear el grupo \"{{ name }} \"", + // "admin.access-control.groups.notification.deleted.failure.content": "Cause: \"{{cause}}\"", + "admin.access-control.groups.notification.deleted.failure.content": "Causa: \"{{ cause }} \"", - // "admin.access-control.groups.form.notification.created.failure.groupNameInUse": "Failed to create Group with name: \"{{name}}\", make sure the name is not already in use.", - "admin.access-control.groups.form.notification.created.failure.groupNameInUse": "No se pudo crear el grupo con el nombre: \"{{ name }}\", asegúrese de que el nombre no esté en uso.", - // "admin.access-control.groups.form.notification.edited.failure": "Failed to edit Group \"{{name}}\"", - "admin.access-control.groups.form.notification.edited.failure": "No se pudo editar el grupo \"{{ name }} \"", - // "admin.access-control.groups.form.notification.edited.failure.groupNameInUse": "Name \"{{name}}\" already in use!", - "admin.access-control.groups.form.notification.edited.failure.groupNameInUse": "¡El nombre \"{{ name }} \" ya está en uso!", + // "admin.access-control.groups.form.alert.permanent": "This group is permanent, so it can't be edited or deleted. You can still add and remove group members using this page.", + "admin.access-control.groups.form.alert.permanent": "Este grupo es permanente, por lo que no se puede editar ni eliminar. Sin embargo, puedes añadir y eliminar miembros del grupo utilizando esta página.", - // "admin.access-control.groups.form.notification.edited.success": "Successfully edited Group \"{{name}}\"", - "admin.access-control.groups.form.notification.edited.success": "Grupo editado correctamente \"{{ name }} \"", + // "admin.access-control.groups.form.alert.workflowGroup": "This group can’t be modified or deleted because it corresponds to a role in the submission and workflow process in the \"{{name}}\" {{comcol}}. You can delete it from the \"assign roles\" tab on the edit {{comcol}} page. You can still add and remove group members using this page.", + "admin.access-control.groups.form.alert.workflowGroup": "Este grupo no puede ser modificado o eliminado porque corresponde a un rol en el proceso de presentación y flujo de trabajo en el \"{{ name }}\" {{ comcol }}. Puede eliminarlo desde la pestaña \"asignar roles\" de la página de edición del {{ comcol }}. Todavía puede añadir y eliminar miembros del grupo utilizando esta página.", - // "admin.access-control.groups.form.actions.delete": "Delete Group", - "admin.access-control.groups.form.actions.delete": "Eliminar grupo", + // "admin.access-control.groups.form.head.create": "Create group", + "admin.access-control.groups.form.head.create": "Crea un grupo", - // "admin.access-control.groups.form.delete-group.modal.header": "Delete Group \"{{ dsoName }}\"", - "admin.access-control.groups.form.delete-group.modal.header": "Eliminar grupo \"{{ dsoName }} \"", + // "admin.access-control.groups.form.head.edit": "Edit group", + "admin.access-control.groups.form.head.edit": "Editar grupo", - // "admin.access-control.groups.form.delete-group.modal.info": "Are you sure you want to delete Group \"{{ dsoName }}\"", - "admin.access-control.groups.form.delete-group.modal.info": "¿Está seguro de que desea eliminar el grupo \"{{ dsoName }} \"?", + // "admin.access-control.groups.form.groupName": "Group name", + "admin.access-control.groups.form.groupName": "Nombre del grupo", - // "admin.access-control.groups.form.delete-group.modal.cancel": "Cancel", - "admin.access-control.groups.form.delete-group.modal.cancel": "Cancelar", + // "admin.access-control.groups.form.groupCommunity": "Community or Collection", + "admin.access-control.groups.form.groupCommunity": "Comunidad o Colección", - // "admin.access-control.groups.form.delete-group.modal.confirm": "Delete", - "admin.access-control.groups.form.delete-group.modal.confirm": "Borrar", + // "admin.access-control.groups.form.groupDescription": "Description", + "admin.access-control.groups.form.groupDescription": "Descripción", - // "admin.access-control.groups.form.notification.deleted.success": "Successfully deleted group \"{{ name }}\"", - "admin.access-control.groups.form.notification.deleted.success": "El grupo \"{{ name }} \" se eliminó correctamente", + // "admin.access-control.groups.form.notification.created.success": "Successfully created Group \"{{name}}\"", + "admin.access-control.groups.form.notification.created.success": "Grupo creado con éxito \"{{ name }} \"", - // "admin.access-control.groups.form.notification.deleted.failure.title": "Failed to delete group \"{{ name }}\"", - "admin.access-control.groups.form.notification.deleted.failure.title": "No se pudo borrar el grupo \"{{ name }} \"", + // "admin.access-control.groups.form.notification.created.failure": "Failed to create Group \"{{name}}\"", + "admin.access-control.groups.form.notification.created.failure": "No se pudo crear el grupo \"{{ name }} \"", - // "admin.access-control.groups.form.notification.deleted.failure.content": "Cause: \"{{ cause }}\"", - "admin.access-control.groups.form.notification.deleted.failure.content": "Causa: \"{{ cause }} \"", + // "admin.access-control.groups.form.notification.created.failure.groupNameInUse": "Failed to create Group with name: \"{{name}}\", make sure the name is not already in use.", + "admin.access-control.groups.form.notification.created.failure.groupNameInUse": "No se pudo crear el grupo con el nombre: \"{{ name }}\", asegúrese de que el nombre no esté en uso.", - // "admin.access-control.groups.form.members-list.head": "EPeople", - "admin.access-control.groups.form.members-list.head": "EPeople", + // "admin.access-control.groups.form.notification.edited.failure": "Failed to edit Group \"{{name}}\"", + "admin.access-control.groups.form.notification.edited.failure": "No se pudo editar el grupo \"{{ name }} \"", - // "admin.access-control.groups.form.members-list.search.head": "Add EPeople", - "admin.access-control.groups.form.members-list.search.head": "Agregar EPeople", + // "admin.access-control.groups.form.notification.edited.failure.groupNameInUse": "Name \"{{name}}\" already in use!", + "admin.access-control.groups.form.notification.edited.failure.groupNameInUse": "¡El nombre \"{{ name }} \" ya está en uso!", - // "admin.access-control.groups.form.members-list.button.see-all": "Browse All", - "admin.access-control.groups.form.members-list.button.see-all": "Examinar todo", + // "admin.access-control.groups.form.notification.edited.success": "Successfully edited Group \"{{name}}\"", + "admin.access-control.groups.form.notification.edited.success": "Grupo editado correctamente \"{{ name }} \"", - // "admin.access-control.groups.form.members-list.headMembers": "Current Members", - "admin.access-control.groups.form.members-list.headMembers": "Miembros actuales", + // "admin.access-control.groups.form.actions.delete": "Delete Group", + "admin.access-control.groups.form.actions.delete": "Eliminar grupo", - // "admin.access-control.groups.form.members-list.search.scope.metadata": "Metadata", - "admin.access-control.groups.form.members-list.search.scope.metadata": "Metadatos", + // "admin.access-control.groups.form.delete-group.modal.header": "Delete Group \"{{ dsoName }}\"", + "admin.access-control.groups.form.delete-group.modal.header": "Eliminar grupo \"{{ dsoName }} \"", - // "admin.access-control.groups.form.members-list.search.scope.email": "E-mail (exact)", - "admin.access-control.groups.form.members-list.search.scope.email": "Correo electrónico (exacto)", + // "admin.access-control.groups.form.delete-group.modal.info": "Are you sure you want to delete Group \"{{ dsoName }}\"", + "admin.access-control.groups.form.delete-group.modal.info": "¿Está seguro de que desea eliminar el grupo \"{{ dsoName }} \"?", - // "admin.access-control.groups.form.members-list.search.button": "Search", - "admin.access-control.groups.form.members-list.search.button": "Buscar", + // "admin.access-control.groups.form.delete-group.modal.cancel": "Cancel", + "admin.access-control.groups.form.delete-group.modal.cancel": "Cancelar", - // "admin.access-control.groups.form.members-list.table.id": "ID", - "admin.access-control.groups.form.members-list.table.id": "IDENTIFICACIÓN", + // "admin.access-control.groups.form.delete-group.modal.confirm": "Delete", + "admin.access-control.groups.form.delete-group.modal.confirm": "Borrar", - // "admin.access-control.groups.form.members-list.table.name": "Name", - "admin.access-control.groups.form.members-list.table.name": "Nombre", + // "admin.access-control.groups.form.notification.deleted.success": "Successfully deleted group \"{{ name }}\"", + "admin.access-control.groups.form.notification.deleted.success": "El grupo \"{{ name }} \" se eliminó correctamente", - // "admin.access-control.groups.form.members-list.table.identity": "Identity", - "admin.access-control.groups.form.members-list.table.identity": "Identidad", + // "admin.access-control.groups.form.notification.deleted.failure.title": "Failed to delete group \"{{ name }}\"", + "admin.access-control.groups.form.notification.deleted.failure.title": "No se pudo borrar el grupo \"{{ name }} \"", - // "admin.access-control.groups.form.members-list.table.email": "Email", - "admin.access-control.groups.form.members-list.table.email": "Correo electrónico", + // "admin.access-control.groups.form.notification.deleted.failure.content": "Cause: \"{{ cause }}\"", + "admin.access-control.groups.form.notification.deleted.failure.content": "Causa: \"{{ cause }} \"", - // "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.head": "EPeople", + "admin.access-control.groups.form.members-list.head": "EPeople", - // "admin.access-control.groups.form.members-list.table.edit": "Remove / Add", - "admin.access-control.groups.form.members-list.table.edit": "Eliminar / Agregar", + // "admin.access-control.groups.form.members-list.search.head": "Add EPeople", + "admin.access-control.groups.form.members-list.search.head": "Agregar EPeople", - // "admin.access-control.groups.form.members-list.table.edit.buttons.remove": "Remove member with name \"{{name}}\"", - "admin.access-control.groups.form.members-list.table.edit.buttons.remove": "Eliminar miembro con nombre \"{{ name }} \"", + // "admin.access-control.groups.form.members-list.button.see-all": "Browse All", + "admin.access-control.groups.form.members-list.button.see-all": "Examinar todo", - // "admin.access-control.groups.form.members-list.notification.success.addMember": "Successfully added member: \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.success.addMember": "Miembro agregado exitosamente: \"{{ name }} \"", + // "admin.access-control.groups.form.members-list.headMembers": "Current Members", + "admin.access-control.groups.form.members-list.headMembers": "Miembros actuales", - // "admin.access-control.groups.form.members-list.notification.failure.addMember": "Failed to add member: \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.failure.addMember": "No se pudo agregar el miembro: \"{{ name }} \"", + // "admin.access-control.groups.form.members-list.search.scope.metadata": "Metadata", + "admin.access-control.groups.form.members-list.search.scope.metadata": "Metadatos", - // "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Successfully deleted member: \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Miembro eliminado correctamente: \"{{ name }} \"", + // "admin.access-control.groups.form.members-list.search.scope.email": "E-mail (exact)", + "admin.access-control.groups.form.members-list.search.scope.email": "Correo electrónico (exacto)", - // "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Failed to delete member: \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "No se pudo borrar el miembro: \"{{ name }} \"", + // "admin.access-control.groups.form.members-list.search.button": "Search", + "admin.access-control.groups.form.members-list.search.button": "Buscar", - // "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Add member with name \"{{name}}\"", - "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Agregar miembro con nombre \"{{ name }} \"", + // "admin.access-control.groups.form.members-list.table.id": "ID", + "admin.access-control.groups.form.members-list.table.id": "ID", - // "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", - "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup": "No hay un grupo activo actual, envíe un nombre primero.", + // "admin.access-control.groups.form.members-list.table.name": "Name", + "admin.access-control.groups.form.members-list.table.name": "Nombre", - // "admin.access-control.groups.form.members-list.no-members-yet": "No members in group yet, search and add.", - "admin.access-control.groups.form.members-list.no-members-yet": "Aún no hay miembros en el grupo, busque y agregue.", + // "admin.access-control.groups.form.members-list.table.identity": "Identity", + "admin.access-control.groups.form.members-list.table.identity": "Identidad", - // "admin.access-control.groups.form.members-list.no-items": "No EPeople found in that search", - "admin.access-control.groups.form.members-list.no-items": "No se encontraron personas en esa búsqueda", + // "admin.access-control.groups.form.members-list.table.email": "Email", + "admin.access-control.groups.form.members-list.table.email": "Correo electrónico", - // "admin.access-control.groups.form.subgroups-list.notification.failure": "Something went wrong: \"{{cause}}\"", - "admin.access-control.groups.form.subgroups-list.notification.failure": "Algo salió mal: \"{{ cause }} \"", + // "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.subgroups-list.head": "Groups", - "admin.access-control.groups.form.subgroups-list.head": "Grupos", + // "admin.access-control.groups.form.members-list.table.edit": "Remove / Add", + "admin.access-control.groups.form.members-list.table.edit": "Eliminar / Agregar", - // "admin.access-control.groups.form.subgroups-list.search.head": "Add Subgroup", - "admin.access-control.groups.form.subgroups-list.search.head": "Agregar subgrupo", + // "admin.access-control.groups.form.members-list.table.edit.buttons.remove": "Remove member with name \"{{name}}\"", + "admin.access-control.groups.form.members-list.table.edit.buttons.remove": "Eliminar miembro con nombre \"{{ name }} \"", - // "admin.access-control.groups.form.subgroups-list.button.see-all": "Browse All", - "admin.access-control.groups.form.subgroups-list.button.see-all": "Examinar todo", + // "admin.access-control.groups.form.members-list.notification.success.addMember": "Successfully added member: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.success.addMember": "Miembro agregado exitosamente: \"{{ name }} \"", - // "admin.access-control.groups.form.subgroups-list.headSubgroups": "Current Subgroups", - "admin.access-control.groups.form.subgroups-list.headSubgroups": "Subgrupos actuales", + // "admin.access-control.groups.form.members-list.notification.failure.addMember": "Failed to add member: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.failure.addMember": "No se pudo agregar el miembro: \"{{ name }} \"", - // "admin.access-control.groups.form.subgroups-list.search.button": "Search", - "admin.access-control.groups.form.subgroups-list.search.button": "Buscar", + // "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Successfully deleted member: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Miembro eliminado correctamente: \"{{ name }} \"", - // "admin.access-control.groups.form.subgroups-list.table.id": "ID", - "admin.access-control.groups.form.subgroups-list.table.id": "IDENTIFICACIÓN", + // "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Failed to delete member: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "No se pudo borrar el miembro: \"{{ name }} \"", - // "admin.access-control.groups.form.subgroups-list.table.name": "Name", - "admin.access-control.groups.form.subgroups-list.table.name": "Nombre", + // "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Add member with name \"{{name}}\"", + "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Agregar miembro con nombre \"{{ name }} \"", - // "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Collection/Community", - "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Colección/Comunidad", + // "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", + "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup": "No hay un grupo activo actual, envíe un nombre primero.", - // "admin.access-control.groups.form.subgroups-list.table.edit": "Remove / Add", - "admin.access-control.groups.form.subgroups-list.table.edit": "Eliminar / Agregar", + // "admin.access-control.groups.form.members-list.no-members-yet": "No members in group yet, search and add.", + "admin.access-control.groups.form.members-list.no-members-yet": "Aún no hay miembros en el grupo, busque y agregue.", - // "admin.access-control.groups.form.subgroups-list.table.edit.buttons.remove": "Remove subgroup with name \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.table.edit.buttons.remove": "Eliminar subgrupo con nombre \"{{ name }} \"", + // "admin.access-control.groups.form.members-list.no-items": "No EPeople found in that search", + "admin.access-control.groups.form.members-list.no-items": "No se encontraron E-People en esa búsqueda", - // "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": "Agregar subgrupo con el nombre \"{{ name }} \"", + // "admin.access-control.groups.form.subgroups-list.notification.failure": "Something went wrong: \"{{cause}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure": "Algo salió mal: \"{{ cause }} \"", - // "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Current group", - "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Grupo actual", + // "admin.access-control.groups.form.subgroups-list.head": "Groups", + "admin.access-control.groups.form.subgroups-list.head": "Grupos", - // "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup": "Successfully added subgroup: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup": "Subgrupo agregado exitosamente: \"{{ name }} \"", + // "admin.access-control.groups.form.subgroups-list.search.head": "Add Subgroup", + "admin.access-control.groups.form.subgroups-list.search.head": "Agregar subgrupo", - // "admin.access-control.groups.form.subgroups-list.notification.failure.addSubgroup": "Failed to add subgroup: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.failure.addSubgroup": "No se pudo agregar el subgrupo: \"{{ name }} \"", + // "admin.access-control.groups.form.subgroups-list.button.see-all": "Browse All", + "admin.access-control.groups.form.subgroups-list.button.see-all": "Examinar todo", - // "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Successfully deleted subgroup: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Subgrupo eliminado correctamente: \"{{ name }} \"", + // "admin.access-control.groups.form.subgroups-list.headSubgroups": "Current Subgroups", + "admin.access-control.groups.form.subgroups-list.headSubgroups": "Subgrupos actuales", - // "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Failed to delete subgroup: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "No se pudo borrar el subgrupo: \"{{ name }} \"", + // "admin.access-control.groups.form.subgroups-list.search.button": "Search", + "admin.access-control.groups.form.subgroups-list.search.button": "Buscar", - // "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", - "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "No hay un grupo activo actual, envíe un nombre primero.", + // "admin.access-control.groups.form.subgroups-list.table.id": "ID", + "admin.access-control.groups.form.subgroups-list.table.id": "IDENTIFICACIÓN", - // "admin.access-control.groups.form.subgroups-list.notification.failure.subgroupToAddIsActiveGroup": "This is the current group, can't be added.", - "admin.access-control.groups.form.subgroups-list.notification.failure.subgroupToAddIsActiveGroup": "Este es el grupo actual, no se puede agregar.", + // "admin.access-control.groups.form.subgroups-list.table.name": "Name", + "admin.access-control.groups.form.subgroups-list.table.name": "Nombre", - // "admin.access-control.groups.form.subgroups-list.no-items": "No groups found with this in their name or this as UUID", - "admin.access-control.groups.form.subgroups-list.no-items": "No se encontraron grupos con esto en su nombre o esto como UUID", + // "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Collection/Community", + "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Colección/Comunidad", - // "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": "Aún no hay subgrupos en el grupo.", + // "admin.access-control.groups.form.subgroups-list.table.edit": "Remove / Add", + "admin.access-control.groups.form.subgroups-list.table.edit": "Eliminar / Agregar", - // "admin.access-control.groups.form.return": "Back", - "admin.access-control.groups.form.return": "atrás", + // "admin.access-control.groups.form.subgroups-list.table.edit.buttons.remove": "Remove subgroup with name \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.table.edit.buttons.remove": "Eliminar subgrupo con nombre \"{{ name }} \"", + // "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": "Agregar subgrupo con el nombre \"{{ name }} \"", + // "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Current group", + "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Grupo actual", - // "admin.search.breadcrumbs": "Administrative Search", - "admin.search.breadcrumbs": "Búsqueda administrativa", + // "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup": "Successfully added subgroup: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup": "Subgrupo agregado exitosamente: \"{{ name }} \"", - // "admin.search.collection.edit": "Edit", - "admin.search.collection.edit": "Editar", + // "admin.access-control.groups.form.subgroups-list.notification.failure.addSubgroup": "Failed to add subgroup: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure.addSubgroup": "No se pudo agregar el subgrupo: \"{{ name }} \"", - // "admin.search.community.edit": "Edit", - "admin.search.community.edit": "Editar", + // "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Successfully deleted subgroup: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Subgrupo eliminado correctamente: \"{{ name }} \"", - // "admin.search.item.delete": "Delete", - "admin.search.item.delete": "Borrar", + // "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Failed to delete subgroup: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "No se pudo borrar el subgrupo: \"{{ name }} \"", - // "admin.search.item.edit": "Edit", - "admin.search.item.edit": "Editar", + // "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", + "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "No hay un grupo activo actual, envíe un nombre primero.", - // "admin.search.item.make-private": "Make Private", - "admin.search.item.make-private": "Hacerlo privado", + // "admin.access-control.groups.form.subgroups-list.notification.failure.subgroupToAddIsActiveGroup": "This is the current group, can't be added.", + "admin.access-control.groups.form.subgroups-list.notification.failure.subgroupToAddIsActiveGroup": "Este es el grupo actual, no se puede agregar.", - // "admin.search.item.make-public": "Make Public", - "admin.search.item.make-public": "Hacer público", + // "admin.access-control.groups.form.subgroups-list.no-items": "No groups found with this in their name or this as UUID", + "admin.access-control.groups.form.subgroups-list.no-items": "No se encontraron grupos con esto en su nombre o esto como UUID", - // "admin.search.item.move": "Move", - "admin.search.item.move": "Moverse", + // "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": "Aún no hay subgrupos en el grupo.", - // "admin.search.item.reinstate": "Reinstate", - "admin.search.item.reinstate": "Reintegrar", + // "admin.access-control.groups.form.return": "Back", + "admin.access-control.groups.form.return": "Atrás", - // "admin.search.item.withdraw": "Withdraw", - "admin.search.item.withdraw": "Retirar", - // "admin.search.title": "Administrative Search", - "admin.search.title": "Búsqueda administrativa", - // "administrativeView.search.results.head": "Administrative Search", - "administrativeView.search.results.head": "Búsqueda administrativa", + // "admin.search.breadcrumbs": "Administrative Search", + "admin.search.breadcrumbs": "Búsqueda administrativa", + // "admin.search.collection.edit": "Edit", + "admin.search.collection.edit": "Editar", + // "admin.search.community.edit": "Edit", + "admin.search.community.edit": "Editar", + // "admin.search.item.delete": "Delete", + "admin.search.item.delete": "Borrar", - // "admin.workflow.breadcrumbs": "Administer Workflow", - "admin.workflow.breadcrumbs": "Administrar flujo de trabajo", + // "admin.search.item.edit": "Edit", + "admin.search.item.edit": "Editar", - // "admin.workflow.title": "Administer Workflow", - "admin.workflow.title": "Administrar flujo de trabajo", + // "admin.search.item.make-private": "Make non-discoverable", + "admin.search.item.make-private": "Hacerlo privado", - // "admin.workflow.item.workflow": "Workflow", - "admin.workflow.item.workflow": "Flujo de trabajo", + // "admin.search.item.make-public": "Make discoverable", + "admin.search.item.make-public": "Hacer público", - // "admin.workflow.item.delete": "Delete", - "admin.workflow.item.delete": "Borrar", + // "admin.search.item.move": "Move", + "admin.search.item.move": "Moverse", - // "admin.workflow.item.send-back": "Send back", - "admin.workflow.item.send-back": "Enviar de vuelta", + // "admin.search.item.reinstate": "Reinstate", + "admin.search.item.reinstate": "Reintegrar", + // "admin.search.item.withdraw": "Withdraw", + "admin.search.item.withdraw": "Retirar", + // "admin.search.title": "Administrative Search", + "admin.search.title": "Búsqueda administrativa", - // "admin.metadata-import.breadcrumbs": "Import Metadata", - "admin.metadata-import.breadcrumbs": "Importar metadatos", + // "administrativeView.search.results.head": "Administrative Search", + "administrativeView.search.results.head": "Búsqueda administrativa", - // "admin.metadata-import.title": "Import Metadata", - "admin.metadata-import.title": "Importar metadatos", - // "admin.metadata-import.page.header": "Import Metadata", - "admin.metadata-import.page.header": "Importar metadatos", - // "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": "Puede soltar o explorar archivos CSV que contienen operaciones de metadatos por lotes en archivos aquí", - // "admin.metadata-import.page.dropMsg": "Drop a metadata CSV to import", - "admin.metadata-import.page.dropMsg": "Suelta un CSV de metadatos para importar", + // "admin.workflow.breadcrumbs": "Administer Workflow", + "admin.workflow.breadcrumbs": "Administrar flujo de trabajo", - // "admin.metadata-import.page.dropMsgReplace": "Drop to replace the metadata CSV to import", - "admin.metadata-import.page.dropMsgReplace": "Suelta para reemplazar el CSV de metadatos para importar", + // "admin.workflow.title": "Administer Workflow", + "admin.workflow.title": "Administrar flujo de trabajo", - // "admin.metadata-import.page.button.return": "Back", - "admin.metadata-import.page.button.return": "atrás", + // "admin.workflow.item.workflow": "Workflow", + "admin.workflow.item.workflow": "Flujo de trabajo", - // "admin.metadata-import.page.button.proceed": "Proceed", - "admin.metadata-import.page.button.proceed": "Continuar", + // "admin.workflow.item.delete": "Delete", + "admin.workflow.item.delete": "Borrar", - // "admin.metadata-import.page.error.addFile": "Select file first!", - "admin.metadata-import.page.error.addFile": "¡Seleccione el archivo primero!", + // "admin.workflow.item.send-back": "Send back", + "admin.workflow.item.send-back": "Enviar de vuelta", + // "admin.metadata-import.breadcrumbs": "Import Metadata", + "admin.metadata-import.breadcrumbs": "Importar metadatos", - // "auth.errors.invalid-user": "Invalid email address or password.", - "auth.errors.invalid-user": "Dirección de correo electrónico o contraseña no válidos.", + // "admin.metadata-import.title": "Import Metadata", + "admin.metadata-import.title": "Importar metadatos", - // "auth.messages.expired": "Your session has expired. Please log in again.", - "auth.messages.expired": "Su sesión ha caducado. Inicie sesión de nuevo.", + // "admin.metadata-import.page.header": "Import Metadata", + "admin.metadata-import.page.header": "Importar metadatos", - // "auth.messages.token-refresh-failed": "Refreshing your session token failed. Please log in again.", - "auth.messages.token-refresh-failed": "No se pudo actualizar el token de la sesión. Inicie sesión de nuevo.", + // "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": "Puede soltar o explorar archivos CSV que contienen operaciones de metadatos por lotes en archivos aquí", + // "admin.metadata-import.page.dropMsg": "Drop a metadata CSV to import", + "admin.metadata-import.page.dropMsg": "Suelta un CSV de metadatos para importar", + // "admin.metadata-import.page.dropMsgReplace": "Drop to replace the metadata CSV to import", + "admin.metadata-import.page.dropMsgReplace": "Suelta para reemplazar el CSV de metadatos para importar", - // "bitstream.download.page": "Now downloading {{bitstream}}..." , - "bitstream.download.page": "Descargando {{ bitstream }}...", + // "admin.metadata-import.page.button.return": "Back", + "admin.metadata-import.page.button.return": "Atrás", + // "admin.metadata-import.page.button.proceed": "Proceed", + "admin.metadata-import.page.button.proceed": "Continuar", + // "admin.metadata-import.page.error.addFile": "Select file first!", + "admin.metadata-import.page.error.addFile": "¡Seleccione el archivo primero!", - // "bitstream.edit.authorizations.link": "Edit bitstream's Policies", - "bitstream.edit.authorizations.link": "Editar las políticas de archivo", + // "admin.metadata-import.page.validateOnly": "Validate Only", + "admin.metadata-import.page.validateOnly": "Solo Validar", - // "bitstream.edit.authorizations.title": "Edit bitstream's Policies", - "bitstream.edit.authorizations.title": "Editar las políticas de archivo", + // "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": "Al seleccionar, se validará el CSV subido. Recibirá un informe con los cambios detectados, pero no se efectuarán dichos cambios.", - // "bitstream.edit.return": "Back", - "bitstream.edit.return": "atrás", - // "bitstream.edit.bitstream": "Bitstream: ", - "bitstream.edit.bitstream": "Archivo:", - // "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": "Opcionalmente, proporcione una breve descripción del archivo, por ejemplo \"Artículo principal\" o \"Lecturas de datos del experimento\".", - // "bitstream.edit.form.description.label": "Description", - "bitstream.edit.form.description.label": "Descripción", + // "auth.errors.invalid-user": "Invalid email address or password.", + "auth.errors.invalid-user": "Dirección de correo electrónico o contraseña no válidos.", - // "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": "El primer día a partir del cual se permite el acceso. Esta fecha no se puede modificar en este formulario. Para establecer una fecha de embargo para un archivo, vaya a la pestaña Estado del artículo , haga clic en Autorizaciones... , cree o edite la política READ del archivo y configure la Fecha de inicio como desee.", + // "auth.messages.expired": "Your session has expired. Please log in again.", + "auth.messages.expired": "Su sesión ha caducado. Inicie sesión de nuevo.", - // "bitstream.edit.form.embargo.label": "Embargo until specific date", - "bitstream.edit.form.embargo.label": "Embargo hasta fecha concreta", + // "auth.messages.token-refresh-failed": "Refreshing your session token failed. Please log in again.", + "auth.messages.token-refresh-failed": "No se pudo actualizar el token de la sesión. Inicie sesión de nuevo.", - // "bitstream.edit.form.fileName.hint": "Change the filename for the bitstream. Note that this will change the display bitstream URL, but old links will still resolve as long as the sequence ID does not change.", - "bitstream.edit.form.fileName.hint": "Cambie el nombre de archivo del archivo. Tenga en cuenta que esto cambiará la URL de archivo de visualización, pero los enlaces antiguos seguirán resolviéndose siempre que la ID de secuencia no cambie.", - // "bitstream.edit.form.fileName.label": "Filename", - "bitstream.edit.form.fileName.label": "Nombre del archivo", - // "bitstream.edit.form.newFormat.label": "Describe new format", - "bitstream.edit.form.newFormat.label": "Describe el nuevo formato", + // "bitstream.download.page": "Now downloading {{bitstream}}..." , + "bitstream.download.page": "Descargando {{ bitstream }}...", - // "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": "La aplicación que usó para crear el archivo y el número de versión (por ejemplo, \" ACMESoft SuperApp versión 1.5 \").", + // "bitstream.download.page.back": "Back" , + "bitstream.download.page.back": "Atrás" , - // "bitstream.edit.form.primaryBitstream.label": "Primary bitstream", - "bitstream.edit.form.primaryBitstream.label": "archivo primario", - // "bitstream.edit.form.selectedFormat.hint": "If the format is not in the above list, select \"format not in list\" above and describe it under \"Describe new format\".", - "bitstream.edit.form.selectedFormat.hint": "Si el formato no está en la lista anterior, seleccione \"el formato no está en la lista \" arriba y descríbalo en \"Describir el nuevo formato \".", + // "bitstream.edit.authorizations.link": "Edit bitstream's Policies", + "bitstream.edit.authorizations.link": "Editar las políticas de archivo", - // "bitstream.edit.form.selectedFormat.label": "Selected Format", - "bitstream.edit.form.selectedFormat.label": "Formato seleccionado", + // "bitstream.edit.authorizations.title": "Edit bitstream's Policies", + "bitstream.edit.authorizations.title": "Editar las políticas de archivo", - // "bitstream.edit.form.selectedFormat.unknown": "Format not in list", - "bitstream.edit.form.selectedFormat.unknown": "El formato no está en la lista", + // "bitstream.edit.return": "Back", + "bitstream.edit.return": "Atrás", - // "bitstream.edit.notifications.error.format.title": "An error occurred saving the bitstream's format", - "bitstream.edit.notifications.error.format.title": "Se produjo un error al guardar el formato del archivo.", + // "bitstream.edit.bitstream": "Bitstream: ", + "bitstream.edit.bitstream": "Archivo:", - // "bitstream.edit.notifications.saved.content": "Your changes to this bitstream were saved.", - "bitstream.edit.notifications.saved.content": "Se guardaron sus cambios en este archivo.", + // "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": "Opcionalmente, proporcione una breve descripción del archivo, por ejemplo \"Artículo principal\" o \"Lecturas de datos del experimento\".", - // "bitstream.edit.notifications.saved.title": "Bitstream saved", - "bitstream.edit.notifications.saved.title": "Archivo guardado", + // "bitstream.edit.form.description.label": "Description", + "bitstream.edit.form.description.label": "Descripción", - // "bitstream.edit.title": "Edit bitstream", - "bitstream.edit.title": "Editar archivo", + // "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": "El primer día a partir del cual se permite el acceso. Esta fecha no se puede modificar en este formulario. Para establecer una fecha de embargo para un archivo, vaya a la pestaña Estado del artículo , haga clic en Autorizaciones... , cree o edite la política READ del archivo y configure la Fecha de inicio como desee.", + // "bitstream.edit.form.embargo.label": "Embargo until specific date", + "bitstream.edit.form.embargo.label": "Embargo hasta fecha concreta", + // "bitstream.edit.form.fileName.hint": "Change the filename for the bitstream. Note that this will change the display bitstream URL, but old links will still resolve as long as the sequence ID does not change.", + "bitstream.edit.form.fileName.hint": "Cambie el nombre de archivo del archivo. Tenga en cuenta que esto cambiará la URL de archivo de visualización, pero los enlaces antiguos seguirán resolviéndose siempre que la ID de secuencia no cambie.", - // "browse.comcol.by.author": "By Author", - "browse.comcol.by.author": "Por autor", + // "bitstream.edit.form.fileName.label": "Filename", + "bitstream.edit.form.fileName.label": "Nombre del archivo", - // "browse.comcol.by.dateissued": "By Issue Date", - "browse.comcol.by.dateissued": "Por fecha de emisión", + // "bitstream.edit.form.newFormat.label": "Describe new format", + "bitstream.edit.form.newFormat.label": "Describe el nuevo formato", - // "browse.comcol.by.subject": "By Subject", - "browse.comcol.by.subject": "Por tema", + // "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": "La aplicación que usó para crear el archivo y el número de versión (por ejemplo, \" ACMESoft SuperApp versión 1.5 \").", - // "browse.comcol.by.title": "By Title", - "browse.comcol.by.title": "Por titulo", + // "bitstream.edit.form.primaryBitstream.label": "Primary bitstream", + "bitstream.edit.form.primaryBitstream.label": "archivo primario", - // "browse.comcol.head": "Browse", - "browse.comcol.head": "Examinar", + // "bitstream.edit.form.selectedFormat.hint": "If the format is not in the above list, select \"format not in list\" above and describe it under \"Describe new format\".", + "bitstream.edit.form.selectedFormat.hint": "Si el formato no está en la lista anterior, seleccione \"el formato no está en la lista \" arriba y descríbalo en \"Describir el nuevo formato \".", - // "browse.empty": "No items to show.", - "browse.empty": "No hay artículos para mostrar.", + // "bitstream.edit.form.selectedFormat.label": "Selected Format", + "bitstream.edit.form.selectedFormat.label": "Formato seleccionado", - // "browse.metadata.author": "Author", - "browse.metadata.author": "Autor", + // "bitstream.edit.form.selectedFormat.unknown": "Format not in list", + "bitstream.edit.form.selectedFormat.unknown": "El formato no está en la lista", - // "browse.metadata.dateissued": "Issue Date", - "browse.metadata.dateissued": "Fecha de asunto", + // "bitstream.edit.notifications.error.format.title": "An error occurred saving the bitstream's format", + "bitstream.edit.notifications.error.format.title": "Se produjo un error al guardar el formato del archivo.", - // "browse.metadata.subject": "Subject", - "browse.metadata.subject": "Tema", + // "bitstream.edit.form.iiifLabel.label": "IIIF Label", + "bitstream.edit.form.iiifLabel.label": "Etiqueta IIIF", - // "browse.metadata.title": "Title", - "browse.metadata.title": "Título", + // "bitstream.edit.form.iiifLabel.hint": "Canvas label for this image. If not provided default label will be used.", + "bitstream.edit.form.iiifLabel.hint": "Canvas label for this image. If not provided default label will be used.", - // "browse.metadata.author.breadcrumbs": "Browse by Author", - "browse.metadata.author.breadcrumbs": "Buscar por autor", + // "bitstream.edit.form.iiifToc.label": "IIIF Table of Contents", + "bitstream.edit.form.iiifToc.label": "Índice del IIIF", - // "browse.metadata.dateissued.breadcrumbs": "Browse by Date", - "browse.metadata.dateissued.breadcrumbs": "Examinar por fecha", + // "bitstream.edit.form.iiifToc.hint": "Adding text here makes this the start of a new table of contents range.", + "bitstream.edit.form.iiifToc.hint": "Añadir texto aquí origina un nuevo comienzo del índice.", - // "browse.metadata.subject.breadcrumbs": "Browse by Subject", - "browse.metadata.subject.breadcrumbs": "Examinar por tema", + // "bitstream.edit.form.iiifWidth.label": "IIIF Canvas Width", + "bitstream.edit.form.iiifWidth.label": "Anchura del marco IIIF", - // "browse.metadata.title.breadcrumbs": "Browse by Title", - "browse.metadata.title.breadcrumbs": "Examinar por título", + // "bitstream.edit.form.iiifWidth.hint": "The canvas width should usually match the image width.", + "bitstream.edit.form.iiifWidth.hint": "La anchura del marco normalmente debería coincidir con la anchura de la imagen.", - // "browse.next.button": "Next", - "browse.next.button": "próximo", + // "bitstream.edit.form.iiifHeight.label": "IIIF Canvas Height", + "bitstream.edit.form.iiifHeight.label": "Altura del marco IIIF", - // "browse.previous.button": "Previous", - "browse.previous.button": "Anterior", + // "bitstream.edit.form.iiifHeight.hint": "The canvas height should usually match the image height.", + "bitstream.edit.form.iiifHeight.hint": "La altura del marco normalmente debería coincidir con la altura de la imagen", - // "browse.startsWith.choose_start": "(Choose start)", - "browse.startsWith.choose_start": "(Elija inicio)", - // "browse.startsWith.choose_year": "(Choose year)", - "browse.startsWith.choose_year": "(Elegir año)", + // "bitstream.edit.notifications.saved.content": "Your changes to this bitstream were saved.", + "bitstream.edit.notifications.saved.content": "Se guardaron sus cambios en este archivo.", - // "browse.startsWith.choose_year.label": "Choose the issue year", - "browse.startsWith.choose_year.label": "Elija el año de emisión", + // "bitstream.edit.notifications.saved.title": "Bitstream saved", + "bitstream.edit.notifications.saved.title": "Archivo guardado", - // "browse.startsWith.jump": "Jump to a point in the index:", - "browse.startsWith.jump": "Saltar a un punto del índice:", + // "bitstream.edit.title": "Edit bitstream", + "bitstream.edit.title": "Editar archivo", - // "browse.startsWith.months.april": "April", - "browse.startsWith.months.april": "abril", + // "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": "Ya tiene acceso al fichero, si quiere descargarlo pulse ", - // "browse.startsWith.months.august": "August", - "browse.startsWith.months.august": "agosto", + // "bitstream-request-a-copy.alert.canDownload2": "here", + "bitstream-request-a-copy.alert.canDownload2": "aquí", - // "browse.startsWith.months.december": "December", - "browse.startsWith.months.december": "diciembre", + // "bitstream-request-a-copy.header": "Request a copy of the file", + "bitstream-request-a-copy.header": "Solicitar una copia del fichero", - // "browse.startsWith.months.february": "February", - "browse.startsWith.months.february": "febrero", + // "bitstream-request-a-copy.intro": "Enter the following information to request a copy for the following item: ", + "bitstream-request-a-copy.intro": "Introduzca la siguiente información para solicitar una copia del siguiente ítem: ", - // "browse.startsWith.months.january": "January", - "browse.startsWith.months.january": "enero", + // "bitstream-request-a-copy.intro.bitstream.one": "Requesting the following file: ", + "bitstream-request-a-copy.intro.bitstream.one": "Solicitando el fichero siguiente: ", + + // "bitstream-request-a-copy.intro.bitstream.all": "Requesting all files. ", + "bitstream-request-a-copy.intro.bitstream.all": "Solicitando todos los ficheros. ", - // "browse.startsWith.months.july": "July", - "browse.startsWith.months.july": "julio", + // "bitstream-request-a-copy.name.label": "Name *", + "bitstream-request-a-copy.name.label": "Nombre *", - // "browse.startsWith.months.june": "June", - "browse.startsWith.months.june": "junio", + // "bitstream-request-a-copy.name.error": "The name is required", + "bitstream-request-a-copy.name.error": "Se requiere un Nombre", - // "browse.startsWith.months.march": "March", - "browse.startsWith.months.march": "marcha", + // "bitstream-request-a-copy.email.label": "Your e-mail address *", + "bitstream-request-a-copy.email.label": "Su dirección de correo electrónico *", - // "browse.startsWith.months.may": "May", - "browse.startsWith.months.may": "Mayo", + // "bitstream-request-a-copy.email.hint": "This email address is used for sending the file.", + "bitstream-request-a-copy.email.hint": "Se enviará el fichero a esta dirección de correo electrónico.", - // "browse.startsWith.months.none": "(Choose month)", - "browse.startsWith.months.none": "(Elija mes)", + // "bitstream-request-a-copy.email.error": "Please enter a valid email address.", + "bitstream-request-a-copy.email.error": "Por favor, introduzca una dirección de correo electrónico válida.", - // "browse.startsWith.months.none.label": "Choose the issue month", - "browse.startsWith.months.none.label": "Elija el mes de emisión", + // "bitstream-request-a-copy.allfiles.label": "Files", + "bitstream-request-a-copy.allfiles.label": "Ficheros", - // "browse.startsWith.months.november": "November", - "browse.startsWith.months.november": "noviembre", + // "bitstream-request-a-copy.files-all-false.label": "Only the requested file", + "bitstream-request-a-copy.files-all-false.label": "Solo el fichero indicado", - // "browse.startsWith.months.october": "October", - "browse.startsWith.months.october": "octubre", + // "bitstream-request-a-copy.files-all-true.label": "All files (of this item) in restricted access", + "bitstream-request-a-copy.files-all-true.label": "Todos los ficheros (de este ítem) en acceso restringido", - // "browse.startsWith.months.september": "September", - "browse.startsWith.months.september": "septiembre", + // "bitstream-request-a-copy.message.label": "Message", + "bitstream-request-a-copy.message.label": "Mensaje", - // "browse.startsWith.submit": "Browse", - "browse.startsWith.submit": "Examinar", + // "bitstream-request-a-copy.return": "Back", + "bitstream-request-a-copy.return": "Atrás", - // "browse.startsWith.type_date": "Or type in a date (year-month) and click 'Browse'", - "browse.startsWith.type_date": "O escriba una fecha (año-mes) y haga clic en 'Examinar'", + // "bitstream-request-a-copy.submit": "Request copy", + "bitstream-request-a-copy.submit": "Solicitar copia", - // "browse.startsWith.type_date.label": "Or type in a date (year-month) and click on the Browse button", - "browse.startsWith.type_date.label": "O escriba una fecha (año-mes) y haga clic en el botón Examinar", + // "bitstream-request-a-copy.submit.success": "The item request was submitted successfully.", + "bitstream-request-a-copy.submit.success": "La solicitud de ítem se ha enviado.", - // "browse.startsWith.type_text": "Type the first few letters and click on the Browse button", - "browse.startsWith.type_text": "Escriba las primeras letras y haga clic en el botón Examinar", + // "bitstream-request-a-copy.submit.error": "Something went wrong with submitting the item request.", + "bitstream-request-a-copy.submit.error": "Hubo un fallo en el envío de la solicitud de ítem.", - // "browse.title": "Browsing {{ collection }} by {{ field }} {{ value }}", - "browse.title": "Examinando {{ collection }} por {{ field }} {{ value }}", + // "browse.back.all-results": "All browse results", + "browse.back.all-results": "Todos los resultados de la búsqueda", - // "chips.remove": "Remove chip", - "chips.remove": "Quitar chip", + // "browse.comcol.by.author": "By Author", + "browse.comcol.by.author": "Por autor", + // "browse.comcol.by.dateissued": "By Issue Date", + "browse.comcol.by.dateissued": "Por fecha de emisión", + // "browse.comcol.by.subject": "By Subject", + "browse.comcol.by.subject": "Por materia", - // "collection.create.head": "Create a Collection", - "collection.create.head": "Crear una colección", + // "browse.comcol.by.title": "By Title", + "browse.comcol.by.title": "Por titulo", - // "collection.create.notifications.success": "Successfully created the Collection", - "collection.create.notifications.success": "Creó con éxito la colección", + // "browse.comcol.head": "Browse", + "browse.comcol.head": "Examinar", - // "collection.create.sub-head": "Create a Collection for Community {{ parent }}", - "collection.create.sub-head": "Crea una colección para la comunidad {{ parent }}", + // "browse.empty": "No items to show.", + "browse.empty": "No hay ítems para mostrar.", - // "collection.curate.header": "Curate Collection: {{collection}}", - "collection.curate.header": "Colección seleccionada: {{ collection }}", + // "browse.metadata.author": "Author", + "browse.metadata.author": "Autor", - // "collection.delete.cancel": "Cancel", - "collection.delete.cancel": "Cancelar", + // "browse.metadata.dateissued": "Issue Date", + "browse.metadata.dateissued": "Fecha de publicación", - // "collection.delete.confirm": "Confirm", - "collection.delete.confirm": "Confirmar", + // "browse.metadata.subject": "Subject", + "browse.metadata.subject": "Materia", - // "collection.delete.processing": "Deleting", - "collection.delete.processing": "Eliminando", + // "browse.metadata.title": "Title", + "browse.metadata.title": "Título", - // "collection.delete.head": "Delete Collection", - "collection.delete.head": "Eliminar colección", + // "browse.metadata.author.breadcrumbs": "Browse by Author", + "browse.metadata.author.breadcrumbs": "Buscar por autor", - // "collection.delete.notification.fail": "Collection could not be deleted", - "collection.delete.notification.fail": "No se pudo borrar la colección", + // "browse.metadata.dateissued.breadcrumbs": "Browse by Date", + "browse.metadata.dateissued.breadcrumbs": "Examinar por fecha", - // "collection.delete.notification.success": "Successfully deleted collection", - "collection.delete.notification.success": "Colección eliminada correctamente", + // "browse.metadata.subject.breadcrumbs": "Browse by Subject", + "browse.metadata.subject.breadcrumbs": "Examinar por materia", - // "collection.delete.text": "Are you sure you want to delete collection \"{{ dso }}\"", - "collection.delete.text": "¿Estás seguro de que quieres eliminar la colección \"{{ dso }} \"?", + // "browse.metadata.title.breadcrumbs": "Browse by Title", + "browse.metadata.title.breadcrumbs": "Examinar por título", + // "pagination.next.button": "Next", + "pagination.next.button": "Siguiente", + // "pagination.previous.button": "Previous", + "pagination.previous.button": "Anterior", - // "collection.edit.delete": "Delete this collection", - "collection.edit.delete": "Eliminar esta colección", + // "pagination.next.button.disabled.tooltip": "No more pages of results", + "pagination.next.button.disabled.tooltip": "No hay mas páginas de resultados", - // "collection.edit.head": "Edit Collection", - "collection.edit.head": "Editar colección", + // "browse.startsWith": ", starting with {{ startsWith }}", + "browse.startsWith": ", comenzando por {{ startsWith }}", - // "collection.edit.breadcrumbs": "Edit Collection", - "collection.edit.breadcrumbs": "Editar colección", + // "browse.startsWith.choose_start": "(Choose start)", + "browse.startsWith.choose_start": "(Elija inicio)", + // "browse.startsWith.choose_year": "(Choose year)", + "browse.startsWith.choose_year": "(Elegir año)", + // "browse.startsWith.choose_year.label": "Choose the issue year", + "browse.startsWith.choose_year.label": "Elija el año de publicación", - // "collection.edit.tabs.mapper.head": "Item Mapper", - "collection.edit.tabs.mapper.head": "Asignador de artículos", + // "browse.startsWith.jump": "Filter results by year or month", + "browse.startsWith.jump": "Filtrar resultado spor año o por mes:", - // "collection.edit.tabs.item-mapper.title": "Collection Edit - Item Mapper", - "collection.edit.tabs.item-mapper.title": "Edición de colección: mapeador de artículos", + // "browse.startsWith.months.april": "April", + "browse.startsWith.months.april": "abril", - // "collection.edit.item-mapper.cancel": "Cancel", - "collection.edit.item-mapper.cancel": "Cancelar", + // "browse.startsWith.months.august": "August", + "browse.startsWith.months.august": "agosto", - // "collection.edit.item-mapper.collection": "Collection: \"{{name}}\"", - "collection.edit.item-mapper.collection": "Colección: \"{{ name }}\"", + // "browse.startsWith.months.december": "December", + "browse.startsWith.months.december": "diciembre", - // "collection.edit.item-mapper.confirm": "Map selected items", - "collection.edit.item-mapper.confirm": "Asignar artículos seleccionados", + // "browse.startsWith.months.february": "February", + "browse.startsWith.months.february": "febrero", - // "collection.edit.item-mapper.description": "This is the item mapper tool that allows collection administrators to map items from other collections into this collection. You can search for items from other collections and map them, or browse the list of currently mapped items.", - "collection.edit.item-mapper.description": "Esta es la herramienta de asignación de artículos que permite a los administradores de colecciones asignar artículos de otras colecciones a esta colección. Puede buscar artículos de otras colecciones y mapearlos, o explorar la lista de artículos mapeados actualmente.", + // "browse.startsWith.months.january": "January", + "browse.startsWith.months.january": "enero", - // "collection.edit.item-mapper.head": "Item Mapper - Map Items from Other Collections", - "collection.edit.item-mapper.head": "Asignador de artículos: asigna artículos de otras colecciones", + // "browse.startsWith.months.july": "July", + "browse.startsWith.months.july": "julio", - // "collection.edit.item-mapper.no-search": "Please enter a query to search", - "collection.edit.item-mapper.no-search": "Ingrese una consulta para buscar", + // "browse.startsWith.months.june": "June", + "browse.startsWith.months.june": "junio", - // "collection.edit.item-mapper.notifications.map.error.content": "Errors occurred for mapping of {{amount}} items.", - "collection.edit.item-mapper.notifications.map.error.content": "Se produjeron errores en la asignación de {{ amount }} artículos.", + // "browse.startsWith.months.march": "March", + "browse.startsWith.months.march": "marzo", - // "collection.edit.item-mapper.notifications.map.error.head": "Mapping errors", - "collection.edit.item-mapper.notifications.map.error.head": "Errores de mapeo", + // "browse.startsWith.months.may": "May", + "browse.startsWith.months.may": "mayo", - // "collection.edit.item-mapper.notifications.map.success.content": "Successfully mapped {{amount}} items.", - "collection.edit.item-mapper.notifications.map.success.content": "{{ amount }} artículos asignados correctamente.", + // "browse.startsWith.months.none": "(Choose month)", + "browse.startsWith.months.none": "(Elija mes)", - // "collection.edit.item-mapper.notifications.map.success.head": "Mapping completed", - "collection.edit.item-mapper.notifications.map.success.head": "Mapeo completado", + // "browse.startsWith.months.none.label": "Choose the issue month", + "browse.startsWith.months.none.label": "Elija el mes de publicación", - // "collection.edit.item-mapper.notifications.unmap.error.content": "Errors occurred for removing the mappings of {{amount}} items.", - "collection.edit.item-mapper.notifications.unmap.error.content": "Se produjeron errores al eliminar las asignaciones de {{ amount }} artículos.", + // "browse.startsWith.months.november": "November", + "browse.startsWith.months.november": "noviembre", - // "collection.edit.item-mapper.notifications.unmap.error.head": "Remove mapping errors", - "collection.edit.item-mapper.notifications.unmap.error.head": "Eliminar errores de mapeo", + // "browse.startsWith.months.october": "October", + "browse.startsWith.months.october": "octubre", - // "collection.edit.item-mapper.notifications.unmap.success.content": "Successfully removed the mappings of {{amount}} items.", - "collection.edit.item-mapper.notifications.unmap.success.content": "Se eliminaron correctamente las asignaciones de {{ amount }} artículos.", + // "browse.startsWith.months.september": "September", + "browse.startsWith.months.september": "septiembre", - // "collection.edit.item-mapper.notifications.unmap.success.head": "Remove mapping completed", - "collection.edit.item-mapper.notifications.unmap.success.head": "Eliminar mapeo completado", + // "browse.startsWith.submit": "Browse", + "browse.startsWith.submit": "Examinar", - // "collection.edit.item-mapper.remove": "Remove selected item mappings", - "collection.edit.item-mapper.remove": "Eliminar asignaciones de artículos seleccionados", + // "browse.startsWith.type_date": "Filter results by date", + "browse.startsWith.type_date": "Resultados por fecha", - // "collection.edit.item-mapper.search-form.placeholder": "Search items...", - "collection.edit.item-mapper.search-form.placeholder": "Buscar artículos...", + // "browse.startsWith.type_date.label": "Or type in a date (year-month) and click on the Browse button", + "browse.startsWith.type_date.label": "O escriba una fecha (año-mes) y haga clic en el botón Examinar", - // "collection.edit.item-mapper.tabs.browse": "Browse mapped items", - "collection.edit.item-mapper.tabs.browse": "Examinar artículos mapeados", + // "browse.startsWith.type_text": "Filter results by typing the first few letters", + "browse.startsWith.type_text": "Seleccione resultados tecleando las primeras letras", - // "collection.edit.item-mapper.tabs.map": "Map new items", - "collection.edit.item-mapper.tabs.map": "Asignar nuevos artículos", + // "browse.title": "Browsing {{ collection }} by {{ field }}{{ startsWith }} {{ value }}", + "browse.title": "Examinando {{ collection }} por {{ field }} {{ value }}", + // "browse.title.page": "Browsing {{ collection }} by {{ field }} {{ value }}", + "browse.title.page": "Examinando {{ collection }}porby {{ field }} {{ value }}", - // "collection.edit.logo.delete.title": "Delete logo", - "collection.edit.logo.delete.title": "Eliminar logo", - // "collection.edit.logo.delete-undo.title": "Undo delete", - "collection.edit.logo.delete-undo.title": "Deshacer eliminación", + // "chips.remove": "Remove chip", + "chips.remove": "Quitar chip", - // "collection.edit.logo.label": "Collection logo", - "collection.edit.logo.label": "Logotipo de la colección", - // "collection.edit.logo.notifications.add.error": "Uploading Collection logo failed. Please verify the content before retrying.", - "collection.edit.logo.notifications.add.error": "Error al cargar el logotipo de la colección. Verifique el contenido antes de volver a intentarlo.", - // "collection.edit.logo.notifications.add.success": "Upload Collection logo successful.", - "collection.edit.logo.notifications.add.success": "Subir el logotipo de la colección correctamente.", + // "collection.create.head": "Create a Collection", + "collection.create.head": "Crear una colección", - // "collection.edit.logo.notifications.delete.success.title": "Logo deleted", - "collection.edit.logo.notifications.delete.success.title": "Logotipo eliminado", + // "collection.create.notifications.success": "Successfully created the Collection", + "collection.create.notifications.success": "Colección creada con éxito", - // "collection.edit.logo.notifications.delete.success.content": "Successfully deleted the collection's logo", - "collection.edit.logo.notifications.delete.success.content": "Se eliminó correctamente el logotipo de la colección.", + // "collection.create.sub-head": "Create a Collection for Community {{ parent }}", + "collection.create.sub-head": "Crea una colección para la comunidad {{ parent }}", - // "collection.edit.logo.notifications.delete.error.title": "Error deleting logo", - "collection.edit.logo.notifications.delete.error.title": "Error al eliminar el logotipo", + // "collection.curate.header": "Curate Collection: {{collection}}", + "collection.curate.header": "Colección seleccionada: {{ collection }}", - // "collection.edit.logo.upload": "Drop a Collection Logo to upload", - "collection.edit.logo.upload": "Suelta un logotipo de colección para cargar", + // "collection.delete.cancel": "Cancel", + "collection.delete.cancel": "Cancelar", + // "collection.delete.confirm": "Confirm", + "collection.delete.confirm": "Confirmar", + // "collection.delete.processing": "Deleting", + "collection.delete.processing": "Eliminando", - // "collection.edit.notifications.success": "Successfully edited the Collection", - "collection.edit.notifications.success": "Editó con éxito la colección", + // "collection.delete.head": "Delete Collection", + "collection.delete.head": "Eliminar colección", - // "collection.edit.return": "Back", - "collection.edit.return": "atrás", + // "collection.delete.notification.fail": "Collection could not be deleted", + "collection.delete.notification.fail": "No se pudo borrar la colección", + // "collection.delete.notification.success": "Successfully deleted collection", + "collection.delete.notification.success": "Colección eliminada correctamente", + // "collection.delete.text": "Are you sure you want to delete collection \"{{ dso }}\"", + "collection.delete.text": "¿Estás seguro de que quieres eliminar la colección \"{{ dso }} \"?", - // "collection.edit.tabs.curate.head": "Curate", - "collection.edit.tabs.curate.head": "Cura", - // "collection.edit.tabs.curate.title": "Collection Edit - Curate", - "collection.edit.tabs.curate.title": "Edición de colección - Curate", - // "collection.edit.tabs.authorizations.head": "Authorizations", - "collection.edit.tabs.authorizations.head": "Autorizaciones", + // "collection.edit.delete": "Delete this collection", + "collection.edit.delete": "Eliminar esta colección", - // "collection.edit.tabs.authorizations.title": "Collection Edit - Authorizations", - "collection.edit.tabs.authorizations.title": "Edición de colección: autorizaciones", + // "collection.edit.head": "Edit Collection", + "collection.edit.head": "Editar colección", - // "collection.edit.tabs.metadata.head": "Edit Metadata", - "collection.edit.tabs.metadata.head": "Editar metadatos", + // "collection.edit.breadcrumbs": "Edit Collection", + "collection.edit.breadcrumbs": "Editar colección", - // "collection.edit.tabs.metadata.title": "Collection Edit - Metadata", - "collection.edit.tabs.metadata.title": "Edición de colección: metadatos", - // "collection.edit.tabs.roles.head": "Assign Roles", - "collection.edit.tabs.roles.head": "Asignar roles", - // "collection.edit.tabs.roles.title": "Collection Edit - Roles", - "collection.edit.tabs.roles.title": "Edición de colección: funciones", + // "collection.edit.tabs.mapper.head": "Item Mapper", + "collection.edit.tabs.mapper.head": "Mapeo de ítems", - // "collection.edit.tabs.source.external": "This collection harvests its content from an external source", - "collection.edit.tabs.source.external": "Esta colección recolecta su contenido de una fuente externa", + // "collection.edit.tabs.item-mapper.title": "Collection Edit - Item Mapper", + "collection.edit.tabs.item-mapper.title": "Editar colección: mapeo de ítems", - // "collection.edit.tabs.source.form.errors.oaiSource.required": "You must provide a set id of the target collection.", - "collection.edit.tabs.source.form.errors.oaiSource.required": "Debe proporcionar un ID de conjunto de la colección de destino.", + // "collection.edit.item-mapper.cancel": "Cancel", + "collection.edit.item-mapper.cancel": "Cancelar", - // "collection.edit.tabs.source.form.harvestType": "Content being harvested", - "collection.edit.tabs.source.form.harvestType": "Contenido que se está recolectando", + // "collection.edit.item-mapper.collection": "Collection: \"{{name}}\"", + "collection.edit.item-mapper.collection": "Colección: \"{{ name }}\"", - // "collection.edit.tabs.source.form.head": "Configure an external source", - "collection.edit.tabs.source.form.head": "Configurar una fuente externa", + // "collection.edit.item-mapper.confirm": "Map selected items", + "collection.edit.item-mapper.confirm": "Mapear ítems seleccionados", - // "collection.edit.tabs.source.form.metadataConfigId": "Metadata Format", - "collection.edit.tabs.source.form.metadataConfigId": "Formato de metadatos", + // "collection.edit.item-mapper.description": "This is the item mapper tool that allows collection administrators to map items from other collections into this collection. You can search for items from other collections and map them, or browse the list of currently mapped items.", + "collection.edit.item-mapper.description": "Esta es la herramienta de mapeo de ítems que permite a los administradores de colecciones asignar ítems de otras colecciones a esta colección. Puede buscar ítems de otras colecciones y mapearlos, o explorar la lista de ítems mapeados actualmente.", - // "collection.edit.tabs.source.form.oaiSetId": "OAI specific set id", - "collection.edit.tabs.source.form.oaiSetId": "ID de conjunto específico de OAI", + // "collection.edit.item-mapper.head": "Item Mapper - Map Items from Other Collections", + "collection.edit.item-mapper.head": "Mapeo de ítems: mapea ítems de otras colecciones", - // "collection.edit.tabs.source.form.oaiSource": "OAI Provider", - "collection.edit.tabs.source.form.oaiSource": "Proveedor OAI", + // "collection.edit.item-mapper.no-search": "Please enter a query to search", + "collection.edit.item-mapper.no-search": "Introduzca una consulta para buscar", - // "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_BITSTREAMS": "Harvest metadata and bitstreams (requires ORE support)", - "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_BITSTREAMS": "Recolectar metadatos y archivos (requiere soporte ORE)", + // "collection.edit.item-mapper.notifications.map.error.content": "Errors occurred for mapping of {{amount}} items.", + "collection.edit.item-mapper.notifications.map.error.content": "Se produjeron errores en la asignación de {{ amount }} ítems.", - // "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_REF": "Harvest metadata and references to bitstreams (requires ORE support)", - "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_REF": "Recolectar metadatos y referencias a archivos (requiere soporte ORE)", + // "collection.edit.item-mapper.notifications.map.error.head": "Mapping errors", + "collection.edit.item-mapper.notifications.map.error.head": "Errores de mapeo", - // "collection.edit.tabs.source.form.options.harvestType.METADATA_ONLY": "Harvest metadata only", - "collection.edit.tabs.source.form.options.harvestType.METADATA_ONLY": "Recolectar solo metadatos", + // "collection.edit.item-mapper.notifications.map.success.content": "Successfully mapped {{amount}} items.", + "collection.edit.item-mapper.notifications.map.success.content": "{{ amount }} ítems mapeados correctamente.", - // "collection.edit.tabs.source.head": "Content Source", - "collection.edit.tabs.source.head": "Fuente de contenido", + // "collection.edit.item-mapper.notifications.map.success.head": "Mapping completed", + "collection.edit.item-mapper.notifications.map.success.head": "Mapeo completado", - // "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": "Tus cambios fueron descartados. ", + // "collection.edit.item-mapper.notifications.unmap.error.content": "Errors occurred for removing the mappings of {{amount}} items.", + "collection.edit.item-mapper.notifications.unmap.error.content": "Se produjeron errores al eliminar los mapeos de {{ amount }} ítems.", - // "collection.edit.tabs.source.notifications.discarded.title": "Changed discarded", - "collection.edit.tabs.source.notifications.discarded.title": "Cambiado descartado", + // "collection.edit.item-mapper.notifications.unmap.error.head": "Remove mapping errors", + "collection.edit.item-mapper.notifications.unmap.error.head": "Eliminar errores de mapeo", - // "collection.edit.tabs.source.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", - "collection.edit.tabs.source.notifications.invalid.content": "Tus cambios no se guardaron. Asegúrese de que todos los campos sean válidos antes de guardar.", + // "collection.edit.item-mapper.notifications.unmap.success.content": "Successfully removed the mappings of {{amount}} items.", + "collection.edit.item-mapper.notifications.unmap.success.content": "Se eliminaron correctamente los mapeos de {{ amount }} ítems.", - // "collection.edit.tabs.source.notifications.invalid.title": "Metadata invalid", - "collection.edit.tabs.source.notifications.invalid.title": "Metadatos inválidos", + // "collection.edit.item-mapper.notifications.unmap.success.head": "Remove mapping completed", + "collection.edit.item-mapper.notifications.unmap.success.head": "Finalizada la eliminación del mapeo", - // "collection.edit.tabs.source.notifications.saved.content": "Your changes to this collection's content source were saved.", - "collection.edit.tabs.source.notifications.saved.content": "Se guardaron sus cambios en la fuente del contenido de esta colección.", + // "collection.edit.item-mapper.remove": "Remove selected item mappings", + "collection.edit.item-mapper.remove": "Eliminar los mapeos de ítems seleccionados", - // "collection.edit.tabs.source.notifications.saved.title": "Content Source saved", - "collection.edit.tabs.source.notifications.saved.title": "Fuente de contenido guardada", + // "collection.edit.item-mapper.search-form.placeholder": "Search items...", + "collection.edit.item-mapper.search-form.placeholder": "Buscar ítems...", - // "collection.edit.tabs.source.title": "Collection Edit - Content Source", - "collection.edit.tabs.source.title": "Edición de colección: fuente de contenido", + // "collection.edit.item-mapper.tabs.browse": "Browse mapped items", + "collection.edit.item-mapper.tabs.browse": "Examinar ítems mapeados", + // "collection.edit.item-mapper.tabs.map": "Map new items", + "collection.edit.item-mapper.tabs.map": "Asignar nuevos ítems", - // "collection.edit.template.add-button": "Add", - "collection.edit.template.add-button": "Agregar", + // "collection.edit.logo.delete.title": "Delete logo", + "collection.edit.logo.delete.title": "Eliminar logo", - // "collection.edit.template.breadcrumbs": "Item template", - "collection.edit.template.breadcrumbs": "Plantilla de artículo", + // "collection.edit.logo.delete-undo.title": "Undo delete", + "collection.edit.logo.delete-undo.title": "Deshacer eliminación", - // "collection.edit.template.cancel": "Cancel", - "collection.edit.template.cancel": "Cancelar", + // "collection.edit.logo.label": "Collection logo", + "collection.edit.logo.label": "Logotipo de la colección", - // "collection.edit.template.delete-button": "Delete", - "collection.edit.template.delete-button": "Borrar", + // "collection.edit.logo.notifications.add.error": "Uploading Collection logo failed. Please verify the content before retrying.", + "collection.edit.logo.notifications.add.error": "Error al cargar el logotipo de la colección. Verifique el contenido antes de volver a intentarlo.", - // "collection.edit.template.edit-button": "Edit", - "collection.edit.template.edit-button": "Editar", + // "collection.edit.logo.notifications.add.success": "Upload Collection logo successful.", + "collection.edit.logo.notifications.add.success": "Subida correcta del logotipo de la colección.", - // "collection.edit.template.error": "An error occurred retrieving the template item", - "collection.edit.template.error": "Se produjo un error al recuperar el artículo de la plantilla.", + // "collection.edit.logo.notifications.delete.success.title": "Logo deleted", + "collection.edit.logo.notifications.delete.success.title": "Logotipo eliminado", - // "collection.edit.template.head": "Edit Template Item for Collection \"{{ collection }}\"", - "collection.edit.template.head": "Editar artículo de plantilla para la colección \"{{ collection }} \"", + // "collection.edit.logo.notifications.delete.success.content": "Successfully deleted the collection's logo", + "collection.edit.logo.notifications.delete.success.content": "Se eliminó correctamente el logotipo de la colección.", - // "collection.edit.template.label": "Template item", - "collection.edit.template.label": "Artículo de plantilla", + // "collection.edit.logo.notifications.delete.error.title": "Error deleting logo", + "collection.edit.logo.notifications.delete.error.title": "Error al eliminar el logotipo", - // "collection.edit.template.loading": "Loading template item...", - "collection.edit.template.loading": "Cargando artículo de plantilla...", + // "collection.edit.logo.upload": "Drop a Collection Logo to upload", + "collection.edit.logo.upload": "Suelta un logotipo de colección para cargarlo", - // "collection.edit.template.notifications.delete.error": "Failed to delete the item template", - "collection.edit.template.notifications.delete.error": "No se pudo eliminar la plantilla del artículo.", - // "collection.edit.template.notifications.delete.success": "Successfully deleted the item template", - "collection.edit.template.notifications.delete.success": "Se eliminó correctamente la plantilla del artículo.", - // "collection.edit.template.title": "Edit Template Item", - "collection.edit.template.title": "Editar artículo de plantilla", + // "collection.edit.notifications.success": "Successfully edited the Collection", + "collection.edit.notifications.success": "Editó con éxito la colección", + // "collection.edit.return": "Back", + "collection.edit.return": "Atrás", - // "collection.form.abstract": "Short Description", - "collection.form.abstract": "Breve descripción", - // "collection.form.description": "Introductory text (HTML)", - "collection.form.description": "Texto introductorio (HTML)", + // "collection.edit.tabs.curate.head": "Curate", + "collection.edit.tabs.curate.head": "Curar", - // "collection.form.errors.title.required": "Please enter a collection name", - "collection.form.errors.title.required": "Ingrese un nombre de colección", + // "collection.edit.tabs.curate.title": "Collection Edit - Curate", + "collection.edit.tabs.curate.title": "Edición de colección - Curar", - // "collection.form.license": "License", - "collection.form.license": "Licencia", + // "collection.edit.tabs.authorizations.head": "Authorizations", + "collection.edit.tabs.authorizations.head": "Autorizaciones", - // "collection.form.provenance": "Provenance", - "collection.form.provenance": "Procedencia", + // "collection.edit.tabs.authorizations.title": "Collection Edit - Authorizations", + "collection.edit.tabs.authorizations.title": "Edición de colección: autorizaciones", - // "collection.form.rights": "Copyright text (HTML)", - "collection.form.rights": "Texto de copyright (HTML)", + // "collection.edit.item.authorizations.load-bundle-button": "Load more bundles", + "collection.edit.item.authorizations.load-bundle-button": "Cargar mas bloques", - // "collection.form.tableofcontents": "News (HTML)", - "collection.form.tableofcontents": "Noticias (HTML)", + // "collection.edit.item.authorizations.load-more-button": "Load more", + "collection.edit.item.authorizations.load-more-button": "Cargar mas", - // "collection.form.title": "Name", - "collection.form.title": "Nombre", + // "collection.edit.item.authorizations.show-bitstreams-button": "Show bitstream policies for bundle", + "collection.edit.item.authorizations.show-bitstreams-button": "Mostrar las autorizaciones de los ficheros del bloque", + // "collection.edit.tabs.metadata.head": "Edit Metadata", + "collection.edit.tabs.metadata.head": "Editar metadatos", + // "collection.edit.tabs.metadata.title": "Collection Edit - Metadata", + "collection.edit.tabs.metadata.title": "Edición de colección: metadatos", - // "collection.listelement.badge": "Collection", - "collection.listelement.badge": "Colección", + // "collection.edit.tabs.roles.head": "Assign Roles", + "collection.edit.tabs.roles.head": "Asignar roles", + // "collection.edit.tabs.roles.title": "Collection Edit - Roles", + "collection.edit.tabs.roles.title": "Edición de colección - Roles", + // "collection.edit.tabs.source.external": "This collection harvests its content from an external source", + "collection.edit.tabs.source.external": "Esta colección recolecta su contenido de una fuente externa", - // "collection.page.browse.recent.head": "Recent Submissions", - "collection.page.browse.recent.head": "Envíos recientes", + // "collection.edit.tabs.source.form.errors.oaiSource.required": "You must provide a set id of the target collection.", + "collection.edit.tabs.source.form.errors.oaiSource.required": "Debe proporcionar el set-ID de la colección de destino.", - // "collection.page.browse.recent.empty": "No items to show", - "collection.page.browse.recent.empty": "No hay artículos para mostrar", + // "collection.edit.tabs.source.form.harvestType": "Content being harvested", + "collection.edit.tabs.source.form.harvestType": "Contenido que se está recolectando", - // "collection.page.edit": "Edit this collection", - "collection.page.edit": "Editar esta colección", + // "collection.edit.tabs.source.form.head": "Configure an external source", + "collection.edit.tabs.source.form.head": "Configurar una fuente externa", - // "collection.page.handle": "Permanent URI for this collection", - "collection.page.handle": "URI permanente para esta colección", + // "collection.edit.tabs.source.form.metadataConfigId": "Metadata Format", + "collection.edit.tabs.source.form.metadataConfigId": "Formato de metadatos", - // "collection.page.license": "License", - "collection.page.license": "Licencia", + // "collection.edit.tabs.source.form.oaiSetId": "OAI specific set id", + "collection.edit.tabs.source.form.oaiSetId": "ID de set específico de OAI", - // "collection.page.news": "News", - "collection.page.news": "Noticias", + // "collection.edit.tabs.source.form.oaiSource": "OAI Provider", + "collection.edit.tabs.source.form.oaiSource": "Proveedor OAI", + // "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_BITSTREAMS": "Harvest metadata and bitstreams (requires ORE support)", + "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_BITSTREAMS": "Recolectar metadatos y archivos (requiere soporte ORE)", + // "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_REF": "Harvest metadata and references to bitstreams (requires ORE support)", + "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_REF": "Recolectar metadatos y referencias a archivos (requiere soporte ORE)", - // "collection.select.confirm": "Confirm selected", - "collection.select.confirm": "Confirmar seleccionado", + // "collection.edit.tabs.source.form.options.harvestType.METADATA_ONLY": "Harvest metadata only", + "collection.edit.tabs.source.form.options.harvestType.METADATA_ONLY": "Recolectar solo metadatos", - // "collection.select.empty": "No collections to show", - "collection.select.empty": "No hay colecciones para mostrar", + // "collection.edit.tabs.source.head": "Content Source", + "collection.edit.tabs.source.head": "Origen del contenido", - // "collection.select.table.title": "Title", - "collection.select.table.title": "Título", + // "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": "Tus cambios fueron descartados. Para recuperarlos, pulse el botón 'Deshacer'", + // "collection.edit.tabs.source.notifications.discarded.title": "Changed discarded", + "collection.edit.tabs.source.notifications.discarded.title": "Cambiado descartado", + // "collection.edit.tabs.source.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", + "collection.edit.tabs.source.notifications.invalid.content": "Tus cambios no se guardaron. Asegúrese de que todos los campos sean válidos antes de guardar.", - // "collection.source.update.notifications.error.content": "The provided settings have been tested and didn't work.", - "collection.source.update.notifications.error.content": "La configuración proporcionada se ha probado y no funcionó.", + // "collection.edit.tabs.source.notifications.invalid.title": "Metadata invalid", + "collection.edit.tabs.source.notifications.invalid.title": "Metadatos inválidos", - // "collection.source.update.notifications.error.title": "Server Error", - "collection.source.update.notifications.error.title": "Error del Servidor", + // "collection.edit.tabs.source.notifications.saved.content": "Your changes to this collection's content source were saved.", + "collection.edit.tabs.source.notifications.saved.content": "Se guardaron sus cambios en la fuente de contenido de esta colección.", + // "collection.edit.tabs.source.notifications.saved.title": "Content Source saved", + "collection.edit.tabs.source.notifications.saved.title": "Fuente de contenido guardada", + // "collection.edit.tabs.source.title": "Collection Edit - Content Source", + "collection.edit.tabs.source.title": "Edición de colección: fuente de contenido", - // "communityList.breadcrumbs": "Community List", - "communityList.breadcrumbs": "Lista de la comunidad", - // "communityList.tabTitle": "Community List", - "communityList.tabTitle": "Lista de la comunidad", - // "communityList.title": "List of Communities", - "communityList.title": "Lista de comunidades", + // "collection.edit.template.add-button": "Add", + "collection.edit.template.add-button": "Agregar", - // "communityList.showMore": "Show More", - "communityList.showMore": "Mostrar más", + // "collection.edit.template.breadcrumbs": "Item template", + "collection.edit.template.breadcrumbs": "Plantilla de ítem", + // "collection.edit.template.cancel": "Cancel", + "collection.edit.template.cancel": "Cancelar", + // "collection.edit.template.delete-button": "Delete", + "collection.edit.template.delete-button": "Borrar", - // "community.create.head": "Create a Community", - "community.create.head": "Crea una comunidad", + // "collection.edit.template.edit-button": "Edit", + "collection.edit.template.edit-button": "Editar", - // "community.create.notifications.success": "Successfully created the Community", - "community.create.notifications.success": "Creó con éxito la comunidad", + // "collection.edit.template.error": "An error occurred retrieving the template item", + "collection.edit.template.error": "Se produjo un error al recuperar la plantilla del ítem.", - // "community.create.sub-head": "Create a Sub-Community for Community {{ parent }}", - "community.create.sub-head": "Cree una subcomunidad para la comunidad {{ parent }}", + // "collection.edit.template.head": "Edit Template Item for Collection \"{{ collection }}\"", + "collection.edit.template.head": "Editar plantilla del ítem para la colección \"{{ collection }} \"", - // "community.curate.header": "Curate Community: {{community}}", - "community.curate.header": "Comunidad seleccionada: {{ community }}", + // "collection.edit.template.label": "Template item", + "collection.edit.template.label": "Plantilla de ítem", - // "community.delete.cancel": "Cancel", - "community.delete.cancel": "Cancelar", + // "collection.edit.template.loading": "Loading template item...", + "collection.edit.template.loading": "Cargando plantilla de ítem...", - // "community.delete.confirm": "Confirm", - "community.delete.confirm": "Confirmar", + // "collection.edit.template.notifications.delete.error": "Failed to delete the item template", + "collection.edit.template.notifications.delete.error": "No se pudo eliminar la plantilla de ítem.", - // "community.delete.processing": "Deleting...", - "community.delete.processing": "Eliminando...", + // "collection.edit.template.notifications.delete.success": "Successfully deleted the item template", + "collection.edit.template.notifications.delete.success": "Se eliminó correctamente la plantilla de ítem.", - // "community.delete.head": "Delete Community", - "community.delete.head": "Eliminar comunidad", + // "collection.edit.template.title": "Edit Template Item", + "collection.edit.template.title": "Editar plantilla de ítem", - // "community.delete.notification.fail": "Community could not be deleted", - "community.delete.notification.fail": "No se pudo eliminar la comunidad", - // "community.delete.notification.success": "Successfully deleted community", - "community.delete.notification.success": "Comunidad eliminada con éxito", - // "community.delete.text": "Are you sure you want to delete community \"{{ dso }}\"", - "community.delete.text": "¿Estás seguro de que deseas eliminar la comunidad \"{{ dso }} \"?", + // "collection.form.abstract": "Short Description", + "collection.form.abstract": "Breve descripción", - // "community.edit.delete": "Delete this community", - "community.edit.delete": "Eliminar esta comunidad", + // "collection.form.description": "Introductory text (HTML)", + "collection.form.description": "Texto introductorio (HTML)", - // "community.edit.head": "Edit Community", - "community.edit.head": "Editar comunidad", + // "collection.form.errors.title.required": "Please enter a collection name", + "collection.form.errors.title.required": "Introduzca un nombre de colección", - // "community.edit.breadcrumbs": "Edit Community", - "community.edit.breadcrumbs": "Editar comunidad", + // "collection.form.license": "License", + "collection.form.license": "Licencia", + // "collection.form.provenance": "Provenance", + "collection.form.provenance": "Procedencia", - // "community.edit.logo.delete.title": "Delete logo", - "community.edit.logo.delete.title": "Eliminar logo", + // "collection.form.rights": "Copyright text (HTML)", + "collection.form.rights": "Texto de copyright (HTML)", - // "community.edit.logo.delete-undo.title": "Undo delete", - "community.edit.logo.delete-undo.title": "Deshacer eliminación", + // "collection.form.tableofcontents": "News (HTML)", + "collection.form.tableofcontents": "Noticias (HTML)", - // "community.edit.logo.label": "Community logo", - "community.edit.logo.label": "Logotipo de la comunidad", + // "collection.form.title": "Name", + "collection.form.title": "Nombre", - // "community.edit.logo.notifications.add.error": "Uploading Community logo failed. Please verify the content before retrying.", - "community.edit.logo.notifications.add.error": "Error al cargar el logotipo de la comunidad. Verifique el contenido antes de volver a intentarlo.", + // "collection.form.entityType": "Entity Type", + "collection.form.entityType": "Tipo de entidad", - // "community.edit.logo.notifications.add.success": "Upload Community logo successful.", - "community.edit.logo.notifications.add.success": "Subir el logotipo de la comunidad correctamente.", - // "community.edit.logo.notifications.delete.success.title": "Logo deleted", - "community.edit.logo.notifications.delete.success.title": "Logotipo eliminado", - // "community.edit.logo.notifications.delete.success.content": "Successfully deleted the community's logo", - "community.edit.logo.notifications.delete.success.content": "Se eliminó correctamente el logotipo de la comunidad.", + // "collection.listelement.badge": "Collection", + "collection.listelement.badge": "Colección", - // "community.edit.logo.notifications.delete.error.title": "Error deleting logo", - "community.edit.logo.notifications.delete.error.title": "Error al eliminar el logotipo", - // "community.edit.logo.upload": "Drop a Community Logo to upload", - "community.edit.logo.upload": "Suelta un logotipo de la comunidad para cargar", + // "collection.page.browse.recent.head": "Recent Submissions", + "collection.page.browse.recent.head": "Envíos recientes", + // "collection.page.browse.recent.empty": "No items to show", + "collection.page.browse.recent.empty": "No hay ítems para mostrar", - // "community.edit.notifications.success": "Successfully edited the Community", - "community.edit.notifications.success": "Editó con éxito la comunidad", + // "collection.page.edit": "Edit this collection", + "collection.page.edit": "Editar esta colección", - // "community.edit.notifications.unauthorized": "You do not have privileges to make this change", - "community.edit.notifications.unauthorized": "No tienes privilegios para realizar este cambio", + // "collection.page.handle": "Permanent URI for this collection", + "collection.page.handle": "URI permanente para esta colección", - // "community.edit.notifications.error": "An error occured while editing the Community", - "community.edit.notifications.error": "Se produjo un error al editar la comunidad.", + // "collection.page.license": "License", + "collection.page.license": "Licencia", - // "community.edit.return": "Back", - "community.edit.return": "atrás", + // "collection.page.news": "News", + "collection.page.news": "Noticias", + // "collection.select.confirm": "Confirm selected", + "collection.select.confirm": "Confirmar seleccionado", + // "collection.select.empty": "No collections to show", + "collection.select.empty": "No hay colecciones para mostrar", - // "community.edit.tabs.curate.head": "Curate", - "community.edit.tabs.curate.head": "Cura", + // "collection.select.table.title": "Title", + "collection.select.table.title": "Título", - // "community.edit.tabs.curate.title": "Community Edit - Curate", - "community.edit.tabs.curate.title": "Edición de la comunidad - Curate", - // "community.edit.tabs.metadata.head": "Edit Metadata", - "community.edit.tabs.metadata.head": "Editar metadatos", + // "collection.source.controls.head": "Harvest Controls", + "collection.source.controls.head": "Controles de recolección", + + // "collection.source.controls.test.submit.error": "Something went wrong with initiating the testing of the settings", + "collection.source.controls.test.submit.error": "Hubo fallos al realizar las pruebas de comprobación de los ajustes", + + // "collection.source.controls.test.failed": "The script to test the settings has failed", + "collection.source.controls.test.failed": "La prueba de los ajustes ha fallado", + + // "collection.source.controls.test.completed": "The script to test the settings has successfully finished", + "collection.source.controls.test.completed": "El script de prueba de los ajustes ha terminado correctamente ", + + // "collection.source.controls.test.submit": "Test configuration", + "collection.source.controls.test.submit": "Probar la configuración", + + // "collection.source.controls.test.running": "Testing configuration...", + "collection.source.controls.test.running": "Probando la configuración...", + + // "collection.source.controls.import.submit.success": "The import has been successfully initiated", + "collection.source.controls.import.submit.success": "La importación ha comenzado correctamente", + + // "collection.source.controls.import.submit.error": "Something went wrong with initiating the import", + "collection.source.controls.import.submit.error": "Hubo algún fallo al iniciar la importación", + + // "collection.source.controls.import.submit": "Import now", + "collection.source.controls.import.submit": "Importar ahora", + + // "collection.source.controls.import.running": "Importing...", + "collection.source.controls.import.running": "Importando...", + + // "collection.source.controls.import.failed": "An error occurred during the import", + "collection.source.controls.import.failed": "Ha ocurrido un error durante la importación", + + // "collection.source.controls.import.completed": "The import completed", + "collection.source.controls.import.completed": "La importación finalizó", + + // "collection.source.controls.reset.submit.success": "The reset and reimport has been successfully initiated", + "collection.source.controls.reset.submit.success": "La restauración y reimportación ha comenzado correctamente", + + // "collection.source.controls.reset.submit.error": "Something went wrong with initiating the reset and reimport", + "collection.source.controls.reset.submit.error": "Ha ocurrido un error al iniciar la restauración y reimportación", + + // "collection.source.controls.reset.failed": "An error occurred during the reset and reimport", + "collection.source.controls.reset.failed": "Ha ocurrido un error en la restauración y reimportación", + + // "collection.source.controls.reset.completed": "The reset and reimport completed", + "collection.source.controls.reset.completed": "Restauración y reimportación finalizadas", + + // "collection.source.controls.reset.submit": "Reset and reimport", + "collection.source.controls.reset.submit": "Restauración y reimportación", + + // "collection.source.controls.reset.running": "Resetting and reimporting...", + "collection.source.controls.reset.running": "Restaurando y reimportando...", + + // "collection.source.controls.harvest.status": "Harvest status:", + "collection.source.controls.harvest.status": "Estado de la Recolección:", + + // "collection.source.controls.harvest.start": "Harvest start time:", + "collection.source.controls.harvest.start": "Comienzo de la recolección:", + + // "collection.source.controls.harvest.last": "Last time harvested:", + "collection.source.controls.harvest.last": "Fecha de la última recolección:", + + // "collection.source.controls.harvest.message": "Harvest info:", + "collection.source.controls.harvest.message": "Información de recolección:", + + // "collection.source.controls.harvest.no-information": "N/A", + "collection.source.controls.harvest.no-information": "N/A", - // "community.edit.tabs.metadata.title": "Community Edit - Metadata", - "community.edit.tabs.metadata.title": "Edición de la comunidad: metadatos", - // "community.edit.tabs.roles.head": "Assign Roles", - "community.edit.tabs.roles.head": "Asignar roles", + // "collection.source.update.notifications.error.content": "The provided settings have been tested and didn't work.", + "collection.source.update.notifications.error.content": "La configuración proporcionada se ha probado y no funcionó.", - // "community.edit.tabs.roles.title": "Community Edit - Roles", - "community.edit.tabs.roles.title": "Edición de la comunidad: funciones", + // "collection.source.update.notifications.error.title": "Server Error", + "collection.source.update.notifications.error.title": "Error del Servidor", - // "community.edit.tabs.authorizations.head": "Authorizations", - "community.edit.tabs.authorizations.head": "Autorizaciones", - // "community.edit.tabs.authorizations.title": "Community Edit - Authorizations", - "community.edit.tabs.authorizations.title": "Edición de la comunidad: autorizaciones", + // "communityList.breadcrumbs": "Community List", + "communityList.breadcrumbs": "Lista de comunidades", + // "communityList.tabTitle": "Community List", + "communityList.tabTitle": "Lista de comunidades", - // "community.listelement.badge": "Community", - "community.listelement.badge": "Comunidad", + // "communityList.title": "List of communities", + "communityList.title": "Lista de Comunidades", + // "communityList.showMore": "Show More", + "communityList.showMore": "Mostrar más", - // "comcol-role.edit.no-group": "None", - "comcol-role.edit.no-group": "Ninguno", - // "comcol-role.edit.create": "Create", - "comcol-role.edit.create": "Crear", + // "community.create.head": "Create a Community", + "community.create.head": "Crear una comunidad", - // "comcol-role.edit.restrict": "Restrict", - "comcol-role.edit.restrict": "Restringir", + // "community.create.notifications.success": "Successfully created the Community", + "community.create.notifications.success": "Creada con éxito la comunidad", - // "comcol-role.edit.delete": "Delete", - "comcol-role.edit.delete": "Borrar", + // "community.create.sub-head": "Create a Sub-Community for Community {{ parent }}", + "community.create.sub-head": "Crear una subcomunidad para la comunidad {{ parent }}", + // "community.curate.header": "Curate Community: {{community}}", + "community.curate.header": "Comunidad seleccionada: {{ community }}", - // "comcol-role.edit.community-admin.name": "Administrators", - "comcol-role.edit.community-admin.name": "Administradores", + // "community.delete.cancel": "Cancel", + "community.delete.cancel": "Cancelar", - // "comcol-role.edit.collection-admin.name": "Administrators", - "comcol-role.edit.collection-admin.name": "Administradores", + // "community.delete.confirm": "Confirm", + "community.delete.confirm": "Confirmar", + // "community.delete.processing": "Deleting...", + "community.delete.processing": "Eliminando...", - // "comcol-role.edit.community-admin.description": "Community administrators can create sub-communities or collections, and manage or assign management for those sub-communities or collections. In addition, they decide who can submit items to any sub-collections, edit item metadata (after submission), and add (map) existing items from other collections (subject to authorization).", - "comcol-role.edit.community-admin.description": "Los administradores de la comunidad pueden crear subcomunidades o colecciones y gestionar o asignar la gestión para esas subcomunidades o colecciones. Además, deciden quién puede enviar artículos a las subcolecciones, editar los metadatos del artículo (después del envío) y agregar (mapear) artículos existentes de otras colecciones (sujeto a autorización).", + // "community.delete.head": "Delete Community", + "community.delete.head": "Eliminar comunidad", - // "comcol-role.edit.collection-admin.description": "Collection administrators decide who can submit items to the collection, edit item metadata (after submission), and add (map) existing items from other collections to this collection (subject to authorization for that collection).", - "comcol-role.edit.collection-admin.description": "Los administradores de la colección deciden quién puede enviar artículos a la colección, editar los metadatos del artículo (después del envío) y agregar (mapear) artículos existentes de otras colecciones a esta colección (sujeto a autorización para esa colección).", + // "community.delete.notification.fail": "Community could not be deleted", + "community.delete.notification.fail": "No se pudo eliminar la comunidad", + // "community.delete.notification.success": "Successfully deleted community", + "community.delete.notification.success": "Comunidad eliminada con éxito", - // "comcol-role.edit.submitters.name": "Submitters", - "comcol-role.edit.submitters.name": "Remitentes", + // "community.delete.text": "Are you sure you want to delete community \"{{ dso }}\"", + "community.delete.text": "¿Está seguro de que desea eliminar la comunidad \"{{ dso }} \"?", - // "comcol-role.edit.submitters.description": "The E-People and Groups that have permission to submit new items to this collection.", - "comcol-role.edit.submitters.description": "Los E-People y Grupos que tienen permiso para enviar nuevos artículos a esta colección.", + // "community.edit.delete": "Delete this community", + "community.edit.delete": "Eliminar esta comunidad", + // "community.edit.head": "Edit Community", + "community.edit.head": "Editar comunidad", - // "comcol-role.edit.item_read.name": "Default item read access", - "comcol-role.edit.item_read.name": "Acceso de lectura de artículo predeterminado", + // "community.edit.breadcrumbs": "Edit Community", + "community.edit.breadcrumbs": "Editar comunidad", - // "comcol-role.edit.item_read.description": "E-People and Groups that can read new items submitted to this collection. Changes to this role are not retroactive. Existing items in the system will still be viewable by those who had read access at the time of their addition.", - "comcol-role.edit.item_read.description": "E-People y Grupos que pueden leer nuevos artículos enviados a esta colección. Los cambios en este rol no son retroactivos. Los artículos existentes en el sistema aún serán visibles para aquellos que tenían acceso de lectura en el momento de su adición.", - // "comcol-role.edit.item_read.anonymous-group": "Default read for incoming items is currently set to Anonymous.", - "comcol-role.edit.item_read.anonymous-group": "La lectura predeterminada para los artículos entrantes está configurada actualmente como Anónimo.", + // "community.edit.logo.delete.title": "Delete logo", + "community.edit.logo.delete.title": "Eliminar logo", + // "community.edit.logo.delete-undo.title": "Undo delete", + "community.edit.logo.delete-undo.title": "Deshacer eliminación", - // "comcol-role.edit.bitstream_read.name": "Default bitstream read access", - "comcol-role.edit.bitstream_read.name": "Acceso de lectura de archivo predeterminado", + // "community.edit.logo.label": "Community logo", + "community.edit.logo.label": "Logotipo de la comunidad", - // "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": "Los administradores de la comunidad pueden crear subcomunidades o colecciones y gestionar o asignar la gestión para esas subcomunidades o colecciones. Además, deciden quién puede enviar artículos a las subcolecciones, editar los metadatos del artículo (después del envío) y agregar (mapear) artículos existentes de otras colecciones (sujeto a autorización).", + // "community.edit.logo.notifications.add.error": "Uploading Community logo failed. Please verify the content before retrying.", + "community.edit.logo.notifications.add.error": "Error al cargar el logotipo de la comunidad. Verifique el contenido antes de volver a intentarlo.", - // "comcol-role.edit.bitstream_read.anonymous-group": "Default read for incoming bitstreams is currently set to Anonymous.", - "comcol-role.edit.bitstream_read.anonymous-group": "La lectura predeterminada para los archivos entrantes se establece actualmente en Anónimo.", + // "community.edit.logo.notifications.add.success": "Upload Community logo successful.", + "community.edit.logo.notifications.add.success": "Subir el logotipo de la comunidad correctamente.", + // "community.edit.logo.notifications.delete.success.title": "Logo deleted", + "community.edit.logo.notifications.delete.success.title": "Logotipo eliminado", - // "comcol-role.edit.editor.name": "Editors", - "comcol-role.edit.editor.name": "Editores", + // "community.edit.logo.notifications.delete.success.content": "Successfully deleted the community's logo", + "community.edit.logo.notifications.delete.success.content": "Se eliminó correctamente el logotipo de la comunidad.", - // "comcol-role.edit.editor.description": "Editors are able to edit the metadata of incoming submissions, and then accept or reject them.", - "comcol-role.edit.editor.description": "Los editores pueden editar los metadatos de los envíos entrantes y luego aceptarlos o rechazarlos.", + // "community.edit.logo.notifications.delete.error.title": "Error deleting logo", + "community.edit.logo.notifications.delete.error.title": "Error al eliminar el logotipo", + // "community.edit.logo.upload": "Drop a Community Logo to upload", + "community.edit.logo.upload": "Suelta un logotipo de la comunidad para cargar", - // "comcol-role.edit.finaleditor.name": "Final editors", - "comcol-role.edit.finaleditor.name": "Editores finales", - // "comcol-role.edit.finaleditor.description": "Final editors are able to edit the metadata of incoming submissions, but will not be able to reject them.", - "comcol-role.edit.finaleditor.description": "Los editores finales pueden editar los metadatos de los envíos entrantes, pero no podrán rechazarlos.", + // "community.edit.notifications.success": "Successfully edited the Community", + "community.edit.notifications.success": "Editó con éxito la comunidad", - // "comcol-role.edit.reviewer.name": "Reviewers", - "comcol-role.edit.reviewer.name": "Revisores", + // "community.edit.notifications.unauthorized": "You do not have privileges to make this change", + "community.edit.notifications.unauthorized": "No tienes privilegios para realizar este cambio", - // "comcol-role.edit.reviewer.description": "Reviewers are able to accept or reject incoming submissions. However, they are not able to edit the submission's metadata.", - "comcol-role.edit.reviewer.description": "Los revisores pueden aceptar o rechazar envíos entrantes. Sin embargo, no pueden editar los metadatos del envío.", + // "community.edit.notifications.error": "An error occured while editing the Community", + "community.edit.notifications.error": "Se produjo un error al editar la comunidad.", + // "community.edit.return": "Back", + "community.edit.return": "Atrás", - // "community.form.abstract": "Short Description", - "community.form.abstract": "Breve descripción", - // "community.form.description": "Introductory text (HTML)", - "community.form.description": "Texto introductorio (HTML)", + // "community.edit.tabs.curate.head": "Curate", + "community.edit.tabs.curate.head": "Cura", - // "community.form.errors.title.required": "Please enter a community name", - "community.form.errors.title.required": "Ingrese un nombre de comunidad", + // "community.edit.tabs.curate.title": "Community Edit - Curate", + "community.edit.tabs.curate.title": "Edición de la comunidad - Curate", - // "community.form.rights": "Copyright text (HTML)", - "community.form.rights": "Texto de copyright (HTML)", + // "community.edit.tabs.metadata.head": "Edit Metadata", + "community.edit.tabs.metadata.head": "Editar metadatos", - // "community.form.tableofcontents": "News (HTML)", - "community.form.tableofcontents": "Noticias (HTML)", + // "community.edit.tabs.metadata.title": "Community Edit - Metadata", + "community.edit.tabs.metadata.title": "Edición de la comunidad: metadatos", - // "community.form.title": "Name", - "community.form.title": "Nombre", + // "community.edit.tabs.roles.head": "Assign Roles", + "community.edit.tabs.roles.head": "Asignar roles", - // "community.page.edit": "Edit this community", - "community.page.edit": "Editar esta comunidad", + // "community.edit.tabs.roles.title": "Community Edit - Roles", + "community.edit.tabs.roles.title": "Edición de la comunidad: funciones", - // "community.page.handle": "Permanent URI for this community", - "community.page.handle": "URI permanente para esta comunidad", + // "community.edit.tabs.authorizations.head": "Authorizations", + "community.edit.tabs.authorizations.head": "Autorizaciones", - // "community.page.license": "License", - "community.page.license": "Licencia", + // "community.edit.tabs.authorizations.title": "Community Edit - Authorizations", + "community.edit.tabs.authorizations.title": "Edición de la comunidad: autorizaciones", - // "community.page.news": "News", - "community.page.news": "Noticias", - // "community.all-lists.head": "Subcommunities and Collections", - "community.all-lists.head": "Subcomunidades y colecciones", - // "community.sub-collection-list.head": "Collections of this Community", - "community.sub-collection-list.head": "Colecciones de esta comunidad", + // "community.listelement.badge": "Community", + "community.listelement.badge": "Comunidad", - // "community.sub-community-list.head": "Communities of this Community", - "community.sub-community-list.head": "Comunidades de esta comunidad", + // "comcol-role.edit.no-group": "None", + "comcol-role.edit.no-group": "Ninguno", - // "cookies.consent.accept-all": "Accept all", - "cookies.consent.accept-all": "Aceptar todo", + // "comcol-role.edit.create": "Create", + "comcol-role.edit.create": "Crear", - // "cookies.consent.accept-selected": "Accept selected", - "cookies.consent.accept-selected": "Aceptar seleccionado", + // "comcol-role.edit.create.error.title": "Failed to create a group for the '{{ role }}' role", + "comcol-role.edit.create.error.title": "Error al crear un grupo para el rol '{{ role }}'", - // "cookies.consent.app.opt-out.description": "This app is loaded by default (but you can opt out)", - "cookies.consent.app.opt-out.description": "Esta aplicación se carga de forma predeterminada (pero puede optar por no participar)", + // "comcol-role.edit.restrict": "Restrict", + "comcol-role.edit.restrict": "Restringir", - // "cookies.consent.app.opt-out.title": "(opt-out)", - "cookies.consent.app.opt-out.title": "(optar por no)", + // "comcol-role.edit.delete": "Delete", + "comcol-role.edit.delete": "Borrar", - // "cookies.consent.app.purpose": "purpose", - "cookies.consent.app.purpose": "objetivo", + // "comcol-role.edit.delete.error.title": "Failed to delete the '{{ role }}' role's group", + "comcol-role.edit.delete.error.title": "Error al borrar el grupo del rol '{{ role }}'", - // "cookies.consent.app.required.description": "This application is always required", - "cookies.consent.app.required.description": "Esta aplicación siempre es necesaria", - // "cookies.consent.app.required.title": "(always required)", - "cookies.consent.app.required.title": "(siempre requerido)", + // "comcol-role.edit.community-admin.name": "Administrators", + "comcol-role.edit.community-admin.name": "Administradores", - // "cookies.consent.update": "There were changes since your last visit, please update your consent.", - "cookies.consent.update": "Hubo cambios desde su última visita, actualice su consentimiento.", + // "comcol-role.edit.collection-admin.name": "Administrators", + "comcol-role.edit.collection-admin.name": "Administradores", - // "cookies.consent.close": "Close", - "cookies.consent.close": "Cerrar", - // "cookies.consent.decline": "Decline", - "cookies.consent.decline": "Disminución", + // "comcol-role.edit.community-admin.description": "Community administrators can create sub-communities or collections, and manage or assign management for those sub-communities or collections. In addition, they decide who can submit items to any sub-collections, edit item metadata (after submission), and add (map) existing items from other collections (subject to authorization).", + "comcol-role.edit.community-admin.description": "Los administradores de la comunidad pueden crear subcomunidades o colecciones y gestionar o asignar la gestión para esas subcomunidades o colecciones. Además, deciden quién puede enviar artículos a las subcolecciones, editar los metadatos del artículo (después del envío) y agregar (mapear) artículos existentes de otras colecciones (sujeto a autorización).", - // "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": "Recopilamos y procesamos su información personal para los siguientes propósitos: Autenticación, Preferencias, Reconocimiento y Estadísticas .
    Para obtener más información, lea nuestra {privacyPolicy}.", + // "comcol-role.edit.collection-admin.description": "Collection administrators decide who can submit items to the collection, edit item metadata (after submission), and add (map) existing items from other collections to this collection (subject to authorization for that collection).", + "comcol-role.edit.collection-admin.description": "Los administradores de la colección deciden quién puede enviar artículos a la colección, editar los metadatos del artículo (después del envío) y agregar (mapear) artículos existentes de otras colecciones a esta colección (sujeto a autorización para esa colección).", - // "cookies.consent.content-notice.learnMore": "Customize", - "cookies.consent.content-notice.learnMore": "Personalizar", - // "cookies.consent.content-modal.description": "Here you can see and customize the information that we collect about you.", - "cookies.consent.content-modal.description": "Aquí puede ver y personalizar la información que recopilamos sobre usted.", + // "comcol-role.edit.submitters.name": "Submitters", + "comcol-role.edit.submitters.name": "Remitentes", - // "cookies.consent.content-modal.privacy-policy.name": "privacy policy", - "cookies.consent.content-modal.privacy-policy.name": "política de privacidad", + // "comcol-role.edit.submitters.description": "The E-People and Groups that have permission to submit new items to this collection.", + "comcol-role.edit.submitters.description": "Los E-People y Grupos que tienen permiso para enviar nuevos artículos a esta colección.", - // "cookies.consent.content-modal.privacy-policy.text": "To learn more, please read our {privacyPolicy}.", - "cookies.consent.content-modal.privacy-policy.text": "To learn more, please read our {privacyPolicy}.", - // "cookies.consent.content-modal.title": "Information that we collect", - "cookies.consent.content-modal.title": "Información que recopilamos", + // "comcol-role.edit.item_read.name": "Default item read access", + "comcol-role.edit.item_read.name": "Acceso de lectura de artículo predeterminado", + // "comcol-role.edit.item_read.description": "E-People and Groups that can read new items submitted to this collection. Changes to this role are not retroactive. Existing items in the system will still be viewable by those who had read access at the time of their addition.", + "comcol-role.edit.item_read.description": "E-People y Grupos que pueden leer nuevos artículos enviados a esta colección. Los cambios en este rol no son retroactivos. Los artículos existentes en el sistema aún serán visibles para aquellos que tenían acceso de lectura en el momento de su adición.", + // "comcol-role.edit.item_read.anonymous-group": "Default read for incoming items is currently set to Anonymous.", + "comcol-role.edit.item_read.anonymous-group": "La lectura predeterminada para los artículos entrantes está configurada actualmente como Anónimo.", - // "cookies.consent.app.title.authentication": "Authentication", - "cookies.consent.app.title.authentication": "Autenticación", - // "cookies.consent.app.description.authentication": "Required for signing you in", - "cookies.consent.app.description.authentication": "Requerido para iniciar sesión", + // "comcol-role.edit.bitstream_read.name": "Default bitstream read access", + "comcol-role.edit.bitstream_read.name": "Acceso de lectura de archivo predeterminado", + // "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": "Los administradores de la comunidad pueden crear subcomunidades o colecciones y gestionar o asignar la gestión para esas subcomunidades o colecciones. Además, deciden quién puede enviar artículos a las subcolecciones, editar los metadatos del artículo (después del envío) y agregar (mapear) artículos existentes de otras colecciones (sujeto a autorización).", - // "cookies.consent.app.title.preferences": "Preferences", - "cookies.consent.app.title.preferences": "Preferencias", + // "comcol-role.edit.bitstream_read.anonymous-group": "Default read for incoming bitstreams is currently set to Anonymous.", + "comcol-role.edit.bitstream_read.anonymous-group": "La lectura predeterminada para los archivos entrantes se establece actualmente en Anónimo.", - // "cookies.consent.app.description.preferences": "Required for saving your preferences", - "cookies.consent.app.description.preferences": "Requerido para guardar sus preferencias", + // "comcol-role.edit.editor.name": "Editors", + "comcol-role.edit.editor.name": "Editores", + // "comcol-role.edit.editor.description": "Editors are able to edit the metadata of incoming submissions, and then accept or reject them.", + "comcol-role.edit.editor.description": "Los editores pueden editar los metadatos de los envíos entrantes y luego aceptarlos o rechazarlos.", - // "cookies.consent.app.title.acknowledgement": "Acknowledgement", - "cookies.consent.app.title.acknowledgement": "Reconocimiento", - // "cookies.consent.app.description.acknowledgement": "Required for saving your acknowledgements and consents", - "cookies.consent.app.description.acknowledgement": "Requerido para guardar sus reconocimientos y consentimientos", + // "comcol-role.edit.finaleditor.name": "Final editors", + "comcol-role.edit.finaleditor.name": "Editores finales", + // "comcol-role.edit.finaleditor.description": "Final editors are able to edit the metadata of incoming submissions, but will not be able to reject them.", + "comcol-role.edit.finaleditor.description": "Los editores finales pueden editar los metadatos de los envíos entrantes, pero no podrán rechazarlos.", - // "cookies.consent.app.title.google-analytics": "Google Analytics", - "cookies.consent.app.title.google-analytics": "Google analitico", + // "comcol-role.edit.reviewer.name": "Reviewers", + "comcol-role.edit.reviewer.name": "Revisores", - // "cookies.consent.app.description.google-analytics": "Allows us to track statistical data", - "cookies.consent.app.description.google-analytics": "Nos permite rastrear datos estadísticos", + // "comcol-role.edit.reviewer.description": "Reviewers are able to accept or reject incoming submissions. However, they are not able to edit the submission's metadata.", + "comcol-role.edit.reviewer.description": "Los revisores pueden aceptar o rechazar envíos entrantes. Sin embargo, no pueden editar los metadatos del envío.", - // "cookies.consent.purpose.functional": "Functional", - "cookies.consent.purpose.functional": "Funcional", + // "community.form.abstract": "Short Description", + "community.form.abstract": "Breve descripción", - // "cookies.consent.purpose.statistical": "Statistical", - "cookies.consent.purpose.statistical": "Estadístico", + // "community.form.description": "Introductory text (HTML)", + "community.form.description": "Texto introductorio (HTML)", + // "community.form.errors.title.required": "Please enter a community name", + "community.form.errors.title.required": "Introduzca un nombre de comunidad", - // "curation-task.task.checklinks.label": "Check Links in Metadata", - "curation-task.task.checklinks.label": "Comprobar enlaces en metadatos", + // "community.form.rights": "Copyright text (HTML)", + "community.form.rights": "Texto de copyright (HTML)", - // "curation-task.task.noop.label": "NOOP", - "curation-task.task.noop.label": "NOOP", + // "community.form.tableofcontents": "News (HTML)", + "community.form.tableofcontents": "Noticias (HTML)", - // "curation-task.task.profileformats.label": "Profile Bitstream Formats", - "curation-task.task.profileformats.label": "Formatos de archivo de perfil", + // "community.form.title": "Name", + "community.form.title": "Nombre", - // "curation-task.task.requiredmetadata.label": "Check for Required Metadata", - "curation-task.task.requiredmetadata.label": "Verifique los metadatos requeridos", + // "community.page.edit": "Edit this community", + "community.page.edit": "Editar esta comunidad", - // "curation-task.task.translate.label": "Microsoft Translator", - "curation-task.task.translate.label": "Traductor de Microsoft", + // "community.page.handle": "Permanent URI for this community", + "community.page.handle": "URI permanente para esta comunidad", - // "curation-task.task.vscan.label": "Virus Scan", - "curation-task.task.vscan.label": "Búsqueda de virus", + // "community.page.license": "License", + "community.page.license": "Licencia", + // "community.page.news": "News", + "community.page.news": "Noticias", + // "community.all-lists.head": "Subcommunities and Collections", + "community.all-lists.head": "Subcomunidades y colecciones", - // "curation.form.task-select.label": "Task:", - "curation.form.task-select.label": "Tarea:", + // "community.sub-collection-list.head": "Collections of this Community", + "community.sub-collection-list.head": "Colecciones de esta comunidad", - // "curation.form.submit": "Start", - "curation.form.submit": "Comienzo", + // "community.sub-community-list.head": "Communities of this Community", + "community.sub-community-list.head": "Comunidades de esta comunidad", - // "curation.form.submit.success.head": "The curation task has been started successfully", - "curation.form.submit.success.head": "La tarea de conservación se ha iniciado con éxito.", - // "curation.form.submit.success.content": "You will be redirected to the corresponding process page.", - "curation.form.submit.success.content": "Serás redirigido a la página de proceso correspondiente.", - // "curation.form.submit.error.head": "Running the curation task failed", - "curation.form.submit.error.head": "Error al ejecutar la tarea de conservación", + // "cookies.consent.accept-all": "Accept all", + "cookies.consent.accept-all": "Aceptar todo", - // "curation.form.submit.error.content": "An error occured when trying to start the curation task.", - "curation.form.submit.error.content": "Se produjo un error al intentar iniciar la tarea de conservación.", + // "cookies.consent.accept-selected": "Accept selected", + "cookies.consent.accept-selected": "Aceptar seleccionado", - // "curation.form.handle.label": "Handle:", - "curation.form.handle.label": "Resolver:", + // "cookies.consent.app.opt-out.description": "This app is loaded by default (but you can opt out)", + "cookies.consent.app.opt-out.description": "Esta aplicación se carga de forma predeterminada (pero puede optar por salir)", - // "curation.form.handle.hint": "Hint: Enter [your-handle-prefix]/0 to run a task across entire site (not all tasks may support this capability)", - "curation.form.handle.hint": "Sugerencia: ingrese [your-handle-prefix] / 0 para ejecutar una tarea en todo el sitio (no todas las tareas pueden admitir esta capacidad)", + // "cookies.consent.app.opt-out.title": "(opt-out)", + "cookies.consent.app.opt-out.title": "(optar por salir)", + // "cookies.consent.app.purpose": "purpose", + "cookies.consent.app.purpose": "objetivo", + // "cookies.consent.app.required.description": "This application is always required", + "cookies.consent.app.required.description": "Esta aplicación siempre es necesaria", - // "dso.name.untitled": "Untitled", - "dso.name.untitled": "Intitulado", + // "cookies.consent.app.required.title": "(always required)", + "cookies.consent.app.required.title": "(siempre requerido)", + // "cookies.consent.update": "There were changes since your last visit, please update your consent.", + "cookies.consent.update": "Hubo cambios desde su última visita, actualice su consentimiento.", + // "cookies.consent.close": "Close", + "cookies.consent.close": "Cerrar", - // "dso-selector.create.collection.head": "New collection", - "dso-selector.create.collection.head": "Nueva colección", + // "cookies.consent.decline": "Decline", + "cookies.consent.decline": "Disminución", - // "dso-selector.create.collection.sub-level": "Create a new collection in", - "dso-selector.create.collection.sub-level": "Crea una nueva colección en", + // "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": "Recopilamos y procesamos su información personal para los siguientes propósitos: Autenticación, Preferencias, Reconocimiento y Estadísticas .
    Para obtener más información, lea nuestra {privacyPolicy}.", - // "dso-selector.create.community.head": "New community", - "dso-selector.create.community.head": "Nueva comunidad", + // "cookies.consent.content-notice.learnMore": "Customize", + "cookies.consent.content-notice.learnMore": "Personalizar", - // "dso-selector.create.community.sub-level": "Create a new community in", - "dso-selector.create.community.sub-level": "Crea una nueva comunidad en", + // "cookies.consent.content-modal.description": "Here you can see and customize the information that we collect about you.", + "cookies.consent.content-modal.description": "Aquí puede ver y personalizar la información que recopilamos sobre usted.", - // "dso-selector.create.community.top-level": "Create a new top-level community", - "dso-selector.create.community.top-level": "Crea una nueva comunidad de alto nivel", + // "cookies.consent.content-modal.privacy-policy.name": "privacy policy", + "cookies.consent.content-modal.privacy-policy.name": "política de privacidad", - // "dso-selector.create.item.head": "New item", - "dso-selector.create.item.head": "Nuevo artículo", + // "cookies.consent.content-modal.privacy-policy.text": "To learn more, please read our {privacyPolicy}.", + "cookies.consent.content-modal.privacy-policy.text": "Para mas información, lea por favor nuestra{privacyPolicy}.", - // "dso-selector.create.item.sub-level": "Create a new item in", - "dso-selector.create.item.sub-level": "Crea un nuevo artículo en", + // "cookies.consent.content-modal.title": "Information that we collect", + "cookies.consent.content-modal.title": "Información que recopilamos", - // "dso-selector.create.submission.head": "New submission", - "dso-selector.create.submission.head": "Nuevo envío", - // "dso-selector.edit.collection.head": "Edit collection", - "dso-selector.edit.collection.head": "Editar colección", - // "dso-selector.edit.community.head": "Edit community", - "dso-selector.edit.community.head": "Editar comunidad", + // "cookies.consent.app.title.authentication": "Authentication", + "cookies.consent.app.title.authentication": "Autenticación", - // "dso-selector.edit.item.head": "Edit item", - "dso-selector.edit.item.head": "Editar artículo", + // "cookies.consent.app.description.authentication": "Required for signing you in", + "cookies.consent.app.description.authentication": "Requerido para iniciar sesión", - // "dso-selector.error.title": "An error occurred searching for a {{ type }}", - "dso-selector.error.title": "Se produjo un error al buscar un {{ type }}", - // "dso-selector.export-metadata.dspaceobject.head": "Export metadata from", - "dso-selector.export-metadata.dspaceobject.head": "Exportar metadatos de", + // "cookies.consent.app.title.preferences": "Preferences", + "cookies.consent.app.title.preferences": "Preferencias", - // "dso-selector.no-results": "No {{ type }} found", - "dso-selector.no-results": "No se encontró {{ type }}", + // "cookies.consent.app.description.preferences": "Required for saving your preferences", + "cookies.consent.app.description.preferences": "Requerido para guardar sus preferencias", - // "dso-selector.placeholder": "Search for a {{ type }}", - "dso-selector.placeholder": "Busque un {{ type }}", + // "cookies.consent.app.title.acknowledgement": "Acknowledgement", + "cookies.consent.app.title.acknowledgement": "Reconocimiento", - // "confirmation-modal.export-metadata.header": "Export metadata for {{ dsoName }}", - "confirmation-modal.export-metadata.header": "Exportar metadatos para {{ dsoName }}", + // "cookies.consent.app.description.acknowledgement": "Required for saving your acknowledgements and consents", + "cookies.consent.app.description.acknowledgement": "Requerido para guardar sus reconocimientos y consentimientos", - // "confirmation-modal.export-metadata.info": "Are you sure you want to export metadata for {{ dsoName }}", - "confirmation-modal.export-metadata.info": "¿Está seguro de que desea exportar metadatos para {{ dsoName }}?", - // "confirmation-modal.export-metadata.cancel": "Cancel", - "confirmation-modal.export-metadata.cancel": "Cancelar", - // "confirmation-modal.export-metadata.confirm": "Export", - "confirmation-modal.export-metadata.confirm": "Exportar", + // "cookies.consent.app.title.google-analytics": "Google Analytics", + "cookies.consent.app.title.google-analytics": "Google Analytics", - // "confirmation-modal.delete-eperson.header": "Delete EPerson \"{{ dsoName }}\"", - "confirmation-modal.delete-eperson.header": "Eliminar EPerson \"{{ dsoName }} \"", + // "cookies.consent.app.description.google-analytics": "Allows us to track statistical data", + "cookies.consent.app.description.google-analytics": "Nos permite rastrear datos estadísticos", - // "confirmation-modal.delete-eperson.info": "Are you sure you want to delete EPerson \"{{ dsoName }}\"", - "confirmation-modal.delete-eperson.info": "¿Está seguro de que desea eliminar EPerson \"{{ dsoName }} \"?", - // "confirmation-modal.delete-eperson.cancel": "Cancel", - "confirmation-modal.delete-eperson.cancel": "Cancelar", - // "confirmation-modal.delete-eperson.confirm": "Delete", - "confirmation-modal.delete-eperson.confirm": "Borrar", + // "cookies.consent.purpose.functional": "Functional", + "cookies.consent.purpose.functional": "Funcional", + // "cookies.consent.purpose.statistical": "Statistical", + "cookies.consent.purpose.statistical": "Estadístico", - // "error.bitstream": "Error fetching bitstream", - "error.bitstream": "Error al obtener el archivo", - // "error.browse-by": "Error fetching items", - "error.browse-by": "Error al obtener artículos", + // "curation-task.task.checklinks.label": "Check Links in Metadata", + "curation-task.task.checklinks.label": "Comprobar enlaces en metadatos", - // "error.collection": "Error fetching collection", - "error.collection": "Error al recuperar la colección", + // "curation-task.task.noop.label": "NOOP", + "curation-task.task.noop.label": "NOOP", - // "error.collections": "Error fetching collections", - "error.collections": "Error al obtener colecciones", + // "curation-task.task.profileformats.label": "Profile Bitstream Formats", + "curation-task.task.profileformats.label": "Formatos de perfil de archivo de perfil", - // "error.community": "Error fetching community", - "error.community": "Error al recuperar la comunidad", + // "curation-task.task.requiredmetadata.label": "Check for Required Metadata", + "curation-task.task.requiredmetadata.label": "Comprobar los metadatos requeridos", - // "error.identifier": "No item found for the identifier", - "error.identifier": "No se encontró ningún artículo para el identificador", + // "curation-task.task.translate.label": "Microsoft Translator", + "curation-task.task.translate.label": "Traductor de Microsoft", - // "error.default": "Error", - "error.default": "Error", + // "curation-task.task.vscan.label": "Virus Scan", + "curation-task.task.vscan.label": "Búsqueda de virus", - // "error.item": "Error fetching item", - "error.item": "Error al obtener el artículo", - // "error.items": "Error fetching items", - "error.items": "Error al obtener artículos", - // "error.objects": "Error fetching objects", - "error.objects": "Error al recuperar objetos", + // "curation.form.task-select.label": "Task:", + "curation.form.task-select.label": "Tarea:", - // "error.recent-submissions": "Error fetching recent submissions", - "error.recent-submissions": "Error al obtener envíos recientes", + // "curation.form.submit": "Start", + "curation.form.submit": "Comienzo", - // "error.search-results": "Error fetching search results", - "error.search-results": "Error al obtener los resultados de la búsqueda", + // "curation.form.submit.success.head": "The curation task has been started successfully", + "curation.form.submit.success.head": "La tarea de curación se ha iniciado con éxito.", - // "error.sub-collections": "Error fetching sub-collections", - "error.sub-collections": "Error al obtener subcolecciones", + // "curation.form.submit.success.content": "You will be redirected to the corresponding process page.", + "curation.form.submit.success.content": "Será redirigido a la página del proceso correspondiente.", - // "error.sub-communities": "Error fetching sub-communities", - "error.sub-communities": "Error al obtener subcomunidades", + // "curation.form.submit.error.head": "Running the curation task failed", + "curation.form.submit.error.head": "Error al ejecutar la tarea de curación", - // "error.submission.sections.init-form-error": "An error occurred during section initialize, please check your input-form configuration. Details are below :

    ", - "error.submission.sections.init-form-error": "Se produjo un error durante la inicialización de la sección, verifique la configuración del formulario de entrada. ", + // "curation.form.submit.error.content": "An error occured when trying to start the curation task.", + "curation.form.submit.error.content": "Se produjo un error al intentar iniciar la tarea de curación.", - // "error.top-level-communities": "Error fetching top-level communities", - "error.top-level-communities": "Error al obtener las comunidades de nivel superior", + // "curation.form.submit.error.invalid-handle": "Couldn't determine the handle for this object", + "curation.form.submit.error.invalid-handle": "No se pudo determinar el handle de este objeto", - // "error.validation.license.notgranted": "You must grant this license to complete your submission. If you are unable to grant this license at this time you may save your work and return later or remove the submission.", - "error.validation.license.notgranted": "Debe otorgar esta licencia para completar su envío. Si no puede otorgar esta licencia en este momento, puede guardar su trabajo y regresar más tarde o eliminar el envío.", + // "curation.form.handle.label": "Handle:", + "curation.form.handle.label": "Handle:", - // "error.validation.pattern": "This input is restricted by the current pattern: {{ pattern }}.", - "error.validation.pattern": "Esta entrada está restringida por el patrón actual: {{ pattern }}.", + // "curation.form.handle.hint": "Hint: Enter [your-handle-prefix]/0 to run a task across entire site (not all tasks may support this capability)", + "curation.form.handle.hint": "Sugerencia: Introduzca [su-prefijo-handle] / 0 para ejecutar una tarea en toda su instalación (no todas las tareas permiten esta opción)", - // "error.validation.filerequired": "The file upload is mandatory", - "error.validation.filerequired": "La carga del archivo es obligatoria", + // "deny-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I regret to inform you that it's not possible to send you a copy of the file(s) you have requested, concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", + "deny-request-copy.email.message": "Estimado {{ recipientName }},\nrespondiendo a su solicitud, lamento informarle que noe s posible I regret to inform you that it's not possible to send you a copy of the file(s) you have requested, concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", + // "deny-request-copy.email.subject": "Request copy of document", + "deny-request-copy.email.subject": "Solicitar una copia del documento", - // "file-section.error.header": "Error obtaining files for this item", - "file-section.error.header": "Error al obtener archivos para este artículo", + // "deny-request-copy.error": "An error occurred", + "deny-request-copy.error": "Ha ocurrido un error", + // "deny-request-copy.header": "Deny document copy request", + "deny-request-copy.header": "Denegar copia del documento", + // "deny-request-copy.intro": "This message will be sent to the applicant of the request", + "deny-request-copy.intro": "Éste es el texto que será enviado al solicitante.", - // "footer.copyright": "copyright © 2002-{{ year }}", - "footer.copyright": "copyright © 2002 - {{ year }}", + // "deny-request-copy.success": "Successfully denied item request", + "deny-request-copy.success": "Solicitud de copia de documento denegada", - // "footer.link.dspace": "DSpace software", - "footer.link.dspace": "Software DSpace", - // "footer.link.lyrasis": "LYRASIS", - "footer.link.lyrasis": "LYRASIS", - // "footer.link.cookies": "Cookie settings", - "footer.link.cookies": "Configuración de cookies", + // "dso.name.untitled": "Untitled", + "dso.name.untitled": "Sin título", - // "footer.link.privacy-policy": "Privacy policy", - "footer.link.privacy-policy": "Política de privacidad", - // "footer.link.end-user-agreement":"End User Agreement", - "footer.link.end-user-agreement": "Acuerdo de usuario final", + // "dso-selector.create.collection.head": "New collection", + "dso-selector.create.collection.head": "Nueva colección", + // "dso-selector.create.collection.sub-level": "Create a new collection in", + "dso-selector.create.collection.sub-level": "Crea una nueva colección en", + // "dso-selector.create.community.head": "New community", + "dso-selector.create.community.head": "Nueva comunidad", - // "forgot-email.form.header": "Forgot Password", - "forgot-email.form.header": "Has olvidado tu contraseña", + // "dso-selector.create.community.sub-level": "Create a new community in", + "dso-selector.create.community.sub-level": "Crea una nueva comunidad en", - // "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": "Ingrese Registre una cuenta para suscribirse a colecciones para recibir actualizaciones por correo electrónico y envíe nuevos artículos a DSpace.", + // "dso-selector.create.community.top-level": "Create a new top-level community", + "dso-selector.create.community.top-level": "Crea una nueva comunidad de alto nivel", - // "forgot-email.form.email": "Email Address *", - "forgot-email.form.email": "Dirección de correo electrónico *", + // "dso-selector.create.item.head": "New item", + "dso-selector.create.item.head": "Nuevo ítem", - // "forgot-email.form.email.error.required": "Please fill in an email address", - "forgot-email.form.email.error.required": "Por favor ingrese una dirección de correo electrónico", + // "dso-selector.create.item.sub-level": "Create a new item in", + "dso-selector.create.item.sub-level": "Crea un nuevo ítem en", - // "forgot-email.form.email.error.pattern": "Please fill in a valid email address", - "forgot-email.form.email.error.pattern": "Por favor ingrese una dirección de correo electrónico válida", + // "dso-selector.create.submission.head": "New submission", + "dso-selector.create.submission.head": "Nuevo envío", - // "forgot-email.form.email.hint": "This address will be verified and used as your login name.", - "forgot-email.form.email.hint": "Esta dirección será verificada y utilizada como su nombre de inicio de sesión.", + // "dso-selector.edit.collection.head": "Edit collection", + "dso-selector.edit.collection.head": "Editar colección", - // "forgot-email.form.submit": "Save", - "forgot-email.form.submit": "Guardar", + // "dso-selector.edit.community.head": "Edit community", + "dso-selector.edit.community.head": "Editar comunidad", - // "forgot-email.form.success.head": "Verification email sent", - "forgot-email.form.success.head": "El mensaje de verificación ha sido enviado", + // "dso-selector.edit.item.head": "Edit item", + "dso-selector.edit.item.head": "Editar ítem", - // "forgot-email.form.success.content": "An email has been sent to {{ email }} containing a special URL and further instructions.", - "forgot-email.form.success.content": "Se envió un correo electrónico a {{ email }} que contiene una URL especial y más instrucciones.", + // "dso-selector.error.title": "An error occurred searching for a {{ type }}", + "dso-selector.error.title": "Se ha producido un error al buscar un {{ type }}", - // "forgot-email.form.error.head": "Error when trying to register email", - "forgot-email.form.error.head": "Error al intentar registrar el correo electrónico", + // "dso-selector.export-metadata.dspaceobject.head": "Export metadata from", + "dso-selector.export-metadata.dspaceobject.head": "Exportar metadatos desde", - // "forgot-email.form.error.content": "An error occured when registering the following email address: {{ email }}", - "forgot-email.form.error.content": "Se produjo un error al registrar la siguiente dirección de correo electrónico: {{ email }}", + // "dso-selector.no-results": "No {{ type }} found", + "dso-selector.no-results": "No se encontró {{ type }}", + // "dso-selector.placeholder": "Search for a {{ type }}", + "dso-selector.placeholder": "Busque un {{ type }}", + // "dso-selector.select.collection.head": "Select a collection", + "dso-selector.select.collection.head": "Seleccione una colección", - // "forgot-password.title": "Forgot Password", - "forgot-password.title": "Has olvidado tu contraseña", + // "dso-selector.set-scope.community.head": "Select a search scope", + "dso-selector.set-scope.community.head": "Seleccione un ámbito de búsqueda", - // "forgot-password.form.head": "Forgot Password", - "forgot-password.form.head": "Has olvidado tu contraseña", + // "dso-selector.set-scope.community.button": "Search all of DSpace", + "dso-selector.set-scope.community.button": "Buscar en todo DSpace", - // "forgot-password.form.info": "Enter a new password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", - "forgot-password.form.info": "Ingrese una nueva contraseña en el cuadro a continuación y confírmela escribiéndola nuevamente en el segundo cuadro. Debe tener al menos seis caracteres.", + // "dso-selector.set-scope.community.input-header": "Search for a community or collection", + "dso-selector.set-scope.community.input-header": "Busque una comunidad o colección", - // "forgot-password.form.card.security": "Security", - "forgot-password.form.card.security": "Seguridad", + // "dso-selector.claim.item.head": "Profile tips", + "dso-selector.claim.item.head": "Consejos de perfil", - // "forgot-password.form.identification.header": "Identify", - "forgot-password.form.identification.header": "Identificar", + // "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": "Hay perfiles que podrían estar relacionados con usted. SI se ve reflejado en uno de ellos, selecciónelo y en la página de detalles, elija la opción de reclamarlo. Opcionalmente puede crear un nuevo perfil desde cero usando el botón inferior.", - // "forgot-password.form.identification.email": "Email address: ", - "forgot-password.form.identification.email": "Dirección de correo electrónico:", + // "dso-selector.claim.item.not-mine-label": "None of these are mine", + "dso-selector.claim.item.not-mine-label": "Ninguno de esos es mio", - // "forgot-password.form.label.password": "Password", - "forgot-password.form.label.password": "Contraseña", + // "dso-selector.claim.item.create-from-scratch": "Create a new one", + "dso-selector.claim.item.create-from-scratch": "Crear uno nuevo", - // "forgot-password.form.label.passwordrepeat": "Retype to confirm", - "forgot-password.form.label.passwordrepeat": "Rescriba para confirmar", + // "confirmation-modal.export-metadata.header": "Export metadata for {{ dsoName }}", + "confirmation-modal.export-metadata.header": "Exportar metadatos para {{ dsoName }}", - // "forgot-password.form.error.empty-password": "Please enter a password in the box below.", - "forgot-password.form.error.empty-password": "Ingrese una contraseña en el cuadro a continuación.", + // "confirmation-modal.export-metadata.info": "Are you sure you want to export metadata for {{ dsoName }}", + "confirmation-modal.export-metadata.info": "¿Está seguro de que desea exportar metadatos para {{ dsoName }}?", - // "forgot-password.form.error.matching-passwords": "The passwords do not match.", - "forgot-password.form.error.matching-passwords": "Las contraseñas no coinciden.", + // "confirmation-modal.export-metadata.cancel": "Cancel", + "confirmation-modal.export-metadata.cancel": "Cancelar", - // "forgot-password.form.error.password-length": "The password should be at least 6 characters long.", - "forgot-password.form.error.password-length": "La contraseña debe tener al menos 6 caracteres.", + // "confirmation-modal.export-metadata.confirm": "Export", + "confirmation-modal.export-metadata.confirm": "Exportar", - // "forgot-password.form.notification.error.title": "Error when trying to submit new password", - "forgot-password.form.notification.error.title": "Error al intentar enviar una nueva contraseña", + // "confirmation-modal.delete-eperson.header": "Delete EPerson \"{{ dsoName }}\"", + "confirmation-modal.delete-eperson.header": "Borrar usuario \"{{ dsoName }} \"", - // "forgot-password.form.notification.success.content": "The password reset was successful. You have been logged in as the created user.", - "forgot-password.form.notification.success.content": "El restablecimiento de la contraseña fue exitoso. Ha iniciado sesión como el usuario creado.", + // "confirmation-modal.delete-eperson.info": "Are you sure you want to delete EPerson \"{{ dsoName }}\"", + "confirmation-modal.delete-eperson.info": "¿Está seguro de que desea eliminar al usuario \"{{ dsoName }} \"?", - // "forgot-password.form.notification.success.title": "Password reset completed", - "forgot-password.form.notification.success.title": "Se completó el restablecimiento de la contraseña", + // "confirmation-modal.delete-eperson.cancel": "Cancel", + "confirmation-modal.delete-eperson.cancel": "Cancelar", - // "forgot-password.form.submit": "Submit password", - "forgot-password.form.submit": "Enviar contraseña", + // "confirmation-modal.delete-eperson.confirm": "Delete", + "confirmation-modal.delete-eperson.confirm": "Borrar", + // "confirmation-modal.delete-profile.header": "Delete Profile", + "confirmation-modal.delete-profile.header": "Borrar Perfil", + // "confirmation-modal.delete-profile.info": "Are you sure you want to delete your profile", + "confirmation-modal.delete-profile.info": "¿Está seguro que quiere borrar su perfil?", - // "form.add": "Add more", - "form.add": "Añadir más", + // "confirmation-modal.delete-profile.cancel": "Cancel", + "confirmation-modal.delete-profile.cancel": "Cancelar", - // "form.add-help": "Click here to add the current entry and to add another one", - "form.add-help": "Haga clic aquí para agregar la entrada actual y para agregar otra", + // "confirmation-modal.delete-profile.confirm": "Delete", + "confirmation-modal.delete-profile.confirm": "Borrar", - // "form.cancel": "Cancel", - "form.cancel": "Cancelar", - // "form.clear": "Clear", - "form.clear": "Claro", + // "error.bitstream": "Error fetching bitstream", + "error.bitstream": "Error al obtener el archivo", - // "form.clear-help": "Click here to remove the selected value", - "form.clear-help": "Haga clic aquí para eliminar el valor seleccionado", + // "error.browse-by": "Error fetching items", + "error.browse-by": "Error al recuperar ítems", - // "form.discard": "Discard", - "form.discard": "Descarte", + // "error.collection": "Error fetching collection", + "error.collection": "Error al recuperar la colección", - // "form.drag": "Drag", - "form.drag": "Arrastrar", + // "error.collections": "Error fetching collections", + "error.collections": "Error al recuperar colecciones", - // "form.edit": "Edit", - "form.edit": "Editar", + // "error.community": "Error fetching community", + "error.community": "Error al recuperar la comunidad", - // "form.edit-help": "Click here to edit the selected value", - "form.edit-help": "Haga clic aquí para editar el valor seleccionado", + // "error.identifier": "No item found for the identifier", + "error.identifier": "No se encontró ningún ítem con ese identificador", - // "form.first-name": "First name", - "form.first-name": "Nombre de pila", + // "error.default": "Error", + "error.default": "Error", - // "form.group-collapse": "Collapse", - "form.group-collapse": "Colapso", + // "error.item": "Error fetching item", + "error.item": "Error al recuperar el ítem", - // "form.group-collapse-help": "Click here to collapse", - "form.group-collapse-help": "Haga clic aquí para colapsar", + // "error.items": "Error fetching items", + "error.items": "Error al recuperar ítems", - // "form.group-expand": "Expand", - "form.group-expand": "Expandir", + // "error.objects": "Error fetching objects", + "error.objects": "Error al recuperar objetos", - // "form.group-expand-help": "Click here to expand and add more elements", - "form.group-expand-help": "Haga clic aquí para expandir y agregar más artículos", + // "error.recent-submissions": "Error fetching recent submissions", + "error.recent-submissions": "Error al recuperar los envíos recientes", - // "form.last-name": "Last name", - "form.last-name": "Apellido", + // "error.search-results": "Error fetching search results", + "error.search-results": "Error al recuperar los resultados de búsqueda", - // "form.loading": "Loading...", - "form.loading": "Cargando...", + // "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": "La búsqueda no es válida. Revise en la sintaxis de búsquedas Solr para mas información sobre este error.", - // "form.lookup": "Lookup", - "form.lookup": "Buscar", + // "error.sub-collections": "Error fetching sub-collections", + "error.sub-collections": "Error al recuperar subcolecciones", - // "form.lookup-help": "Click here to look up an existing relation", - "form.lookup-help": "Haga clic aquí para buscar una relación existente", + // "error.sub-communities": "Error fetching sub-communities", + "error.sub-communities": "Error al recuperar subcomunidades", - // "form.no-results": "No results found", - "form.no-results": "No se han encontrado resultados", + // "error.submission.sections.init-form-error": "An error occurred during section initialize, please check your input-form configuration. Details are below :

    ", + "error.submission.sections.init-form-error": "Se produjo un error durante la inicialización de la sección, verifique la configuración de su formulario de entrada. Se dan detalles a continuación:", - // "form.no-value": "No value entered", - "form.no-value": "No se ingresó ningún valor", + // "error.top-level-communities": "Error fetching top-level communities", + "error.top-level-communities": "Error al recuperar las comunidades de nivel superior", - // "form.other-information": {}, - "form.other-information": {}, + // "error.validation.license.notgranted": "You must grant this license to complete your submission. If you are unable to grant this license at this time you may save your work and return later or remove the submission.", + "error.validation.license.notgranted": "Debe conceda esta licencia de depósito para completar el envío. Si no puede conceder esta licencia en este momento, puede guardar su trabajo y regresar más tarde o bien eliminar el envío.", - // "form.remove": "Remove", - "form.remove": "Eliminar", + // "error.validation.pattern": "This input is restricted by the current pattern: {{ pattern }}.", + "error.validation.pattern": "Esta entrada está restringida por este patrón actual: {{ pattern }}.", - // "form.save": "Save", - "form.save": "Guardar", + // "error.validation.filerequired": "The file upload is mandatory", + "error.validation.filerequired": "La carga de un archivo es obligatoria", - // "form.save-help": "Save changes", - "form.save-help": "Guardar cambios", + // "error.validation.required": "This field is required", + "error.validation.required": "Se requiere este campo", - // "form.search": "Search", - "form.search": "Buscar", + // "error.validation.NotValidEmail": "This E-mail is not a valid email", + "error.validation.NotValidEmail": "Este no es correo electrónico válido", - // "form.search-help": "Click here to look for an existing correspondence", - "form.search-help": "Haga clic aquí para buscar una correspondencia existente", + // "error.validation.emailTaken": "This E-mail is already taken", + "error.validation.emailTaken": "Este correo electrónico ya está en uso", - // "form.submit": "Save", - "form.submit": "Guardar", + // "error.validation.groupExists": "This group already exists", + "error.validation.groupExists": "Este grupo ya existe", - // "form.repeatable.sort.tip": "Drop the item in the new position", - "form.repeatable.sort.tip": "Suelta el artículo en la nueva posición", + // "feed.description": "Syndication feed", + "feed.description": "Hilo de sindicación", - // "home.description": "", - "home.description": "", - // "home.breadcrumbs": "Home", - "home.breadcrumbs": "Hogar", + // "file-section.error.header": "Error obtaining files for this item", + "file-section.error.header": "Error al obtener archivos para este ítem", - // "home.search-form.placeholder": "Search the repository ...", - "home.search-form.placeholder": "Buscar en el repositorio ...", - // "home.title": "Home", - "home.title": "Hogar", - // "home.top-level-communities.head": "Communities in DSpace", - "home.top-level-communities.head": "Comunidades en DSpace", + // "footer.copyright": "copyright © 2002-{{ year }}", + "footer.copyright": "copyright © 2002 - {{ year }}", - // "home.top-level-communities.help": "Select a community to browse its collections.", - "home.top-level-communities.help": "Seleccione una comunidad para explorar sus colecciones.", + // "footer.link.dspace": "DSpace software", + "footer.link.dspace": "Software DSpace", + // "footer.link.lyrasis": "LYRASIS", + "footer.link.lyrasis": "LYRASIS", + // "footer.link.cookies": "Cookie settings", + "footer.link.cookies": "Configuración de cookies", - // "info.end-user-agreement.accept": "I have read and I agree to the End User Agreement", - "info.end-user-agreement.accept": "He leído y acepto el Acuerdo de usuario final.", + // "footer.link.privacy-policy": "Privacy policy", + "footer.link.privacy-policy": "Política de privacidad", - // "info.end-user-agreement.accept.error": "An error occurred accepting the End User Agreement", - "info.end-user-agreement.accept.error": "Se produjo un error al aceptar el Acuerdo de usuario final.", + // "footer.link.end-user-agreement":"End User Agreement", + "footer.link.end-user-agreement": "Acuerdo de usuario final", - // "info.end-user-agreement.accept.success": "Successfully updated the End User Agreement", - "info.end-user-agreement.accept.success": "Se actualizó correctamente el Acuerdo de usuario final.", + // "footer.link.feedback":"Send Feedback", + "footer.link.feedback":"Enviar Sugerencias", - // "info.end-user-agreement.breadcrumbs": "End User Agreement", - "info.end-user-agreement.breadcrumbs": "Acuerdo de usuario final", - // "info.end-user-agreement.buttons.cancel": "Cancel", - "info.end-user-agreement.buttons.cancel": "Cancelar", - // "info.end-user-agreement.buttons.save": "Save", - "info.end-user-agreement.buttons.save": "Guardar", + // "forgot-email.form.header": "Forgot Password", + "forgot-email.form.header": "Olvido de contraseña", - // "info.end-user-agreement.head": "End User Agreement", - "info.end-user-agreement.head": "Acuerdo de usuario final", + // "forgot-email.form.info": "Enter the email address associated with the account.", + "forgot-email.form.info": "Introduzca la dirección de correo electrónico que proporcionó cuando se registró.", - // "info.end-user-agreement.title": "End User Agreement", - "info.end-user-agreement.title": "Acuerdo de usuario final", + // "forgot-email.form.email": "Email Address *", + "forgot-email.form.email": "Dirección de correo electrónico *", - // "info.privacy.breadcrumbs": "Privacy Statement", - "info.privacy.breadcrumbs": "Declaracion de privacidad", + // "forgot-email.form.email.error.required": "Please fill in an email address", + "forgot-email.form.email.error.required": "Por favor introduzca una dirección de correo electrónico", - // "info.privacy.head": "Privacy Statement", - "info.privacy.head": "Declaracion de privacidad", + // "forgot-email.form.email.error.pattern": "Please fill in a valid email address", + "forgot-email.form.email.error.pattern": "Por favor introduzca una dirección de correo electrónico válida", - // "info.privacy.title": "Privacy Statement", - "info.privacy.title": "Declaracion de privacidad", + // "forgot-email.form.email.hint": "An email will be sent to this address with a further instructions.", + "forgot-email.form.email.hint": "Se le enviará un mensaje a esa dirección con las instrucciones pertinentes.", + // "forgot-email.form.submit": "Reset password", + "forgot-email.form.submit": "Restablecer contraseña", + // "forgot-email.form.success.head": "Password reset email sent", + "forgot-email.form.success.head": "Se ha enviado el mensaje de restablecemieto de contraseña", - // "item.alerts.private": "This item is private", - "item.alerts.private": "Este artículo es privado", + // "forgot-email.form.success.content": "An email has been sent to {{ email }} containing a special URL and further instructions.", + "forgot-email.form.success.content": "Se ha enviado un correo a {{ email }} que contiene una URL especial e instrucciones adicionales.", - // "item.alerts.withdrawn": "This item has been withdrawn", - "item.alerts.withdrawn": "Este artículo ha sido retirado", + // "forgot-email.form.error.head": "Error when trying to reset password", + "forgot-email.form.error.head": "Error al intentar restablecer la contraseña", + // "forgot-email.form.error.content": "An error occured when attempting to reset the password for the account associated with the following email address: {{ email }}", + "forgot-email.form.error.content": "Ha ocurrido una error intentando restablecer la contraseña para la cuenta asociada al correo electrónico: {{ email }}", - // "item.edit.authorizations.heading": "With this editor you can view and alter the policies of an item, plus alter policies of individual item components: bundles and bitstreams. Briefly, an item is a container of bundles, and bundles are containers of bitstreams. Containers usually have ADD/REMOVE/READ/WRITE policies, while bitstreams only have READ/WRITE policies.", - "item.edit.authorizations.heading": "Con este editor puede ver y modificar las políticas de un artículo, además de modificar las políticas de los componentes individuales del artículo: paquetes y archivos. Brevemente, un artículo es un contenedor de paquetes y los paquetes son contenedores de archivos. Los contenedores suelen tener políticas AGREGAR/ELIMINAR/LEER/ESCRIBIR, mientras que los archivos solo tienen políticas LEER/ESCRIBIR.", - // "item.edit.authorizations.title": "Edit item's Policies", - "item.edit.authorizations.title": "Editar las políticas del artículo", + // "forgot-password.title": "Forgot Password", + "forgot-password.title": "Olvido de contraseña", + // "forgot-password.form.head": "Forgot Password", + "forgot-password.form.head": "Olvido de contraseña", + // "forgot-password.form.info": "Enter a new password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", + "forgot-password.form.info": "Introduzca una nueva contraseña en el cuadro a continuación y confírmela reescribiéndola en el segundo cuadro. Debe tener al menos seis caracteres.", - // "item.badge.private": "Private", - "item.badge.private": "Privado", + // "forgot-password.form.card.security": "Security", + "forgot-password.form.card.security": "Seguridad", - // "item.badge.withdrawn": "Withdrawn", - "item.badge.withdrawn": "Retirado", + // "forgot-password.form.identification.header": "Identify", + "forgot-password.form.identification.header": "Identificar", + // "forgot-password.form.identification.email": "Email address: ", + "forgot-password.form.identification.email": "Dirección de correo electrónico:", + // "forgot-password.form.label.password": "Password", + "forgot-password.form.label.password": "Contraseña", - // "item.bitstreams.upload.bundle": "Bundle", - "item.bitstreams.upload.bundle": "Manojo", + // "forgot-password.form.label.passwordrepeat": "Retype to confirm", + "forgot-password.form.label.passwordrepeat": "Reescriba para confirmar", - // "item.bitstreams.upload.bundle.placeholder": "Select a bundle", - "item.bitstreams.upload.bundle.placeholder": "Seleccione un paquete", + // "forgot-password.form.error.empty-password": "Please enter a password in the box below.", + "forgot-password.form.error.empty-password": "Introduzca una contraseña en el cuadro a continuación.", - // "item.bitstreams.upload.bundle.new": "Create bundle", - "item.bitstreams.upload.bundle.new": "Crear paquete", + // "forgot-password.form.error.matching-passwords": "The passwords do not match.", + "forgot-password.form.error.matching-passwords": "Las contraseñas no coinciden.", - // "item.bitstreams.upload.bundles.empty": "This item doesn\'t contain any bundles to upload a bitstream to.", - "item.bitstreams.upload.bundles.empty": "Este artículo no contiene ningún paquete para cargar un archivo.", + // "forgot-password.form.error.password-length": "The password should be at least 6 characters long.", + "forgot-password.form.error.password-length": "La contraseña debe tener al menos 6 caracteres.", - // "item.bitstreams.upload.cancel": "Cancel", - "item.bitstreams.upload.cancel": "Cancelar", + // "forgot-password.form.notification.error.title": "Error when trying to submit new password", + "forgot-password.form.notification.error.title": "Error al intentar enviar una nueva contraseña", - // "item.bitstreams.upload.drop-message": "Drop a file to upload", - "item.bitstreams.upload.drop-message": "Suelta un archivo para subir", + // "forgot-password.form.notification.success.content": "The password reset was successful. You have been logged in as the created user.", + "forgot-password.form.notification.success.content": "El restablecimiento de la contraseña fue exitoso. Ha iniciado sesión como el usuario creado.", - // "item.bitstreams.upload.item": "Item: ", - "item.bitstreams.upload.item": "Artículo:", + // "forgot-password.form.notification.success.title": "Password reset completed", + "forgot-password.form.notification.success.title": "Se completó el restablecimiento de la contraseña", - // "item.bitstreams.upload.notifications.bundle.created.content": "Successfully created new bundle.", - "item.bitstreams.upload.notifications.bundle.created.content": "Nuevo paquete creado con éxito.", + // "forgot-password.form.submit": "Submit password", + "forgot-password.form.submit": "Enviar contraseña", - // "item.bitstreams.upload.notifications.bundle.created.title": "Created bundle", - "item.bitstreams.upload.notifications.bundle.created.title": "Paquete creado", - // "item.bitstreams.upload.notifications.upload.failed": "Upload failed. Please verify the content before retrying.", - "item.bitstreams.upload.notifications.upload.failed": "Subida fallida. Verifique el contenido antes de volver a intentarlo.", - // "item.bitstreams.upload.title": "Upload bitstream", - "item.bitstreams.upload.title": "Subir archivo", + // "form.add": "Add more", + "form.add": "Añadir más", + // "form.add-help": "Click here to add the current entry and to add another one", + "form.add-help": "Haga clic aquí para agregar la entrada actual y para agregar otra", + // "form.cancel": "Cancel", + "form.cancel": "Cancelar", - // "item.edit.bitstreams.bundle.edit.buttons.upload": "Upload", - "item.edit.bitstreams.bundle.edit.buttons.upload": "Subir", + // "form.clear": "Clear", + "form.clear": "Limpiar", - // "item.edit.bitstreams.bundle.displaying": "Currently displaying {{ amount }} bitstreams of {{ total }}.", - "item.edit.bitstreams.bundle.displaying": "Actualmente se muestran {{ amount }} archivos de {{ total }}.", + // "form.clear-help": "Click here to remove the selected value", + "form.clear-help": "Haga clic aquí para eliminar el valor seleccionado", - // "item.edit.bitstreams.bundle.load.all": "Load all ({{ total }})", - "item.edit.bitstreams.bundle.load.all": "Cargar todo ({{ total }})", + // "form.discard": "Discard", + "form.discard": "Descartar", - // "item.edit.bitstreams.bundle.load.more": "Load more", - "item.edit.bitstreams.bundle.load.more": "Carga más", + // "form.drag": "Drag", + "form.drag": "Arrastrar", - // "item.edit.bitstreams.bundle.name": "BUNDLE: {{ name }}", - "item.edit.bitstreams.bundle.name": "PAQUETE: {{ name }}", + // "form.edit": "Edit", + "form.edit": "Editar", - // "item.edit.bitstreams.discard-button": "Discard", - "item.edit.bitstreams.discard-button": "Descarte", + // "form.edit-help": "Click here to edit the selected value", + "form.edit-help": "Haga clic aquí para editar el valor seleccionado", - // "item.edit.bitstreams.edit.buttons.download": "Download", - "item.edit.bitstreams.edit.buttons.download": "Descargar", + // "form.first-name": "First name", + "form.first-name": "Nombre de pila", - // "item.edit.bitstreams.edit.buttons.drag": "Drag", - "item.edit.bitstreams.edit.buttons.drag": "Arrastrar", + // "form.group-collapse": "Collapse", + "form.group-collapse": "Contraer", - // "item.edit.bitstreams.edit.buttons.edit": "Edit", - "item.edit.bitstreams.edit.buttons.edit": "Editar", + // "form.group-collapse-help": "Click here to collapse", + "form.group-collapse-help": "Haga clic aquí para contraer", - // "item.edit.bitstreams.edit.buttons.remove": "Remove", - "item.edit.bitstreams.edit.buttons.remove": "Eliminar", + // "form.group-expand": "Expand", + "form.group-expand": "Expandir", - // "item.edit.bitstreams.edit.buttons.undo": "Undo changes", - "item.edit.bitstreams.edit.buttons.undo": "Deshacer cambios", + // "form.group-expand-help": "Click here to expand and add more elements", + "form.group-expand-help": "Haga clic aquí para expandir y agregar más elementos", - // "item.edit.bitstreams.empty": "This item doesn't contain any bitstreams. Click the upload button to create one.", - "item.edit.bitstreams.empty": "Este artículo no contiene ningún archivo. Haga clic en el botón de carga para crear uno.", + // "form.last-name": "Last name", + "form.last-name": "Apellido", - // "item.edit.bitstreams.headers.actions": "Actions", - "item.edit.bitstreams.headers.actions": "Comportamiento", + // "form.loading": "Loading...", + "form.loading": "Cargando...", - // "item.edit.bitstreams.headers.bundle": "Bundle", - "item.edit.bitstreams.headers.bundle": "Manojo", + // "form.lookup": "Lookup", + "form.lookup": "Buscar", - // "item.edit.bitstreams.headers.description": "Description", - "item.edit.bitstreams.headers.description": "Descripción", + // "form.lookup-help": "Click here to look up an existing relation", + "form.lookup-help": "Haga clic aquí para buscar una relación existente", - // "item.edit.bitstreams.headers.format": "Format", - "item.edit.bitstreams.headers.format": "Formato", + // "form.no-results": "No results found", + "form.no-results": "No se han encontrado resultados", - // "item.edit.bitstreams.headers.name": "Name", - "item.edit.bitstreams.headers.name": "Nombre", + // "form.no-value": "No value entered", + "form.no-value": "No se introdujo ningún valor", - // "item.edit.bitstreams.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", - "item.edit.bitstreams.notifications.discarded.content": "Tus cambios fueron descartados. ", + // "form.other-information": {}, + "form.other-information": {}, - // "item.edit.bitstreams.notifications.discarded.title": "Changes discarded", - "item.edit.bitstreams.notifications.discarded.title": "Cambios descartados", + // "form.remove": "Remove", + "form.remove": "Eliminar", - // "item.edit.bitstreams.notifications.move.failed.title": "Error moving bitstreams", - "item.edit.bitstreams.notifications.move.failed.title": "Error al mover archivos", + // "form.save": "Save", + "form.save": "Guardar", - // "item.edit.bitstreams.notifications.move.saved.content": "Your move changes to this item's bitstreams and bundles have been saved.", - "item.edit.bitstreams.notifications.move.saved.content": "Se han guardado los cambios de movimiento en los archivos y paquetes de este artículo.", + // "form.save-help": "Save changes", + "form.save-help": "Guardar cambios", - // "item.edit.bitstreams.notifications.move.saved.title": "Move changes saved", - "item.edit.bitstreams.notifications.move.saved.title": "Mover cambios guardados", + // "form.search": "Search", + "form.search": "Buscar", - // "item.edit.bitstreams.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.bitstreams.notifications.outdated.content": "Otro usuario ha cambiado el artículo en el que está trabajando actualmente. ", + // "form.search-help": "Click here to look for an existing correspondence", + "form.search-help": "Haga clic aquí para buscar una correspondencia existente", - // "item.edit.bitstreams.notifications.outdated.title": "Changes outdated", - "item.edit.bitstreams.notifications.outdated.title": "Cambios desactualizados", + // "form.submit": "Save", + "form.submit": "Guardar", - // "item.edit.bitstreams.notifications.remove.failed.title": "Error deleting bitstream", - "item.edit.bitstreams.notifications.remove.failed.title": "Error al eliminar archivo", + // "form.repeatable.sort.tip": "Drop the item in the new position", + "form.repeatable.sort.tip": "Suelte el ítem en la nueva posición", - // "item.edit.bitstreams.notifications.remove.saved.content": "Your removal changes to this item's bitstreams have been saved.", - "item.edit.bitstreams.notifications.remove.saved.content": "Se han guardado los cambios de eliminación de los archivos de este artículo.", - // "item.edit.bitstreams.notifications.remove.saved.title": "Removal changes saved", - "item.edit.bitstreams.notifications.remove.saved.title": "Se guardaron los cambios de eliminación", + // "grant-deny-request-copy.deny": "Don't send copy", + "grant-deny-request-copy.deny": "No envíe copia", - // "item.edit.bitstreams.reinstate-button": "Undo", - "item.edit.bitstreams.reinstate-button": "Deshacer", + // "grant-deny-request-copy.email.back": "Back", + "grant-deny-request-copy.email.back": "Atrás", - // "item.edit.bitstreams.save-button": "Save", - "item.edit.bitstreams.save-button": "Guardar", + // "grant-deny-request-copy.email.message": "Message", + "grant-deny-request-copy.email.message": "Mensaje", - // "item.edit.bitstreams.upload-button": "Upload", - "item.edit.bitstreams.upload-button": "Subir", + // "grant-deny-request-copy.email.message.empty": "Please enter a message", + "grant-deny-request-copy.email.message.empty": "Por favor, introduzca un mensaje", + // "grant-deny-request-copy.email.permissions.info": "You may use this occasion to reconsider the access restrictions on the document, to avoid having to respond to these requests. If you’d like to ask the repository administrators to remove these restrictions, please check the box below.", + "grant-deny-request-copy.email.permissions.info": "Puede aprovechar la ocasión para reconsiderar las restricciones de acceso al documento (para evitar tener que responder a estas solicitudes). Para consultar con los administadores del repositorio para retirar estas resticciones, marque por favor la casilla inferior.", + // "grant-deny-request-copy.email.permissions.label": "Change to open access", + "grant-deny-request-copy.email.permissions.label": "Cambio a Acceso Abierto", - // "item.edit.delete.cancel": "Cancel", - "item.edit.delete.cancel": "Cancelar", + // "grant-deny-request-copy.email.send": "Send", + "grant-deny-request-copy.email.send": "Enviar", - // "item.edit.delete.confirm": "Delete", - "item.edit.delete.confirm": "Borrar", + // "grant-deny-request-copy.email.subject": "Subject", + "grant-deny-request-copy.email.subject": "Asunto", - // "item.edit.delete.description": "Are you sure this item should be completely deleted? Caution: At present, no tombstone would be left.", - "item.edit.delete.description": "¿Estás seguro de que este artículo debería eliminarse por completo? Precaución: en la actualidad, no se dejaría ninguna lápida.", + // "grant-deny-request-copy.email.subject.empty": "Please enter a subject", + "grant-deny-request-copy.email.subject.empty": "Por favor, introduzca un asunto", - // "item.edit.delete.error": "An error occurred while deleting the item", - "item.edit.delete.error": "Se produjo un error al eliminar el artículo.", + // "grant-deny-request-copy.grant": "Send copy", + "grant-deny-request-copy.grant": "Enviar copia", - // "item.edit.delete.header": "Delete item: {{ id }}", - "item.edit.delete.header": "Eliminar artículo: {{ id }}", + // "grant-deny-request-copy.header": "Document copy request", + "grant-deny-request-copy.header": "Solciitud de copia de documento", - // "item.edit.delete.success": "The item has been deleted", - "item.edit.delete.success": "El artículo ha sido eliminado", + // "grant-deny-request-copy.home-page": "Take me to the home page", + "grant-deny-request-copy.home-page": "Llévame a la página de inicio", - // "item.edit.head": "Edit Item", - "item.edit.head": "Editar artículo", + // "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": "Si usted es uno de los autores del documento {{ name }}, use los botones inferiores para responder la solicitud del usuario", - // "item.edit.breadcrumbs": "Edit Item", - "item.edit.breadcrumbs": "Editar artículo", - // "item.edit.tabs.disabled.tooltip": "You're not authorized to access this tab", - "item.edit.tabs.disabled.tooltip": "No tienes autorización para acceder a esta pestaña", + // "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": "Tras elegir una opción, le sugeriremos un texto de correo electrónico que usted puede editar.", - // "item.edit.tabs.mapper.head": "Collection Mapper", - "item.edit.tabs.mapper.head": "Mapeador de colecciones", + // "grant-deny-request-copy.processed": "This request has already been processed. You can use the button below to get back to the home page.", + "grant-deny-request-copy.processed": "Esta solicitud fue ya procesada. Puede usar los botones inferiores para regresas a la página de inicio", - // "item.edit.tabs.item-mapper.title": "Item Edit - Collection Mapper", - "item.edit.tabs.item-mapper.title": "Edición de artículos - Mapeador de colecciones", - // "item.edit.item-mapper.buttons.add": "Map item to selected collections", - "item.edit.item-mapper.buttons.add": "Asignar artículo a colecciones seleccionadas", - // "item.edit.item-mapper.buttons.remove": "Remove item's mapping for selected collections", - "item.edit.item-mapper.buttons.remove": "Eliminar la asignación de artículos para las colecciones seleccionadas", + // "grant-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I have the pleasure to send you in attachment a copy of the file(s) concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", + "grant-request-copy.email.message": "Estimado {{ recipientName }},\nRespondiendo a su solicitud, le envío anexada una copia del fichero correspondiente al documento: \"{{ itemUrl }}\" ({{ itemName }}), del que soy autor.\n\nUn cordial saludo,\n{{ authorName }} <{{ authorEmail }}>", - // "item.edit.item-mapper.cancel": "Cancel", - "item.edit.item-mapper.cancel": "Cancelar", + // "grant-request-copy.email.subject": "Request copy of document", + "grant-request-copy.email.subject": "Solicitar copia de documento", - // "item.edit.item-mapper.description": "This is the item mapper tool that allows administrators to map this item to other collections. You can search for collections and map them, or browse the list of collections the item is currently mapped to.", - "item.edit.item-mapper.description": "Esta es la herramienta de asignación de artículos que permite a los administradores asignar este artículo a otras colecciones. Puede buscar colecciones y mapearlas, o explorar la lista de colecciones a las que el artículo está mapeado actualmente.", + // "grant-request-copy.error": "An error occurred", + "grant-request-copy.error": "Ocurrió un error", - // "item.edit.item-mapper.head": "Item Mapper - Map Item to Collections", - "item.edit.item-mapper.head": "Asignador de artículos: asigna artículos a colecciones", + // "grant-request-copy.header": "Grant document copy request", + "grant-request-copy.header": "Permitir solicitud de copia de documento", - // "item.edit.item-mapper.item": "Item: \"{{name}}\"", - "item.edit.item-mapper.item": "Artículo: \"{{ name }}\"", + // "grant-request-copy.intro": "This message will be sent to the applicant of the request. The requested document(s) will be attached.", + "grant-request-copy.intro": "Este mensaje se enviará al solicitante de la copia. Se le anexará una copia del documento.", - // "item.edit.item-mapper.no-search": "Please enter a query to search", - "item.edit.item-mapper.no-search": "Ingrese una consulta para buscar", + // "grant-request-copy.success": "Successfully granted item request", + "grant-request-copy.success": "Solicitud de ítem concedida exitosamente", - // "item.edit.item-mapper.notifications.add.error.content": "Errors occurred for mapping of item to {{amount}} collections.", - "item.edit.item-mapper.notifications.add.error.content": "Se produjeron errores al mapear el artículo a {{ amount }} colecciones.", - // "item.edit.item-mapper.notifications.add.error.head": "Mapping errors", - "item.edit.item-mapper.notifications.add.error.head": "Errores de mapeo", + // "health.breadcrumbs": "Health", + "health.breadcrumbs": "Chequeos", - // "item.edit.item-mapper.notifications.add.success.content": "Successfully mapped item to {{amount}} collections.", - "item.edit.item-mapper.notifications.add.success.content": "Se asignó correctamente el artículo a {{ amount }} colecciones.", + // "health-page.heading" : "Health", + "health-page.heading" : "Chequeos", - // "item.edit.item-mapper.notifications.add.success.head": "Mapping completed", - "item.edit.item-mapper.notifications.add.success.head": "Mapeo completado", + // "health-page.info-tab" : "Info", + "health-page.info-tab" : "Información", - // "item.edit.item-mapper.notifications.remove.error.content": "Errors occurred for the removal of the mapping to {{amount}} collections.", - "item.edit.item-mapper.notifications.remove.error.content": "Se produjeron errores para la eliminación de la asignación a {{ amount }} colecciones.", + // "health-page.status-tab" : "Status", + "health-page.status-tab" : "Estado", - // "item.edit.item-mapper.notifications.remove.error.head": "Removal of mapping errors", - "item.edit.item-mapper.notifications.remove.error.head": "Eliminación de errores de mapeo", + // "health-page.error.msg": "The health check service is temporarily unavailable", + "health-page.error.msg": "El servicio de comprobación no se encuentra temporalmente disponible", - // "item.edit.item-mapper.notifications.remove.success.content": "Successfully removed mapping of item to {{amount}} collections.", - "item.edit.item-mapper.notifications.remove.success.content": "Se eliminó correctamente la asignación del artículo a {{ amount }} colecciones.", + // "health-page.property.status": "Status code", + "health-page.property.status": "Código de estado", - // "item.edit.item-mapper.notifications.remove.success.head": "Removal of mapping completed", - "item.edit.item-mapper.notifications.remove.success.head": "Eliminación del mapeo completada", + // "health-page.section.db.title": "Database", + "health-page.section.db.title": "Database", - // "item.edit.item-mapper.search-form.placeholder": "Search collections...", - "item.edit.item-mapper.search-form.placeholder": "Buscar colecciones...", + // "health-page.section.geoIp.title": "GeoIp", + "health-page.section.geoIp.title": "GeoIp", - // "item.edit.item-mapper.tabs.browse": "Browse mapped collections", - "item.edit.item-mapper.tabs.browse": "Examinar colecciones mapeadas", + // "health-page.section.solrAuthorityCore.title": "Sor: authority core", + "health-page.section.solrAuthorityCore.title": "Solr: authority core", - // "item.edit.item-mapper.tabs.map": "Map new collections", - "item.edit.item-mapper.tabs.map": "Mapear nuevas colecciones", + // "health-page.section.solrOaiCore.title": "Sor: oai core", + "health-page.section.solrOaiCore.title": "Solr: oai core", + // "health-page.section.solrSearchCore.title": "Sor: search core", + "health-page.section.solrSearchCore.title": "Solr: search core", + // "health-page.section.solrStatisticsCore.title": "Sor: statistics core", + "health-page.section.solrStatisticsCore.title": "Solr: statistics core", - // "item.edit.metadata.add-button": "Add", - "item.edit.metadata.add-button": "Agregar", + // "health-page.section-info.app.title": "Application Backend", + "health-page.section-info.app.title": "Backend de la aplicación", - // "item.edit.metadata.discard-button": "Discard", - "item.edit.metadata.discard-button": "Descarte", + // "health-page.section-info.java.title": "Java", + "health-page.section-info.java.title": "Java", - // "item.edit.metadata.edit.buttons.edit": "Edit", - "item.edit.metadata.edit.buttons.edit": "Editar", + // "health-page.status": "Status", + "health-page.status": "Estado", - // "item.edit.metadata.edit.buttons.remove": "Remove", - "item.edit.metadata.edit.buttons.remove": "Eliminar", + // "health-page.status.ok.info": "Operational", + "health-page.status.ok.info": "Operativo", - // "item.edit.metadata.edit.buttons.undo": "Undo changes", - "item.edit.metadata.edit.buttons.undo": "Deshacer cambios", + // "health-page.status.error.info": "Problems detected", + "health-page.status.error.info": "Problemas detectados", - // "item.edit.metadata.edit.buttons.unedit": "Stop editing", - "item.edit.metadata.edit.buttons.unedit": "Dejar de editar", + // "health-page.status.warning.info": "Possible issues detected", + "health-page.status.warning.info": "Detectados problemas potenciales", - // "item.edit.metadata.empty": "The item currently doesn't contain any metadata. Click Add to start adding a metadata value.", - "item.edit.metadata.empty": "Actualmente, el artículo no contiene metadatos. Haga clic en Agregar para comenzar a agregar un valor de metadatos.", + // "health-page.title": "Health", + "health-page.title": "Chequeos", - // "item.edit.metadata.headers.edit": "Edit", - "item.edit.metadata.headers.edit": "Editar", + // "health-page.section.no-issues": "No issues detected", + "health-page.section.no-issues": "No se detectaron problemas", - // "item.edit.metadata.headers.field": "Field", - "item.edit.metadata.headers.field": "Campo", - // "item.edit.metadata.headers.language": "Lang", - "item.edit.metadata.headers.language": "Lang", + // "home.description": "", + "home.description": "", - // "item.edit.metadata.headers.value": "Value", - "item.edit.metadata.headers.value": "Valor", + // "home.breadcrumbs": "Home", + "home.breadcrumbs": "Inicio", - // "item.edit.metadata.metadatafield.invalid": "Please choose a valid metadata field", - "item.edit.metadata.metadatafield.invalid": "Elija un campo de metadatos válido", + // "home.search-form.placeholder": "Search the repository ...", + "home.search-form.placeholder": "Buscar en el repositorio ...", - // "item.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", - "item.edit.metadata.notifications.discarded.content": "Tus cambios fueron descartados. ", + // "home.title": "Home", + "home.title": "Inicio", - // "item.edit.metadata.notifications.discarded.title": "Changed discarded", - "item.edit.metadata.notifications.discarded.title": "Cambiado descartado", + // "home.top-level-communities.head": "Communities in DSpace", + "home.top-level-communities.head": "Comunidades en DSpace", - // "item.edit.metadata.notifications.error.title": "An error occurred", - "item.edit.metadata.notifications.error.title": "Ocurrió un error", + // "home.top-level-communities.help": "Select a community to browse its collections.", + "home.top-level-communities.help": "Seleccione una comunidad para explorar sus colecciones.", - // "item.edit.metadata.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", - "item.edit.metadata.notifications.invalid.content": "Tus cambios no se guardaron. Asegúrese de que todos los campos sean válidos antes de guardar.", - // "item.edit.metadata.notifications.invalid.title": "Metadata invalid", - "item.edit.metadata.notifications.invalid.title": "Metadatos inválidos", - // "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": "Otro usuario ha cambiado el artículo en el que está trabajando actualmente. ", + // "info.end-user-agreement.accept": "I have read and I agree to the End User Agreement", + "info.end-user-agreement.accept": "He leído y acepto el Acuerdo de usuario final.", - // "item.edit.metadata.notifications.outdated.title": "Changed outdated", - "item.edit.metadata.notifications.outdated.title": "Cambiado desactualizado", + // "info.end-user-agreement.accept.error": "An error occurred accepting the End User Agreement", + "info.end-user-agreement.accept.error": "Se produjo un error al aceptar el Acuerdo de usuario final.", - // "item.edit.metadata.notifications.saved.content": "Your changes to this item's metadata were saved.", - "item.edit.metadata.notifications.saved.content": "Se guardaron sus cambios en los metadatos de este artículo.", + // "info.end-user-agreement.accept.success": "Successfully updated the End User Agreement", + "info.end-user-agreement.accept.success": "Se actualizó correctamente el Acuerdo de usuario final.", - // "item.edit.metadata.notifications.saved.title": "Metadata saved", - "item.edit.metadata.notifications.saved.title": "Metadatos guardados", + // "info.end-user-agreement.breadcrumbs": "End User Agreement", + "info.end-user-agreement.breadcrumbs": "Acuerdo de usuario final", - // "item.edit.metadata.reinstate-button": "Undo", - "item.edit.metadata.reinstate-button": "Deshacer", + // "info.end-user-agreement.buttons.cancel": "Cancel", + "info.end-user-agreement.buttons.cancel": "Cancelar", - // "item.edit.metadata.save-button": "Save", - "item.edit.metadata.save-button": "Guardar", + // "info.end-user-agreement.buttons.save": "Save", + "info.end-user-agreement.buttons.save": "Guardar", + // "info.end-user-agreement.head": "End User Agreement", + "info.end-user-agreement.head": "Acuerdo de usuario final", + // "info.end-user-agreement.title": "End User Agreement", + "info.end-user-agreement.title": "Acuerdo de usuario final", - // "item.edit.modify.overview.field": "Field", - "item.edit.modify.overview.field": "Campo", + // "info.privacy.breadcrumbs": "Privacy Statement", + "info.privacy.breadcrumbs": "Declaracion de privacidad", - // "item.edit.modify.overview.language": "Language", - "item.edit.modify.overview.language": "Idioma", + // "info.privacy.head": "Privacy Statement", + "info.privacy.head": "Declaracion de privacidad", - // "item.edit.modify.overview.value": "Value", - "item.edit.modify.overview.value": "Valor", + // "info.privacy.title": "Privacy Statement", + "info.privacy.title": "Declaracion de privacidad", + // "info.feedback.breadcrumbs": "Feedback", + "info.feedback.breadcrumbs": "Sugerencias", + // "info.feedback.head": "Feedback", + "info.feedback.head": "Sugerencias", - // "item.edit.move.cancel": "Back", - "item.edit.move.cancel": "atrás", + // "info.feedback.title": "Feedback", + "info.feedback.title": "Sugerencias", - // "item.edit.move.save-button": "Save", - "item.edit.move.save-button": "Guardar", + // "info.feedback.info": "Thanks for sharing your feedback about the DSpace system. Your comments are appreciated!", + "info.feedback.info": "Gracias por compartir sus sugerencias sobre el repositorio. ¡Tendremos en cuenta sus comentarios!", - // "item.edit.move.discard-button": "Discard", - "item.edit.move.discard-button": "Descarte", + // "info.feedback.email_help": "This address will be used to follow up on your feedback.", + "info.feedback.email_help": "Esta dirección se usará para el seguimiento de su sugerencia.", - // "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": "Seleccione la colección a la que desea mover este artículo. Para reducir la lista de colecciones mostradas, puede ingresar una consulta de búsqueda en el cuadro.", + // "info.feedback.send": "Send Feedback", + "info.feedback.send": "Envíar sugerencia", - // "item.edit.move.error": "An error occurred when attempting to move the item", - "item.edit.move.error": "Se produjo un error al intentar mover el artículo.", + // "info.feedback.comments": "Comments", + "info.feedback.comments": "Comentarios", - // "item.edit.move.head": "Move item: {{id}}", - "item.edit.move.head": "Mover artículo: {{ id }}", + // "info.feedback.email-label": "Your Email", + "info.feedback.email-label": "Su correo electrónico", - // "item.edit.move.inheritpolicies.checkbox": "Inherit policies", - "item.edit.move.inheritpolicies.checkbox": "Heredar políticas", + // "info.feedback.create.success" : "Feedback Sent Successfully!", + "info.feedback.create.success" : "Envío exitoso de sugerencia", - // "item.edit.move.inheritpolicies.description": "Inherit the default policies of the destination collection", - "item.edit.move.inheritpolicies.description": "Heredar las políticas predeterminadas de la colección de destino", + // "info.feedback.error.email.required" : "A valid email address is required", + "info.feedback.error.email.required" : "se requiere una dirección válida de correo electrónico", - // "item.edit.move.move": "Move", - "item.edit.move.move": "Moverse", + // "info.feedback.error.message.required" : "A comment is required", + "info.feedback.error.message.required" : "Se requiere un comentario", - // "item.edit.move.processing": "Moving...", - "item.edit.move.processing": "Moviente...", + // "info.feedback.page-label" : "Page", + "info.feedback.page-label" : "Página", - // "item.edit.move.search.placeholder": "Enter a search query to look for collections", - "item.edit.move.search.placeholder": "Ingrese una consulta de búsqueda para buscar colecciones", + // "info.feedback.page_help" : "Tha page related to your feedback", + "info.feedback.page_help" : "La página relacionada con su sugerencia", - // "item.edit.move.success": "The item has been moved successfully", - "item.edit.move.success": "El artículo se ha movido correctamente.", - // "item.edit.move.title": "Move item", - "item.edit.move.title": "Mover artículo", + // "item.alerts.private": "This item is non-discoverable", + "item.alerts.private": "Este artículo es privado", + // "item.alerts.withdrawn": "This item has been withdrawn", + "item.alerts.withdrawn": "Este artículo ha sido retirado", - // "item.edit.private.cancel": "Cancel", - "item.edit.private.cancel": "Cancelar", - // "item.edit.private.confirm": "Make it Private", - "item.edit.private.confirm": "Hacerlo privado", - // "item.edit.private.description": "Are you sure this item should be made private in the archive?", - "item.edit.private.description": "¿Estás seguro de que este artículo debe ser privado en el archivo?", + // "item.edit.authorizations.heading": "With this editor you can view and alter the policies of an item, plus alter policies of individual item components: bundles and bitstreams. Briefly, an item is a container of bundles, and bundles are containers of bitstreams. Containers usually have ADD/REMOVE/READ/WRITE policies, while bitstreams only have READ/WRITE policies.", + "item.edit.authorizations.heading": "Con este editor puede ver y modificar las políticas de un artículo, además de modificar las políticas de los componentes individuales del artículo: paquetes y archivos. Brevemente, un artículo es un contenedor de paquetes y los paquetes son contenedores de archivos. Los contenedores suelen tener políticas AGREGAR/ELIMINAR/LEER/ESCRIBIR, mientras que los archivos solo tienen políticas LEER/ESCRIBIR.", - // "item.edit.private.error": "An error occurred while making the item private", - "item.edit.private.error": "Se produjo un error al convertir el artículo en privado.", + // "item.edit.authorizations.title": "Edit item's Policies", + "item.edit.authorizations.title": "Editar las políticas del artículo", - // "item.edit.private.header": "Make item private: {{ id }}", - "item.edit.private.header": "Hacer que el artículo sea privado: {{ id }}", - // "item.edit.private.success": "The item is now private", - "item.edit.private.success": "El artículo ahora es privado", + // "item.badge.private": "Non-discoverable", + "item.badge.private": "Privado", + // "item.badge.withdrawn": "Withdrawn", + "item.badge.withdrawn": "Retirado", - // "item.edit.public.cancel": "Cancel", - "item.edit.public.cancel": "Cancelar", - // "item.edit.public.confirm": "Make it Public", - "item.edit.public.confirm": "Hágalo público", - // "item.edit.public.description": "Are you sure this item should be made public in the archive?", - "item.edit.public.description": "¿Estás seguro de que este artículo debe hacerse público en el archivo?", + // "item.bitstreams.upload.bundle": "Bundle", + "item.bitstreams.upload.bundle": "Bloque", - // "item.edit.public.error": "An error occurred while making the item public", - "item.edit.public.error": "Se produjo un error al hacer público el artículo.", + // "item.bitstreams.upload.bundle.placeholder": "Select a bundle or input new bundle name", + "item.bitstreams.upload.bundle.placeholder": "Seleccione un bloque o introduzca un nuevo nombre de bloque", - // "item.edit.public.header": "Make item public: {{ id }}", - "item.edit.public.header": "Hacer público el artículo: {{ id }}", + // "item.bitstreams.upload.bundle.new": "Create bundle", + "item.bitstreams.upload.bundle.new": "Crear bloque", - // "item.edit.public.success": "The item is now public", - "item.edit.public.success": "El artículo ahora es público", + // "item.bitstreams.upload.bundles.empty": "This item doesn\'t contain any bundles to upload a bitstream to.", + "item.bitstreams.upload.bundles.empty": "Este artículo no contiene ningún bloque para cargar un archivo.", + // "item.bitstreams.upload.cancel": "Cancel", + "item.bitstreams.upload.cancel": "Cancelar", + // "item.bitstreams.upload.drop-message": "Drop a file to upload", + "item.bitstreams.upload.drop-message": "Suelta un archivo para subir", - // "item.edit.reinstate.cancel": "Cancel", - "item.edit.reinstate.cancel": "Cancelar", + // "item.bitstreams.upload.item": "Item: ", + "item.bitstreams.upload.item": "Artículo:", - // "item.edit.reinstate.confirm": "Reinstate", - "item.edit.reinstate.confirm": "Reintegrar", + // "item.bitstreams.upload.notifications.bundle.created.content": "Successfully created new bundle.", + "item.bitstreams.upload.notifications.bundle.created.content": "Nuevo bloque creado con éxito.", - // "item.edit.reinstate.description": "Are you sure this item should be reinstated to the archive?", - "item.edit.reinstate.description": "¿Está seguro de que este artículo debe restablecerse en el archivo?", + // "item.bitstreams.upload.notifications.bundle.created.title": "Created bundle", + "item.bitstreams.upload.notifications.bundle.created.title": "Bloque creado", - // "item.edit.reinstate.error": "An error occurred while reinstating the item", - "item.edit.reinstate.error": "Ocurrió un error al reinstalar el artículo", + // "item.bitstreams.upload.notifications.upload.failed": "Upload failed. Please verify the content before retrying.", + "item.bitstreams.upload.notifications.upload.failed": "Subida fallida. Verifique el contenido antes de volver a intentarlo.", - // "item.edit.reinstate.header": "Reinstate item: {{ id }}", - "item.edit.reinstate.header": "Restablecer artículo: {{ id }}", + // "item.bitstreams.upload.title": "Upload bitstream", + "item.bitstreams.upload.title": "Subir archivo", - // "item.edit.reinstate.success": "The item was reinstated successfully", - "item.edit.reinstate.success": "El artículo se restableció correctamente", + // "item.edit.bitstreams.bundle.edit.buttons.upload": "Upload", + "item.edit.bitstreams.bundle.edit.buttons.upload": "Subir", - // "item.edit.relationships.discard-button": "Discard", - "item.edit.relationships.discard-button": "Descarte", + // "item.edit.bitstreams.bundle.displaying": "Currently displaying {{ amount }} bitstreams of {{ total }}.", + "item.edit.bitstreams.bundle.displaying": "Actualmente se muestran {{ amount }} archivos de {{ total }}.", - // "item.edit.relationships.edit.buttons.add": "Add", - "item.edit.relationships.edit.buttons.add": "Agregar", + // "item.edit.bitstreams.bundle.load.all": "Load all ({{ total }})", + "item.edit.bitstreams.bundle.load.all": "Cargar todo ({{ total }})", - // "item.edit.relationships.edit.buttons.remove": "Remove", - "item.edit.relationships.edit.buttons.remove": "Eliminar", + // "item.edit.bitstreams.bundle.load.more": "Load more", + "item.edit.bitstreams.bundle.load.more": "Carga más", - // "item.edit.relationships.edit.buttons.undo": "Undo changes", - "item.edit.relationships.edit.buttons.undo": "Deshacer cambios", + // "item.edit.bitstreams.bundle.name": "BUNDLE: {{ name }}", + "item.edit.bitstreams.bundle.name": "BLOQUE: {{ name }}", - // "item.edit.relationships.no-relationships": "No relationships", - "item.edit.relationships.no-relationships": "Sin relaciones", + // "item.edit.bitstreams.discard-button": "Discard", + "item.edit.bitstreams.discard-button": "Descarte", - // "item.edit.relationships.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", - "item.edit.relationships.notifications.discarded.content": "Tus cambios fueron descartados. ", + // "item.edit.bitstreams.edit.buttons.download": "Download", + "item.edit.bitstreams.edit.buttons.download": "Descargar", - // "item.edit.relationships.notifications.discarded.title": "Changes discarded", - "item.edit.relationships.notifications.discarded.title": "Cambios descartados", + // "item.edit.bitstreams.edit.buttons.drag": "Drag", + "item.edit.bitstreams.edit.buttons.drag": "Arrastrar", - // "item.edit.relationships.notifications.failed.title": "Error editing relationships", - "item.edit.relationships.notifications.failed.title": "Error al editar las relaciones", + // "item.edit.bitstreams.edit.buttons.edit": "Edit", + "item.edit.bitstreams.edit.buttons.edit": "Editar", - // "item.edit.relationships.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.relationships.notifications.outdated.content": "Otro usuario ha cambiado el artículo en el que está trabajando actualmente. ", + // "item.edit.bitstreams.edit.buttons.remove": "Remove", + "item.edit.bitstreams.edit.buttons.remove": "Eliminar", - // "item.edit.relationships.notifications.outdated.title": "Changes outdated", - "item.edit.relationships.notifications.outdated.title": "Cambios desactualizados", + // "item.edit.bitstreams.edit.buttons.undo": "Undo changes", + "item.edit.bitstreams.edit.buttons.undo": "Deshacer cambios", - // "item.edit.relationships.notifications.saved.content": "Your changes to this item's relationships were saved.", - "item.edit.relationships.notifications.saved.content": "Se guardaron sus cambios en las relaciones de este artículo.", + // "item.edit.bitstreams.empty": "This item doesn't contain any bitstreams. Click the upload button to create one.", + "item.edit.bitstreams.empty": "Este artículo no contiene ningún archivo. Haga clic en el botón de carga para crear uno.", - // "item.edit.relationships.notifications.saved.title": "Relationships saved", - "item.edit.relationships.notifications.saved.title": "Relaciones guardadas", + // "item.edit.bitstreams.headers.actions": "Actions", + "item.edit.bitstreams.headers.actions": "Comportamiento", - // "item.edit.relationships.reinstate-button": "Undo", - "item.edit.relationships.reinstate-button": "Deshacer", + // "item.edit.bitstreams.headers.bundle": "Bundle", + "item.edit.bitstreams.headers.bundle": "Manojo", - // "item.edit.relationships.save-button": "Save", - "item.edit.relationships.save-button": "Guardar", + // "item.edit.bitstreams.headers.description": "Description", + "item.edit.bitstreams.headers.description": "Descripción", - // "item.edit.relationships.no-entity-type": "Add 'dspace.entity.type' metadata to enable relationships for this item", - "item.edit.relationships.no-entity-type": "Agregue metadatos 'dspace.entity.type' para habilitar las relaciones para este artículo", + // "item.edit.bitstreams.headers.format": "Format", + "item.edit.bitstreams.headers.format": "Formato", + // "item.edit.bitstreams.headers.name": "Name", + "item.edit.bitstreams.headers.name": "Nombre", - // "item.edit.return": "Back", - "item.edit.return": "atrás", + // "item.edit.bitstreams.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", + "item.edit.bitstreams.notifications.discarded.content": "Tus cambios fueron descartados. ", + // "item.edit.bitstreams.notifications.discarded.title": "Changes discarded", + "item.edit.bitstreams.notifications.discarded.title": "Cambios descartados", - // "item.edit.tabs.bitstreams.head": "Bitstreams", - "item.edit.tabs.bitstreams.head": "Archivos", + // "item.edit.bitstreams.notifications.move.failed.title": "Error moving bitstreams", + "item.edit.bitstreams.notifications.move.failed.title": "Error al mover archivos", - // "item.edit.tabs.bitstreams.title": "Item Edit - Bitstreams", - "item.edit.tabs.bitstreams.title": "Edición de artículos: archivos", + // "item.edit.bitstreams.notifications.move.saved.content": "Your move changes to this item's bitstreams and bundles have been saved.", + "item.edit.bitstreams.notifications.move.saved.content": "Se han guardado los cambios de movimiento en los archivos y paquetes de este artículo.", - // "item.edit.tabs.curate.head": "Curate", - "item.edit.tabs.curate.head": "Cura", + // "item.edit.bitstreams.notifications.move.saved.title": "Move changes saved", + "item.edit.bitstreams.notifications.move.saved.title": "Mover cambios guardados", - // "item.edit.tabs.curate.title": "Item Edit - Curate", - "item.edit.tabs.curate.title": "Edición de artículo: seleccionar", + // "item.edit.bitstreams.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.bitstreams.notifications.outdated.content": "Otro usuario ha cambiado el artículo en el que está trabajando actualmente. ", - // "item.edit.tabs.metadata.head": "Metadata", - "item.edit.tabs.metadata.head": "Metadatos", + // "item.edit.bitstreams.notifications.outdated.title": "Changes outdated", + "item.edit.bitstreams.notifications.outdated.title": "Cambios desactualizados", - // "item.edit.tabs.metadata.title": "Item Edit - Metadata", - "item.edit.tabs.metadata.title": "Edición de artículos: metadatos", + // "item.edit.bitstreams.notifications.remove.failed.title": "Error deleting bitstream", + "item.edit.bitstreams.notifications.remove.failed.title": "Error al eliminar archivo", - // "item.edit.tabs.relationships.head": "Relationships", - "item.edit.tabs.relationships.head": "Relaciones", + // "item.edit.bitstreams.notifications.remove.saved.content": "Your removal changes to this item's bitstreams have been saved.", + "item.edit.bitstreams.notifications.remove.saved.content": "Se han guardado los cambios de eliminación de los archivos de este artículo.", - // "item.edit.tabs.relationships.title": "Item Edit - Relationships", - "item.edit.tabs.relationships.title": "Edición de artículo: relaciones", + // "item.edit.bitstreams.notifications.remove.saved.title": "Removal changes saved", + "item.edit.bitstreams.notifications.remove.saved.title": "Se guardaron los cambios de eliminación", - // "item.edit.tabs.status.buttons.authorizations.button": "Authorizations...", - "item.edit.tabs.status.buttons.authorizations.button": "Autorizaciones...", + // "item.edit.bitstreams.reinstate-button": "Undo", + "item.edit.bitstreams.reinstate-button": "Deshacer", - // "item.edit.tabs.status.buttons.authorizations.label": "Edit item's authorization policies", - "item.edit.tabs.status.buttons.authorizations.label": "Editar las políticas de autorización del artículo", + // "item.edit.bitstreams.save-button": "Save", + "item.edit.bitstreams.save-button": "Guardar", - // "item.edit.tabs.status.buttons.delete.button": "Permanently delete", - "item.edit.tabs.status.buttons.delete.button": "Borrar permanentemente", + // "item.edit.bitstreams.upload-button": "Upload", + "item.edit.bitstreams.upload-button": "Subir", - // "item.edit.tabs.status.buttons.delete.label": "Completely expunge item", - "item.edit.tabs.status.buttons.delete.label": "Eliminar completamente el artículo", - // "item.edit.tabs.status.buttons.mappedCollections.button": "Mapped collections", - "item.edit.tabs.status.buttons.mappedCollections.button": "Colecciones mapeadas", - // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", - "item.edit.tabs.status.buttons.mappedCollections.label": "Administrar colecciones mapeadas", + // "item.edit.delete.cancel": "Cancel", + "item.edit.delete.cancel": "Cancelar", - // "item.edit.tabs.status.buttons.move.button": "Move...", - "item.edit.tabs.status.buttons.move.button": "Moverse...", + // "item.edit.delete.confirm": "Delete", + "item.edit.delete.confirm": "Borrar", - // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", - "item.edit.tabs.status.buttons.move.label": "Mover artículo a otra colección", + // "item.edit.delete.description": "Are you sure this item should be completely deleted? Caution: At present, no tombstone would be left.", + "item.edit.delete.description": "¿Estás seguro de que este artículo debería eliminarse por completo? Precaución: en la actualidad, no se dejaría ninguna lápida.", - // "item.edit.tabs.status.buttons.private.button": "Make it private...", - "item.edit.tabs.status.buttons.private.button": "Hacerlo privado...", + // "item.edit.delete.error": "An error occurred while deleting the item", + "item.edit.delete.error": "Se produjo un error al eliminar el artículo.", - // "item.edit.tabs.status.buttons.private.label": "Make item private", - "item.edit.tabs.status.buttons.private.label": "Hacer que el artículo sea privado", + // "item.edit.delete.header": "Delete item: {{ id }}", + "item.edit.delete.header": "Eliminar artículo: {{ id }}", - // "item.edit.tabs.status.buttons.public.button": "Make it public...", - "item.edit.tabs.status.buttons.public.button": "Hacerlo público...", + // "item.edit.delete.success": "The item has been deleted", + "item.edit.delete.success": "El artículo ha sido eliminado", - // "item.edit.tabs.status.buttons.public.label": "Make item public", - "item.edit.tabs.status.buttons.public.label": "Hacer público el artículo", + // "item.edit.head": "Edit Item", + "item.edit.head": "Editar artículo", - // "item.edit.tabs.status.buttons.reinstate.button": "Reinstate...", - "item.edit.tabs.status.buttons.reinstate.button": "Reintegrar...", + // "item.edit.breadcrumbs": "Edit Item", + "item.edit.breadcrumbs": "Editar artículo", - // "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", - "item.edit.tabs.status.buttons.reinstate.label": "Restablecer el artículo en el repositorio", + // "item.edit.tabs.disabled.tooltip": "You're not authorized to access this tab", + "item.edit.tabs.disabled.tooltip": "No tienes autorización para acceder a esta pestaña", - // "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", - "item.edit.tabs.status.buttons.unauthorized": "No estás autorizado para realizar esta acción.", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", - "item.edit.tabs.status.buttons.withdraw.button": "Retirar...", + // "item.edit.tabs.mapper.head": "Collection Mapper", + "item.edit.tabs.mapper.head": "Mapeador de colecciones", - // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", - "item.edit.tabs.status.buttons.withdraw.label": "Retirar artículo del repositorio", + // "item.edit.tabs.item-mapper.title": "Item Edit - Collection Mapper", + "item.edit.tabs.item-mapper.title": "Edición de artículos - Mapeador de colecciones", - // "item.edit.tabs.status.description": "Welcome to the item management page. From here you can withdraw, reinstate, move or delete the item. You may also update or add new metadata / bitstreams on the other tabs.", - "item.edit.tabs.status.description": "Bienvenido a la página de administración de artículos. Desde aquí puede retirar, restablecer, mover o eliminar el artículo. También puede actualizar o agregar nuevos metadatos / archivos en las otras pestañas.", + // "item.edit.item-mapper.buttons.add": "Map item to selected collections", + "item.edit.item-mapper.buttons.add": "Asignar artículo a colecciones seleccionadas", - // "item.edit.tabs.status.head": "Status", - "item.edit.tabs.status.head": "Estado", + // "item.edit.item-mapper.buttons.remove": "Remove item's mapping for selected collections", + "item.edit.item-mapper.buttons.remove": "Eliminar la asignación de artículos para las colecciones seleccionadas", - // "item.edit.tabs.status.labels.handle": "Handle", - "item.edit.tabs.status.labels.handle": "Resolver", + // "item.edit.item-mapper.cancel": "Cancel", + "item.edit.item-mapper.cancel": "Cancelar", - // "item.edit.tabs.status.labels.id": "Item Internal ID", - "item.edit.tabs.status.labels.id": "ID interno del artículo", + // "item.edit.item-mapper.description": "This is the item mapper tool that allows administrators to map this item to other collections. You can search for collections and map them, or browse the list of collections the item is currently mapped to.", + "item.edit.item-mapper.description": "Esta es la herramienta de asignación de artículos que permite a los administradores asignar este artículo a otras colecciones. Puede buscar colecciones y mapearlas, o explorar la lista de colecciones a las que el artículo está mapeado actualmente.", - // "item.edit.tabs.status.labels.itemPage": "Item Page", - "item.edit.tabs.status.labels.itemPage": "Página del artículo", + // "item.edit.item-mapper.head": "Item Mapper - Map Item to Collections", + "item.edit.item-mapper.head": "Asignador de artículos: asigna artículos a colecciones", - // "item.edit.tabs.status.labels.lastModified": "Last Modified", - "item.edit.tabs.status.labels.lastModified": "Última modificación", + // "item.edit.item-mapper.item": "Item: \"{{name}}\"", + "item.edit.item-mapper.item": "Artículo: \"{{ name }}\"", - // "item.edit.tabs.status.title": "Item Edit - Status", - "item.edit.tabs.status.title": "Edición de artículo: estado", + // "item.edit.item-mapper.no-search": "Please enter a query to search", + "item.edit.item-mapper.no-search": "Introduzca una consulta para buscar", - // "item.edit.tabs.versionhistory.head": "Version History", - "item.edit.tabs.versionhistory.head": "Historial de versiones", + // "item.edit.item-mapper.notifications.add.error.content": "Errors occurred for mapping of item to {{amount}} collections.", + "item.edit.item-mapper.notifications.add.error.content": "Se produjeron errores al mapear el artículo a {{ amount }} colecciones.", - // "item.edit.tabs.versionhistory.title": "Item Edit - Version History", - "item.edit.tabs.versionhistory.title": "Edición de artículos: historial de versiones", + // "item.edit.item-mapper.notifications.add.error.head": "Mapping errors", + "item.edit.item-mapper.notifications.add.error.head": "Errores de mapeo", - // "item.edit.tabs.versionhistory.under-construction": "Editing or adding new versions is not yet possible in this user interface.", - "item.edit.tabs.versionhistory.under-construction": "Aún no es posible editar o agregar nuevas versiones en esta interfaz de usuario.", + // "item.edit.item-mapper.notifications.add.success.content": "Successfully mapped item to {{amount}} collections.", + "item.edit.item-mapper.notifications.add.success.content": "Se asignó correctamente el artículo a {{ amount }} colecciones.", - // "item.edit.tabs.view.head": "View Item", - "item.edit.tabs.view.head": "Ver artículo", + // "item.edit.item-mapper.notifications.add.success.head": "Mapping completed", + "item.edit.item-mapper.notifications.add.success.head": "Mapeo completado", - // "item.edit.tabs.view.title": "Item Edit - View", - "item.edit.tabs.view.title": "Edición de artículo - Ver", + // "item.edit.item-mapper.notifications.remove.error.content": "Errors occurred for the removal of the mapping to {{amount}} collections.", + "item.edit.item-mapper.notifications.remove.error.content": "Se produjeron errores para la eliminación de la asignación a {{ amount }} colecciones.", + // "item.edit.item-mapper.notifications.remove.error.head": "Removal of mapping errors", + "item.edit.item-mapper.notifications.remove.error.head": "Eliminación de errores de mapeo", + // "item.edit.item-mapper.notifications.remove.success.content": "Successfully removed mapping of item to {{amount}} collections.", + "item.edit.item-mapper.notifications.remove.success.content": "Se eliminó correctamente la asignación del artículo a {{ amount }} colecciones.", - // "item.edit.withdraw.cancel": "Cancel", - "item.edit.withdraw.cancel": "Cancelar", + // "item.edit.item-mapper.notifications.remove.success.head": "Removal of mapping completed", + "item.edit.item-mapper.notifications.remove.success.head": "Eliminación del mapeo completada", - // "item.edit.withdraw.confirm": "Withdraw", - "item.edit.withdraw.confirm": "Retirar", + // "item.edit.item-mapper.search-form.placeholder": "Search collections...", + "item.edit.item-mapper.search-form.placeholder": "Buscar colecciones...", - // "item.edit.withdraw.description": "Are you sure this item should be withdrawn from the archive?", - "item.edit.withdraw.description": "¿Está seguro de que este artículo debe retirarse del archivo?", + // "item.edit.item-mapper.tabs.browse": "Browse mapped collections", + "item.edit.item-mapper.tabs.browse": "Examinar colecciones mapeadas", - // "item.edit.withdraw.error": "An error occurred while withdrawing the item", - "item.edit.withdraw.error": "Ocurrió un error al retirar el artículo", + // "item.edit.item-mapper.tabs.map": "Map new collections", + "item.edit.item-mapper.tabs.map": "Mapear nuevas colecciones", - // "item.edit.withdraw.header": "Withdraw item: {{ id }}", - "item.edit.withdraw.header": "Retirar artículo: {{ id }}", - // "item.edit.withdraw.success": "The item was withdrawn successfully", - "item.edit.withdraw.success": "El artículo se retiró con éxito", + // "item.edit.metadata.add-button": "Add", + "item.edit.metadata.add-button": "Agregar", + // "item.edit.metadata.discard-button": "Discard", + "item.edit.metadata.discard-button": "Descarte", - // "item.listelement.badge": "Item", - "item.listelement.badge": "Artículo", + // "item.edit.metadata.edit.buttons.edit": "Edit", + "item.edit.metadata.edit.buttons.edit": "Editar", - // "item.page.description": "Description", - "item.page.description": "Descripción", + // "item.edit.metadata.edit.buttons.remove": "Remove", + "item.edit.metadata.edit.buttons.remove": "Eliminar", - // "item.page.journal-issn": "Journal ISSN", - "item.page.journal-issn": "Revista ISSN", + // "item.edit.metadata.edit.buttons.undo": "Undo changes", + "item.edit.metadata.edit.buttons.undo": "Deshacer cambios", - // "item.page.journal-title": "Journal Title", - "item.page.journal-title": "Título de la revista", + // "item.edit.metadata.edit.buttons.unedit": "Stop editing", + "item.edit.metadata.edit.buttons.unedit": "Dejar de editar", - // "item.page.publisher": "Publisher", - "item.page.publisher": "Editor", + // "item.edit.metadata.empty": "The item currently doesn't contain any metadata. Click Add to start adding a metadata value.", + "item.edit.metadata.empty": "Actualmente, el artículo no contiene metadatos. Haga clic en Agregar para comenzar a agregar un valor de metadatos.", - // "item.page.titleprefix": "Item: ", - "item.page.titleprefix": "Artículo:", + // "item.edit.metadata.headers.edit": "Edit", + "item.edit.metadata.headers.edit": "Editar", - // "item.page.volume-title": "Volume Title", - "item.page.volume-title": "Título del volumen", + // "item.edit.metadata.headers.field": "Field", + "item.edit.metadata.headers.field": "Campo", - // "item.search.results.head": "Item Search Results", - "item.search.results.head": "Resultados de la búsqueda de artículos", + // "item.edit.metadata.headers.language": "Lang", + "item.edit.metadata.headers.language": "Lang", - // "item.search.title": "Item Search", - "item.search.title": "Búsqueda de artículos", + // "item.edit.metadata.headers.value": "Value", + "item.edit.metadata.headers.value": "Valor", + // "item.edit.metadata.metadatafield.invalid": "Please choose a valid metadata field", + "item.edit.metadata.metadatafield.invalid": "Elija un campo de metadatos válido", + // "item.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", + "item.edit.metadata.notifications.discarded.content": "Tus cambios fueron descartados. ", - // "item.page.abstract": "Abstract", - "item.page.abstract": "Abstracto", + // "item.edit.metadata.notifications.discarded.title": "Changed discarded", + "item.edit.metadata.notifications.discarded.title": "Cambiado descartado", - // "item.page.author": "Authors", - "item.page.author": "Autores", + // "item.edit.metadata.notifications.error.title": "An error occurred", + "item.edit.metadata.notifications.error.title": "Ocurrió un error", - // "item.page.citation": "Citation", - "item.page.citation": "Citación", + // "item.edit.metadata.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", + "item.edit.metadata.notifications.invalid.content": "Tus cambios no se guardaron. Asegúrese de que todos los campos sean válidos antes de guardar.", - // "item.page.collections": "Collections", - "item.page.collections": "Colecciones", + // "item.edit.metadata.notifications.invalid.title": "Metadata invalid", + "item.edit.metadata.notifications.invalid.title": "Metadatos inválidos", - // "item.page.collections.loading": "Loading...", - "item.page.collections.loading": "Cargando...", + // "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": "Otro usuario ha cambiado el artículo en el que está trabajando actualmente. ", - // "item.page.collections.load-more": "Load more", - "item.page.collections.load-more": "Cargar más", + // "item.edit.metadata.notifications.outdated.title": "Changed outdated", + "item.edit.metadata.notifications.outdated.title": "Cambiado desactualizado", - // "item.page.date": "Date", - "item.page.date": "Fecha", + // "item.edit.metadata.notifications.saved.content": "Your changes to this item's metadata were saved.", + "item.edit.metadata.notifications.saved.content": "Se guardaron sus cambios en los metadatos de este artículo.", - // "item.page.edit": "Edit this item", - "item.page.edit": "Editar este artículo", + // "item.edit.metadata.notifications.saved.title": "Metadata saved", + "item.edit.metadata.notifications.saved.title": "Metadatos guardados", - // "item.page.files": "Files", - "item.page.files": "Archivos", + // "item.edit.metadata.reinstate-button": "Undo", + "item.edit.metadata.reinstate-button": "Deshacer", - // "item.page.filesection.description": "Description:", - "item.page.filesection.description": "Descripción:", + // "item.edit.metadata.save-button": "Save", + "item.edit.metadata.save-button": "Guardar", - // "item.page.filesection.download": "Download", - "item.page.filesection.download": "Descargar", - // "item.page.filesection.format": "Format:", - "item.page.filesection.format": "Formato:", - // "item.page.filesection.name": "Name:", - "item.page.filesection.name": "Nombre:", + // "item.edit.modify.overview.field": "Field", + "item.edit.modify.overview.field": "Campo", - // "item.page.filesection.size": "Size:", - "item.page.filesection.size": "Tamaño:", + // "item.edit.modify.overview.language": "Language", + "item.edit.modify.overview.language": "Idioma", - // "item.page.journal.search.title": "Articles in this journal", - "item.page.journal.search.title": "Artículos de esta revista", + // "item.edit.modify.overview.value": "Value", + "item.edit.modify.overview.value": "Valor", - // "item.page.link.full": "Full item page", - "item.page.link.full": "Página completa del artículo", - // "item.page.link.simple": "Simple item page", - "item.page.link.simple": "Página de artículo simple", - // "item.page.person.search.title": "Articles by this author", - "item.page.person.search.title": "Artículos de este autor", + // "item.edit.move.cancel": "Back", + "item.edit.move.cancel": "Atrás", - // "item.page.related-items.view-more": "Show {{ amount }} more", - "item.page.related-items.view-more": "Mostrar {{ amount }} más", + // "item.edit.move.save-button": "Save", + "item.edit.move.save-button": "Guardar", - // "item.page.related-items.view-less": "Hide last {{ amount }}", - "item.page.related-items.view-less": "Ocultar la última {{ amount }}", + // "item.edit.move.discard-button": "Discard", + "item.edit.move.discard-button": "Descarte", - // "item.page.relationships.isAuthorOfPublication": "Publications", - "item.page.relationships.isAuthorOfPublication": "Publicaciones", + // "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": "Seleccione la colección a la que desea mover este artículo. Para reducir la lista de colecciones mostradas, puede introducir una consulta de búsqueda en el cuadro.", - // "item.page.relationships.isJournalOfPublication": "Publications", - "item.page.relationships.isJournalOfPublication": "Publicaciones", + // "item.edit.move.error": "An error occurred when attempting to move the item", + "item.edit.move.error": "Se produjo un error al intentar mover el artículo.", - // "item.page.relationships.isOrgUnitOfPerson": "Authors", - "item.page.relationships.isOrgUnitOfPerson": "Autores", + // "item.edit.move.head": "Move item: {{id}}", + "item.edit.move.head": "Mover artículo: {{ id }}", - // "item.page.relationships.isOrgUnitOfProject": "Research Projects", - "item.page.relationships.isOrgUnitOfProject": "Proyectos de investigación", + // "item.edit.move.inheritpolicies.checkbox": "Inherit policies", + "item.edit.move.inheritpolicies.checkbox": "Heredar políticas", - // "item.page.subject": "Keywords", - "item.page.subject": "Palabras clave", + // "item.edit.move.inheritpolicies.description": "Inherit the default policies of the destination collection", + "item.edit.move.inheritpolicies.description": "Heredar las políticas predeterminadas de la colección de destino", - // "item.page.uri": "URI", - "item.page.uri": "URI", + // "item.edit.move.move": "Move", + "item.edit.move.move": "Moverse", - // "item.page.bitstreams.view-more": "Show more", - "item.page.bitstreams.view-more": "Mostrar más", + // "item.edit.move.processing": "Moving...", + "item.edit.move.processing": "Moviente...", - // "item.page.bitstreams.collapse": "Collapse", - "item.page.bitstreams.collapse": "Colapso", + // "item.edit.move.search.placeholder": "Enter a search query to look for collections", + "item.edit.move.search.placeholder": "Introduzca una consulta de búsqueda para buscar colecciones", - // "item.page.filesection.original.bundle" : "Original bundle", - "item.page.filesection.original.bundle": "Paquete original", + // "item.edit.move.success": "The item has been moved successfully", + "item.edit.move.success": "El ítem se ha movido correctamente.", - // "item.page.filesection.license.bundle" : "License bundle", - "item.page.filesection.license.bundle": "Paquete de licencias", + // "item.edit.move.title": "Move item", + "item.edit.move.title": "Mover ítem", - // "item.page.return": "Back", - "item.page.return": "atrás", - // "item.preview.dc.identifier.uri": "Identifier:", - "item.preview.dc.identifier.uri": "Identificador:", - // "item.preview.dc.contributor.author": "Authors:", - "item.preview.dc.contributor.author": "Autores:", + // "item.edit.private.cancel": "Cancel", + "item.edit.private.cancel": "Cancelar", - // "item.preview.dc.date.issued": "Published date:", - "item.preview.dc.date.issued": "Fecha de Publicación:", + // "item.edit.private.confirm": "Make it non-discoverable", + "item.edit.private.confirm": "Convertirlo en privado", - // "item.preview.dc.description.abstract": "Abstract:", - "item.preview.dc.description.abstract": "Abstracto:", + // "item.edit.private.description": "Are you sure this item should be made non-discoverable in the archive?", + "item.edit.private.description": "¿Está seguro de que este ítem debe convertirse en privado?", - // "item.preview.dc.identifier.other": "Other identifier:", - "item.preview.dc.identifier.other": "Otro identificador:", + // "item.edit.private.error": "An error occurred while making the item non-discoverable", + "item.edit.private.error": "Se produjo un error al convertir el ítem en privado.", - // "item.preview.dc.language.iso": "Language:", - "item.preview.dc.language.iso": "Idioma:", + // "item.edit.private.header": "Make item non-discoverable: {{ id }}", + "item.edit.private.header": "Convertir el ítem en privado {{ id }}", - // "item.preview.dc.subject": "Subjects:", - "item.preview.dc.subject": "Asignaturas:", + // "item.edit.private.success": "The item is now non-discoverable", + "item.edit.private.success": "El ítem ahora es privado", - // "item.preview.dc.title": "Title:", - "item.preview.dc.title": "Título:", - // "item.preview.person.familyName": "Surname:", - "item.preview.person.familyName": "Apellido:", - // "item.preview.person.givenName": "Name:", - "item.preview.person.givenName": "Nombre:", + // "item.edit.public.cancel": "Cancel", + "item.edit.public.cancel": "Cancelar", - // "item.preview.person.identifier.orcid": "ORCID:", - "item.preview.person.identifier.orcid": "ORCID:", + // "item.edit.public.confirm": "Make it discoverable", + "item.edit.public.confirm": "Convertirlo en público", - // "item.preview.project.funder.name": "Funder:", - "item.preview.project.funder.name": "Financiador:", + // "item.edit.public.description": "Are you sure this item should be made discoverable in the archive?", + "item.edit.public.description": "¿Está seguro de que este ítem debe convertirse en público?", - // "item.preview.project.funder.identifier": "Funder Identifier:", - "item.preview.project.funder.identifier": "Identificador del financiador:", + // "item.edit.public.error": "An error occurred while making the item discoverable", + "item.edit.public.error": "Se produjo un error al convertir el ítem en público.", - // "item.preview.oaire.awardNumber": "Funding ID:", - "item.preview.oaire.awardNumber": "ID de financiación:", + // "item.edit.public.header": "Make item discoverable: {{ id }}", + "item.edit.public.header": "Convertir el ítem en público{{ id }}", - // "item.preview.dc.title.alternative": "Acronym:", - "item.preview.dc.title.alternative": "Acrónimo:", + // "item.edit.public.success": "The item is now discoverable", + "item.edit.public.success": "El ítem ahora es público", - // "item.preview.dc.coverage.spatial": "Jurisdiction:", - "item.preview.dc.coverage.spatial": "Jurisdicción:", - // "item.preview.oaire.fundingStream": "Funding Stream:", - "item.preview.oaire.fundingStream": "Corriente de financiación:", + // "item.edit.reinstate.cancel": "Cancel", + "item.edit.reinstate.cancel": "Cancelar", + // "item.edit.reinstate.confirm": "Reinstate", + "item.edit.reinstate.confirm": "Reintegrar", - // "item.select.confirm": "Confirm selected", - "item.select.confirm": "Confirmar seleccionado", + // "item.edit.reinstate.description": "Are you sure this item should be reinstated to the archive?", + "item.edit.reinstate.description": "¿Está seguro de que este ítem debe reintegrarse?", - // "item.select.empty": "No items to show", - "item.select.empty": "No hay artículos para mostrar", + // "item.edit.reinstate.error": "An error occurred while reinstating the item", + "item.edit.reinstate.error": "Ocurrió un error al reintegrar el ítem", - // "item.select.table.author": "Author", - "item.select.table.author": "Autor", + // "item.edit.reinstate.header": "Reinstate item: {{ id }}", + "item.edit.reinstate.header": "Reintegrar el ítem: {{ id }}", - // "item.select.table.collection": "Collection", - "item.select.table.collection": "Colección", + // "item.edit.reinstate.success": "The item was reinstated successfully", + "item.edit.reinstate.success": "El ítem se reintegró correctamente", - // "item.select.table.title": "Title", - "item.select.table.title": "Título", - // "item.version.history.empty": "There are no other versions for this item yet.", - "item.version.history.empty": "Aún no hay otras versiones para este artículo.", + // "item.edit.relationships.discard-button": "Discard", + "item.edit.relationships.discard-button": "Descartar", - // "item.version.history.head": "Version History", - "item.version.history.head": "Historial de versiones", + // "item.edit.relationships.edit.buttons.add": "Add", + "item.edit.relationships.edit.buttons.add": "Añadir", - // "item.version.history.return": "Back", - "item.version.history.return": "atrás", + // "item.edit.relationships.edit.buttons.remove": "Remove", + "item.edit.relationships.edit.buttons.remove": "Eliminar", - // "item.version.history.selected": "Selected version", - "item.version.history.selected": "Versión seleccionada", + // "item.edit.relationships.edit.buttons.undo": "Undo changes", + "item.edit.relationships.edit.buttons.undo": "Deshacer cambios", - // "item.version.history.table.version": "Version", - "item.version.history.table.version": "Versión", + // "item.edit.relationships.no-relationships": "No relationships", + "item.edit.relationships.no-relationships": "Sin relaciones", - // "item.version.history.table.item": "Item", - "item.version.history.table.item": "Artículo", + // "item.edit.relationships.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", + "item.edit.relationships.notifications.discarded.content": "Sus cambios fueron descartados. Para recuperar sus cambios pulse el botón 'Deshacer' ", - // "item.version.history.table.editor": "Editor", - "item.version.history.table.editor": "Editor", + // "item.edit.relationships.notifications.discarded.title": "Changes discarded", + "item.edit.relationships.notifications.discarded.title": "Cambios descartados", - // "item.version.history.table.date": "Date", - "item.version.history.table.date": "Fecha", + // "item.edit.relationships.notifications.failed.title": "Error editing relationships", + "item.edit.relationships.notifications.failed.title": "Error al editar las relaciones", - // "item.version.history.table.summary": "Summary", - "item.version.history.table.summary": "Resumen", + // "item.edit.relationships.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.relationships.notifications.outdated.content": "Otro usuario ha cambiado el ítem en el que está trabajando actualmente. Sus cambios se descartarán para prevenir conflictos ", + // "item.edit.relationships.notifications.outdated.title": "Changes outdated", + "item.edit.relationships.notifications.outdated.title": "Cambios desactualizados", + // "item.edit.relationships.notifications.saved.content": "Your changes to this item's relationships were saved.", + "item.edit.relationships.notifications.saved.content": "Se guardaron sus cambios en las relaciones de este ítem.", - // "item.version.notice": "This is not the latest version of this item. The latest version can be found here.", - "item.version.notice": "Esta no es la última versión de este artículo. La última versión se puede encontrar aquí .", + // "item.edit.relationships.notifications.saved.title": "Relationships saved", + "item.edit.relationships.notifications.saved.title": "Relaciones guardadas", + // "item.edit.relationships.reinstate-button": "Undo", + "item.edit.relationships.reinstate-button": "Deshacer", + // "item.edit.relationships.save-button": "Save", + "item.edit.relationships.save-button": "Guardar", - // "journal.listelement.badge": "Journal", - "journal.listelement.badge": "diario", + // "item.edit.relationships.no-entity-type": "Add 'dspace.entity.type' metadata to enable relationships for this item", + "item.edit.relationships.no-entity-type": "Agregue metadatos 'dspace.entity.type' para habilitar las relaciones para este artículo", - // "journal.page.description": "Description", - "journal.page.description": "Descripción", - // "journal.page.edit": "Edit this item", - "journal.page.edit": "Editar este artículo", + // "item.edit.return": "Back", + "item.edit.return": "Atrás", - // "journal.page.editor": "Editor-in-Chief", - "journal.page.editor": "Editor en jefe", - // "journal.page.issn": "ISSN", - "journal.page.issn": "ISSN", + // "item.edit.tabs.bitstreams.head": "Bitstreams", + "item.edit.tabs.bitstreams.head": "Archivos", - // "journal.page.publisher": "Publisher", - "journal.page.publisher": "Editor", + // "item.edit.tabs.bitstreams.title": "Item Edit - Bitstreams", + "item.edit.tabs.bitstreams.title": "Edición de ítems: archivos", - // "journal.page.titleprefix": "Journal: ", - "journal.page.titleprefix": "Diario:", + // "item.edit.tabs.curate.head": "Curate", + "item.edit.tabs.curate.head": "Curar", - // "journal.search.results.head": "Journal Search Results", - "journal.search.results.head": "Resultados de la búsqueda de revistas", + // "item.edit.tabs.curate.title": "Item Edit - Curate", + "item.edit.tabs.curate.title": "Edición de ítem: Curar", - // "journal.search.title": "Journal Search", - "journal.search.title": "Búsqueda de revistas", + // "item.edit.tabs.metadata.head": "Metadata", + "item.edit.tabs.metadata.head": "Metadatos", + // "item.edit.tabs.metadata.title": "Item Edit - Metadata", + "item.edit.tabs.metadata.title": "Edición de ítem: Metadatos", + // "item.edit.tabs.relationships.head": "Relationships", + "item.edit.tabs.relationships.head": "Relaciones", - // "journalissue.listelement.badge": "Journal Issue", - "journalissue.listelement.badge": "Número de la revista", + // "item.edit.tabs.relationships.title": "Item Edit - Relationships", + "item.edit.tabs.relationships.title": "Edición de ítem: Relaciones", - // "journalissue.page.description": "Description", - "journalissue.page.description": "Descripción", + // "item.edit.tabs.status.buttons.authorizations.button": "Authorizations...", + "item.edit.tabs.status.buttons.authorizations.button": "Autorizaciones...", - // "journalissue.page.edit": "Edit this item", - "journalissue.page.edit": "Editar este artículo", + // "item.edit.tabs.status.buttons.authorizations.label": "Edit item's authorization policies", + "item.edit.tabs.status.buttons.authorizations.label": "Editar privilegios de autorización del ítem:", - // "journalissue.page.issuedate": "Issue Date", - "journalissue.page.issuedate": "Fecha de asunto", + // "item.edit.tabs.status.buttons.delete.button": "Permanently delete", + "item.edit.tabs.status.buttons.delete.button": "Borrar permanentemente", - // "journalissue.page.journal-issn": "Journal ISSN", - "journalissue.page.journal-issn": "Revista ISSN", + // "item.edit.tabs.status.buttons.delete.label": "Completely expunge item", + "item.edit.tabs.status.buttons.delete.label": "Borrar completamente el ítem:", - // "journalissue.page.journal-title": "Journal Title", - "journalissue.page.journal-title": "Título de la revista", + // "item.edit.tabs.status.buttons.mappedCollections.button": "Mapped collections", + "item.edit.tabs.status.buttons.mappedCollections.button": "Colecciones mapeadas", - // "journalissue.page.keyword": "Keywords", - "journalissue.page.keyword": "Palabras clave", + // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", + "item.edit.tabs.status.buttons.mappedCollections.label": "Administrar colecciones mapeadas", - // "journalissue.page.number": "Number", - "journalissue.page.number": "Número", + // "item.edit.tabs.status.buttons.move.button": "Move...", + "item.edit.tabs.status.buttons.move.button": "Mover...", - // "journalissue.page.titleprefix": "Journal Issue: ", - "journalissue.page.titleprefix": "Número de la revista:", + // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", + "item.edit.tabs.status.buttons.move.label": "Mover ítem a otra colección", + // "item.edit.tabs.status.buttons.private.button": "Make it non-discoverable...", + "item.edit.tabs.status.buttons.private.button": "Convertirlo en privado...", + // "item.edit.tabs.status.buttons.private.label": "Make item non-discoverable", + "item.edit.tabs.status.buttons.private.label": "Convertir el ítem en privado", - // "journalvolume.listelement.badge": "Journal Volume", - "journalvolume.listelement.badge": "Volumen de la revista", + // "item.edit.tabs.status.buttons.public.button": "Make it discoverable...", + "item.edit.tabs.status.buttons.public.button": "Convertirlo en público...", - // "journalvolume.page.description": "Description", - "journalvolume.page.description": "Descripción", + // "item.edit.tabs.status.buttons.public.label": "Make item discoverable", + "item.edit.tabs.status.buttons.public.label": "Convertir el ítem en público", - // "journalvolume.page.edit": "Edit this item", - "journalvolume.page.edit": "Editar este artículo", + // "item.edit.tabs.status.buttons.reinstate.button": "Reinstate...", + "item.edit.tabs.status.buttons.reinstate.button": "Reintegrar...", - // "journalvolume.page.issuedate": "Issue Date", - "journalvolume.page.issuedate": "Fecha de asunto", + // "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", + "item.edit.tabs.status.buttons.reinstate.label": "Restablecer el ítem en el repositorio", - // "journalvolume.page.titleprefix": "Journal Volume: ", - "journalvolume.page.titleprefix": "Volumen de la revista:", + // "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", + "item.edit.tabs.status.buttons.unauthorized": "No estás autorizado para realizar esta acción.", - // "journalvolume.page.volume": "Volume", - "journalvolume.page.volume": "Volumen", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", + "item.edit.tabs.status.buttons.withdraw.button": "Retirar...", + // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", + "item.edit.tabs.status.buttons.withdraw.label": "Retirar ítem del repositorio", + // "item.edit.tabs.status.description": "Welcome to the item management page. From here you can withdraw, reinstate, move or delete the item. You may also update or add new metadata / bitstreams on the other tabs.", + "item.edit.tabs.status.description": "Bienvenido a la página de administración de artículos. Desde aquí puede retirar, restablecer, mover o eliminar el ítem. También puede actualizar o agregar nuevos metadatos / archivos en las otras pestañas.", - // "loading.bitstream": "Loading bitstream...", - "loading.bitstream": "Cargando archivo...", + // "item.edit.tabs.status.head": "Status", + "item.edit.tabs.status.head": "Estado", - // "loading.bitstreams": "Loading bitstreams...", - "loading.bitstreams": "Cargando archivos...", + // "item.edit.tabs.status.labels.handle": "Handle", + "item.edit.tabs.status.labels.handle": "Handle", - // "loading.browse-by": "Loading items...", - "loading.browse-by": "Cargando artículos...", + // "item.edit.tabs.status.labels.id": "Item Internal ID", + "item.edit.tabs.status.labels.id": "ID interno del ítem", - // "loading.browse-by-page": "Loading page...", - "loading.browse-by-page": "Cargando página...", + // "item.edit.tabs.status.labels.itemPage": "Item Page", + "item.edit.tabs.status.labels.itemPage": "Página del ítem", - // "loading.collection": "Loading collection...", - "loading.collection": "Cargando colección...", + // "item.edit.tabs.status.labels.lastModified": "Last Modified", + "item.edit.tabs.status.labels.lastModified": "Última modificación", - // "loading.collections": "Loading collections...", - "loading.collections": "Cargando colecciones...", + // "item.edit.tabs.status.title": "Item Edit - Status", + "item.edit.tabs.status.title": "Edición de ítem: Estado", - // "loading.content-source": "Loading content source...", - "loading.content-source": "Cargando fuente de contenido...", + // "item.edit.tabs.versionhistory.head": "Version History", + "item.edit.tabs.versionhistory.head": "Historial de versiones", - // "loading.community": "Loading community...", - "loading.community": "Cargando comunidad...", + // "item.edit.tabs.versionhistory.title": "Item Edit - Version History", + "item.edit.tabs.versionhistory.title": "Edición de ítems: Historial de versiones", - // "loading.default": "Loading...", - "loading.default": "Cargando...", + // "item.edit.tabs.versionhistory.under-construction": "Editing or adding new versions is not yet possible in this user interface.", + "item.edit.tabs.versionhistory.under-construction": "Aún no es posible editar o agregar nuevas versiones en esta interfaz de usuario.", - // "loading.item": "Loading item...", - "loading.item": "Cargando artículo...", + // "item.edit.tabs.view.head": "View Item", + "item.edit.tabs.view.head": "Ver ítem", - // "loading.items": "Loading items...", - "loading.items": "Cargando artículos...", + // "item.edit.tabs.view.title": "Item Edit - View", + "item.edit.tabs.view.title": "Edición de ítem - Ver", - // "loading.mydspace-results": "Loading items...", - "loading.mydspace-results": "Cargando artículos...", - // "loading.objects": "Loading...", - "loading.objects": "Cargando...", - // "loading.recent-submissions": "Loading recent submissions...", - "loading.recent-submissions": "Cargando envíos recientes...", + // "item.edit.withdraw.cancel": "Cancel", + "item.edit.withdraw.cancel": "Cancelar", - // "loading.search-results": "Loading search results...", - "loading.search-results": "Cargando resultados de búsqueda...", + // "item.edit.withdraw.confirm": "Withdraw", + "item.edit.withdraw.confirm": "Retirar", - // "loading.sub-collections": "Loading sub-collections...", - "loading.sub-collections": "Cargando subcolecciones...", + // "item.edit.withdraw.description": "Are you sure this item should be withdrawn from the archive?", + "item.edit.withdraw.description": "¿Está seguro de que este ítem debe retirarse del archivo?", - // "loading.sub-communities": "Loading sub-communities...", - "loading.sub-communities": "Cargando subcomunidades...", + // "item.edit.withdraw.error": "An error occurred while withdrawing the item", + "item.edit.withdraw.error": "Ocurrió un error al retirar el ítem", - // "loading.top-level-communities": "Loading top-level communities...", - "loading.top-level-communities": "Cargando comunidades de nivel superior...", + // "item.edit.withdraw.header": "Withdraw item: {{ id }}", + "item.edit.withdraw.header": "Retirar ítem: {{ id }}", + // "item.edit.withdraw.success": "The item was withdrawn successfully", + "item.edit.withdraw.success": "El ítem se retiró con éxito", + // "item.orcid.return": "Back", + "item.orcid.return": "Atrás", - // "login.form.email": "Email address", - "login.form.email": "Correo electrónico", - // "login.form.forgot-password": "Have you forgotten your password?", - "login.form.forgot-password": "¿Has olvidado tu contraseña?", + // "item.listelement.badge": "Item", + "item.listelement.badge": "Ítem", - // "login.form.header": "Please log in to DSpace", - "login.form.header": "Inicie sesión en DSpace", + // "item.page.description": "Description", + "item.page.description": "Descripción", - // "login.form.new-user": "New user? Click here to register.", - "login.form.new-user": "¿Nuevo Usuario? Registrarse", + // "item.page.journal-issn": "Journal ISSN", + "item.page.journal-issn": "ISSN de la revista", - // "login.form.or-divider": "or", - "login.form.or-divider": "o", + // "item.page.journal-title": "Journal Title", + "item.page.journal-title": "Título de la revista", - // "login.form.password": "Password", - "login.form.password": "Contraseña", + // "item.page.publisher": "Publisher", + "item.page.publisher": "Editor", - // "login.form.shibboleth": "Log in with Shibboleth", - "login.form.shibboleth": "Iniciar sesión con Shibboleth", + // "item.page.titleprefix": "Item: ", + "item.page.titleprefix": "Ítem:", - // "login.form.submit": "Log in", - "login.form.submit": "Iniciar sesión", + // "item.page.volume-title": "Volume Title", + "item.page.volume-title": "Título del volumen", - // "login.title": "Login", - "login.title": "Acceso", + // "item.search.results.head": "Item Search Results", + "item.search.results.head": "Resultados de la búsqueda de ítems", - // "login.breadcrumbs": "Login", - "login.breadcrumbs": "Acceso", + // "item.search.title": "Item Search", + "item.search.title": "Búsqueda de ítems", + // "item.truncatable-part.show-more": "Show more", + "item.truncatable-part.show-more": "Mas..", + // "item.truncatable-part.show-less": "Collapse", + "item.truncatable-part.show-less": "Contraer", - // "logout.form.header": "Log out from DSpace", - "logout.form.header": "Cerrar sesión en DSpace", - // "logout.form.submit": "Log out", - "logout.form.submit": "Cerrar sesión", - // "logout.title": "Logout", - "logout.title": "Cerrar sesión", + // "item.page.abstract": "Abstract", + "item.page.abstract": "Resumen", + // "item.page.author": "Authors", + "item.page.author": "Autores", + // "item.page.citation": "Citation", + "item.page.citation": "Citación", - // "menu.header.admin": "Management", - "menu.header.admin": "Gestión", + // "item.page.collections": "Collections", + "item.page.collections": "Colecciones", - // "menu.header.image.logo": "Repository logo", - "menu.header.image.logo": "Logotipo del repositorio", + // "item.page.collections.loading": "Loading...", + "item.page.collections.loading": "Cargando...", - // "menu.header.admin.description": "Management menu", - "menu.header.admin.description": "Menú de gestión", + // "item.page.collections.load-more": "Load more", + "item.page.collections.load-more": "Cargar más", + // "item.page.date": "Date", + "item.page.date": "Fecha", + // "item.page.edit": "Edit this item", + "item.page.edit": "Editar este ítem", - // "menu.section.access_control": "Access Control", - "menu.section.access_control": "Control de acceso", + // "item.page.files": "Files", + "item.page.files": "Archivos", - // "menu.section.access_control_authorizations": "Authorizations", - "menu.section.access_control_authorizations": "Autorizaciones", + // "item.page.filesection.description": "Description:", + "item.page.filesection.description": "Descripción:", - // "menu.section.access_control_groups": "Groups", - "menu.section.access_control_groups": "Grupos", + // "item.page.filesection.download": "Download", + "item.page.filesection.download": "Descargar", - // "menu.section.access_control_people": "People", - "menu.section.access_control_people": "Gente", + // "item.page.filesection.format": "Format:", + "item.page.filesection.format": "Formato:", + // "item.page.filesection.name": "Name:", + "item.page.filesection.name": "Nombre:", + // "item.page.filesection.size": "Size:", + "item.page.filesection.size": "Tamaño:", - // "menu.section.admin_search": "Admin Search", - "menu.section.admin_search": "Búsqueda de administrador", + // "item.page.journal.search.title": "Articles in this journal", + "item.page.journal.search.title": "Ítems de esta revista", + // "item.page.link.full": "Full item page", + "item.page.link.full": "Página completa del ítem", + // "item.page.link.simple": "Simple item page", + "item.page.link.simple": "Vista sencilla de ítem", - // "menu.section.browse_community": "This Community", - "menu.section.browse_community": "Esta comunidad", + // "item.page.orcid.title": "ORCID", + "item.page.orcid.title": "ORCID", - // "menu.section.browse_community_by_author": "By Author", - "menu.section.browse_community_by_author": "Por autor", + // "item.page.orcid.tooltip": "Open ORCID setting page", + "item.page.orcid.tooltip": "Abrir la página de ajustes de ORCID", - // "menu.section.browse_community_by_issue_date": "By Issue Date", - "menu.section.browse_community_by_issue_date": "Por fecha de emisión", + // "item.page.person.search.title": "Articles by this author", + "item.page.person.search.title": "Ítems de este autor", - // "menu.section.browse_community_by_title": "By Title", - "menu.section.browse_community_by_title": "Por titulo", + // "item.page.related-items.view-more": "Show {{ amount }} more", + "item.page.related-items.view-more": "Mostrar {{ amount }} más", - // "menu.section.browse_global": "All of DSpace", - "menu.section.browse_global": "Todo DSpace", + // "item.page.related-items.view-less": "Hide last {{ amount }}", + "item.page.related-items.view-less": "Ocultar loa últimos {{ amount }}", - // "menu.section.browse_global_by_author": "By Author", - "menu.section.browse_global_by_author": "Por autor", + // "item.page.relationships.isAuthorOfPublication": "Publications", + "item.page.relationships.isAuthorOfPublication": "Publicaciones", - // "menu.section.browse_global_by_dateissued": "By Issue Date", - "menu.section.browse_global_by_dateissued": "Por fecha de emisión", + // "item.page.relationships.isJournalOfPublication": "Publications", + "item.page.relationships.isJournalOfPublication": "Publicaciones", - // "menu.section.browse_global_by_subject": "By Subject", - "menu.section.browse_global_by_subject": "Por tema", + // "item.page.relationships.isOrgUnitOfPerson": "Authors", + "item.page.relationships.isOrgUnitOfPerson": "Autores", - // "menu.section.browse_global_by_title": "By Title", - "menu.section.browse_global_by_title": "Por titulo", + // "item.page.relationships.isOrgUnitOfProject": "Research Projects", + "item.page.relationships.isOrgUnitOfProject": "Proyectos de investigación", - // "menu.section.browse_global_communities_and_collections": "Communities & Collections", - "menu.section.browse_global_communities_and_collections": "Comunidades", + // "item.page.subject": "Keywords", + "item.page.subject": "Palabras clave", + // "item.page.uri": "URI", + "item.page.uri": "URI", + // "item.page.bitstreams.view-more": "Show more", + "item.page.bitstreams.view-more": "Mostrar más", - // "menu.section.control_panel": "Control Panel", - "menu.section.control_panel": "Panel de control", + // "item.page.bitstreams.collapse": "Collapse", + "item.page.bitstreams.collapse": "Contraer", - // "menu.section.curation_task": "Curation Task", - "menu.section.curation_task": "Tarea de conservación", + // "item.page.filesection.original.bundle" : "Original bundle", + "item.page.filesection.original.bundle": "Bloque original", + // "item.page.filesection.license.bundle" : "License bundle", + "item.page.filesection.license.bundle": "Bloque de licencias", + // "item.page.return": "Back", + "item.page.return": "Atrás", - // "menu.section.edit": "Edit", - "menu.section.edit": "Editar", + // "item.page.version.create": "Create new version", + "item.page.version.create": "Crear una nueva version", - // "menu.section.edit_collection": "Collection", - "menu.section.edit_collection": "Colección", + // "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + "item.page.version.hasDraft": "No se puede crear una nueva versión porque en el historial de versiones hay un envío en curso", - // "menu.section.edit_community": "Community", - "menu.section.edit_community": "Comunidad", + // "item.page.claim.button": "Claim", + "item.page.claim.button": "Reclamar", - // "menu.section.edit_item": "Item", - "menu.section.edit_item": "Artículo", + // "item.page.claim.tooltip": "Claim this item as profile", + "item.page.claim.tooltip": "Reclame este item como perfil", + // "item.preview.dc.identifier.uri": "Identifier:", + "item.preview.dc.identifier.uri": "Identificador:", + // "item.preview.dc.contributor.author": "Authors:", + "item.preview.dc.contributor.author": "Autores:", - // "menu.section.export": "Export", - "menu.section.export": "Exportar", + // "item.preview.dc.date.issued": "Published date:", + "item.preview.dc.date.issued": "Fecha de Publicación:", - // "menu.section.export_collection": "Collection", - "menu.section.export_collection": "Colección", + // "item.preview.dc.description.abstract": "Abstract:", + "item.preview.dc.description.abstract": "Resumen:", - // "menu.section.export_community": "Community", - "menu.section.export_community": "Comunidad", + // "item.preview.dc.identifier.other": "Other identifier:", + "item.preview.dc.identifier.other": "Otro identificador:", - // "menu.section.export_item": "Item", - "menu.section.export_item": "Artículo", + // "item.preview.dc.language.iso": "Language:", + "item.preview.dc.language.iso": "Idioma:", - // "menu.section.export_metadata": "Metadata", - "menu.section.export_metadata": "Metadatos", + // "item.preview.dc.subject": "Subjects:", + "item.preview.dc.subject": "Materias:", + // "item.preview.dc.title": "Title:", + "item.preview.dc.title": "Título:", + // "item.preview.dc.type": "Type:", + "item.preview.dc.type": "Tipo:", - // "menu.section.icon.access_control": "Access Control menu section", - "menu.section.icon.access_control": "Sección del menú de control de acceso", + // "item.preview.oaire.citation.issue" : "Issue", + "item.preview.oaire.citation.issue" : "Número", - // "menu.section.icon.admin_search": "Admin search menu section", - "menu.section.icon.admin_search": "Sección del menú de búsqueda de administrador", + // "item.preview.oaire.citation.volume" : "Volume", + "item.preview.oaire.citation.volume" : "Volumen", - // "menu.section.icon.control_panel": "Control Panel menu section", - "menu.section.icon.control_panel": "Sección del menú del panel de control", + // "item.preview.dc.relation.issn" : "ISSN", + "item.preview.dc.relation.issn" : "ISSN", - // "menu.section.icon.curation_task": "Curation Task menu section", - "menu.section.icon.curation_task": "Sección del menú de tareas de conservación", + // "item.preview.dc.identifier.isbn" : "ISBN", + "item.preview.dc.identifier.isbn" : "ISBN", - // "menu.section.icon.edit": "Edit menu section", - "menu.section.icon.edit": "Editar sección del menú", + // "item.preview.dc.identifier": "Identifier:", + "item.preview.dc.identifier": "Identificador:", - // "menu.section.icon.export": "Export menu section", - "menu.section.icon.export": "Exportar sección de menú", + // "item.preview.dc.relation.ispartof" : "Journal or Serie", + "item.preview.dc.relation.ispartof" : "Revista o Serie", - // "menu.section.icon.find": "Find menu section", - "menu.section.icon.find": "Buscar sección de menú", + // "item.preview.dc.identifier.doi" : "DOI", + "item.preview.dc.identifier.doi" : "DOI", - // "menu.section.icon.import": "Import menu section", - "menu.section.icon.import": "Importar sección de menú", + // "item.preview.person.familyName": "Surname:", + "item.preview.person.familyName": "Apellido:", - // "menu.section.icon.new": "New menu section", - "menu.section.icon.new": "Nueva sección de menú", + // "item.preview.person.givenName": "Name:", + "item.preview.person.givenName": "Nombre:", - // "menu.section.icon.pin": "Pin sidebar", - "menu.section.icon.pin": "Anclar barra lateral", + // "item.preview.person.identifier.orcid": "ORCID:", + "item.preview.person.identifier.orcid": "ORCID:", - // "menu.section.icon.processes": "Processes menu section", - "menu.section.icon.processes": "Sección del menú de procesos", + // "item.preview.project.funder.name": "Funder:", + "item.preview.project.funder.name": "Financiador:", - // "menu.section.icon.registries": "Registries menu section", - "menu.section.icon.registries": "Sección de menú de registros", + // "item.preview.project.funder.identifier": "Funder Identifier:", + "item.preview.project.funder.identifier": "Identificador del financiador:", - // "menu.section.icon.statistics_task": "Statistics Task menu section", - "menu.section.icon.statistics_task": "Sección del menú Tarea de estadísticas", + // "item.preview.oaire.awardNumber": "Funding ID:", + "item.preview.oaire.awardNumber": "ID de financiación:", - // "menu.section.icon.unpin": "Unpin sidebar", - "menu.section.icon.unpin": "Desanclar la barra lateral", + // "item.preview.dc.title.alternative": "Acronym:", + "item.preview.dc.title.alternative": "Acrónimo:", + // "item.preview.dc.coverage.spatial": "Jurisdiction:", + "item.preview.dc.coverage.spatial": "Jurisdicción:", + // "item.preview.oaire.fundingStream": "Funding Stream:", + "item.preview.oaire.fundingStream": "Línea de financiación:", - // "menu.section.import": "Import", - "menu.section.import": "Importar", - // "menu.section.import_batch": "Batch Import (ZIP)", - "menu.section.import_batch": "Importación por lotes (ZIP)", - // "menu.section.import_metadata": "Metadata", - "menu.section.import_metadata": "Metadatos", + // "item.select.confirm": "Confirm selected", + "item.select.confirm": "Confirmar seleccionado", + // "item.select.empty": "No items to show", + "item.select.empty": "No hay artículos para mostrar", + // "item.select.table.author": "Author", + "item.select.table.author": "Autor", - // "menu.section.new": "New", - "menu.section.new": "Nuevo", + // "item.select.table.collection": "Collection", + "item.select.table.collection": "Colección", - // "menu.section.new_collection": "Collection", - "menu.section.new_collection": "Colección", + // "item.select.table.title": "Title", + "item.select.table.title": "Título", - // "menu.section.new_community": "Community", - "menu.section.new_community": "Comunidad", - // "menu.section.new_item": "Item", - "menu.section.new_item": "Artículo", + // "item.version.history.empty": "There are no other versions for this item yet.", + "item.version.history.empty": "Aún no hay otras versiones para este artículo.", - // "menu.section.new_item_version": "Item Version", - "menu.section.new_item_version": "Versión del artículo", + // "item.version.history.head": "Version History", + "item.version.history.head": "Historial de versiones", - // "menu.section.new_process": "Process", - "menu.section.new_process": "Proceso", + // "item.version.history.return": "Back", + "item.version.history.return": "Atrás", + // "item.version.history.selected": "Selected version", + "item.version.history.selected": "Versión seleccionada", + // "item.version.history.selected.alert": "You are currently viewing version {{version}} of the item.", + "item.version.history.selected.alert": "Esta viendo la versión {{version}} del ítem.", - // "menu.section.pin": "Pin sidebar", - "menu.section.pin": "Anclar barra lateral", + // "item.version.history.table.version": "Version", + "item.version.history.table.version": "Versión", - // "menu.section.unpin": "Unpin sidebar", - "menu.section.unpin": "Desanclar la barra lateral", + // "item.version.history.table.item": "Item", + "item.version.history.table.item": "Artículo", + // "item.version.history.table.editor": "Editor", + "item.version.history.table.editor": "Editor", + // "item.version.history.table.date": "Date", + "item.version.history.table.date": "Fecha", - // "menu.section.processes": "Processes", - "menu.section.processes": "Procesos", + // "item.version.history.table.summary": "Summary", + "item.version.history.table.summary": "Resumen", + // "item.version.history.table.workspaceItem": "Workspace item", + "item.version.history.table.workspaceItem": "Ítem del espacio de trabajo", + // "item.version.history.table.workflowItem": "Workflow item", + "item.version.history.table.workflowItem": "Ítem del flujo de trabajo", - // "menu.section.registries": "Registries", - "menu.section.registries": "Registros", + // "item.version.history.table.actions": "Action", + "item.version.history.table.actions": "Acción", - // "menu.section.registries_format": "Format", - "menu.section.registries_format": "Formato", + // "item.version.history.table.action.editWorkspaceItem": "Edit workspace item", + "item.version.history.table.action.editWorkspaceItem": "Editar ítem del espacio de trabajo", - // "menu.section.registries_metadata": "Metadata", - "menu.section.registries_metadata": "Metadatos", + // "item.version.history.table.action.editSummary": "Edit summary", + "item.version.history.table.action.editSummary": "Editar resumen", + // "item.version.history.table.action.saveSummary": "Save summary edits", + "item.version.history.table.action.saveSummary": "Salvar resumen", + // "item.version.history.table.action.discardSummary": "Discard summary edits", + "item.version.history.table.action.discardSummary": "Desechar cambios del resumen", - // "menu.section.statistics": "Statistics", - "menu.section.statistics": "Estadísticas", + // "item.version.history.table.action.newVersion": "Create new version from this one", + "item.version.history.table.action.newVersion": "Crear nueva versión a partir de ésta", - // "menu.section.statistics_task": "Statistics Task", - "menu.section.statistics_task": "Tarea de estadísticas", + // "item.version.history.table.action.deleteVersion": "Delete version", + "item.version.history.table.action.deleteVersion": "Borrar versión", + // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + "item.version.history.table.action.hasDraft": "No es posible crear una nueva versión puesto que existe en el historial de versiones un envío pendiente", - // "menu.section.toggle.access_control": "Toggle Access Control section", - "menu.section.toggle.access_control": "Alternar sección de control de acceso", + // "item.version.notice": "This is not the latest version of this item. The latest version can be found here.", + "item.version.notice": "Esta no es la última versión de este artículo. La última versión se puede encontrar aquí .", - // "menu.section.toggle.control_panel": "Toggle Control Panel section", - "menu.section.toggle.control_panel": "Alternar la sección del Panel de control", - // "menu.section.toggle.curation_task": "Toggle Curation Task section", - "menu.section.toggle.curation_task": "Alternar la sección Tarea de conservación", + // "item.version.create.modal.header": "New version", + "item.version.create.modal.header": "Nueva versión", - // "menu.section.toggle.edit": "Toggle Edit section", - "menu.section.toggle.edit": "Alternar sección de edición", + // "item.version.create.modal.text": "Create a new version for this item", + "item.version.create.modal.text": "Crear una nueva versión de este ítem", - // "menu.section.toggle.export": "Toggle Export section", - "menu.section.toggle.export": "Alternar sección de exportación", + // "item.version.create.modal.text.startingFrom": "starting from version {{version}}", + "item.version.create.modal.text.startingFrom": "comenzando desde versión {{version}}", - // "menu.section.toggle.find": "Toggle Find section", - "menu.section.toggle.find": "Alternar sección de búsqueda", + // "item.version.create.modal.button.confirm": "Create", + "item.version.create.modal.button.confirm": "Crear", - // "menu.section.toggle.import": "Toggle Import section", - "menu.section.toggle.import": "Alternar sección de importación", + // "item.version.create.modal.button.confirm.tooltip": "Create new version", + "item.version.create.modal.button.confirm.tooltip": "Crear nueva versión", - // "menu.section.toggle.new": "Toggle New section", - "menu.section.toggle.new": "Alternar nueva sección", + // "item.version.create.modal.button.cancel": "Cancel", + "item.version.create.modal.button.cancel": "Cancelar", - // "menu.section.toggle.registries": "Toggle Registries section", - "menu.section.toggle.registries": "Alternar la sección Registros", + // "item.version.create.modal.button.cancel.tooltip": "Do not create new version", + "item.version.create.modal.button.cancel.tooltip": "No crear una nueva versión", - // "menu.section.toggle.statistics_task": "Toggle Statistics Task section", - "menu.section.toggle.statistics_task": "Alternar la sección Tarea de estadísticas", + // "item.version.create.modal.form.summary.label": "Summary", + "item.version.create.modal.form.summary.label": "Resumen", + // "item.version.create.modal.form.summary.placeholder": "Insert the summary for the new version", + "item.version.create.modal.form.summary.placeholder": "Introduzca el resumen de esta nueva versión", - // "menu.section.workflow": "Administer Workflow", - "menu.section.workflow": "Administrar flujo de trabajo", + // "item.version.create.modal.submitted.header": "Creating new version...", + "item.version.create.modal.submitted.header": "Creando nueva versión...", + // "item.version.create.modal.submitted.text": "The new version is being created. This may take some time if the item has a lot of relationships.", + "item.version.create.modal.submitted.text": "Se está creando la nueva versión. SI el ítem tiene muchas relaciones, este proceso podría tardar.", - // "mydspace.breadcrumbs": "MyDSpace", - "mydspace.breadcrumbs": "Mi DSpace", + // "item.version.create.notification.success" : "New version has been created with version number {{version}}", + "item.version.create.notification.success" : "Se ha creado una nueva versión con número {{version}}", - // "mydspace.description": "", - "mydspace.description": "", + // "item.version.create.notification.failure" : "New version has not been created", + "item.version.create.notification.failure" : "No se ha creado una nueva versión", - // "mydspace.general.text-here": "here", - "mydspace.general.text-here": "aquí", + // "item.version.create.notification.inProgress" : "A new version cannot be created because there is an inprogress submission in the version history", + "item.version.create.notification.inProgress" : "No es posible crear una nueva versión puesto que existe en el historial de versiones un envío pendiente", - // "mydspace.messages.controller-help": "Select this option to send a message to item's submitter.", - "mydspace.messages.controller-help": "Seleccione esta opción para enviar un mensaje al remitente del artículo.", - // "mydspace.messages.description-placeholder": "Insert your message here...", - "mydspace.messages.description-placeholder": "Inserta tu mensaje aquí...", + // "item.version.delete.modal.header": "Delete version", + "item.version.delete.modal.header": "Borrar versión", - // "mydspace.messages.hide-msg": "Hide message", - "mydspace.messages.hide-msg": "Ocultar mensaje", + // "item.version.delete.modal.text": "Do you want to delete version {{version}}?", + "item.version.delete.modal.text": "Quierr borrar la versión {{version}}?", - // "mydspace.messages.mark-as-read": "Mark as read", - "mydspace.messages.mark-as-read": "Marcar como leído", + // "item.version.delete.modal.button.confirm": "Delete", + "item.version.delete.modal.button.confirm": "Borrar", - // "mydspace.messages.mark-as-unread": "Mark as unread", - "mydspace.messages.mark-as-unread": "marcar como no leído", + // "item.version.delete.modal.button.confirm.tooltip": "Delete this version", + "item.version.delete.modal.button.confirm.tooltip": "Borrar esta versión", - // "mydspace.messages.no-content": "No content.", - "mydspace.messages.no-content": "Sin contenido.", + // "item.version.delete.modal.button.cancel": "Cancel", + "item.version.delete.modal.button.cancel": "Cancelar", - // "mydspace.messages.no-messages": "No messages yet.", - "mydspace.messages.no-messages": "Aún no hay mensajes.", + // "item.version.delete.modal.button.cancel.tooltip": "Do not delete this version", + "item.version.delete.modal.button.cancel.tooltip": "No borrar esta versión", - // "mydspace.messages.send-btn": "Send", - "mydspace.messages.send-btn": "Enviar", + // "item.version.delete.notification.success" : "Version number {{version}} has been deleted", + "item.version.delete.notification.success" : "Se ha borrado la versión número{{version}}", - // "mydspace.messages.show-msg": "Show message", - "mydspace.messages.show-msg": "Mostrar mensaje", + // "item.version.delete.notification.failure" : "Version number {{version}} has not been deleted", + "item.version.delete.notification.failure" : "No se ha borrado la versión número{{version}}", - // "mydspace.messages.subject-placeholder": "Subject...", - "mydspace.messages.subject-placeholder": "Tema...", - // "mydspace.messages.submitter-help": "Select this option to send a message to controller.", - "mydspace.messages.submitter-help": "Seleccione esta opción para enviar un mensaje al controlador.", + // "item.version.edit.notification.success" : "The summary of version number {{version}} has been changed", + "item.version.edit.notification.success" : "Ha cambiado el resumen de la versión número {{version}}", - // "mydspace.messages.title": "Messages", - "mydspace.messages.title": "Mensajes", + // "item.version.edit.notification.failure" : "The summary of version number {{version}} has not been changed", + "item.version.edit.notification.failure" : "No ha cambiado el resumen de la versión número {{version}}", - // "mydspace.messages.to": "To", - "mydspace.messages.to": "Para", - // "mydspace.new-submission": "New submission", - "mydspace.new-submission": "Nuevo envío", + // "journal.listelement.badge": "Journal", + "journal.listelement.badge": "Revista", - // "mydspace.new-submission-external": "Import metadata from external source", - "mydspace.new-submission-external": "Importar metadatos de una fuente externa", + // "journal.page.description": "Description", + "journal.page.description": "Descripción", - // "mydspace.new-submission-external-short": "Import metadata", - "mydspace.new-submission-external-short": "Importar metadatos", + // "journal.page.edit": "Edit this item", + "journal.page.edit": "Editar este ítem", - // "mydspace.results.head": "Your submissions", - "mydspace.results.head": "Tus presentaciones", + // "journal.page.editor": "Editor-in-Chief", + "journal.page.editor": "Editor jefe", - // "mydspace.results.no-abstract": "No Abstract", - "mydspace.results.no-abstract": "Sin resumen", + // "journal.page.issn": "ISSN", + "journal.page.issn": "ISSN", - // "mydspace.results.no-authors": "No Authors", - "mydspace.results.no-authors": "Sin autores", + // "journal.page.publisher": "Publisher", + "journal.page.publisher": "Editor", - // "mydspace.results.no-collections": "No Collections", - "mydspace.results.no-collections": "No hay colecciones", + // "journal.page.titleprefix": "Journal: ", + "journal.page.titleprefix": "Revista:", - // "mydspace.results.no-date": "No Date", - "mydspace.results.no-date": "Sin fecha", + // "journal.search.results.head": "Journal Search Results", + "journal.search.results.head": "Resultados de la búsqueda de revistas", - // "mydspace.results.no-files": "No Files", - "mydspace.results.no-files": "Sin archivos", + // "journal-relationships.search.results.head": "Journal Search Results", + "journal-relationships.search.results.head": "Resultados de la búsqueda de revistas", - // "mydspace.results.no-results": "There were no items to show", - "mydspace.results.no-results": "No había artículos para mostrar", + // "journal.search.title": "Journal Search", + "journal.search.title": "Búsqueda de revistas", - // "mydspace.results.no-title": "No title", - "mydspace.results.no-title": "Sin título", - // "mydspace.results.no-uri": "No Uri", - "mydspace.results.no-uri": "No Uri", - // "mydspace.search-form.placeholder": "Search in mydspace...", - "mydspace.search-form.placeholder": "Buscar en Mi DSpace...", + // "journalissue.listelement.badge": "Journal Issue", + "journalissue.listelement.badge": "Número de la revista", - // "mydspace.show.workflow": "All tasks", - "mydspace.show.workflow": "Todas las tareas", + // "journalissue.page.description": "Description", + "journalissue.page.description": "Descripción", - // "mydspace.show.workspace": "Your Submissions", - "mydspace.show.workspace": "Tus envíos", + // "journalissue.page.edit": "Edit this item", + "journalissue.page.edit": "Editar este ítema", - // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "Archivado", + // "journalissue.page.issuedate": "Issue Date", + "journalissue.page.issuedate": "Fecha de publicación", - // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "Validación", + // "journalissue.page.journal-issn": "Journal ISSN", + "journalissue.page.journal-issn": "ISSN de la revista", - // "mydspace.status.waiting-for-controller": "Waiting for controller", - "mydspace.status.waiting-for-controller": "Esperando controlador", + // "journalissue.page.journal-title": "Journal Title", + "journalissue.page.journal-title": "Título de la revista", - // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "Flujo de trabajo", + // "journalissue.page.keyword": "Keywords", + "journalissue.page.keyword": "Palabras clave", - // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "Espacio de trabajo", + // "journalissue.page.number": "Number", + "journalissue.page.number": "Número", - // "mydspace.title": "MyDSpace", - "mydspace.title": "Mi DSpace", + // "journalissue.page.titleprefix": "Journal Issue: ", + "journalissue.page.titleprefix": "Número de la revista:", - // "mydspace.upload.upload-failed": "Error creating new workspace. Please verify the content uploaded before retry.", - "mydspace.upload.upload-failed": "Error al crear un nuevo espacio de trabajo. Verifique el contenido cargado antes de volver a intentarlo.", - // "mydspace.upload.upload-failed-manyentries": "Unprocessable file. Detected too many entries but allowed only one for file.", - "mydspace.upload.upload-failed-manyentries": "Archivo no procesable. Se detectaron demasiadas entradas, pero solo se permitió una para el archivo.", - // "mydspace.upload.upload-failed-moreonefile": "Unprocessable request. Only one file is allowed.", - "mydspace.upload.upload-failed-moreonefile": "Solicitud no procesable. Solo se permite un archivo.", + // "journalvolume.listelement.badge": "Journal Volume", + "journalvolume.listelement.badge": "Volumen de la revista", - // "mydspace.upload.upload-multiple-successful": "{{qty}} new workspace items created.", - "mydspace.upload.upload-multiple-successful": "Se crearon {{ qty }} nuevos artículos del espacio de trabajo.", + // "journalvolume.page.description": "Description", + "journalvolume.page.description": "Descripción", - // "mydspace.upload.upload-successful": "New workspace item created. Click {{here}} for edit it.", - "mydspace.upload.upload-successful": "Se creó un nuevo artículo de espacio de trabajo. Haga clic en {{ here }} para editarlo.", + // "journalvolume.page.edit": "Edit this item", + "journalvolume.page.edit": "Editar este ítem", - // "mydspace.view-btn": "View", - "mydspace.view-btn": "Vista", + // "journalvolume.page.issuedate": "Issue Date", + "journalvolume.page.issuedate": "Fecha de publicación", + // "journalvolume.page.titleprefix": "Journal Volume: ", + "journalvolume.page.titleprefix": "Volumen de la revista:", + // "journalvolume.page.volume": "Volume", + "journalvolume.page.volume": "Volumen", - // "nav.browse.header": "All of DSpace", - "nav.browse.header": "Todo DSpace", - // "nav.community-browse.header": "By Community", - "nav.community-browse.header": "Por comunidad", + // "iiifsearchable.listelement.badge": "Document Media", + "iiifsearchable.listelement.badge": "Soporte (media) del documento", - // "nav.language": "Language switch", - "nav.language": "Cambio de idioma", + // "iiifsearchable.page.titleprefix": "Document: ", + "iiifsearchable.page.titleprefix": "Documento: ", - // "nav.login": "Log In", - "nav.login": "Iniciar sesión", + // "iiifsearchable.page.doi": "Permanent Link: ", + "iiifsearchable.page.doi": "Enlace permanente: ", - // "nav.logout": "User profile menu and Log Out", - "nav.logout": "Menú de perfil de usuario y cierre de sesión", + // "iiifsearchable.page.issue": "Issue: ", + "iiifsearchable.page.issue": "Número: ", - // "nav.main.description": "Main navigation bar", - "nav.main.description": "Barra de navegación principal", + // "iiifsearchable.page.description": "Description: ", + "iiifsearchable.page.description": "Descripción: ", - // "nav.mydspace": "MyDSpace", - "nav.mydspace": "Mi DSpace", + // "iiifviewer.fullscreen.notice": "Use full screen for better viewing.", + "iiifviewer.fullscreen.notice": "Para una mejor visualización, use el modo pantalla completa.", - // "nav.profile": "Profile", - "nav.profile": "Perfil", + // "iiif.listelement.badge": "Image Media", + "iiif.listelement.badge": "Image Media", - // "nav.search": "Search", - "nav.search": "Buscar", + // "iiif.page.titleprefix": "Image: ", + "iiif.page.titleprefix": "Imagen: ", - // "nav.statistics.header": "Statistics", - "nav.statistics.header": "Estadísticas", + // "iiif.page.doi": "Permanent Link: ", + "iiif.page.doi": "Enlace permanente: ", - // "nav.stop-impersonating": "Stop impersonating EPerson", - "nav.stop-impersonating": "Deja de hacerse pasar por EPerson", + // "iiif.page.issue": "Issue: ", + "iiif.page.issue": "Número: ", - // "nav.toggle" : "Toggle navigation", - "nav.toggle": "Alternar navegación", + // "iiif.page.description": "Description: ", + "iiif.page.description": "Descripción: ", - // "nav.user.description" : "User profile bar", - "nav.user.description": "Barra de perfil de usuario", + // "loading.bitstream": "Loading bitstream...", + "loading.bitstream": "Cargando archivo...", + // "loading.bitstreams": "Loading bitstreams...", + "loading.bitstreams": "Cargando archivos...", - // "orgunit.listelement.badge": "Organizational Unit", - "orgunit.listelement.badge": "Unidad organizacional", + // "loading.browse-by": "Loading items...", + "loading.browse-by": "Cargando artículos...", - // "orgunit.page.city": "City", - "orgunit.page.city": "Ciudad", + // "loading.browse-by-page": "Loading page...", + "loading.browse-by-page": "Cargando página...", - // "orgunit.page.country": "Country", - "orgunit.page.country": "País", + // "loading.collection": "Loading collection...", + "loading.collection": "Cargando colección...", - // "orgunit.page.dateestablished": "Date established", - "orgunit.page.dateestablished": "Fecha Establecida", + // "loading.collections": "Loading collections...", + "loading.collections": "Cargando colecciones...", - // "orgunit.page.description": "Description", - "orgunit.page.description": "Descripción", + // "loading.content-source": "Loading content source...", + "loading.content-source": "Cargando fuente de contenido...", - // "orgunit.page.edit": "Edit this item", - "orgunit.page.edit": "Editar este artículo", + // "loading.community": "Loading community...", + "loading.community": "Cargando comunidad...", - // "orgunit.page.id": "ID", - "orgunit.page.id": "IDENTIFICACIÓN", + // "loading.default": "Loading...", + "loading.default": "Cargando...", - // "orgunit.page.titleprefix": "Organizational Unit: ", - "orgunit.page.titleprefix": "Unidad organizacional:", + // "loading.item": "Loading item...", + "loading.item": "Cargando artículo...", + // "loading.items": "Loading items...", + "loading.items": "Cargando artículos...", + // "loading.mydspace-results": "Loading items...", + "loading.mydspace-results": "Cargando artículos...", - // "pagination.options.description": "Pagination options", - "pagination.options.description": "Opciones de paginación", + // "loading.objects": "Loading...", + "loading.objects": "Cargando...", - // "pagination.results-per-page": "Results Per Page", - "pagination.results-per-page": "Resultados por página", + // "loading.recent-submissions": "Loading recent submissions...", + "loading.recent-submissions": "Cargando envíos recientes...", - // "pagination.showing.detail": "{{ range }} of {{ total }}", - "pagination.showing.detail": "{{ range }} de {{ total }}", + // "loading.search-results": "Loading search results...", + "loading.search-results": "Cargando resultados de búsqueda...", - // "pagination.showing.label": "Now showing ", - "pagination.showing.label": "Mostrando", + // "loading.sub-collections": "Loading sub-collections...", + "loading.sub-collections": "Cargando subcolecciones...", - // "pagination.sort-direction": "Sort Options", - "pagination.sort-direction": "Opciones de clasificación", + // "loading.sub-communities": "Loading sub-communities...", + "loading.sub-communities": "Cargando subcomunidades...", + // "loading.top-level-communities": "Loading top-level communities...", + "loading.top-level-communities": "Cargando comunidades de nivel superior...", - // "person.listelement.badge": "Person", - "person.listelement.badge": "Persona", - // "person.listelement.no-title": "No name found", - "person.listelement.no-title": "No se encontró ningún nombre", + // "login.form.email": "Email address", + "login.form.email": "Correo electrónico", - // "person.page.birthdate": "Birth Date", - "person.page.birthdate": "Fecha de nacimiento", + // "login.form.forgot-password": "Have you forgotten your password?", + "login.form.forgot-password": "¿Has olvidado tu contraseña?", - // "person.page.edit": "Edit this item", - "person.page.edit": "Editar este artículo", + // "login.form.header": "Please log in to DSpace", + "login.form.header": "Inicie sesión en DSpace", - // "person.page.email": "Email Address", - "person.page.email": "Dirección de correo electrónico", + // "login.form.new-user": "New user? Click here to register.", + "login.form.new-user": "¿Nuevo Usuario? Pulse aquí para registrarse", - // "person.page.firstname": "First Name", - "person.page.firstname": "Primer nombre", + // "login.form.or-divider": "or", + "login.form.or-divider": "o", - // "person.page.jobtitle": "Job Title", - "person.page.jobtitle": "Título profesional", + // "login.form.oidc": "Log in with OIDC", + "login.form.oidc": "Iniciar sesión con OIDC", - // "person.page.lastname": "Last Name", - "person.page.lastname": "Apellido", + // "login.form.orcid": "Log in with ORCID", + "login.form.orcid": "Iniciar sesión con ORCID", - // "person.page.link.full": "Show all metadata", - "person.page.link.full": "Mostrar todos los metadatos", + // "login.form.password": "Password", + "login.form.password": "Contraseña", - // "person.page.orcid": "ORCID", - "person.page.orcid": "ORCID", + // "login.form.shibboleth": "Log in with Shibboleth", + "login.form.shibboleth": "Iniciar sesión con Shibboleth", - // "person.page.staffid": "Staff ID", - "person.page.staffid": "Identificación del personal", + // "login.form.submit": "Log in", + "login.form.submit": "Iniciar sesión", - // "person.page.titleprefix": "Person: ", - "person.page.titleprefix": "Persona:", + // "login.title": "Login", + "login.title": "Acceso", - // "person.search.results.head": "Person Search Results", - "person.search.results.head": "Resultados de búsqueda de personas", + // "login.breadcrumbs": "Login", + "login.breadcrumbs": "Acceso", - // "person.search.title": "Person Search", - "person.search.title": "Búsqueda de personas", + // "logout.form.header": "Log out from DSpace", + "logout.form.header": "Cerrar sesión en DSpace", - // "process.new.select-parameters": "Parameters", - "process.new.select-parameters": "Parámetros", + // "logout.form.submit": "Log out", + "logout.form.submit": "Cerrar sesión", - // "process.new.cancel": "Cancel", - "process.new.cancel": "Cancelar", + // "logout.title": "Logout", + "logout.title": "Cerrar sesión", - // "process.new.submit": "Save", - "process.new.submit": "Guardar", - // "process.new.select-script": "Script", - "process.new.select-script": "Texto", - // "process.new.select-script.placeholder": "Choose a script...", - "process.new.select-script.placeholder": "Elija un guión...", + // "menu.header.admin": "Management", + "menu.header.admin": "Gestión", - // "process.new.select-script.required": "Script is required", - "process.new.select-script.required": "Se requiere script", + // "menu.header.image.logo": "Repository logo", + "menu.header.image.logo": "Logotipo del repositorio", - // "process.new.parameter.file.upload-button": "Select file...", - "process.new.parameter.file.upload-button": "Seleccione Archivo...", + // "menu.header.admin.description": "Management menu", + "menu.header.admin.description": "Menú de gestión", - // "process.new.parameter.file.required": "Please select a file", - "process.new.parameter.file.required": "Por favor seleccione un archivo", - // "process.new.parameter.string.required": "Parameter value is required", - "process.new.parameter.string.required": "Se requiere el valor del parámetro", - // "process.new.parameter.type.value": "value", - "process.new.parameter.type.value": "valor", + // "menu.section.access_control": "Access Control", + "menu.section.access_control": "Control de acceso", - // "process.new.parameter.type.file": "file", - "process.new.parameter.type.file": "expediente", + // "menu.section.access_control_authorizations": "Authorizations", + "menu.section.access_control_authorizations": "Autorizaciones", - // "process.new.parameter.required.missing": "The following parameters are required but still missing:", - "process.new.parameter.required.missing": "Los siguientes parámetros son obligatorios pero aún faltan:", + // "menu.section.access_control_groups": "Groups", + "menu.section.access_control_groups": "Grupos", - // "process.new.notification.success.title": "Success", - "process.new.notification.success.title": "Éxito", + // "menu.section.access_control_people": "People", + "menu.section.access_control_people": "Gente", - // "process.new.notification.success.content": "The process was successfully created", - "process.new.notification.success.content": "El proceso fue creado con éxito", - // "process.new.notification.error.title": "Error", - "process.new.notification.error.title": "Error", - // "process.new.notification.error.content": "An error occurred while creating this process", - "process.new.notification.error.content": "Se produjo un error al crear este proceso.", + // "menu.section.admin_search": "Admin Search", + "menu.section.admin_search": "Búsqueda de administrador", - // "process.new.header": "Create a new process", - "process.new.header": "Crea un nuevo proceso", - // "process.new.title": "Create a new process", - "process.new.title": "Crea un nuevo proceso", - // "process.new.breadcrumbs": "Create a new process", - "process.new.breadcrumbs": "Crea un nuevo proceso", + // "menu.section.browse_community": "This Community", + "menu.section.browse_community": "Esta comunidad", + // "menu.section.browse_community_by_author": "By Author", + "menu.section.browse_community_by_author": "Por autor", + // "menu.section.browse_community_by_issue_date": "By Issue Date", + "menu.section.browse_community_by_issue_date": "Por fecha de emisión", - // "process.detail.arguments" : "Arguments", - "process.detail.arguments": "Argumentos", + // "menu.section.browse_community_by_title": "By Title", + "menu.section.browse_community_by_title": "Por titulo", - // "process.detail.arguments.empty" : "This process doesn't contain any arguments", - "process.detail.arguments.empty": "Este proceso no contiene ningún argumento", + // "menu.section.browse_global": "All of DSpace", + "menu.section.browse_global": "Todo DSpace", - // "process.detail.back" : "Back", - "process.detail.back": "Volver", + // "menu.section.browse_global_by_author": "By Author", + "menu.section.browse_global_by_author": "Por autor", - // "process.detail.output" : "Process Output", - "process.detail.output": "Salida del proceso", + // "menu.section.browse_global_by_dateissued": "By Issue Date", + "menu.section.browse_global_by_dateissued": "Por fecha de emisión", - // "process.detail.logs.button": "Retrieve process output", - "process.detail.logs.button": "Recuperar la salida del proceso", + // "menu.section.browse_global_by_subject": "By Subject", + "menu.section.browse_global_by_subject": "Por tema", - // "process.detail.logs.loading": "Retrieving", - "process.detail.logs.loading": "Recuperando", + // "menu.section.browse_global_by_title": "By Title", + "menu.section.browse_global_by_title": "Por titulo", - // "process.detail.logs.none": "This process has no output", - "process.detail.logs.none": "Este proceso no tiene salida", + // "menu.section.browse_global_communities_and_collections": "Communities & Collections", + "menu.section.browse_global_communities_and_collections": "Comunidades", - // "process.detail.output-files" : "Output Files", - "process.detail.output-files": "Archivos de salida", - // "process.detail.output-files.empty" : "This process doesn't contain any output files", - "process.detail.output-files.empty": "Este proceso no contiene ningún archivo de salida", - // "process.detail.script" : "Script", - "process.detail.script": "Secuencia de comandos", + // "menu.section.control_panel": "Control Panel", + "menu.section.control_panel": "Panel de control", - // "process.detail.title" : "Process: {{ id }} - {{ name }}", - "process.detail.title": "Proceso: {{ id }} - {{ name }}", + // "menu.section.curation_task": "Curation Task", + "menu.section.curation_task": "Tarea de conservación", - // "process.detail.start-time" : "Start time", - "process.detail.start-time": "Hora de inicio", - // "process.detail.end-time" : "Finish time", - "process.detail.end-time": "Hora de finalización", - // "process.detail.status" : "Status", - "process.detail.status": "Estado", + // "menu.section.edit": "Edit", + "menu.section.edit": "Editar", - // "process.detail.create" : "Create similar process", - "process.detail.create": "Crear un proceso similar", + // "menu.section.edit_collection": "Collection", + "menu.section.edit_collection": "Colección", + // "menu.section.edit_community": "Community", + "menu.section.edit_community": "Comunidad", + // "menu.section.edit_item": "Item", + "menu.section.edit_item": "Artículo", - // "process.overview.table.finish" : "Finish time", - "process.overview.table.finish": "Hora de finalización", - // "process.overview.table.id" : "Process ID", - "process.overview.table.id": "ID de proceso", - // "process.overview.table.name" : "Name", - "process.overview.table.name": "Nombre", + // "menu.section.export": "Export", + "menu.section.export": "Exportar", - // "process.overview.table.start" : "Start time", - "process.overview.table.start": "Hora de inicio", + // "menu.section.export_collection": "Collection", + "menu.section.export_collection": "Colección", - // "process.overview.table.status" : "Status", - "process.overview.table.status": "Estado", + // "menu.section.export_community": "Community", + "menu.section.export_community": "Comunidad", - // "process.overview.table.user" : "User", - "process.overview.table.user": "Usuario", + // "menu.section.export_item": "Item", + "menu.section.export_item": "Artículo", - // "process.overview.title": "Processes Overview", - "process.overview.title": "Resumen de procesos", + // "menu.section.export_metadata": "Metadata", + "menu.section.export_metadata": "Metadatos", - // "process.overview.breadcrumbs": "Processes Overview", - "process.overview.breadcrumbs": "Resumen de procesos", - // "process.overview.new": "New", - "process.overview.new": "Nuevo", + // "menu.section.icon.access_control": "Access Control menu section", + "menu.section.icon.access_control": "Sección del menú de control de acceso", - // "profile.breadcrumbs": "Update Profile", - "profile.breadcrumbs": "Actualización del perfil", + // "menu.section.icon.admin_search": "Admin search menu section", + "menu.section.icon.admin_search": "Sección del menú de búsqueda de administrador", - // "profile.card.identify": "Identify", - "profile.card.identify": "Identificar", + // "menu.section.icon.control_panel": "Control Panel menu section", + "menu.section.icon.control_panel": "Sección del menú del Panel de control", - // "profile.card.security": "Security", - "profile.card.security": "Seguridad", + // "menu.section.icon.curation_tasks": "Curation Task menu section", + "menu.section.icon.curation_tasks": "Sección del menú de Tareas de curación", - // "profile.form.submit": "Save", - "profile.form.submit": "Guardar", + // "menu.section.icon.edit": "Edit menu section", + "menu.section.icon.edit": "Editar sección del menú", - // "profile.groups.head": "Authorization groups you belong to", - "profile.groups.head": "Grupos de autorización a los que pertenece", + // "menu.section.icon.export": "Export menu section", + "menu.section.icon.export": "Exportar sección de menú", - // "profile.head": "Update Profile", - "profile.head": "Actualización del perfil", + // "menu.section.icon.find": "Find menu section", + "menu.section.icon.find": "Buscar sección de menú", - // "profile.metadata.form.error.firstname.required": "First Name is required", - "profile.metadata.form.error.firstname.required": "Se requiere el primer nombre", + // "menu.section.icon.health": "Health check menu section", + "menu.section.icon.health": "Sección de menú de Chequeos", - // "profile.metadata.form.error.lastname.required": "Last Name is required", - "profile.metadata.form.error.lastname.required": "Se requiere apellido", + // "menu.section.icon.import": "Import menu section", + "menu.section.icon.import": "Importar sección de menú", - // "profile.metadata.form.label.email": "Email Address", - "profile.metadata.form.label.email": "Dirección de correo electrónico", + // "menu.section.icon.new": "New menu section", + "menu.section.icon.new": "Nueva sección de menú", - // "profile.metadata.form.label.firstname": "First Name", - "profile.metadata.form.label.firstname": "Primer nombre", + // "menu.section.icon.pin": "Pin sidebar", + "menu.section.icon.pin": "Anclar barra lateral", - // "profile.metadata.form.label.language": "Language", - "profile.metadata.form.label.language": "Idioma", + // "menu.section.icon.processes": "Processes Health", + "menu.section.icon.processes": "Sección de menú de Procesosde chequeo", - // "profile.metadata.form.label.lastname": "Last Name", - "profile.metadata.form.label.lastname": "Apellido", + // "menu.section.icon.registries": "Registries menu section", + "menu.section.icon.registries": "Sección de menu de Registros", - // "profile.metadata.form.label.phone": "Contact Telephone", - "profile.metadata.form.label.phone": "Teléfono de contacto", + // "menu.section.icon.statistics_task": "Statistics Task menu section", + "menu.section.icon.statistics_task": "Sección del menú de Tarea de estadísticas", - // "profile.metadata.form.notifications.success.content": "Your changes to the profile were saved.", - "profile.metadata.form.notifications.success.content": "Se guardaron sus cambios en el perfil.", + // "menu.section.icon.workflow": "Administer workflow menu section", + "menu.section.icon.workflow": "Sección del menú de Administración de flujos de trabajo", - // "profile.metadata.form.notifications.success.title": "Profile saved", - "profile.metadata.form.notifications.success.title": "Perfil guardado", + // "menu.section.icon.unpin": "Unpin sidebar", + "menu.section.icon.unpin": "Desanclar la barra lateral", - // "profile.notifications.warning.no-changes.content": "No changes were made to the Profile.", - "profile.notifications.warning.no-changes.content": "No se realizaron cambios en el perfil.", - // "profile.notifications.warning.no-changes.title": "No changes", - "profile.notifications.warning.no-changes.title": "Sin cambios", - // "profile.security.form.error.matching-passwords": "The passwords do not match.", - "profile.security.form.error.matching-passwords": "Las contraseñas no coinciden.", + // "menu.section.import": "Import", + "menu.section.import": "Importar", - // "profile.security.form.error.password-length": "The password should be at least 6 characters long.", - "profile.security.form.error.password-length": "La contraseña debe tener al menos 6 caracteres.", + // "menu.section.import_batch": "Batch Import (ZIP)", + "menu.section.import_batch": "Importación por lotes (ZIP)", - // "profile.security.form.info": "Optionally, you can enter a new password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", - "profile.security.form.info": "Opcionalmente, puede ingresar una nueva contraseña en el cuadro a continuación y confirmarla escribiéndola nuevamente en el segundo cuadro. Debe tener al menos seis caracteres.", + // "menu.section.import_metadata": "Metadata", + "menu.section.import_metadata": "Metadatos", - // "profile.security.form.label.password": "Password", - "profile.security.form.label.password": "Contraseña", - // "profile.security.form.label.passwordrepeat": "Retype to confirm", - "profile.security.form.label.passwordrepeat": "Rescriba para confirmar", - // "profile.security.form.notifications.success.content": "Your changes to the password were saved.", - "profile.security.form.notifications.success.content": "Se guardaron sus cambios a la contraseña.", + // "menu.section.new": "New", + "menu.section.new": "Nuevo", - // "profile.security.form.notifications.success.title": "Password saved", - "profile.security.form.notifications.success.title": "Contraseña guardada", + // "menu.section.new_collection": "Collection", + "menu.section.new_collection": "Colección", - // "profile.security.form.notifications.error.title": "Error changing passwords", - "profile.security.form.notifications.error.title": "Error al cambiar las contraseñas", + // "menu.section.new_community": "Community", + "menu.section.new_community": "Comunidad", - // "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": "La contraseña debe tener al menos 6 caracteres.", + // "menu.section.new_item": "Item", + "menu.section.new_item": "Artículo", - // "profile.security.form.notifications.error.not-same": "The provided passwords are not the same.", - "profile.security.form.notifications.error.not-same": "Las contraseñas proporcionadas no son las mismas.", + // "menu.section.new_item_version": "Item Version", + "menu.section.new_item_version": "Versión del artículo", - // "profile.title": "Update Profile", - "profile.title": "Actualización del perfil", + // "menu.section.new_process": "Process", + "menu.section.new_process": "Proceso", - // "project.listelement.badge": "Research Project", - "project.listelement.badge": "Proyecto de investigación", + // "menu.section.pin": "Pin sidebar", + "menu.section.pin": "Anclar barra lateral", - // "project.page.contributor": "Contributors", - "project.page.contributor": "Colaboradores", + // "menu.section.unpin": "Unpin sidebar", + "menu.section.unpin": "Desanclar la barra lateral", - // "project.page.description": "Description", - "project.page.description": "Descripción", - // "project.page.edit": "Edit this item", - "project.page.edit": "Editar este artículo", - // "project.page.expectedcompletion": "Expected Completion", - "project.page.expectedcompletion": "Finalización prevista", + // "menu.section.processes": "Processes", + "menu.section.processes": "Procesos", - // "project.page.funder": "Funders", - "project.page.funder": "Financiadores", + // "menu.section.health": "Health", + "menu.section.health": "Chequeo", - // "project.page.id": "ID", - "project.page.id": "IDENTIFICACIÓN", - // "project.page.keyword": "Keywords", - "project.page.keyword": "Palabras clave", - // "project.page.status": "Status", - "project.page.status": "Estado", + // "menu.section.registries": "Registries", + "menu.section.registries": "Registros", - // "project.page.titleprefix": "Research Project: ", - "project.page.titleprefix": "Proyecto de investigación:", + // "menu.section.registries_format": "Format", + "menu.section.registries_format": "Formato", - // "project.search.results.head": "Project Search Results", - "project.search.results.head": "Resultados de búsqueda de proyectos", + // "menu.section.registries_metadata": "Metadata", + "menu.section.registries_metadata": "Metadatos", - // "publication.listelement.badge": "Publication", - "publication.listelement.badge": "Publicación", + // "menu.section.statistics": "Statistics", + "menu.section.statistics": "Estadísticas", - // "publication.page.description": "Description", - "publication.page.description": "Descripción", + // "menu.section.statistics_task": "Statistics Task", + "menu.section.statistics_task": "Tarea de estadísticas", - // "publication.page.edit": "Edit this item", - "publication.page.edit": "Editar este artículo", - // "publication.page.journal-issn": "Journal ISSN", - "publication.page.journal-issn": "Revista ISSN", - // "publication.page.journal-title": "Journal Title", - "publication.page.journal-title": "Título de la revista", + // "menu.section.toggle.access_control": "Toggle Access Control section", + "menu.section.toggle.access_control": "Alternar sección de control de acceso", - // "publication.page.publisher": "Publisher", - "publication.page.publisher": "Editor", + // "menu.section.toggle.control_panel": "Toggle Control Panel section", + "menu.section.toggle.control_panel": "Alternar la sección del Panel de control", - // "publication.page.titleprefix": "Publication: ", - "publication.page.titleprefix": "Publicación:", + // "menu.section.toggle.curation_task": "Toggle Curation Task section", + "menu.section.toggle.curation_task": "Alternar la sección Tarea de curación", - // "publication.page.volume-title": "Volume Title", - "publication.page.volume-title": "Título del volumen", + // "menu.section.toggle.edit": "Toggle Edit section", + "menu.section.toggle.edit": "Alternar sección de Edición", - // "publication.search.results.head": "Publication Search Results", - "publication.search.results.head": "Resultados de la búsqueda de publicaciones", + // "menu.section.toggle.export": "Toggle Export section", + "menu.section.toggle.export": "Alternar sección de Exportación", - // "publication.search.title": "Publication Search", - "publication.search.title": "Búsqueda de publicaciones", + // "menu.section.toggle.find": "Toggle Find section", + "menu.section.toggle.find": "Alternar sección de Búsqueda", + // "menu.section.toggle.import": "Toggle Import section", + "menu.section.toggle.import": "Alternar sección de Importación", - // "media-viewer.next": "Next", - "media-viewer.next": "próximo", + // "menu.section.toggle.new": "Toggle New section", + "menu.section.toggle.new": "Alternar nueva sección", - // "media-viewer.previous": "Previous", - "media-viewer.previous": "Anterior", + // "menu.section.toggle.registries": "Toggle Registries section", + "menu.section.toggle.registries": "Alternar sección de Registros", - // "media-viewer.playlist": "Playlist", - "media-viewer.playlist": "Lista de reproducción", + // "menu.section.toggle.statistics_task": "Toggle Statistics Task section", + "menu.section.toggle.statistics_task": "Alternar sección de Tarea de estadísticas", - // "register-email.title": "New user registration", - "register-email.title": "Registro de nuevo usuario", + // "menu.section.workflow": "Administer Workflow", + "menu.section.workflow": "Administrar flujo de trabajo", - // "register-page.create-profile.header": "Create Profile", - "register-page.create-profile.header": "Crear perfil", - // "register-page.create-profile.identification.header": "Identify", - "register-page.create-profile.identification.header": "Identificar", + // "metadata-export-search.tooltip": "Export search results as CSV", + "metadata-export-search.tooltip": "Exportar los resultados de búsqueda a CSV", + + // "metadata-export-search.submit.success": "The export was started successfully", + "metadata-export-search.submit.success": "La exortación ha comenzado satisfactoriamente", + + // "metadata-export-search.submit.error": "Starting the export has failed", + "metadata-export-search.submit.error": "Ha fallado el comienzo de la exportación", - // "register-page.create-profile.identification.email": "Email Address", - "register-page.create-profile.identification.email": "Dirección de correo electrónico", - // "register-page.create-profile.identification.first-name": "First Name *", - "register-page.create-profile.identification.first-name": "Primer nombre *", + // "mydspace.breadcrumbs": "MyDSpace", + "mydspace.breadcrumbs": "Mi DSpace", - // "register-page.create-profile.identification.first-name.error": "Please fill in a First Name", - "register-page.create-profile.identification.first-name.error": "Por favor ingrese un nombre", + // "mydspace.description": "", + "mydspace.description": "", - // "register-page.create-profile.identification.last-name": "Last Name *", - "register-page.create-profile.identification.last-name": "Apellido *", + // "mydspace.general.text-here": "here", + "mydspace.general.text-here": "aquí", - // "register-page.create-profile.identification.last-name.error": "Please fill in a Last Name", - "register-page.create-profile.identification.last-name.error": "Por favor ingrese un apellido", + // "mydspace.messages.controller-help": "Select this option to send a message to item's submitter.", + "mydspace.messages.controller-help": "Seleccione esta opción para enviar un mensaje al remitente del ítem.", - // "register-page.create-profile.identification.contact": "Contact Telephone", - "register-page.create-profile.identification.contact": "Teléfono de contacto", + // "mydspace.messages.description-placeholder": "Insert your message here...", + "mydspace.messages.description-placeholder": "Inserta tu mensaje aquí...", - // "register-page.create-profile.identification.language": "Language", - "register-page.create-profile.identification.language": "Idioma", + // "mydspace.messages.hide-msg": "Hide message", + "mydspace.messages.hide-msg": "Ocultar mensaje", - // "register-page.create-profile.security.header": "Security", - "register-page.create-profile.security.header": "Seguridad", + // "mydspace.messages.mark-as-read": "Mark as read", + "mydspace.messages.mark-as-read": "Marcar como leído", - // "register-page.create-profile.security.info": "Please enter a password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", - "register-page.create-profile.security.info": "Ingrese una contraseña en el cuadro a continuación y confírmela escribiéndola nuevamente en el segundo cuadro. Debe tener al menos seis caracteres.", + // "mydspace.messages.mark-as-unread": "Mark as unread", + "mydspace.messages.mark-as-unread": "marcar como no leído", - // "register-page.create-profile.security.label.password": "Password *", - "register-page.create-profile.security.label.password": "Contraseña *", + // "mydspace.messages.no-content": "No content.", + "mydspace.messages.no-content": "Sin contenido.", - // "register-page.create-profile.security.label.passwordrepeat": "Retype to confirm *", - "register-page.create-profile.security.label.passwordrepeat": "Rescriba para confirmar *", + // "mydspace.messages.no-messages": "No messages yet.", + "mydspace.messages.no-messages": "Aún no hay mensajes.", - // "register-page.create-profile.security.error.empty-password": "Please enter a password in the box below.", - "register-page.create-profile.security.error.empty-password": "Ingrese una contraseña en el cuadro a continuación.", + // "mydspace.messages.send-btn": "Send", + "mydspace.messages.send-btn": "Enviar", - // "register-page.create-profile.security.error.matching-passwords": "The passwords do not match.", - "register-page.create-profile.security.error.matching-passwords": "Las contraseñas no coinciden.", + // "mydspace.messages.show-msg": "Show message", + "mydspace.messages.show-msg": "Mostrar mensaje", - // "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": "La contraseña debe tener al menos 6 caracteres.", + // "mydspace.messages.subject-placeholder": "Subject...", + "mydspace.messages.subject-placeholder": "Asunto...", - // "register-page.create-profile.submit": "Complete Registration", - "register-page.create-profile.submit": "Registro completo", + // "mydspace.messages.submitter-help": "Select this option to send a message to controller.", + "mydspace.messages.submitter-help": "Seleccione esta opción para enviar un mensaje al controlador.", - // "register-page.create-profile.submit.error.content": "Something went wrong while registering a new user.", - "register-page.create-profile.submit.error.content": "Se produjo un error al registrar un nuevo usuario.", + // "mydspace.messages.title": "Messages", + "mydspace.messages.title": "Mensajes", - // "register-page.create-profile.submit.error.head": "Registration failed", - "register-page.create-profile.submit.error.head": "Registro fallido", + // "mydspace.messages.to": "To", + "mydspace.messages.to": "Para", - // "register-page.create-profile.submit.success.content": "The registration was successful. You have been logged in as the created user.", - "register-page.create-profile.submit.success.content": "El registro fue exitoso. Ha iniciado sesión como el usuario creado.", + // "mydspace.new-submission": "New submission", + "mydspace.new-submission": "Nuevo envío", - // "register-page.create-profile.submit.success.head": "Registration completed", - "register-page.create-profile.submit.success.head": "Registro completado", + // "mydspace.new-submission-external": "Import metadata from external source", + "mydspace.new-submission-external": "Importar metadatos de una fuente externa", + // "mydspace.new-submission-external-short": "Import metadata", + "mydspace.new-submission-external-short": "Importar metadatos", - // "register-page.registration.header": "New user registration", - "register-page.registration.header": "Registro de nuevo usuario", + // "mydspace.results.head": "Your submissions", + "mydspace.results.head": "Tus envíos", - // "register-page.registration.info": "Register an account to subscribe to collections for email updates, and submit new items to DSpace.", - "register-page.registration.info": "Registre una cuenta para suscribirse a colecciones para recibir actualizaciones por correo electrónico y envíe nuevos artículos a DSpace.", + // "mydspace.results.no-abstract": "No Abstract", + "mydspace.results.no-abstract": "Sin resumen", - // "register-page.registration.email": "Email Address *", - "register-page.registration.email": "Dirección de correo electrónico *", + // "mydspace.results.no-authors": "No Authors", + "mydspace.results.no-authors": "Sin autores", - // "register-page.registration.email.error.required": "Please fill in an email address", - "register-page.registration.email.error.required": "Por favor ingrese una dirección de correo electrónico", + // "mydspace.results.no-collections": "No Collections", + "mydspace.results.no-collections": "No hay colecciones", - // "register-page.registration.email.error.pattern": "Please fill in a valid email address", - "register-page.registration.email.error.pattern": "Por favor ingrese una dirección de correo electrónico válida", + // "mydspace.results.no-date": "No Date", + "mydspace.results.no-date": "Sin fecha", - // "register-page.registration.email.hint": "This address will be verified and used as your login name.", - "register-page.registration.email.hint": "Esta dirección será verificada y utilizada como su nombre de inicio de sesión.", + // "mydspace.results.no-files": "No Files", + "mydspace.results.no-files": "Sin archivos", - // "register-page.registration.submit": "Register", - "register-page.registration.submit": "Registrarse", + // "mydspace.results.no-results": "There were no items to show", + "mydspace.results.no-results": "No hay ítems para mostrar", - // "register-page.registration.success.head": "Verification email sent", - "register-page.registration.success.head": "El mensaje de verificación ha sido enviado", + // "mydspace.results.no-title": "No title", + "mydspace.results.no-title": "Sin título", - // "register-page.registration.success.content": "An email has been sent to {{ email }} containing a special URL and further instructions.", - "register-page.registration.success.content": "Se envió un correo electrónico a {{ email }} que contiene una URL especial y más instrucciones.", + // "mydspace.results.no-uri": "No Uri", + "mydspace.results.no-uri": "Sin Uri", - // "register-page.registration.error.head": "Error when trying to register email", - "register-page.registration.error.head": "Error al intentar registrar el correo electrónico", + // "mydspace.search-form.placeholder": "Search in mydspace...", + "mydspace.search-form.placeholder": "Buscar en Mi DSpace...", - // "register-page.registration.error.content": "An error occured when registering the following email address: {{ email }}", - "register-page.registration.error.content": "Se produjo un error al registrar la siguiente dirección de correo electrónico: {{ email }}", + // "mydspace.show.workflow": "Workflow tasks", + "mydspace.show.workflow": "Tareas del flujo de trabajo", + // "mydspace.show.workspace": "Your Submissions", + "mydspace.show.workspace": "Sus envíos", + // "mydspace.status.archived": "Archived", + "mydspace.status.archived": "Archivado", - // "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": "No se pudo encontrar una coincidencia adecuada para el tipo de relación {{ type }} entre los dos artículos", + // "mydspace.status.validation": "Validation", + "mydspace.status.validation": "Validación", - // "relationships.add.error.server.content": "The server returned an error", - "relationships.add.error.server.content": "El servidor devolvió un error", + // "mydspace.status.waiting-for-controller": "Waiting for controller", + "mydspace.status.waiting-for-controller": "Esperando al controlador", - // "relationships.add.error.title": "Unable to add relationship", - "relationships.add.error.title": "No se puede agregar una relación", + // "mydspace.status.workflow": "Workflow", + "mydspace.status.workflow": "Flujo de trabajo", - // "relationships.isAuthorOf": "Authors", - "relationships.isAuthorOf": "Autores", + // "mydspace.status.workspace": "Workspace", + "mydspace.status.workspace": "Espacio de trabajo", - // "relationships.isAuthorOf.Person": "Authors (persons)", - "relationships.isAuthorOf.Person": "Autores (personas)", + // "mydspace.title": "MyDSpace", + "mydspace.title": "Mi DSpace", - // "relationships.isAuthorOf.OrgUnit": "Authors (organizational units)", - "relationships.isAuthorOf.OrgUnit": "Autores (unidades organizativas)", + // "mydspace.upload.upload-failed": "Error creating new workspace. Please verify the content uploaded before retry.", + "mydspace.upload.upload-failed": "Error al crear un nuevo espacio de trabajo. Verifique el contenido cargado antes de volver a intentarlo.", - // "relationships.isIssueOf": "Journal Issues", - "relationships.isIssueOf": "Problemas de la revista", + // "mydspace.upload.upload-failed-manyentries": "Unprocessable file. Detected too many entries but allowed only one for file.", + "mydspace.upload.upload-failed-manyentries": "Archivo no procesable. Se detectaron demasiadas entradas, pero solo se permitió una para el archivo.", - // "relationships.isJournalIssueOf": "Journal Issue", - "relationships.isJournalIssueOf": "Número de la revista", + // "mydspace.upload.upload-failed-moreonefile": "Unprocessable request. Only one file is allowed.", + "mydspace.upload.upload-failed-moreonefile": "Solicitud no procesable. Solo se permite un archivo.", - // "relationships.isJournalOf": "Journals", - "relationships.isJournalOf": "Revistas", + // "mydspace.upload.upload-multiple-successful": "{{qty}} new workspace items created.", + "mydspace.upload.upload-multiple-successful": "Se crearon {{ qty }} nuevos ítems del espacio de trabajo.", - // "relationships.isOrgUnitOf": "Organizational Units", - "relationships.isOrgUnitOf": "Unidades organizativas", + // "mydspace.upload.upload-successful": "New workspace item created. Click {{here}} for edit it.", + "mydspace.upload.upload-successful": "Se creó un nuevo ítems en el espacio de trabajo. Haga clic en {{ here }} para editarlo.", - // "relationships.isPersonOf": "Authors", - "relationships.isPersonOf": "Autores", + // "mydspace.view-btn": "View", + "mydspace.view-btn": "Vista", - // "relationships.isProjectOf": "Research Projects", - "relationships.isProjectOf": "Proyectos de investigación", - // "relationships.isPublicationOf": "Publications", - "relationships.isPublicationOf": "Publicaciones", - // "relationships.isPublicationOfJournalIssue": "Articles", - "relationships.isPublicationOfJournalIssue": "Artículos", + // "nav.browse.header": "All of DSpace", + "nav.browse.header": "Todo DSpace", - // "relationships.isSingleJournalOf": "Journal", - "relationships.isSingleJournalOf": "diario", + // "nav.community-browse.header": "By Community", + "nav.community-browse.header": "Por comunidad", - // "relationships.isSingleVolumeOf": "Journal Volume", - "relationships.isSingleVolumeOf": "Volumen de la revista", + // "nav.language": "Language switch", + "nav.language": "Cambio de idioma", - // "relationships.isVolumeOf": "Journal Volumes", - "relationships.isVolumeOf": "Volúmenes de revistas", + // "nav.login": "Log In", + "nav.login": "Iniciar sesión", - // "relationships.isContributorOf": "Contributors", - "relationships.isContributorOf": "Colaboradores", + // "nav.logout": "User profile menu and Log Out", + "nav.logout": "Menú de perfil de usuario y cierre de sesión", - // "relationships.isContributorOf.OrgUnit": "Contributor (Organizational Unit)", - "relationships.isContributorOf.OrgUnit": "Colaborador (Unidad organizativa)", + // "nav.main.description": "Main navigation bar", + "nav.main.description": "Barra de navegación principal", - // "relationships.isContributorOf.Person": "Contributor", - "relationships.isContributorOf.Person": "Contribuyente", + // "nav.mydspace": "MyDSpace", + "nav.mydspace": "Mi DSpace", - // "relationships.isFundingAgencyOf.OrgUnit": "Funder", - "relationships.isFundingAgencyOf.OrgUnit": "Financiador", + // "nav.profile": "Profile", + "nav.profile": "Perfil", + // "nav.search": "Search", + "nav.search": "Buscar", - // "repository.image.logo": "Repository logo", - "repository.image.logo": "Logotipo del repositorio", + // "nav.statistics.header": "Statistics", + "nav.statistics.header": "Estadísticas", - // "repository.title.prefix": "DSpace Angular :: ", - "repository.title.prefix": "DSpace Angular ::", + // "nav.stop-impersonating": "Stop impersonating EPerson", + "nav.stop-impersonating": "Dejar de impersonar a EPerson", - // "repository.title.prefixDSpace": "DSpace Angular ::", - "repository.title.prefixDSpace": "DSpace Angular ::", + // "nav.toggle" : "Toggle navigation", + "nav.toggle": "Alternar navegación", + // "nav.user.description" : "User profile bar", + "nav.user.description": "Barra de perfil de usuario", - // "resource-policies.add.button": "Add", - "resource-policies.add.button": "Agregar", + // "none.listelement.badge": "Item", + "none.listelement.badge": "Ítem", - // "resource-policies.add.for.": "Add a new policy", - "resource-policies.add.for.": "Agregar una nueva política", + // "orgunit.listelement.badge": "Organizational Unit", + "orgunit.listelement.badge": "Unidad organizativa", - // "resource-policies.add.for.bitstream": "Add a new Bitstream policy", - "resource-policies.add.for.bitstream": "Agregar una nueva política de Archivo", + // "orgunit.page.city": "City", + "orgunit.page.city": "Ciudad", - // "resource-policies.add.for.bundle": "Add a new Bundle policy", - "resource-policies.add.for.bundle": "Agregar una nueva política de paquete", + // "orgunit.page.country": "Country", + "orgunit.page.country": "País", - // "resource-policies.add.for.item": "Add a new Item policy", - "resource-policies.add.for.item": "Agregar una nueva política de artículos", + // "orgunit.page.dateestablished": "Date established", + "orgunit.page.dateestablished": "Fecha de establecimiento", - // "resource-policies.add.for.community": "Add a new Community policy", - "resource-policies.add.for.community": "Agregar una nueva política comunitaria", + // "orgunit.page.description": "Description", + "orgunit.page.description": "Descripción", - // "resource-policies.add.for.collection": "Add a new Collection policy", - "resource-policies.add.for.collection": "Agregar una nueva política de colección", + // "orgunit.page.edit": "Edit this item", + "orgunit.page.edit": "Editar este ítem", - // "resource-policies.create.page.heading": "Create new resource policy for ", - "resource-policies.create.page.heading": "Crear una nueva política de recursos para", + // "orgunit.page.id": "ID", + "orgunit.page.id": "ID", - // "resource-policies.create.page.failure.content": "An error occurred while creating the resource policy.", - "resource-policies.create.page.failure.content": "Se produjo un error al crear la política de recursos.", + // "orgunit.page.titleprefix": "Organizational Unit: ", + "orgunit.page.titleprefix": "Unidad organizativa:", - // "resource-policies.create.page.success.content": "Operation successful", - "resource-policies.create.page.success.content": "Operación exitosa", - // "resource-policies.create.page.title": "Create new resource policy", - "resource-policies.create.page.title": "Crear nueva política de recursos", + // "pagination.options.description": "Pagination options", + "pagination.options.description": "Opciones de paginación", - // "resource-policies.delete.btn": "Delete selected", - "resource-policies.delete.btn": "Eliminar seleccionado", + // "pagination.results-per-page": "Results Per Page", + "pagination.results-per-page": "Resultados por página", - // "resource-policies.delete.btn.title": "Delete selected resource policies", - "resource-policies.delete.btn.title": "Eliminar las políticas de recursos seleccionadas", + // "pagination.showing.detail": "{{ range }} of {{ total }}", + "pagination.showing.detail": "{{ range }} de {{ total }}", - // "resource-policies.delete.failure.content": "An error occurred while deleting selected resource policies.", - "resource-policies.delete.failure.content": "Se produjo un error al eliminar las políticas de recursos seleccionadas.", + // "pagination.showing.label": "Now showing ", + "pagination.showing.label": "Mostrando", - // "resource-policies.delete.success.content": "Operation successful", - "resource-policies.delete.success.content": "Operación exitosa", + // "pagination.sort-direction": "Sort Options", + "pagination.sort-direction": "Opciones de clasificación", - // "resource-policies.edit.page.heading": "Edit resource policy ", - "resource-policies.edit.page.heading": "Editar la política de recursos", - // "resource-policies.edit.page.failure.content": "An error occurred while editing the resource policy.", - "resource-policies.edit.page.failure.content": "Se produjo un error al editar la política de recursos.", - // "resource-policies.edit.page.success.content": "Operation successful", - "resource-policies.edit.page.success.content": "Operación exitosa", + // "person.listelement.badge": "Person", + "person.listelement.badge": "Persona", - // "resource-policies.edit.page.title": "Edit resource policy", - "resource-policies.edit.page.title": "Editar la política de recursos", + // "person.listelement.no-title": "No name found", + "person.listelement.no-title": "No se encontró ningún nombre", - // "resource-policies.form.action-type.label": "Select the action type", - "resource-policies.form.action-type.label": "Seleccione el tipo de acción", + // "person.page.birthdate": "Birth Date", + "person.page.birthdate": "Fecha de nacimiento", - // "resource-policies.form.action-type.required": "You must select the resource policy action.", - "resource-policies.form.action-type.required": "Debe seleccionar la acción de la política de recursos.", + // "person.page.edit": "Edit this item", + "person.page.edit": "Editar este artículo", - // "resource-policies.form.eperson-group-list.label": "The eperson or group that will be granted the permission", - "resource-policies.form.eperson-group-list.label": "La persona o grupo al que se le otorgará el permiso", + // "person.page.email": "Email Address", + "person.page.email": "Dirección de correo electrónico", - // "resource-policies.form.eperson-group-list.select.btn": "Select", - "resource-policies.form.eperson-group-list.select.btn": "Seleccione", + // "person.page.firstname": "First Name", + "person.page.firstname": "Primer nombre", - // "resource-policies.form.eperson-group-list.tab.eperson": "Search for a ePerson", - "resource-policies.form.eperson-group-list.tab.eperson": "Buscar una ePerson", + // "person.page.jobtitle": "Job Title", + "person.page.jobtitle": "Título profesional", - // "resource-policies.form.eperson-group-list.tab.group": "Search for a group", - "resource-policies.form.eperson-group-list.tab.group": "Buscar un grupo", + // "person.page.lastname": "Last Name", + "person.page.lastname": "Apellido", - // "resource-policies.form.eperson-group-list.table.headers.action": "Action", - "resource-policies.form.eperson-group-list.table.headers.action": "Acción", + // "person.page.name": "Name", + "person.page.name": "Nombre", - // "resource-policies.form.eperson-group-list.table.headers.id": "ID", - "resource-policies.form.eperson-group-list.table.headers.id": "IDENTIFICACIÓN", + // "person.page.link.full": "Show all metadata", + "person.page.link.full": "Mostrar todos los metadatos", - // "resource-policies.form.eperson-group-list.table.headers.name": "Name", - "resource-policies.form.eperson-group-list.table.headers.name": "Nombre", + // "person.page.orcid": "ORCID", + "person.page.orcid": "ORCID", - // "resource-policies.form.date.end.label": "End Date", - "resource-policies.form.date.end.label": "Fecha final", + // "person.page.staffid": "Staff ID", + "person.page.staffid": "Identificación del personal", - // "resource-policies.form.date.start.label": "Start Date", - "resource-policies.form.date.start.label": "Fecha de inicio", + // "person.page.titleprefix": "Person: ", + "person.page.titleprefix": "Persona:", - // "resource-policies.form.description.label": "Description", - "resource-policies.form.description.label": "Descripción", + // "person.search.results.head": "Person Search Results", + "person.search.results.head": "Resultados de búsqueda de personas", - // "resource-policies.form.name.label": "Name", - "resource-policies.form.name.label": "Nombre", + // "person-relationships.search.results.head": "Person Search Results", + "person-relationships.search.results.head": "Resultados de búsqueda de personas", - // "resource-policies.form.policy-type.label": "Select the policy type", - "resource-policies.form.policy-type.label": "Seleccione el tipo de póliza", + // "person.search.title": "Person Search", + "person.search.title": "Búsqueda de personas", - // "resource-policies.form.policy-type.required": "You must select the resource policy type.", - "resource-policies.form.policy-type.required": "Debe seleccionar el tipo de política de recursos.", - // "resource-policies.table.headers.action": "Action", - "resource-policies.table.headers.action": "Acción", - // "resource-policies.table.headers.date.end": "End Date", - "resource-policies.table.headers.date.end": "Fecha final", + // "process.new.select-parameters": "Parameters", + "process.new.select-parameters": "Parámetros", - // "resource-policies.table.headers.date.start": "Start Date", - "resource-policies.table.headers.date.start": "Fecha de inicio", + // "process.new.cancel": "Cancel", + "process.new.cancel": "Cancelar", - // "resource-policies.table.headers.edit": "Edit", - "resource-policies.table.headers.edit": "Editar", + // "process.new.submit": "Save", + "process.new.submit": "Guardar", - // "resource-policies.table.headers.edit.group": "Edit group", - "resource-policies.table.headers.edit.group": "Editar grupo", + // "process.new.select-script": "Script", + "process.new.select-script": "Texto", - // "resource-policies.table.headers.edit.policy": "Edit policy", - "resource-policies.table.headers.edit.policy": "Editar política", + // "process.new.select-script.placeholder": "Choose a script...", + "process.new.select-script.placeholder": "Elija un guión...", - // "resource-policies.table.headers.eperson": "EPerson", - "resource-policies.table.headers.eperson": "Epersona", + // "process.new.select-script.required": "Script is required", + "process.new.select-script.required": "Se requiere script", - // "resource-policies.table.headers.group": "Group", - "resource-policies.table.headers.group": "Grupo", + // "process.new.parameter.file.upload-button": "Select file...", + "process.new.parameter.file.upload-button": "Seleccione Archivo...", - // "resource-policies.table.headers.id": "ID", - "resource-policies.table.headers.id": "IDENTIFICACIÓN", + // "process.new.parameter.file.required": "Please select a file", + "process.new.parameter.file.required": "Por favor seleccione un archivo", - // "resource-policies.table.headers.name": "Name", - "resource-policies.table.headers.name": "Nombre", + // "process.new.parameter.string.required": "Parameter value is required", + "process.new.parameter.string.required": "Se requiere el valor del parámetro", - // "resource-policies.table.headers.policyType": "type", - "resource-policies.table.headers.policyType": "escribe", + // "process.new.parameter.type.value": "value", + "process.new.parameter.type.value": "valor", - // "resource-policies.table.headers.title.for.bitstream": "Policies for Bitstream", - "resource-policies.table.headers.title.for.bitstream": "Políticas para Archivo", + // "process.new.parameter.type.file": "file", + "process.new.parameter.type.file": "expediente", - // "resource-policies.table.headers.title.for.bundle": "Policies for Bundle", - "resource-policies.table.headers.title.for.bundle": "Políticas para el paquete", + // "process.new.parameter.required.missing": "The following parameters are required but still missing:", + "process.new.parameter.required.missing": "Los siguientes parámetros son obligatorios pero aún faltan:", - // "resource-policies.table.headers.title.for.item": "Policies for Item", - "resource-policies.table.headers.title.for.item": "Políticas para el artículo", + // "process.new.notification.success.title": "Success", + "process.new.notification.success.title": "Éxito", - // "resource-policies.table.headers.title.for.community": "Policies for Community", - "resource-policies.table.headers.title.for.community": "Políticas para la comunidad", + // "process.new.notification.success.content": "The process was successfully created", + "process.new.notification.success.content": "El proceso fue creado con éxito", - // "resource-policies.table.headers.title.for.collection": "Policies for Collection", - "resource-policies.table.headers.title.for.collection": "Políticas de cobranza", + // "process.new.notification.error.title": "Error", + "process.new.notification.error.title": "Error", + // "process.new.notification.error.content": "An error occurred while creating this process", + "process.new.notification.error.content": "Se produjo un error al crear este proceso.", + // "process.new.header": "Create a new process", + "process.new.header": "Crea un nuevo proceso", - // "search.description": "", - "search.description": "", + // "process.new.title": "Create a new process", + "process.new.title": "Crea un nuevo proceso", - // "search.switch-configuration.title": "Show", - "search.switch-configuration.title": "Show", + // "process.new.breadcrumbs": "Create a new process", + "process.new.breadcrumbs": "Crea un nuevo proceso", - // "search.title": "Search", - "search.title": "Buscar", - // "search.breadcrumbs": "Search", - "search.breadcrumbs": "Buscar", - // "search.search-form.placeholder": "Search the repository ...", - "search.search-form.placeholder": "Buscar en el repositorio ...", + // "process.detail.arguments" : "Arguments", + "process.detail.arguments": "Argumentos", + // "process.detail.arguments.empty" : "This process doesn't contain any arguments", + "process.detail.arguments.empty": "Este proceso no contiene ningún argumento", - // "search.filters.applied.f.author": "Author", - "search.filters.applied.f.author": "Autor", + // "process.detail.back" : "Back", + "process.detail.back": "Atrás", - // "search.filters.applied.f.dateIssued.max": "End date", - "search.filters.applied.f.dateIssued.max": "Fecha final", + // "process.detail.output" : "Process Output", + "process.detail.output": "Salida del proceso", - // "search.filters.applied.f.dateIssued.min": "Start date", - "search.filters.applied.f.dateIssued.min": "Fecha de inicio", + // "process.detail.logs.button": "Retrieve process output", + "process.detail.logs.button": "Recuperar la salida del proceso", - // "search.filters.applied.f.dateSubmitted": "Date submitted", - "search.filters.applied.f.dateSubmitted": "Fecha Enviado", + // "process.detail.logs.loading": "Retrieving", + "process.detail.logs.loading": "Recuperando", - // "search.filters.applied.f.discoverable": "Private", - "search.filters.applied.f.discoverable": "Privado", + // "process.detail.logs.none": "This process has no output", + "process.detail.logs.none": "Este proceso no tiene salida", - // "search.filters.applied.f.entityType": "Item Type", - "search.filters.applied.f.entityType": "Tipo de artículo", + // "process.detail.output-files" : "Output Files", + "process.detail.output-files": "Archivos de salida", - // "search.filters.applied.f.has_content_in_original_bundle": "Has files", - "search.filters.applied.f.has_content_in_original_bundle": "Tiene archivos", + // "process.detail.output-files.empty" : "This process doesn't contain any output files", + "process.detail.output-files.empty": "Este proceso no contiene ningún archivo de salida", - // "search.filters.applied.f.itemtype": "Type", - "search.filters.applied.f.itemtype": "Escribe", + // "process.detail.script" : "Script", + "process.detail.script": "Secuencia de comandos", - // "search.filters.applied.f.namedresourcetype": "Status", - "search.filters.applied.f.namedresourcetype": "Estado", + // "process.detail.title" : "Process: {{ id }} - {{ name }}", + "process.detail.title": "Proceso: {{ id }} - {{ name }}", - // "search.filters.applied.f.subject": "Subject", - "search.filters.applied.f.subject": "Tema", + // "process.detail.start-time" : "Start time", + "process.detail.start-time": "Hora de inicio", - // "search.filters.applied.f.submitter": "Submitter", - "search.filters.applied.f.submitter": "Remitente", + // "process.detail.end-time" : "Finish time", + "process.detail.end-time": "Hora de finalización", - // "search.filters.applied.f.jobTitle": "Job Title", - "search.filters.applied.f.jobTitle": "Título profesional", + // "process.detail.status" : "Status", + "process.detail.status": "Estado", - // "search.filters.applied.f.birthDate.max": "End birth date", - "search.filters.applied.f.birthDate.max": "Fecha final de nacimiento", + // "process.detail.create" : "Create similar process", + "process.detail.create": "Crear un proceso similar", - // "search.filters.applied.f.birthDate.min": "Start birth date", - "search.filters.applied.f.birthDate.min": "Fecha de inicio de nacimiento", - // "search.filters.applied.f.withdrawn": "Withdrawn", - "search.filters.applied.f.withdrawn": "Retirado", + // "process.overview.table.finish" : "Finish time (UTC)", + "process.overview.table.finish": "Hora de finalización (UTC)", + // "process.overview.table.id" : "Process ID", + "process.overview.table.id": "ID de proceso", - // "search.filters.filter.author.head": "Author", - "search.filters.filter.author.head": "Autor", + // "process.overview.table.name" : "Name", + "process.overview.table.name": "Nombre", - // "search.filters.filter.author.placeholder": "Author name", - "search.filters.filter.author.placeholder": "Nombre del autor", + // "process.overview.table.start" : "Start time (UTC)", + "process.overview.table.start": "Hora de inicio (UTC)", - // "search.filters.filter.author.label": "Search author name", - "search.filters.filter.author.label": "Buscar el nombre del autor", + // "process.overview.table.status" : "Status", + "process.overview.table.status": "Estado", - // "search.filters.filter.birthDate.head": "Birth Date", - "search.filters.filter.birthDate.head": "Fecha de nacimiento", + // "process.overview.table.user" : "User", + "process.overview.table.user": "Usuario", - // "search.filters.filter.birthDate.placeholder": "Birth Date", - "search.filters.filter.birthDate.placeholder": "Fecha de nacimiento", + // "process.overview.title": "Processes Overview", + "process.overview.title": "Resumen de procesos", - // "search.filters.filter.birthDate.label": "Search birth date", - "search.filters.filter.birthDate.label": "Buscar fecha de nacimiento", + // "process.overview.breadcrumbs": "Processes Overview", + "process.overview.breadcrumbs": "Resumen de procesos", - // "search.filters.filter.collapse": "Collapse filter", - "search.filters.filter.collapse": "Colapsar filtro", + // "process.overview.new": "New", + "process.overview.new": "Nuevo", - // "search.filters.filter.creativeDatePublished.head": "Date Published", - "search.filters.filter.creativeDatePublished.head": "Fecha de publicación", - // "search.filters.filter.creativeDatePublished.placeholder": "Date Published", - "search.filters.filter.creativeDatePublished.placeholder": "Fecha de publicación", + // "profile.breadcrumbs": "Update Profile", + "profile.breadcrumbs": "Actualización del perfil", - // "search.filters.filter.creativeDatePublished.label": "Search date published", - "search.filters.filter.creativeDatePublished.label": "Fecha de búsqueda publicada", + // "profile.card.identify": "Identify", + "profile.card.identify": "Identificar", - // "search.filters.filter.creativeWorkEditor.head": "Editor", - "search.filters.filter.creativeWorkEditor.head": "Editor", + // "profile.card.security": "Security", + "profile.card.security": "Seguridad", - // "search.filters.filter.creativeWorkEditor.placeholder": "Editor", - "search.filters.filter.creativeWorkEditor.placeholder": "Editor", + // "profile.form.submit": "Save", + "profile.form.submit": "Guardar", - // "search.filters.filter.creativeWorkEditor.label": "Search editor", - "search.filters.filter.creativeWorkEditor.label": "Editor de búsqueda", + // "profile.groups.head": "Authorization groups you belong to", + "profile.groups.head": "Grupos de autorización a los que pertenece", - // "search.filters.filter.creativeWorkKeywords.head": "Subject", - "search.filters.filter.creativeWorkKeywords.head": "Tema", + // "profile.special.groups.head": "Authorization special groups you belong to", + "profile.special.groups.head": "Grupos especiales de autorización a los que pertenece", - // "search.filters.filter.creativeWorkKeywords.placeholder": "Subject", - "search.filters.filter.creativeWorkKeywords.placeholder": "Tema", + // "profile.head": "Update Profile", + "profile.head": "Actualización del perfil", - // "search.filters.filter.creativeWorkKeywords.label": "Search subject", - "search.filters.filter.creativeWorkKeywords.label": "Asunto de búsqueda", + // "profile.metadata.form.error.firstname.required": "First Name is required", + "profile.metadata.form.error.firstname.required": "Se requiere el nombre", - // "search.filters.filter.creativeWorkPublisher.head": "Publisher", - "search.filters.filter.creativeWorkPublisher.head": "Editor", + // "profile.metadata.form.error.lastname.required": "Last Name is required", + "profile.metadata.form.error.lastname.required": "Se requiere el apellido", - // "search.filters.filter.creativeWorkPublisher.placeholder": "Publisher", - "search.filters.filter.creativeWorkPublisher.placeholder": "Editor", + // "profile.metadata.form.label.email": "Email Address", + "profile.metadata.form.label.email": "Dirección de correo electrónico", - // "search.filters.filter.creativeWorkPublisher.label": "Search publisher", - "search.filters.filter.creativeWorkPublisher.label": "Editor de búsqueda", + // "profile.metadata.form.label.firstname": "First Name", + "profile.metadata.form.label.firstname": "Nombre¡", - // "search.filters.filter.dateIssued.head": "Date", - "search.filters.filter.dateIssued.head": "Fecha", + // "profile.metadata.form.label.language": "Language", + "profile.metadata.form.label.language": "Idioma", - // "search.filters.filter.dateIssued.max.placeholder": "Maximum Date", - "search.filters.filter.dateIssued.max.placeholder": "Fecha máxima", + // "profile.metadata.form.label.lastname": "Last Name", + "profile.metadata.form.label.lastname": "Apellido", - // "search.filters.filter.dateIssued.max.label": "End", - "search.filters.filter.dateIssued.max.label": "Fin", + // "profile.metadata.form.label.phone": "Contact Telephone", + "profile.metadata.form.label.phone": "Teléfono de contacto", - // "search.filters.filter.dateIssued.min.placeholder": "Minimum Date", - "search.filters.filter.dateIssued.min.placeholder": "Fecha mínima", + // "profile.metadata.form.notifications.success.content": "Your changes to the profile were saved.", + "profile.metadata.form.notifications.success.content": "Se guardaron sus cambios en el perfil.", - // "search.filters.filter.dateIssued.min.label": "Start", - "search.filters.filter.dateIssued.min.label": "Comienzo", + // "profile.metadata.form.notifications.success.title": "Profile saved", + "profile.metadata.form.notifications.success.title": "Perfil guardado", - // "search.filters.filter.dateSubmitted.head": "Date submitted", - "search.filters.filter.dateSubmitted.head": "Fecha Enviado", + // "profile.notifications.warning.no-changes.content": "No changes were made to the Profile.", + "profile.notifications.warning.no-changes.content": "No se realizaron cambios en el perfil.", - // "search.filters.filter.dateSubmitted.placeholder": "Date submitted", - "search.filters.filter.dateSubmitted.placeholder": "Fecha Enviado", + // "profile.notifications.warning.no-changes.title": "No changes", + "profile.notifications.warning.no-changes.title": "Sin cambios", - // "search.filters.filter.dateSubmitted.label": "Search date submitted", - "search.filters.filter.dateSubmitted.label": "Fecha de búsqueda enviada", + // "profile.security.form.error.matching-passwords": "The passwords do not match.", + "profile.security.form.error.matching-passwords": "Las contraseñas no coinciden.", - // "search.filters.filter.discoverable.head": "Private", - "search.filters.filter.discoverable.head": "Privado", + // "profile.security.form.error.password-length": "The password should be at least 6 characters long.", + "profile.security.form.error.password-length": "La contraseña debe tener al menos 6 caracteres.", - // "search.filters.filter.withdrawn.head": "Withdrawn", - "search.filters.filter.withdrawn.head": "Retirado", + // "profile.security.form.info": "Optionally, you can enter a new password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", + "profile.security.form.info": "Opcionalmente, puede introducir una nueva contraseña en el cuadro a continuación y confirmarla escribiéndola nuevamente en el segundo cuadro. Debe tener al menos seis caracteres.", - // "search.filters.filter.entityType.head": "Item Type", - "search.filters.filter.entityType.head": "Tipo de artículo", + // "profile.security.form.label.password": "Password", + "profile.security.form.label.password": "Contraseña", - // "search.filters.filter.entityType.placeholder": "Item Type", - "search.filters.filter.entityType.placeholder": "Tipo de artículo", + // "profile.security.form.label.passwordrepeat": "Retype to confirm", + "profile.security.form.label.passwordrepeat": "Rescriba para confirmar", - // "search.filters.filter.entityType.label": "Search item type", - "search.filters.filter.entityType.label": "Tipo de artículo de búsqueda", + // "profile.security.form.notifications.success.content": "Your changes to the password were saved.", + "profile.security.form.notifications.success.content": "Se guardaron sus cambios a la contraseña.", - // "search.filters.filter.expand": "Expand filter", - "search.filters.filter.expand": "Expandir filtro", + // "profile.security.form.notifications.success.title": "Password saved", + "profile.security.form.notifications.success.title": "Contraseña guardada", - // "search.filters.filter.has_content_in_original_bundle.head": "Has files", - "search.filters.filter.has_content_in_original_bundle.head": "Tiene archivos", + // "profile.security.form.notifications.error.title": "Error changing passwords", + "profile.security.form.notifications.error.title": "Error al cambiar las contraseñas", - // "search.filters.filter.itemtype.head": "Type", - "search.filters.filter.itemtype.head": "Escribe", + // "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": "La contraseña debe tener al menos 6 caracteres.", - // "search.filters.filter.itemtype.placeholder": "Type", - "search.filters.filter.itemtype.placeholder": "Escribe", + // "profile.security.form.notifications.error.not-same": "The provided passwords are not the same.", + "profile.security.form.notifications.error.not-same": "Las contraseñas proporcionadas no coinciden.", - // "search.filters.filter.itemtype.label": "Search type", - "search.filters.filter.itemtype.label": "Tipo de búsqueda", + // "profile.title": "Update Profile", + "profile.title": "Actualización del perfil", - // "search.filters.filter.jobTitle.head": "Job Title", - "search.filters.filter.jobTitle.head": "Título profesional", + // "profile.card.researcher": "Researcher Profile", + "profile.card.researcher": "Perfil de Investigador", - // "search.filters.filter.jobTitle.placeholder": "Job Title", - "search.filters.filter.jobTitle.placeholder": "Título profesional", + // "project.listelement.badge": "Research Project", + "project.listelement.badge": "Proyecto de Investigación", - // "search.filters.filter.jobTitle.label": "Search job title", - "search.filters.filter.jobTitle.label": "Buscar puesto de trabajo", + // "project.page.contributor": "Contributors", + "project.page.contributor": "Colaboradores", - // "search.filters.filter.knowsLanguage.head": "Known language", - "search.filters.filter.knowsLanguage.head": "Idioma conocido", + // "project.page.description": "Description", + "project.page.description": "Descripción", - // "search.filters.filter.knowsLanguage.placeholder": "Known language", - "search.filters.filter.knowsLanguage.placeholder": "Idioma conocido", + // "project.page.edit": "Edit this item", + "project.page.edit": "Editar este ítem", - // "search.filters.filter.knowsLanguage.label": "Search known language", - "search.filters.filter.knowsLanguage.label": "Buscar idioma conocido", + // "project.page.expectedcompletion": "Expected Completion", + "project.page.expectedcompletion": "Finalización prevista", - // "search.filters.filter.namedresourcetype.head": "Status", - "search.filters.filter.namedresourcetype.head": "Estado", + // "project.page.funder": "Funders", + "project.page.funder": "Financiadores", - // "search.filters.filter.namedresourcetype.placeholder": "Status", - "search.filters.filter.namedresourcetype.placeholder": "Estado", + // "project.page.id": "ID", + "project.page.id": "ID", - // "search.filters.filter.namedresourcetype.label": "Search status", - "search.filters.filter.namedresourcetype.label": "Estado de búsqueda", + // "project.page.keyword": "Keywords", + "project.page.keyword": "Palabras clave", - // "search.filters.filter.objectpeople.head": "People", - "search.filters.filter.objectpeople.head": "Gente", + // "project.page.status": "Status", + "project.page.status": "Estado", - // "search.filters.filter.objectpeople.placeholder": "People", - "search.filters.filter.objectpeople.placeholder": "Gente", + // "project.page.titleprefix": "Research Project: ", + "project.page.titleprefix": "Proyecto de Investigación:", - // "search.filters.filter.objectpeople.label": "Search people", - "search.filters.filter.objectpeople.label": "Busca gente", + // "project.search.results.head": "Project Search Results", + "project.search.results.head": "Resultados de búsqueda de proyectos", - // "search.filters.filter.organizationAddressCountry.head": "Country", - "search.filters.filter.organizationAddressCountry.head": "País", + // "project-relationships.search.results.head": "Project Search Results", + "project-relationships.search.results.head": "Resultados de búsqueda de proyectos", - // "search.filters.filter.organizationAddressCountry.placeholder": "Country", - "search.filters.filter.organizationAddressCountry.placeholder": "País", - // "search.filters.filter.organizationAddressCountry.label": "Search country", - "search.filters.filter.organizationAddressCountry.label": "País de búsqueda", - // "search.filters.filter.organizationAddressLocality.head": "City", - "search.filters.filter.organizationAddressLocality.head": "Ciudad", + // "publication.listelement.badge": "Publication", + "publication.listelement.badge": "Publicación", - // "search.filters.filter.organizationAddressLocality.placeholder": "City", - "search.filters.filter.organizationAddressLocality.placeholder": "Ciudad", + // "publication.page.description": "Description", + "publication.page.description": "Descripción", - // "search.filters.filter.organizationAddressLocality.label": "Search city", - "search.filters.filter.organizationAddressLocality.label": "Buscar ciudad", + // "publication.page.edit": "Edit this item", + "publication.page.edit": "Editar este ítem", - // "search.filters.filter.organizationFoundingDate.head": "Date Founded", - "search.filters.filter.organizationFoundingDate.head": "Fecha de fundación", + // "publication.page.journal-issn": "Journal ISSN", + "publication.page.journal-issn": "ISSN de la revista", - // "search.filters.filter.organizationFoundingDate.placeholder": "Date Founded", - "search.filters.filter.organizationFoundingDate.placeholder": "Fecha de fundación", + // "publication.page.journal-title": "Journal Title", + "publication.page.journal-title": "Título de la revista", - // "search.filters.filter.organizationFoundingDate.label": "Search date founded", - "search.filters.filter.organizationFoundingDate.label": "Fecha de búsqueda fundada", + // "publication.page.publisher": "Publisher", + "publication.page.publisher": "Editor", - // "search.filters.filter.scope.head": "Scope", - "search.filters.filter.scope.head": "Alcance", + // "publication.page.titleprefix": "Publication: ", + "publication.page.titleprefix": "Publicación:", - // "search.filters.filter.scope.placeholder": "Scope filter", - "search.filters.filter.scope.placeholder": "Filtro de alcance", + // "publication.page.volume-title": "Volume Title", + "publication.page.volume-title": "Título del volumen", - // "search.filters.filter.scope.label": "Search scope filter", - "search.filters.filter.scope.label": "Filtro de alcance de búsqueda", + // "publication.search.results.head": "Publication Search Results", + "publication.search.results.head": "Resultados de la búsqueda de publicaciones", - // "search.filters.filter.show-less": "Collapse", - "search.filters.filter.show-less": "Colapso", + // "publication-relationships.search.results.head": "Publication Search Results", + "publication-relationships.search.results.head": "Resultados de la búsqueda de publicaciones", - // "search.filters.filter.show-more": "Show more", - "search.filters.filter.show-more": "Mostrar más", + // "publication.search.title": "Publication Search", + "publication.search.title": "Búsqueda de publicaciones", - // "search.filters.filter.subject.head": "Subject", - "search.filters.filter.subject.head": "Tema", - // "search.filters.filter.subject.placeholder": "Subject", - "search.filters.filter.subject.placeholder": "Tema", + // "media-viewer.next": "Next", + "media-viewer.next": "Siguiente", - // "search.filters.filter.subject.label": "Search subject", - "search.filters.filter.subject.label": "Asunto de búsqueda", + // "media-viewer.previous": "Previous", + "media-viewer.previous": "Anterior", - // "search.filters.filter.submitter.head": "Submitter", - "search.filters.filter.submitter.head": "Remitente", + // "media-viewer.playlist": "Playlist", + "media-viewer.playlist": "Lista de reproducción", - // "search.filters.filter.submitter.placeholder": "Submitter", - "search.filters.filter.submitter.placeholder": "Remitente", - // "search.filters.filter.submitter.label": "Search submitter", - "search.filters.filter.submitter.label": "Remitente de búsqueda", + // "register-email.title": "New user registration", + "register-email.title": "Registro de nuevo usuario", + // "register-page.create-profile.header": "Create Profile", + "register-page.create-profile.header": "Crear perfil", + // "register-page.create-profile.identification.header": "Identify", + "register-page.create-profile.identification.header": "Identificar", - // "search.filters.entityType.JournalIssue": "Journal Issue", - "search.filters.entityType.JournalIssue": "Número de la revista", + // "register-page.create-profile.identification.email": "Email Address", + "register-page.create-profile.identification.email": "Dirección de correo electrónico", - // "search.filters.entityType.JournalVolume": "Journal Volume", - "search.filters.entityType.JournalVolume": "Volumen de la revista", + // "register-page.create-profile.identification.first-name": "First Name *", + "register-page.create-profile.identification.first-name": "Nombre *", - // "search.filters.entityType.OrgUnit": "Organizational Unit", - "search.filters.entityType.OrgUnit": "Unidad organizacional", + // "register-page.create-profile.identification.first-name.error": "Please fill in a First Name", + "register-page.create-profile.identification.first-name.error": "Por favor introduzca Nombre", - // "search.filters.has_content_in_original_bundle.true": "Yes", - "search.filters.has_content_in_original_bundle.true": "sí", + // "register-page.create-profile.identification.last-name": "Last Name *", + "register-page.create-profile.identification.last-name": "Apellido *", - // "search.filters.has_content_in_original_bundle.false": "No", - "search.filters.has_content_in_original_bundle.false": "No", + // "register-page.create-profile.identification.last-name.error": "Please fill in a Last Name", + "register-page.create-profile.identification.last-name.error": "Por favor introduzca Apellido", - // "search.filters.discoverable.true": "No", - "search.filters.discoverable.true": "No", + // "register-page.create-profile.identification.contact": "Contact Telephone", + "register-page.create-profile.identification.contact": "Teléfono de contacto", - // "search.filters.discoverable.false": "Yes", - "search.filters.discoverable.false": "sí", + // "register-page.create-profile.identification.language": "Language", + "register-page.create-profile.identification.language": "Idioma", - // "search.filters.withdrawn.true": "Yes", - "search.filters.withdrawn.true": "sí", + // "register-page.create-profile.security.header": "Security", + "register-page.create-profile.security.header": "Seguridad", - // "search.filters.withdrawn.false": "No", - "search.filters.withdrawn.false": "No", + // "register-page.create-profile.security.info": "Please enter a password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", + "register-page.create-profile.security.info": "Introduzca una contraseña en el cuadro siguiente y confírmela escribiéndola nuevamente en el segundo cuadro. Debe tener al menos seis caracteres.", + // "register-page.create-profile.security.label.password": "Password *", + "register-page.create-profile.security.label.password": "Contraseña *", - // "search.filters.head": "Filters", - "search.filters.head": "Filtros", + // "register-page.create-profile.security.label.passwordrepeat": "Retype to confirm *", + "register-page.create-profile.security.label.passwordrepeat": "Rescriba para confirmar *", - // "search.filters.reset": "Reset filters", - "search.filters.reset": "Restablecer filtros", + // "register-page.create-profile.security.error.empty-password": "Please enter a password in the box below.", + "register-page.create-profile.security.error.empty-password": "Ingrese una contraseña en el cuadro a continuación.", - // "search.filters.search.submit": "Submit", - "search.filters.search.submit": "Enviar", + // "register-page.create-profile.security.error.matching-passwords": "The passwords do not match.", + "register-page.create-profile.security.error.matching-passwords": "Las contraseñas no coinciden.", + // "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": "La contraseña debe tener al menos 6 caracteres.", + // "register-page.create-profile.submit": "Complete Registration", + "register-page.create-profile.submit": "Registro completo", - // "search.form.search": "Search", - "search.form.search": "Buscar", + // "register-page.create-profile.submit.error.content": "Something went wrong while registering a new user.", + "register-page.create-profile.submit.error.content": "Se produjo un error al registrar un nuevo usuario.", - // "search.form.search_dspace": "All repository", - "search.form.search_dspace": "Todo el repositorio", + // "register-page.create-profile.submit.error.head": "Registration failed", + "register-page.create-profile.submit.error.head": "Registro fallido", + // "register-page.create-profile.submit.success.content": "The registration was successful. You have been logged in as the created user.", + "register-page.create-profile.submit.success.content": "El registro fue exitoso. Ha iniciado sesión como el usuario creado.", + // "register-page.create-profile.submit.success.head": "Registration completed", + "register-page.create-profile.submit.success.head": "Registro completado", - // "search.results.head": "Search Results", - "search.results.head": "Resultados de la búsqueda", - // "search.results.no-results": "Your search returned no results. Having trouble finding what you're looking for? Try putting", - "search.results.no-results": "Su búsqueda no produjo resultados. ¿Tiene problemas para encontrar lo que busca? Intenta poner", + // "register-page.registration.header": "New user registration", + "register-page.registration.header": "Registro de nuevo usuario", - // "search.results.no-results-link": "quotes around it", - "search.results.no-results-link": "citas a su alrededor", + // "register-page.registration.info": "Register an account to subscribe to collections for email updates, and submit new items to DSpace.", + "register-page.registration.info": "Registre una cuenta para suscribirse a colecciones y recibir actualizaciones por correo electrónico, así como enviar nuevos ítems a DSpace.", - // "search.results.empty": "Your search returned no results.", - "search.results.empty": "Su búsqueda no produjo resultados.", + // "register-page.registration.email": "Email Address *", + "register-page.registration.email": "Dirección de correo electrónico *", + // "register-page.registration.email.error.required": "Please fill in an email address", + "register-page.registration.email.error.required": "Por favor, introduzca una dirección de correo electrónico", - // "default.search.results.head": "Search Results", - "default.search.results.head": "Resultados de la búsqueda", + // "register-page.registration.email.error.pattern": "Please fill in a valid email address", + "register-page.registration.email.error.pattern": "Por favor, introduzca una dirección de correo electrónico válida", + // "register-page.registration.email.hint": "This address will be verified and used as your login name.", + "register-page.registration.email.hint": "Esta dirección será verificada y utilizada como su nombre de inicio de sesión.", - // "search.sidebar.close": "Back to results", - "search.sidebar.close": "Volver a resultados", + // "register-page.registration.submit": "Register", + "register-page.registration.submit": "Registrarse", - // "search.sidebar.filters.title": "Filters", - "search.sidebar.filters.title": "Filtros", + // "register-page.registration.success.head": "Verification email sent", + "register-page.registration.success.head": "El mensaje de verificación ha sido enviado", - // "search.sidebar.open": "Search Tools", - "search.sidebar.open": "Herramientas de búsqueda", + // "register-page.registration.success.content": "An email has been sent to {{ email }} containing a special URL and further instructions.", + "register-page.registration.success.content": "Se envió un correo electrónico a {{ email }} que contiene una URL especial y más instrucciones.", - // "search.sidebar.results": "results", - "search.sidebar.results": "resultados", + // "register-page.registration.error.head": "Error when trying to register email", + "register-page.registration.error.head": "Error al intentar registrar el correo electrónico", - // "search.sidebar.settings.rpp": "Results per page", - "search.sidebar.settings.rpp": "resultados por página", + // "register-page.registration.error.content": "An error occured when registering the following email address: {{ email }}", + "register-page.registration.error.content": "Se produjo un error al registrar la siguiente dirección de correo electrónico: {{ email }}", - // "search.sidebar.settings.sort-by": "Sort By", - "search.sidebar.settings.sort-by": "Ordenar por", - // "search.sidebar.settings.title": "Settings", - "search.sidebar.settings.title": "Ajustes", + // "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": "No se pudo encontrar una coincidencia adecuada para el tipo de relación {{ type }} entre los dos artículos", + // "relationships.add.error.server.content": "The server returned an error", + "relationships.add.error.server.content": "El servidor devolvió un error", - // "search.view-switch.show-detail": "Show detail", - "search.view-switch.show-detail": "Mostrar detalle", + // "relationships.add.error.title": "Unable to add relationship", + "relationships.add.error.title": "No se puede agregar una relación", - // "search.view-switch.show-grid": "Show as grid", - "search.view-switch.show-grid": "Mostrar como cuadrícula", + // "relationships.isAuthorOf": "Authors", + "relationships.isAuthorOf": "Autores", - // "search.view-switch.show-list": "Show as list", - "search.view-switch.show-list": "Mostrar como lista", + // "relationships.isAuthorOf.Person": "Authors (persons)", + "relationships.isAuthorOf.Person": "Autores (personas)", + // "relationships.isAuthorOf.OrgUnit": "Authors (organizational units)", + "relationships.isAuthorOf.OrgUnit": "Autores (unidades organizativas)", + // "relationships.isIssueOf": "Journal Issues", + "relationships.isIssueOf": "Problemas de la revista", - // "sorting.ASC": "Ascending", - "sorting.ASC": "Ascendente", + // "relationships.isJournalIssueOf": "Journal Issue", + "relationships.isJournalIssueOf": "Número de la revista", - // "sorting.DESC": "Descending", - "sorting.DESC": "Descendente", + // "relationships.isJournalOf": "Journals", + "relationships.isJournalOf": "Revistas", - // "sorting.dc.title.ASC": "Title Ascending", - "sorting.dc.title.ASC": "Título Ascendente", + // "relationships.isOrgUnitOf": "Organizational Units", + "relationships.isOrgUnitOf": "Unidades organizativas", - // "sorting.dc.title.DESC": "Title Descending", - "sorting.dc.title.DESC": "Título Descendente", + // "relationships.isPersonOf": "Authors", + "relationships.isPersonOf": "Autores", - // "sorting.score.ASC": "Least Relevant", - "sorting.score.ASC": "Menos relevante", + // "relationships.isProjectOf": "Research Projects", + "relationships.isProjectOf": "Proyectos de investigación", - // "sorting.score.DESC": "Most Relevant", - "sorting.score.DESC": "Lo más relevante", + // "relationships.isPublicationOf": "Publications", + "relationships.isPublicationOf": "Publicaciones", - // "sorting.dc.date.issued.ASC": "Date Issued Ascending", - "sorting.dc.date.issued.ASC": "Fecha de emisión Ascendente", + // "relationships.isPublicationOfJournalIssue": "Articles", + "relationships.isPublicationOfJournalIssue": "Artículos", - // "sorting.dc.date.issued.DESC": "Date Issued Descending", - "sorting.dc.date.issued.DESC": "Fecha de emisión Descendente", + // "relationships.isSingleJournalOf": "Journal", + "relationships.isSingleJournalOf": "diario", - // "sorting.dc.date.accessioned.ASC": "Accessioned Date Ascending", - "sorting.dc.date.accessioned.ASC": "Fecha de adhesión Ascendente", + // "relationships.isSingleVolumeOf": "Journal Volume", + "relationships.isSingleVolumeOf": "Volumen de la revista", - // "sorting.dc.date.accessioned.DESC": "Accessioned Date Descending", - "sorting.dc.date.accessioned.DESC": "Fecha de adhesión Descendente", + // "relationships.isVolumeOf": "Journal Volumes", + "relationships.isVolumeOf": "Volúmenes de revistas", - // "sorting.lastModified.ASC": "Last modified Ascending", - "sorting.lastModified.ASC": "Última modificación Ascendente", + // "relationships.isContributorOf": "Contributors", + "relationships.isContributorOf": "Colaboradores", - // "sorting.lastModified.DESC": "Last modified Descending", - "sorting.lastModified.DESC": "Última modificación Descendente", + // "relationships.isContributorOf.OrgUnit": "Contributor (Organizational Unit)", + "relationships.isContributorOf.OrgUnit": "Colaborador (Unidad organizativa)", + // "relationships.isContributorOf.Person": "Contributor", + "relationships.isContributorOf.Person": "Contribuyente", - // "statistics.title": "Statistics", - "statistics.title": "Estadísticas", + // "relationships.isFundingAgencyOf.OrgUnit": "Funder", + "relationships.isFundingAgencyOf.OrgUnit": "Financiador", - // "statistics.header": "Statistics for {{ scope }}", - "statistics.header": "Estadísticas de {{ scope }}", - // "statistics.breadcrumbs": "Statistics", - "statistics.breadcrumbs": "Estadísticas", + // "repository.image.logo": "Repository logo", + "repository.image.logo": "Logotipo del repositorio", - // "statistics.page.no-data": "No data available", - "statistics.page.no-data": "Datos no disponibles", + // "repository.title.prefix": "DSpace Angular :: ", + "repository.title.prefix": "DSpace Angular ::", - // "statistics.table.no-data": "No data available", - "statistics.table.no-data": "Datos no disponibles", + // "repository.title.prefixDSpace": "DSpace Angular ::", + "repository.title.prefixDSpace": "DSpace Angular ::", - // "statistics.table.title.TotalVisits": "Total visits", - "statistics.table.title.TotalVisits": "Visitas totales", - // "statistics.table.title.TotalVisitsPerMonth": "Total visits per month", - "statistics.table.title.TotalVisitsPerMonth": "Visitas totales por mes", + // "resource-policies.add.button": "Add", + "resource-policies.add.button": "Agregar", - // "statistics.table.title.TotalDownloads": "File Visits", - "statistics.table.title.TotalDownloads": "Visitas de archivo", + // "resource-policies.add.for.": "Add a new policy", + "resource-policies.add.for.": "Agregar una nueva política", - // "statistics.table.title.TopCountries": "Top country views", - "statistics.table.title.TopCountries": "Vistas principales del país", + // "resource-policies.add.for.bitstream": "Add a new Bitstream policy", + "resource-policies.add.for.bitstream": "Agregar una nueva política de Archivo", - // "statistics.table.title.TopCities": "Top city views", - "statistics.table.title.TopCities": "Mejores vistas de la ciudad", + // "resource-policies.add.for.bundle": "Add a new Bundle policy", + "resource-policies.add.for.bundle": "Agregar una nueva política de bloque", - // "statistics.table.header.views": "Views", - "statistics.table.header.views": "Puntos de vista", + // "resource-policies.add.for.item": "Add a new Item policy", + "resource-policies.add.for.item": "Agregar una nueva política de artículos", + // "resource-policies.add.for.community": "Add a new Community policy", + "resource-policies.add.for.community": "Agregar una nueva política comunitaria", + // "resource-policies.add.for.collection": "Add a new Collection policy", + "resource-policies.add.for.collection": "Agregar una nueva política de colección", - // "submission.edit.breadcrumbs": "Edit Submission", - "submission.edit.breadcrumbs": "Editar envío", + // "resource-policies.create.page.heading": "Create new resource policy for ", + "resource-policies.create.page.heading": "Crear una nueva política de recursos para", - // "submission.edit.title": "Edit Submission", - "submission.edit.title": "Editar envío", + // "resource-policies.create.page.failure.content": "An error occurred while creating the resource policy.", + "resource-policies.create.page.failure.content": "Se produjo un error al crear la política de recursos.", - // "submission.general.cancel": "Cancel", - "submission.general.cancel": "Cancelar", + // "resource-policies.create.page.success.content": "Operation successful", + "resource-policies.create.page.success.content": "Operación exitosa", - // "submission.general.cannot_submit": "You have not the privilege to make a new submission.", - "submission.general.cannot_submit": "No tiene el privilegio de realizar un nuevo envío.", + // "resource-policies.create.page.title": "Create new resource policy", + "resource-policies.create.page.title": "Crear nueva política de recursos", - // "submission.general.deposit": "Deposit", - "submission.general.deposit": "Depositar", + // "resource-policies.delete.btn": "Delete selected", + "resource-policies.delete.btn": "Eliminar seleccionado", - // "submission.general.discard.confirm.cancel": "Cancel", - "submission.general.discard.confirm.cancel": "Cancelar", + // "resource-policies.delete.btn.title": "Delete selected resource policies", + "resource-policies.delete.btn.title": "Eliminar las políticas de recursos seleccionadas", - // "submission.general.discard.confirm.info": "This operation can't be undone. Are you sure?", - "submission.general.discard.confirm.info": "Esta operación no se puede deshacer. ", + // "resource-policies.delete.failure.content": "An error occurred while deleting selected resource policies.", + "resource-policies.delete.failure.content": "Se produjo un error al eliminar las políticas de recursos seleccionadas.", - // "submission.general.discard.confirm.submit": "Yes, I'm sure", - "submission.general.discard.confirm.submit": "Sí estoy seguro", + // "resource-policies.delete.success.content": "Operation successful", + "resource-policies.delete.success.content": "Operación exitosa", - // "submission.general.discard.confirm.title": "Discard submission", - "submission.general.discard.confirm.title": "Descartar envío", + // "resource-policies.edit.page.heading": "Edit resource policy ", + "resource-policies.edit.page.heading": "Editar la política de recursos", - // "submission.general.discard.submit": "Discard", - "submission.general.discard.submit": "Descarte", + // "resource-policies.edit.page.failure.content": "An error occurred while editing the resource policy.", + "resource-policies.edit.page.failure.content": "Se produjo un error al editar la política de recursos.", - // "submission.general.info.saved": "Saved", - "submission.general.info.saved": "Salvado", + // "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": "Se produjo un error al editar el destinatario (ePersona o grupo) de la política de recursos.", - // "submission.general.info.pending-changes": "Unsaved changes", - "submission.general.info.pending-changes": "Cambios no guardados", + // "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": "Se produjo un error al editar la política de recursos. El destinatario (Grupo o ePersona) ha sido actualizado con éxito ", - // "submission.general.save": "Save", - "submission.general.save": "Guardar", + // "resource-policies.edit.page.success.content": "Operation successful", + "resource-policies.edit.page.success.content": "Operación exitosa", - // "submission.general.save-later": "Save for later", - "submission.general.save-later": "Guardar para más adelante", + // "resource-policies.edit.page.title": "Edit resource policy", + "resource-policies.edit.page.title": "Editar la política de recursos", + // "resource-policies.form.action-type.label": "Select the action type", + "resource-policies.form.action-type.label": "Seleccione el tipo de acción", - // "submission.import-external.page.title": "Import metadata from an external source", - "submission.import-external.page.title": "Importar metadatos de una fuente externa", + // "resource-policies.form.action-type.required": "You must select the resource policy action.", + "resource-policies.form.action-type.required": "Debe seleccionar la acción de la política de recursos.", - // "submission.import-external.title": "Import metadata from an external source", - "submission.import-external.title": "Importar metadatos de una fuente externa", + // "resource-policies.form.eperson-group-list.label": "The eperson or group that will be granted the permission", + "resource-policies.form.eperson-group-list.label": "La ePersona o grupo al que se le otorgará el permiso", - // "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": "Ingrese una consulta arriba para buscar artículos de la web para importarlos a DSpace.", + // "resource-policies.form.eperson-group-list.select.btn": "Select", + "resource-policies.form.eperson-group-list.select.btn": "Seleccione", - // "submission.import-external.back-to-my-dspace": "Back to MyDSpace", - "submission.import-external.back-to-my-dspace": "Volver a Mi DSpace", + // "resource-policies.form.eperson-group-list.tab.eperson": "Search for a ePerson", + "resource-policies.form.eperson-group-list.tab.eperson": "Buscar una ePersona", - // "submission.import-external.search.placeholder": "Search the external source", - "submission.import-external.search.placeholder": "Buscar la fuente externa", + // "resource-policies.form.eperson-group-list.tab.group": "Search for a group", + "resource-policies.form.eperson-group-list.tab.group": "Buscar un grupo", - // "submission.import-external.search.button": "Search", - "submission.import-external.search.button": "Buscar", + // "resource-policies.form.eperson-group-list.table.headers.action": "Action", + "resource-policies.form.eperson-group-list.table.headers.action": "Acción", - // "submission.import-external.search.button.hint": "Write some words to search", - "submission.import-external.search.button.hint": "Escribe algunas palabras para buscar", + // "resource-policies.form.eperson-group-list.table.headers.id": "ID", + "resource-policies.form.eperson-group-list.table.headers.id": "ID", - // "submission.import-external.search.source.hint": "Pick an external source", - "submission.import-external.search.source.hint": "Elija una fuente externa", + // "resource-policies.form.eperson-group-list.table.headers.name": "Name", + "resource-policies.form.eperson-group-list.table.headers.name": "Nombre", - // "submission.import-external.source.arxiv": "arXiv", - "submission.import-external.source.arxiv": "arXiv", + // "resource-policies.form.eperson-group-list.modal.header": "Cannot change type", + "resource-policies.form.eperson-group-list.modal.header": "No puede cambiarse el tipo", - // "submission.import-external.source.loading": "Loading ...", - "submission.import-external.source.loading": "Cargando ...", + // "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": "No es posible cambiar una ePersona por un grupo.", - // "submission.import-external.source.sherpaJournal": "SHERPA Journals", - "submission.import-external.source.sherpaJournal": "Revistas SHERPA", + // "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": "No es posible cambiar un grupo por una ePersona.", - // "submission.import-external.source.sherpaJournalIssn": "SHERPA Journals by ISSN", - "submission.import-external.source.sherpaJournalIssn": "Revistas SHERPA por ISSN", + // "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": "Borre la política de recursos actual y cree una nueva con el tipo deseado.", - // "submission.import-external.source.sherpaPublisher": "SHERPA Publishers", - "submission.import-external.source.sherpaPublisher": "Editores SHERPA", + // "resource-policies.form.eperson-group-list.modal.close": "Ok", + "resource-policies.form.eperson-group-list.modal.close": "Ok", - // "submission.import-external.source.openAIREFunding": "Funding OpenAIRE API", - "submission.import-external.source.openAIREFunding": "Financiamiento de la API de OpenAIRE", + // "resource-policies.form.date.end.label": "End Date", + "resource-policies.form.date.end.label": "Fecha de finalización", - // "submission.import-external.source.orcid": "ORCID", - "submission.import-external.source.orcid": "ORCID", + // "resource-policies.form.date.start.label": "Start Date", + "resource-policies.form.date.start.label": "Fecha de inicio", - // "submission.import-external.source.pubmed": "Pubmed", - "submission.import-external.source.pubmed": "Pubmed", + // "resource-policies.form.description.label": "Description", + "resource-policies.form.description.label": "Descripción", - // "submission.import-external.source.lcname": "Library of Congress Names", - "submission.import-external.source.lcname": "Nombres de la Biblioteca del Congreso", + // "resource-policies.form.name.label": "Name", + "resource-policies.form.name.label": "Nombre", - // "submission.import-external.preview.title": "Item Preview", - "submission.import-external.preview.title": "Vista previa del artículo", + // "resource-policies.form.policy-type.label": "Select the policy type", + "resource-policies.form.policy-type.label": "Seleccione el tipo de política", - // "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": "Los siguientes metadatos se importaron de una fuente externa. Se completará previamente cuando inicie el envío.", + // "resource-policies.form.policy-type.required": "You must select the resource policy type.", + "resource-policies.form.policy-type.required": "Debe seleccionar el tipo de política de recursos.", - // "submission.import-external.preview.button.import": "Start submission", - "submission.import-external.preview.button.import": "Iniciar envío", + // "resource-policies.table.headers.action": "Action", + "resource-policies.table.headers.action": "Acción", - // "submission.import-external.preview.error.import.title": "Submission error", - "submission.import-external.preview.error.import.title": "Error de envío", + // "resource-policies.table.headers.date.end": "End Date", + "resource-policies.table.headers.date.end": "Fecha final", - // "submission.import-external.preview.error.import.body": "An error occurs during the external source entry import process.", - "submission.import-external.preview.error.import.body": "Se produce un error durante el proceso de importación de la entrada de fuente externa.", + // "resource-policies.table.headers.date.start": "Start Date", + "resource-policies.table.headers.date.start": "Fecha de inicio", - // "submission.sections.describe.relationship-lookup.close": "Close", - "submission.sections.describe.relationship-lookup.close": "Cerrar", + // "resource-policies.table.headers.edit": "Edit", + "resource-policies.table.headers.edit": "Editar", - // "submission.sections.describe.relationship-lookup.external-source.added": "Successfully added local entry to the selection", - "submission.sections.describe.relationship-lookup.external-source.added": "Entrada local agregada con éxito a la selección", + // "resource-policies.table.headers.edit.group": "Edit group", + "resource-policies.table.headers.edit.group": "Editar grupo", - // "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Import remote author", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Importar autor remoto", + // "resource-policies.table.headers.edit.policy": "Edit policy", + "resource-policies.table.headers.edit.policy": "Editar política", - // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Import remote journal", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Importar diario remoto", + // "resource-policies.table.headers.eperson": "EPerson", + "resource-policies.table.headers.eperson": "EPersona", - // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Import remote journal issue", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Importar problema de diario remoto", + // "resource-policies.table.headers.group": "Group", + "resource-policies.table.headers.group": "Grupo", - // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Import remote journal volume", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Importar volumen de diario remoto", + // "resource-policies.table.headers.id": "ID", + "resource-policies.table.headers.id": "ID", - // "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Project", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Proyecto", + // "resource-policies.table.headers.name": "Name", + "resource-policies.table.headers.name": "Nombre", - // "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": "¡Nueva entidad agregada!", + // "resource-policies.table.headers.policyType": "type", + "resource-policies.table.headers.policyType": "Tipo", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Project", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Proyecto", + // "resource-policies.table.headers.title.for.bitstream": "Policies for Bitstream", + "resource-policies.table.headers.title.for.bitstream": "Políticas para Archivos", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Funding OpenAIRE API", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Financiamiento de la API de OpenAIRE", + // "resource-policies.table.headers.title.for.bundle": "Policies for Bundle", + "resource-policies.table.headers.title.for.bundle": "Políticas para el bloque", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Import Remote Author", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Importar autor remoto", + // "resource-policies.table.headers.title.for.item": "Policies for Item", + "resource-policies.table.headers.title.for.item": "Políticas para el ítem", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Successfully added local author to the selection", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Autor local agregado exitosamente a la selección", + // "resource-policies.table.headers.title.for.community": "Policies for Community", + "resource-policies.table.headers.title.for.community": "Políticas para la comunidad", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.new-entity": "Successfully imported and added external author to the selection", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.new-entity": "Autor externo importado y agregado exitosamente a la selección", + // "resource-policies.table.headers.title.for.collection": "Policies for Collection", + "resource-policies.table.headers.title.for.collection": "Políticas para la colección", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.authority": "Authority", - "submission.sections.describe.relationship-lookup.external-source.import-modal.authority": "Autoridad", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.authority.new": "Import as a new local authority entry", - "submission.sections.describe.relationship-lookup.external-source.import-modal.authority.new": "Importar como una nueva entrada de autoridad local", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel": "Cancel", - "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel": "Cancelar", + // "search.description": "", + "search.description": "", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Select a collection to import new entries to", - "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Seleccione una colección para importar nuevas entradas", + // "search.switch-configuration.title": "Show", + "search.switch-configuration.title": "Mostrar", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Entities", - "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Entidades", + // "search.title": "Search", + "search.title": "Buscar", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.entities.new": "Import as a new local entity", - "submission.sections.describe.relationship-lookup.external-source.import-modal.entities.new": "Importar como una nueva entidad local", + // "search.breadcrumbs": "Search", + "search.breadcrumbs": "Buscar", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "Importing from LC Name", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "Importar desde LC Name", + // "search.search-form.placeholder": "Search the repository ...", + "search.search-form.placeholder": "Buscar en el repositorio ...", - // "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": "Importando desde ORCID", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "Importing from Sherpa Journal", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "Importar desde Sherpa Journal", + // "search.filters.applied.f.author": "Author", + "search.filters.applied.f.author": "Autor", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "Importing from Sherpa Publisher", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "Importar desde Sherpa Publisher", + // "search.filters.applied.f.dateIssued.max": "End date", + "search.filters.applied.f.dateIssued.max": "Fecha de finalización", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "Importing from PubMed", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "Importar desde PubMed", + // "search.filters.applied.f.dateIssued.min": "Start date", + "search.filters.applied.f.dateIssued.min": "Fecha de inicio", - // "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": "Importando desde arXiv", + // "search.filters.applied.f.dateSubmitted": "Date submitted", + "search.filters.applied.f.dateSubmitted": "Fecha de envío", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Import", - "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Importar", + // "search.filters.applied.f.discoverable": "Non-discoverable", + "search.filters.applied.f.discoverable": "Privado", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Import Remote Journal", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Importar diario remoto", + // "search.filters.applied.f.entityType": "Item Type", + "search.filters.applied.f.entityType": "Tipo de ítem", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Successfully added local journal to the selection", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Revista local agregada con éxito a la selección", + // "search.filters.applied.f.has_content_in_original_bundle": "Has files", + "search.filters.applied.f.has_content_in_original_bundle": "Tiene archivos", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Successfully imported and added external journal to the selection", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Revista externa importada y agregada con éxito a la selección", + // "search.filters.applied.f.itemtype": "Type", + "search.filters.applied.f.itemtype": "Tipo", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title": "Import Remote Journal Issue", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title": "Importar problema de diario remoto", + // "search.filters.applied.f.namedresourcetype": "Status", + "search.filters.applied.f.namedresourcetype": "Estado", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Successfully added local journal issue to the selection", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Se agregó con éxito la edición de la revista local a la selección.", + // "search.filters.applied.f.subject": "Subject", + "search.filters.applied.f.subject": "Tema", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity": "Successfully imported and added external journal issue to the selection", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity": "Se importó con éxito y se agregó una edición de diario externo a la selección.", + // "search.filters.applied.f.submitter": "Submitter", + "search.filters.applied.f.submitter": "Remitente", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.title": "Import Remote Journal Volume", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.title": "Importar volumen de diario remoto", + // "search.filters.applied.f.jobTitle": "Job Title", + "search.filters.applied.f.jobTitle": "Título profesional", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Successfully added local journal volume to the selection", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Se agregó con éxito el volumen de la revista local a la selección.", + // "search.filters.applied.f.birthDate.max": "End birth date", + "search.filters.applied.f.birthDate.max": "Fecha de nacimiento, final ", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Successfully imported and added external journal volume to the selection", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Se importó y agregó con éxito un volumen de diario externo a la selección", + // "search.filters.applied.f.birthDate.min": "Start birth date", + "search.filters.applied.f.birthDate.min": "Fecha de nacimiento, inicial", - // "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Select a local match:", - "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Seleccione una coincidencia local:", + // "search.filters.applied.f.withdrawn": "Withdrawn", + "search.filters.applied.f.withdrawn": "Retirado", - // "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Deselect all", - "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Deseleccionar todo", - // "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Deselect page", - "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Deseleccionar página", - // "submission.sections.describe.relationship-lookup.search-tab.loading": "Loading...", - "submission.sections.describe.relationship-lookup.search-tab.loading": "Cargando...", + // "search.filters.filter.author.head": "Author", + "search.filters.filter.author.head": "Autor", - // "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Search query", - "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Consulta de busqueda", + // "search.filters.filter.author.placeholder": "Author name", + "search.filters.filter.author.placeholder": "Nombre de autor", - // "submission.sections.describe.relationship-lookup.search-tab.search": "Go", - "submission.sections.describe.relationship-lookup.search-tab.search": "Ir", + // "search.filters.filter.author.label": "Search author name", + "search.filters.filter.author.label": "Buscar por nombre de autor", - // "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Search...", - "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Buscar...", + // "search.filters.filter.birthDate.head": "Birth Date", + "search.filters.filter.birthDate.head": "Fecha de nacimiento", - // "submission.sections.describe.relationship-lookup.search-tab.select-all": "Select all", - "submission.sections.describe.relationship-lookup.search-tab.select-all": "Seleccionar todo", + // "search.filters.filter.birthDate.placeholder": "Birth Date", + "search.filters.filter.birthDate.placeholder": "Fecha de nacimiento", - // "submission.sections.describe.relationship-lookup.search-tab.select-page": "Select page", - "submission.sections.describe.relationship-lookup.search-tab.select-page": "Seleccionar página", + // "search.filters.filter.birthDate.label": "Search birth date", + "search.filters.filter.birthDate.label": "Buscar fecha de nacimiento", - // "submission.sections.describe.relationship-lookup.selected": "Selected {{ size }} items", - "submission.sections.describe.relationship-lookup.selected": "Artículos {{ size }} seleccionados", + // "search.filters.filter.collapse": "Collapse filter", + "search.filters.filter.collapse": "Contraer filtro", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Local Authors ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Autores locales ({{ count }})", + // "search.filters.filter.creativeDatePublished.head": "Date Published", + "search.filters.filter.creativeDatePublished.head": "Fecha de publicación", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Local Journals ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Revistas locales ({{ count }})", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Local Projects ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Proyectos locales ({{ count }})", + // "search.filters.filter.creativeDatePublished.placeholder": "Date Published", + "search.filters.filter.creativeDatePublished.placeholder": "Fecha de publicación", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Local Publications ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Publicaciones locales ({{ count }})", + // "search.filters.filter.creativeDatePublished.label": "Search date published", + "search.filters.filter.creativeDatePublished.label": "Buscar por fecha de publicación", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Local Authors ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Autores locales ({{ count }})", + // "search.filters.filter.creativeWorkEditor.head": "Editor", + "search.filters.filter.creativeWorkEditor.head": "Editor", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Local Organizational Units ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Unidades organizativas locales ({{ count }})", + // "search.filters.filter.creativeWorkEditor.placeholder": "Editor", + "search.filters.filter.creativeWorkEditor.placeholder": "Editor", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Local Data Packages ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Paquetes de datos locales ({{ count }})", + // "search.filters.filter.creativeWorkEditor.label": "Search editor", + "search.filters.filter.creativeWorkEditor.label": "Búsqueda de Editor", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Local Data Files ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Archivos de datos locales ({{ count }})", + // "search.filters.filter.creativeWorkKeywords.head": "Subject", + "search.filters.filter.creativeWorkKeywords.head": "Materias", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Local Journals ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Revistas locales ({{ count }})", + // "search.filters.filter.creativeWorkKeywords.placeholder": "Subject", + "search.filters.filter.creativeWorkKeywords.placeholder": "Materias", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Local Journal Issues ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Problemas de revistas locales ({{ count }})", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Local Journal Issues ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Problemas de revistas locales ({{ count }})", + // "search.filters.filter.creativeWorkKeywords.label": "Search subject", + "search.filters.filter.creativeWorkKeywords.label": "Búsqueda de Materias", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Local Journal Volumes ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Volúmenes de revistas locales ({{ count }})", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Local Journal Volumes ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Volúmenes de revistas locales ({{ count }})", + // "search.filters.filter.creativeWorkPublisher.head": "Publisher", + "search.filters.filter.creativeWorkPublisher.head": "Editor", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Sherpa Journals ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Sherpa Journals ({{ count }})", + // "search.filters.filter.creativeWorkPublisher.placeholder": "Publisher", + "search.filters.filter.creativeWorkPublisher.placeholder": "Editor", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaPublisher": "Sherpa Publishers ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaPublisher": "Editores Sherpa ({{ count }})", + // "search.filters.filter.creativeWorkPublisher.label": "Search publisher", + "search.filters.filter.creativeWorkPublisher.label": "Búsqueda de Editor", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid": "ORCID ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid": "ORCID ({{ count }})", + // "search.filters.filter.dateIssued.head": "Date", + "search.filters.filter.dateIssued.head": "Fecha", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "LC Names ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "Nombres LC ({{ count }})", + // "search.filters.filter.dateIssued.max.placeholder": "Maximum Date", + "search.filters.filter.dateIssued.max.placeholder": "Fecha máxima", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", + // "search.filters.filter.dateIssued.max.label": "End", + "search.filters.filter.dateIssued.max.label": "Fin", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.arxiv": "arXiv ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.arxiv": "arXiv ({{ count }})", + // "search.filters.filter.dateIssued.min.placeholder": "Minimum Date", + "search.filters.filter.dateIssued.min.placeholder": "Fecha mínima", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Search for Funding Agencies", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Búsqueda de agencias de financiación", + // "search.filters.filter.dateIssued.min.label": "Start", + "search.filters.filter.dateIssued.min.label": "Comienzo", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Search for Funding", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Búsqueda de financiación", + // "search.filters.filter.dateSubmitted.head": "Date submitted", + "search.filters.filter.dateSubmitted.head": "Fecha de envío", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Search for Organizational Units", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Búsqueda de unidades organizativas", + // "search.filters.filter.dateSubmitted.placeholder": "Date submitted", + "search.filters.filter.dateSubmitted.placeholder": "Fecha de envío", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Funding OpenAIRE API", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Financiamiento de la API de OpenAIRE", + // "search.filters.filter.dateSubmitted.label": "Search date submitted", + "search.filters.filter.dateSubmitted.label": "Búsqueda de Fecha de envío", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projects", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Proyectos", + // "search.filters.filter.discoverable.head": "Non-discoverable", + "search.filters.filter.discoverable.head": "Privado", - // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Funder of the Project", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Financiador del Proyecto", + // "search.filters.filter.withdrawn.head": "Withdrawn", + "search.filters.filter.withdrawn.head": "Retirado", - // "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Funding OpenAIRE API", - "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Financiamiento de la API de OpenAIRE", + // "search.filters.filter.entityType.head": "Item Type", + "search.filters.filter.entityType.head": "Tipo de ítem", - // "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Project", - "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Proyecto", + // "search.filters.filter.entityType.placeholder": "Item Type", + "search.filters.filter.entityType.placeholder": "Tipo de ítem", - // "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projects", - "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Proyectos", + // "search.filters.filter.entityType.label": "Search item type", + "search.filters.filter.entityType.label": "Búsqueda de tipo de ítem", - // "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Funder of the Project", - "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Financiador del Proyecto", + // "search.filters.filter.expand": "Expand filter", + "search.filters.filter.expand": "Expandir filtro", + // "search.filters.filter.has_content_in_original_bundle.head": "Has files", + "search.filters.filter.has_content_in_original_bundle.head": "Tiene archivos", + // "search.filters.filter.itemtype.head": "Type", + "search.filters.filter.itemtype.head": "Tipo", + // "search.filters.filter.itemtype.placeholder": "Type", + "search.filters.filter.itemtype.placeholder": "Tipo", - // "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Search...", - "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Buscar...", + // "search.filters.filter.itemtype.label": "Search type", + "search.filters.filter.itemtype.label": "Búsqueda de Tipo", - // "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Current Selection ({{ count }})", - "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Selección actual ({{ count }})", + // "search.filters.filter.jobTitle.head": "Job Title", + "search.filters.filter.jobTitle.head": "Puesto de trabajo", - // "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Journal Issues", - "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Problemas de la revista", - // "submission.sections.describe.relationship-lookup.title.JournalIssue": "Journal Issues", - "submission.sections.describe.relationship-lookup.title.JournalIssue": "Problemas de la revista", + // "search.filters.filter.jobTitle.placeholder": "Job Title", + "search.filters.filter.jobTitle.placeholder": "Puesto de trabajo", - // "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Journal Volumes", - "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Volúmenes de revistas", - // "submission.sections.describe.relationship-lookup.title.JournalVolume": "Journal Volumes", - "submission.sections.describe.relationship-lookup.title.JournalVolume": "Volúmenes de revistas", + // "search.filters.filter.jobTitle.label": "Search job title", + "search.filters.filter.jobTitle.label": "Buscar por puesto de trabajo", - // "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Journals", - "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Revistas", + // "search.filters.filter.knowsLanguage.head": "Known language", + "search.filters.filter.knowsLanguage.head": "Idioma conocido", - // "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication": "Authors", - "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication": "Autores", + // "search.filters.filter.knowsLanguage.placeholder": "Known language", + "search.filters.filter.knowsLanguage.placeholder": "Idioma conocido", - // "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Funding Agency", - "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Agencia fundadora", - // "submission.sections.describe.relationship-lookup.title.Project": "Projects", - "submission.sections.describe.relationship-lookup.title.Project": "Proyectos", + // "search.filters.filter.knowsLanguage.label": "Search known language", + "search.filters.filter.knowsLanguage.label": "Buscar por idioma conocido", - // "submission.sections.describe.relationship-lookup.title.Publication": "Publications", - "submission.sections.describe.relationship-lookup.title.Publication": "Publicaciones", + // "search.filters.filter.namedresourcetype.head": "Status", + "search.filters.filter.namedresourcetype.head": "Estado", - // "submission.sections.describe.relationship-lookup.title.Person": "Authors", - "submission.sections.describe.relationship-lookup.title.Person": "Autores", + // "search.filters.filter.namedresourcetype.placeholder": "Status", + "search.filters.filter.namedresourcetype.placeholder": "Estado", - // "submission.sections.describe.relationship-lookup.title.OrgUnit": "Organizational Units", - "submission.sections.describe.relationship-lookup.title.OrgUnit": "Unidades organizativas", + // "search.filters.filter.namedresourcetype.label": "Search status", + "search.filters.filter.namedresourcetype.label": "Búsqueda por Estado", - // "submission.sections.describe.relationship-lookup.title.DataPackage": "Data Packages", - "submission.sections.describe.relationship-lookup.title.DataPackage": "Paquetes de datos", + // "search.filters.filter.objectpeople.head": "People", + "search.filters.filter.objectpeople.head": "Personas", - // "submission.sections.describe.relationship-lookup.title.DataFile": "Data Files", - "submission.sections.describe.relationship-lookup.title.DataFile": "Archivos de información", + // "search.filters.filter.objectpeople.placeholder": "People", + "search.filters.filter.objectpeople.placeholder": "Personas", - // "submission.sections.describe.relationship-lookup.title.Funding Agency": "Funding Agency", - "submission.sections.describe.relationship-lookup.title.Funding Agency": "Agencia fundadora", + // "search.filters.filter.objectpeople.label": "Search people", + "search.filters.filter.objectpeople.label": "Búsqueda de Personas", - // "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Funding", - "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Fondos", + // "search.filters.filter.organizationAddressCountry.head": "Country", + "search.filters.filter.organizationAddressCountry.head": "País", - // "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Parent Organizational Unit", - "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Unidad organizativa matriz", + // "search.filters.filter.organizationAddressCountry.placeholder": "Country", + "search.filters.filter.organizationAddressCountry.placeholder": "País", - // "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Toggle dropdown", - "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Alternar menú desplegable", + // "search.filters.filter.organizationAddressCountry.label": "Search country", + "search.filters.filter.organizationAddressCountry.label": "Búsqueda de País", - // "submission.sections.describe.relationship-lookup.selection-tab.settings": "Settings", - "submission.sections.describe.relationship-lookup.selection-tab.settings": "Ajustes", + // "search.filters.filter.organizationAddressLocality.head": "City", + "search.filters.filter.organizationAddressLocality.head": "Ciudad", - // "submission.sections.describe.relationship-lookup.selection-tab.no-selection": "Your selection is currently empty.", - "submission.sections.describe.relationship-lookup.selection-tab.no-selection": "Su selección está actualmente vacía.", + // "search.filters.filter.organizationAddressLocality.placeholder": "City", + "search.filters.filter.organizationAddressLocality.placeholder": "Ciudad", - // "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Selected Authors", - "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Autores seleccionados", + // "search.filters.filter.organizationAddressLocality.label": "Search city", + "search.filters.filter.organizationAddressLocality.label": "Búsqueda deciudad", - // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Selected Journals", - "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Revistas seleccionadas", + // "search.filters.filter.organizationFoundingDate.head": "Date Founded", + "search.filters.filter.organizationFoundingDate.head": "Fecha de fundación", - // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Selected Journal Volume", - "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Volumen de la revista seleccionada", - // "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Selected Projects", - "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Proyectos seleccionados", + // "search.filters.filter.organizationFoundingDate.placeholder": "Date Founded", + "search.filters.filter.organizationFoundingDate.placeholder": "Fecha de fundación", - // "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Selected Publications", - "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Publicaciones Seleccionadas", + // "search.filters.filter.organizationFoundingDate.label": "Search date founded", + "search.filters.filter.organizationFoundingDate.label": "Búsqueda por Fecha de fundación", - // "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Selected Authors", - "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Autores seleccionados", + // "search.filters.filter.scope.head": "Scope", + "search.filters.filter.scope.head": "Alcance", - // "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Selected Organizational Units", - "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Unidades organizativas seleccionadas", + // "search.filters.filter.scope.placeholder": "Scope filter", + "search.filters.filter.scope.placeholder": "Filtro de alcance", - // "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Selected Data Packages", - "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Paquetes de datos seleccionados", + // "search.filters.filter.scope.label": "Search scope filter", + "search.filters.filter.scope.label": "Filtro de alcance de búsqueda", - // "submission.sections.describe.relationship-lookup.selection-tab.title.DataFile": "Selected Data Files", - "submission.sections.describe.relationship-lookup.selection-tab.title.DataFile": "Archivos de datos seleccionados", + // "search.filters.filter.show-less": "Collapse", + "search.filters.filter.show-less": "Contraer", - // "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Selected Journals", - "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Revistas seleccionadas", + // "search.filters.filter.show-more": "Show more", + "search.filters.filter.show-more": "Mostrar más", - // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Selected Issue", - "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Problema seleccionado", - // "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Selected Journal Volume", - "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Volumen de la revista seleccionada", + // "search.filters.filter.subject.head": "Subject", + "search.filters.filter.subject.head": "Materias", - // "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Selected Funding Agency", - "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Agencia de financiación seleccionada", + // "search.filters.filter.subject.placeholder": "Subject", + "search.filters.filter.subject.placeholder": "Materias", - // "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Selected Funding", - "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Financiamiento seleccionado", - // "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Selected Issue", - "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Problema seleccionado", + // "search.filters.filter.subject.label": "Search subject", + "search.filters.filter.subject.label": "Búsqueda de materias", - // "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Selected Organizational Unit", - "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Unidad organizativa seleccionada", + // "search.filters.filter.submitter.head": "Submitter", + "search.filters.filter.submitter.head": "Remitente", - // "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Resultados de la búsqueda", + // "search.filters.filter.submitter.placeholder": "Submitter", + "search.filters.filter.submitter.placeholder": "Remitente", - // "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Resultados de la búsqueda", + // "search.filters.filter.submitter.label": "Search submitter", + "search.filters.filter.submitter.label": "Remitente de búsqueda", - // "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Resultados de la búsqueda", + // "search.filters.entityType.JournalIssue": "Journal Issue", + "search.filters.entityType.JournalIssue": "Número de la revista", - // "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Resultados de la búsqueda", + // "search.filters.entityType.JournalVolume": "Journal Volume", + "search.filters.entityType.JournalVolume": "Volumen de la revista", - // "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Resultados de la búsqueda", + // "search.filters.entityType.OrgUnit": "Organizational Unit", + "search.filters.entityType.OrgUnit": "Unidad organizativa", - // "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Resultados de la búsqueda", + // "search.filters.has_content_in_original_bundle.true": "Yes", + "search.filters.has_content_in_original_bundle.true": "Sí", - // "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Resultados de la búsqueda", + // "search.filters.has_content_in_original_bundle.false": "No", + "search.filters.has_content_in_original_bundle.false": "No", - // "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": "¿Le gustaría guardar \"{{ value }}\" como una variante de nombre para esta persona para que usted y otros puedan reutilizarlo para envíos futuros? Si no lo hace, aún puede usarlo para este envío.", + // "search.filters.discoverable.true": "No", + "search.filters.discoverable.true": "No", - // "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Save a new name variant", - "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Guardar una nueva variante de nombre", + // "search.filters.discoverable.false": "Yes", + "search.filters.discoverable.false": "Sí", - // "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Use only for this submission", - "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Usar solo para este envío", + // "search.filters.withdrawn.true": "Yes", + "search.filters.withdrawn.true": "Sí", - // "submission.sections.ccLicense.type": "License Type", - "submission.sections.ccLicense.type": "Tipo de licencia", + // "search.filters.withdrawn.false": "No", + "search.filters.withdrawn.false": "No", - // "submission.sections.ccLicense.select": "Select a license type…", - "submission.sections.ccLicense.select": "Seleccione un tipo de licencia...", - // "submission.sections.ccLicense.change": "Change your license type…", - "submission.sections.ccLicense.change": "Cambie su tipo de licencia...", + // "search.filters.head": "Filters", + "search.filters.head": "Filtros", - // "submission.sections.ccLicense.none": "No licenses available", - "submission.sections.ccLicense.none": "No hay licencias disponibles", + // "search.filters.reset": "Reset filters", + "search.filters.reset": "Restablecer filtros", - // "submission.sections.ccLicense.option.select": "Select an option…", - "submission.sections.ccLicense.option.select": "Seleccione una opción…", + // "search.filters.search.submit": "Submit", + "search.filters.search.submit": "Enviar", - // "submission.sections.ccLicense.link": "You’ve selected the following license:", - "submission.sections.ccLicense.link": "Ha seleccionado la siguiente licencia:", - // "submission.sections.ccLicense.confirmation": "I grant the license above", - "submission.sections.ccLicense.confirmation": "Otorgo la licencia de arriba", - // "submission.sections.general.add-more": "Add more", - "submission.sections.general.add-more": "Añadir más", + // "search.form.search": "Search", + "search.form.search": "Buscar", - // "submission.sections.general.collection": "Collection", - "submission.sections.general.collection": "Colección", + // "search.form.search_dspace": "All repository", + "search.form.search_dspace": "Todo el repositorio", - // "submission.sections.general.deposit_error_notice": "There was an issue when submitting the item, please try again later.", - "submission.sections.general.deposit_error_notice": "Hubo un problema al enviar el artículo. Vuelve a intentarlo más tarde.", + // "search.form.scope.all": "All of DSpace", + "search.form.scope.all": "Todo DSpace", - // "submission.sections.general.deposit_success_notice": "Submission deposited successfully.", - "submission.sections.general.deposit_success_notice": "Presentación depositada con éxito.", + // "search.results.head": "Search Results", + "search.results.head": "Resultados de la búsqueda", - // "submission.sections.general.discard_error_notice": "There was an issue when discarding the item, please try again later.", - "submission.sections.general.discard_error_notice": "Hubo un problema al descartar el artículo. Vuelve a intentarlo más tarde.", + // "search.results.no-results": "Your search returned no results. Having trouble finding what you're looking for? Try putting", + "search.results.no-results": "Su búsqueda no produjo resultados. ¿Tiene problemas para encontrar lo que busca? Intente poner", - // "submission.sections.general.discard_success_notice": "Submission discarded successfully.", - "submission.sections.general.discard_success_notice": "Envío descartado con éxito.", + // "search.results.no-results-link": "quotes around it", + "search.results.no-results-link": "citas a su alrededor", - // "submission.sections.general.metadata-extracted": "New metadata have been extracted and added to the {{sectionId}} section.", - "submission.sections.general.metadata-extracted": "Se extrajeron y agregaron nuevos metadatos a la sección {{ sectionId }} .", + // "search.results.empty": "Your search returned no results.", + "search.results.empty": "Su búsqueda no produjo resultados.", - // "submission.sections.general.metadata-extracted-new-section": "New {{sectionId}} section has been added to submission.", - "submission.sections.general.metadata-extracted-new-section": "Se ha añadido una nueva sección {{ sectionId }} al envío.", + // "search.results.view-result": "View", + "search.results.view-result": "Ver", - // "submission.sections.general.no-collection": "No collection found", - "submission.sections.general.no-collection": "No se encontró ninguna colección", - // "submission.sections.general.no-sections": "No options available", - "submission.sections.general.no-sections": "No hay opciones disponibles", + // "default.search.results.head": "Search Results", + "default.search.results.head": "Resultados de la búsqueda", - // "submission.sections.general.save_error_notice": "There was an issue when saving the item, please try again later.", - "submission.sections.general.save_error_notice": "Hubo un problema al guardar el artículo. Vuelve a intentarlo más tarde.", + // "default-relationships.search.results.head": "Search Results", + "default-relationships.search.results.head": "Resultados de la búsqueda", - // "submission.sections.general.save_success_notice": "Submission saved successfully.", - "submission.sections.general.save_success_notice": "Envío guardado con éxito.", - // "submission.sections.general.search-collection": "Search for a collection", - "submission.sections.general.search-collection": "Buscar una colección", + // "search.sidebar.close": "Back to results", + "search.sidebar.close": "Volver a resultados", - // "submission.sections.general.sections_not_valid": "There are incomplete sections.", - "submission.sections.general.sections_not_valid": "Hay secciones incompletas.", + // "search.sidebar.filters.title": "Filters", + "search.sidebar.filters.title": "Filtros", + // "search.sidebar.open": "Search Tools", + "search.sidebar.open": "Herramientas de búsqueda", + // "search.sidebar.results": "results", + "search.sidebar.results": "resultados", - // "submission.sections.submit.progressbar.CClicense": "Creative commons license", - "submission.sections.submit.progressbar.CClicense": "Licencia Creative Commons", + // "search.sidebar.settings.rpp": "Results per page", + "search.sidebar.settings.rpp": "resultados por página", - // "submission.sections.submit.progressbar.describe.recycle": "Recycle", - "submission.sections.submit.progressbar.describe.recycle": "Reciclar", + // "search.sidebar.settings.sort-by": "Sort By", + "search.sidebar.settings.sort-by": "Ordenar por", - // "submission.sections.submit.progressbar.describe.stepcustom": "Describe", - "submission.sections.submit.progressbar.describe.stepcustom": "Describir", + // "search.sidebar.settings.title": "Settings", + "search.sidebar.settings.title": "Ajustes", - // "submission.sections.submit.progressbar.describe.stepone": "Describe", - "submission.sections.submit.progressbar.describe.stepone": "Describir", - // "submission.sections.submit.progressbar.describe.steptwo": "Describe", - "submission.sections.submit.progressbar.describe.steptwo": "Describir", - // "submission.sections.submit.progressbar.detect-duplicate": "Potential duplicates", - "submission.sections.submit.progressbar.detect-duplicate": "Posibles duplicados", + // "search.view-switch.show-detail": "Show detail", + "search.view-switch.show-detail": "Mostrar detalle", - // "submission.sections.submit.progressbar.license": "Deposit license", - "submission.sections.submit.progressbar.license": "Licencia de depósito", + // "search.view-switch.show-grid": "Show as grid", + "search.view-switch.show-grid": "Mostrar como cuadrícula", - // "submission.sections.submit.progressbar.upload": "Upload files", - "submission.sections.submit.progressbar.upload": "Subir archivos", + // "search.view-switch.show-list": "Show as list", + "search.view-switch.show-list": "Mostrar como lista", - // "submission.sections.status.errors.title": "Errors", - "submission.sections.status.errors.title": "Errores", + // "sorting.ASC": "Ascending", + "sorting.ASC": "Ascendente", - // "submission.sections.status.valid.title": "Valid", - "submission.sections.status.valid.title": "Válido", + // "sorting.DESC": "Descending", + "sorting.DESC": "Descendente", - // "submission.sections.status.warnings.title": "Warnings", - "submission.sections.status.warnings.title": "Advertencias", + // "sorting.dc.title.ASC": "Title Ascending", + "sorting.dc.title.ASC": "Título Ascendente", - // "submission.sections.toggle.open": "Open section", - "submission.sections.toggle.open": "Sección abierta", + // "sorting.dc.title.DESC": "Title Descending", + "sorting.dc.title.DESC": "Título Descendente", - // "submission.sections.toggle.close": "Close section", - "submission.sections.toggle.close": "Cerrar sección", + // "sorting.score.ASC": "Least Relevant", + "sorting.score.ASC": "Menos relevante", - // "submission.sections.upload.delete.confirm.cancel": "Cancel", - "submission.sections.upload.delete.confirm.cancel": "Cancelar", + // "sorting.score.DESC": "Most Relevant", + "sorting.score.DESC": "Lo más relevante", - // "submission.sections.upload.delete.confirm.info": "This operation can't be undone. Are you sure?", - "submission.sections.upload.delete.confirm.info": "Esta operación no se puede deshacer. ", + // "sorting.dc.date.issued.ASC": "Date Issued Ascending", + "sorting.dc.date.issued.ASC": "Fecha de emisión Ascendente", - // "submission.sections.upload.delete.confirm.submit": "Yes, I'm sure", - "submission.sections.upload.delete.confirm.submit": "Sí estoy seguro", + // "sorting.dc.date.issued.DESC": "Date Issued Descending", + "sorting.dc.date.issued.DESC": "Fecha de emisión Descendente", - // "submission.sections.upload.delete.confirm.title": "Delete bitstream", - "submission.sections.upload.delete.confirm.title": "Eliminar archivo", + // "sorting.dc.date.accessioned.ASC": "Accessioned Date Ascending", + "sorting.dc.date.accessioned.ASC": "Fecha de adhesión Ascendente", - // "submission.sections.upload.delete.submit": "Delete", - "submission.sections.upload.delete.submit": "Borrar", + // "sorting.dc.date.accessioned.DESC": "Accessioned Date Descending", + "sorting.dc.date.accessioned.DESC": "Fecha de adhesión Descendente", - // "submission.sections.upload.download.title": "Download bitstream", - "submission.sections.upload.download.title": "Descarga archivo", + // "sorting.lastModified.ASC": "Last modified Ascending", + "sorting.lastModified.ASC": "Última modificación Ascendente", - // "submission.sections.upload.drop-message": "Drop files to attach them to the item", - "submission.sections.upload.drop-message": "Suelta archivos para adjuntarlos al artículo", + // "sorting.lastModified.DESC": "Last modified Descending", + "sorting.lastModified.DESC": "Última modificación Descendente", - // "submission.sections.upload.edit.title": "Edit bitstream", - "submission.sections.upload.edit.title": "Editar archivo", - // "submission.sections.upload.form.access-condition-label": "Access condition type", - "submission.sections.upload.form.access-condition-label": "Tipo de condición de acceso", + // "statistics.title": "Statistics", + "statistics.title": "Estadísticas", - // "submission.sections.upload.form.date-required": "Date is required.", - "submission.sections.upload.form.date-required": "Se requiere fecha.", + // "statistics.header": "Statistics for {{ scope }}", + "statistics.header": "Estadísticas de {{ scope }}", - // "submission.sections.upload.form.from-label": "Grant access from", - "submission.sections.upload.form.from-label": "Otorgar acceso desde", + // "statistics.breadcrumbs": "Statistics", + "statistics.breadcrumbs": "Estadísticas", - // "submission.sections.upload.form.from-placeholder": "From", - "submission.sections.upload.form.from-placeholder": "De", + // "statistics.page.no-data": "No data available", + "statistics.page.no-data": "Datos no disponibles", - // "submission.sections.upload.form.group-label": "Group", - "submission.sections.upload.form.group-label": "Grupo", + // "statistics.table.no-data": "No data available", + "statistics.table.no-data": "Datos no disponibles", - // "submission.sections.upload.form.group-required": "Group is required.", - "submission.sections.upload.form.group-required": "Se requiere grupo.", + // "statistics.table.title.TotalVisits": "Total visits", + "statistics.table.title.TotalVisits": "Visitas totales", - // "submission.sections.upload.form.until-label": "Grant access until", - "submission.sections.upload.form.until-label": "Conceder acceso hasta", + // "statistics.table.title.TotalVisitsPerMonth": "Total visits per month", + "statistics.table.title.TotalVisitsPerMonth": "Visitas totales por mes", - // "submission.sections.upload.form.until-placeholder": "Until", - "submission.sections.upload.form.until-placeholder": "Hasta que", + // "statistics.table.title.TotalDownloads": "File Visits", + "statistics.table.title.TotalDownloads": "Visitas de archivo", - // "submission.sections.upload.header.policy.default.nolist": "Uploaded files in the {{collectionName}} collection will be accessible according to the following group(s):", - "submission.sections.upload.header.policy.default.nolist": "Se podrá acceder a los archivos cargados en la colección {{ collectionName }} de acuerdo con los siguientes grupos:", + // "statistics.table.title.TopCountries": "Top country views", + "statistics.table.title.TopCountries": "Vistas principales por país", - // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", - "submission.sections.upload.header.policy.default.withlist": "Tenga en cuenta que los archivos cargados en la colección {{ collectionName }} serán accesibles, además de lo que se decida explícitamente para el archivo único, con los siguientes grupos:", + // "statistics.table.title.TopCities": "Top city views", + "statistics.table.title.TopCities": "Visitas principales por ciudad", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", - "submission.sections.upload.info": "Aquí encontrará todos los archivos que se encuentran actualmente en el artículo. ", + // "statistics.table.header.views": "Views", + "statistics.table.header.views": "Visitas", - // "submission.sections.upload.no-entry": "No", - "submission.sections.upload.no-entry": "No", - // "submission.sections.upload.no-file-uploaded": "No file uploaded yet.", - "submission.sections.upload.no-file-uploaded": "Aún no se ha subido ningún archivo.", - // "submission.sections.upload.save-metadata": "Save metadata", - "submission.sections.upload.save-metadata": "Guardar metadatos", + // "submission.edit.breadcrumbs": "Edit Submission", + "submission.edit.breadcrumbs": "Editar envío", - // "submission.sections.upload.undo": "Cancel", - "submission.sections.upload.undo": "Cancelar", + // "submission.edit.title": "Edit Submission", + "submission.edit.title": "Editar envío", - // "submission.sections.upload.upload-failed": "Upload failed", - "submission.sections.upload.upload-failed": "Subida fallida", + // "submission.general.cancel": "Cancel", + "submission.general.cancel": "Cancelar", - // "submission.sections.upload.upload-successful": "Upload successful", - "submission.sections.upload.upload-successful": "Subida exitosa", + // "submission.general.cannot_submit": "You have not the privilege to make a new submission.", + "submission.general.cannot_submit": "No tiene los permisos para realizar un nuevo envío.", + + // "submission.general.deposit": "Deposit", + "submission.general.deposit": "Depositar", + + // "submission.general.discard.confirm.cancel": "Cancel", + "submission.general.discard.confirm.cancel": "Cancelar", + + // "submission.general.discard.confirm.info": "This operation can't be undone. Are you sure?", + "submission.general.discard.confirm.info": "Esta operación no se puede deshacer. ¿Está seguro? ", + + // "submission.general.discard.confirm.submit": "Yes, I'm sure", + "submission.general.discard.confirm.submit": "Sí estoy seguro", + + // "submission.general.discard.confirm.title": "Discard submission", + "submission.general.discard.confirm.title": "Descartar envío", + + // "submission.general.discard.submit": "Discard", + "submission.general.discard.submit": "Descarte", + + // "submission.general.info.saved": "Saved", + "submission.general.info.saved": "Guardado", + + // "submission.general.info.pending-changes": "Unsaved changes", + "submission.general.info.pending-changes": "Cambios no guardados", + + // "submission.general.save": "Save", + "submission.general.save": "Guardar", + + // "submission.general.save-later": "Save for later", + "submission.general.save-later": "Guardar para más adelante", + + + // "submission.import-external.page.title": "Import metadata from an external source", + "submission.import-external.page.title": "Importar metadatos desde una fuente externa", + + // "submission.import-external.title": "Import metadata from an external source", + "submission.import-external.title": "Importar metadatos desde una fuente externa", + + // "submission.import-external.title.Journal": "Import a journal from an external source", + "submission.import-external.title.Journal": "Importar una revista desde una fuente externa", + + // "submission.import-external.title.JournalIssue": "Import a journal issue from an external source", + "submission.import-external.title.JournalIssue": "Importar un número de revista desde una fuente externa", + + // "submission.import-external.title.JournalVolume": "Import a journal volume from an external source", + "submission.import-external.title.JournalVolume": "Importar un volumen de revista desde una fuente externa", + + // "submission.import-external.title.OrgUnit": "Import a publisher from an external source", + "submission.import-external.title.OrgUnit": "Importar editor desde una fuente externa", + + // "submission.import-external.title.Person": "Import a person from an external source", + "submission.import-external.title.Person": "Importar personas desde una fuente externa", + + // "submission.import-external.title.Project": "Import a project from an external source", + "submission.import-external.title.Project": "Importar proyectos desde una fuente externa", + + // "submission.import-external.title.Publication": "Import a publication from an external source", + "submission.import-external.title.Publication": "Importar una publicación desde una fuente externa", + + // "submission.import-external.title.none": "Import metadata from an external source", + "submission.import-external.title.none": "Importar metadatos desde una fuente externa", + + // "submission.import-external.page.hint": "Enter a query above to find items from the web to import in to DSpace.", + "submission.import-external.page.hint": "Introduzca una consulta arriba para buscar í de la web para importarlos a DSpace.", + + // "submission.import-external.back-to-my-dspace": "Back to MyDSpace", + "submission.import-external.back-to-my-dspace": "Volver a Mi DSpace", + + // "submission.import-external.search.placeholder": "Search the external source", + "submission.import-external.search.placeholder": "Buscar fuente externa", + + // "submission.import-external.search.button": "Search", + "submission.import-external.search.button": "Buscar", + + // "submission.import-external.search.button.hint": "Write some words to search", + "submission.import-external.search.button.hint": "Escriba algunas palabras para buscar", + + // "submission.import-external.search.source.hint": "Pick an external source", + "submission.import-external.search.source.hint": "Elija una fuente externa", + + // "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.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": "Oficina Europea de Patentes (OEP)", + + // "submission.import-external.source.loading": "Loading ...", + "submission.import-external.source.loading": "Cargando ...", + + // "submission.import-external.source.sherpaJournal": "SHERPA Journals", + "submission.import-external.source.sherpaJournal": "Revistas SHERPA", + + // "submission.import-external.source.sherpaJournalIssn": "SHERPA Journals by ISSN", + "submission.import-external.source.sherpaJournalIssn": "Revistas SHERPA por ISSN", + + // "submission.import-external.source.sherpaPublisher": "SHERPA Publishers", + "submission.import-external.source.sherpaPublisher": "Editores SHERPA", + + // "submission.import-external.source.openAIREFunding": "Funding OpenAIRE API", + "submission.import-external.source.openAIREFunding": "API de Financiamiento de OpenAIRE", + + // "submission.import-external.source.orcid": "ORCID", + "submission.import-external.source.orcid": "ORCID", + + // "submission.import-external.source.pubmed": "Pubmed", + "submission.import-external.source.pubmed": "Pubmed", + + // "submission.import-external.source.pubmedeu": "Pubmed Europe", + "submission.import-external.source.pubmedeu": "Pubmed Europe", + + // "submission.import-external.source.lcname": "Library of Congress Names", + "submission.import-external.source.lcname": "Nombres de la Biblioteca del Congreso", + + // "submission.import-external.preview.title": "Item Preview", + "submission.import-external.preview.title": "Vista previa del artículo", + + // "submission.import-external.preview.title.Publication": "Publication Preview", + "submission.import-external.preview.title.Publication": "Previsualización de Publicación", + + // "submission.import-external.preview.title.none": "Item Preview", + "submission.import-external.preview.title.none": "Previsualización de Ítem", + + // "submission.import-external.preview.title.Journal": "Journal Preview", + "submission.import-external.preview.title.Journal": "Previsualización de Revista", + + // "submission.import-external.preview.title.OrgUnit": "Organizational Unit Preview", + "submission.import-external.preview.title.OrgUnit": "Previsualización de Unidad organizativa ", + + // "submission.import-external.preview.title.Person": "Person Preview", + "submission.import-external.preview.title.Person": "Previsualización de Persona", + + // "submission.import-external.preview.title.Project": "Project Preview", + "submission.import-external.preview.title.Project": "Previsualización de Proyecto", + + // "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": "Los siguientes metadatos se importaron de una fuente externa. Se completará previamente cuando inicie el envío.", + + // "submission.import-external.preview.button.import": "Start submission", + "submission.import-external.preview.button.import": "Iniciar envío", + + // "submission.import-external.preview.error.import.title": "Submission error", + "submission.import-external.preview.error.import.title": "Error de envío", + + // "submission.import-external.preview.error.import.body": "An error occurs during the external source entry import process.", + "submission.import-external.preview.error.import.body": "Se produce un error durante el proceso de importación de la entrada de fuente externa.", + + // "submission.sections.describe.relationship-lookup.close": "Close", + "submission.sections.describe.relationship-lookup.close": "Cerrar", + + // "submission.sections.describe.relationship-lookup.external-source.added": "Successfully added local entry to the selection", + "submission.sections.describe.relationship-lookup.external-source.added": "Entrada local agregada con éxito a la selección", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Import remote author", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Importación remota de autor", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Import remote journal", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Importación remota de revista", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Import remote journal issue", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Importación remota de número de revista", + + // "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": "Importación remota de volumen de revista", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Project", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Proyecto", + + // "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": "Importación remota de ítem ", + + // "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": "Importación remota de evento", + + // "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": "Importación remota de producto", + + // "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": "Importación remota de equipamiento", + + // "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": "Importación remota de unidad organizativa", + + // "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": "Importación remota de financiación", + + // "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": "Importación remota de persona", + + // "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": "Importación remota de patente", + + // "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": "Importación remota de proyecto", + + // "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": "Importación remota de publication", + + // "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": "¡Nueva entidad agregada!", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Project", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Proyecto", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Funding OpenAIRE API", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "API OpenAIRE de Financiamiento", + + // "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": "Importación remota de autor", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Successfully added local author to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Autor local agregado exitosamente a la selección", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.new-entity": "Successfully imported and added external author to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.new-entity": "Autor externo importado y agregado exitosamente a la selección", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.authority": "Authority", + "submission.sections.describe.relationship-lookup.external-source.import-modal.authority": "Autoridad", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.authority.new": "Import as a new local authority entry", + "submission.sections.describe.relationship-lookup.external-source.import-modal.authority.new": "Importar como una nueva entrada de autoridad local", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel": "Cancel", + "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel": "Cancelar", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Select a collection to import new entries to", + "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Seleccione una colección para importar nuevas entradas", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Entities", + "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Entidades", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.entities.new": "Import as a new local entity", + "submission.sections.describe.relationship-lookup.external-source.import-modal.entities.new": "Importar como una nueva entidad local", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "Importing from LC Name", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "Importar desde LCName", + + // "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": "Importando desde ORCID", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "Importing from Sherpa Journal", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "Importar desde Sherpa Journal", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "Importing from Sherpa Publisher", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "Importar desde Sherpa Publisher", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "Importing from PubMed", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "Importar desde PubMed", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "Importing from arXiv", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "Importando desde arXiv", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Import", + "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Importar", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Import Remote Journal", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Importación remota de Revista", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Successfully added local journal to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Revista local agregada con éxito a la selección", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Successfully imported and added external journal to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Revista externa importada y agregada con éxito a la selección", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title": "Import Remote Journal Issue", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title": "Importación remota de numero de revista ", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Successfully added local journal issue to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Se agregó localmenteun número de revista a la selección.", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity": "Successfully imported and added external journal issue to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity": "Se importó con éxito y se agregó externamente un número de revista a la selección.", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.title": "Import Remote Journal Volume", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.title": "Importación remota de volumen de revista ", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Successfully added local journal volume to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Se agregó con éxito el volumen de la revista local a la selección.", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Successfully imported and added external journal volume to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Se importó y agregó con éxito un volumen de revista externo a la selección", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Select a local match:", + "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Seleccione una coincidencia local:", + + // "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Deselect all", + "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Deseleccionar todo", + + // "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Deselect page", + "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Deseleccionar página", + + // "submission.sections.describe.relationship-lookup.search-tab.loading": "Loading...", + "submission.sections.describe.relationship-lookup.search-tab.loading": "Cargando...", + + // "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Search query", + "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Consulta de búsqueda", + + // "submission.sections.describe.relationship-lookup.search-tab.search": "Go", + "submission.sections.describe.relationship-lookup.search-tab.search": "Ir", + + // "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Search...", + "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Buscar...", + + // "submission.sections.describe.relationship-lookup.search-tab.select-all": "Select all", + "submission.sections.describe.relationship-lookup.search-tab.select-all": "Seleccionar todo", + + // "submission.sections.describe.relationship-lookup.search-tab.select-page": "Select page", + "submission.sections.describe.relationship-lookup.search-tab.select-page": "Seleccionar página", + + // "submission.sections.describe.relationship-lookup.selected": "Selected {{ size }} items", + "submission.sections.describe.relationship-lookup.selected": "Ítems {{ size }} seleccionados", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Local Authors ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Autores locales ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Local Journals ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Revistas locales ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Local Projects ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Proyectos locales ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Local Publications ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Publicaciones locales ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Local Authors ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Autores locales ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Local Organizational Units ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Unidades organizativas locales ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Local Data Packages ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Paquetes de datos locales ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Local Data Files ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Archivos de datos locales ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Local Journals ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Revistas locales ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Local Journal Issues ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Números de revista locales ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Local Journal Issues ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Números de revista locales ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Local Journal Volumes ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Volúmenes de revista locales ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Local Journal Volumes ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Volúmenes de revista locales ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Sherpa Journals ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Revistas Sherpa ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaPublisher": "Sherpa Publishers ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaPublisher": "Editores Sherpa ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid": "ORCID ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid": "ORCID ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "LC Names ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "Nombres LC ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", + + // "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.isFundingAgencyOfPublication": "Search for Funding Agencies", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Búsqueda de agencias de financiación", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Search for Funding", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Búsqueda de financiación", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Search for Organizational Units", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Búsqueda de unidades organizativas", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Funding OpenAIRE API", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "API OpenAire de Financiamiento", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projects", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Proyectos", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Funder of the Project", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Financiador del Proyecto", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Funding OpenAIRE API", + "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "API OpenAIRE de Financiamiento", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Project", + "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Proyecto", + + // "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projects", + "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Proyectos", + + // "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Funder of the Project", + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Financiador del Proyecto", + + + // "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Search...", + "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Buscar...", + + // "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Current Selection ({{ count }})", + "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Selección actual ({{ count }})", + + // "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Journal Issues", + "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Numeros de la revista", + + // "submission.sections.describe.relationship-lookup.title.JournalIssue": "Journal Issues", + "submission.sections.describe.relationship-lookup.title.JournalIssue": "Numeros de la revista", + + // "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Journal Volumes", + "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Volúmenes de la revista", + + // "submission.sections.describe.relationship-lookup.title.JournalVolume": "Journal Volumes", + "submission.sections.describe.relationship-lookup.title.JournalVolume": "Volúmenes de la revista", + + // "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Journals", + "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Revistas", + + // "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication": "Authors", + "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication": "Autores", + + // "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Funding Agency", + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Agencia financiadora", + + // "submission.sections.describe.relationship-lookup.title.Project": "Projects", + "submission.sections.describe.relationship-lookup.title.Project": "Proyectos", + + // "submission.sections.describe.relationship-lookup.title.Publication": "Publications", + "submission.sections.describe.relationship-lookup.title.Publication": "Publicaciones", + + // "submission.sections.describe.relationship-lookup.title.Person": "Authors", + "submission.sections.describe.relationship-lookup.title.Person": "Autores", + + // "submission.sections.describe.relationship-lookup.title.OrgUnit": "Organizational Units", + "submission.sections.describe.relationship-lookup.title.OrgUnit": "Unidades organizativas", + + // "submission.sections.describe.relationship-lookup.title.DataPackage": "Data Packages", + "submission.sections.describe.relationship-lookup.title.DataPackage": "Paquetes de datos", + + // "submission.sections.describe.relationship-lookup.title.DataFile": "Data Files", + "submission.sections.describe.relationship-lookup.title.DataFile": "Archivos de información", + + // "submission.sections.describe.relationship-lookup.title.Funding Agency": "Funding Agency", + "submission.sections.describe.relationship-lookup.title.Funding Agency": "Agencia financiadora", + + // "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Funding", + "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Financiación", + + // "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Parent Organizational Unit", + "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Unidad organizativa matriz", + + // "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Toggle dropdown", + "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Alternar menú desplegable", + + // "submission.sections.describe.relationship-lookup.selection-tab.settings": "Settings", + "submission.sections.describe.relationship-lookup.selection-tab.settings": "Ajustes", + + // "submission.sections.describe.relationship-lookup.selection-tab.no-selection": "Your selection is currently empty.", + "submission.sections.describe.relationship-lookup.selection-tab.no-selection": "Su selección está actualmente vacía.", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Selected Authors", + "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Autores seleccionados", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Selected Journals", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Revistas seleccionadas", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Selected Journal Volume", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Volumen de revista seleccionada", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Selected Projects", + "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Proyectos seleccionados", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Selected Publications", + "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Publicaciones Seleccionadas", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Selected Authors", + "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Autores seleccionados", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Selected Organizational Units", + "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Unidades organizativas seleccionadas", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Selected Data Packages", + "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Paquetes de datos seleccionados", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.DataFile": "Selected Data Files", + "submission.sections.describe.relationship-lookup.selection-tab.title.DataFile": "Archivos de datos seleccionados", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Selected Journals", + "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Revistas seleccionadas", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Selected Issue", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Número de revista seleccionados", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Selected Journal Volume", + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Volúmenes de revista seleccionados ", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Selected Funding Agency", + "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Agencias de financiación seleccionadas", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Selected Funding", + "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Financiamientos seleccionados", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Selected Issue", + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Número seleccionado", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Selected Organizational Unit", + "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Unidad organizativa seleccionada", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Resultados de la búsqueda", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Resultados de la búsqueda", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Resultados de la búsqueda", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Resultados de la búsqueda", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Resultados de la búsqueda", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Resultados de la búsqueda", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Resultados de la búsqueda", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Resultados de la búsqueda", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.epo": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.epo": "Resultados de la búsqueda", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.scopus": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.scopus": "Resultados de la búsqueda", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.scielo": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.scielo": "Resultados de la búsqueda", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Resultados de la búsqueda", + + // "submission.sections.describe.relationship-lookup.selection-tab.title": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title": "Resultados de la búsqueda", + + // "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": "¿Le gustaría guardar \"{{ value }}\" como una variante de nombre para esta persona para que usted y otros puedan reutilizarlo para envíos futuros? Si no lo hace, aún puede usarlo para este envío.", + + // "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Save a new name variant", + "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Guardar una nueva variante de nombre", + + // "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Use only for this submission", + "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Usar solo para este envío", + + // "submission.sections.ccLicense.type": "License Type", + "submission.sections.ccLicense.type": "Tipo de licencia", + + // "submission.sections.ccLicense.select": "Select a license type…", + "submission.sections.ccLicense.select": "Seleccione un tipo de licencia...", + + // "submission.sections.ccLicense.change": "Change your license type…", + "submission.sections.ccLicense.change": "Cambie su tipo de licencia...", + + // "submission.sections.ccLicense.none": "No licenses available", + "submission.sections.ccLicense.none": "No hay licencias disponibles", + + // "submission.sections.ccLicense.option.select": "Select an option…", + "submission.sections.ccLicense.option.select": "Seleccione una opción…", + + // "submission.sections.ccLicense.link": "You’ve selected the following license:", + "submission.sections.ccLicense.link": "Ha seleccionado la siguiente licencia:", + + // "submission.sections.ccLicense.confirmation": "I grant the license above", + "submission.sections.ccLicense.confirmation": "Otorgo la licencia de arriba", + + // "submission.sections.general.add-more": "Add more", + "submission.sections.general.add-more": "Añadir más", + + // "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": "No se puede finalizar el depósito por errores en el formulario.
    Por favor, complete todos los campos requeridos para finalizar el envío.", + + // "submission.sections.general.collection": "Collection", + "submission.sections.general.collection": "Colección", + + // "submission.sections.general.deposit_error_notice": "There was an issue when submitting the item, please try again later.", + "submission.sections.general.deposit_error_notice": "Hubo un problema al enviar el ítem. Vuelva a intentarlo más tarde.", + + // "submission.sections.general.deposit_success_notice": "Submission deposited successfully.", + "submission.sections.general.deposit_success_notice": "Envío depositado con éxito.", + + // "submission.sections.general.discard_error_notice": "There was an issue when discarding the item, please try again later.", + "submission.sections.general.discard_error_notice": "Hubo un problema al descartar el ítem. Vuelva a intentarlo más tarde.", + + // "submission.sections.general.discard_success_notice": "Submission discarded successfully.", + "submission.sections.general.discard_success_notice": "Envío descartado con éxito.", + + // "submission.sections.general.metadata-extracted": "New metadata have been extracted and added to the {{sectionId}} section.", + "submission.sections.general.metadata-extracted": "Se extrajeron y agregaron nuevos metadatos a la sección {{ sectionId }} .", + + // "submission.sections.general.metadata-extracted-new-section": "New {{sectionId}} section has been added to submission.", + "submission.sections.general.metadata-extracted-new-section": "Se ha añadido una nueva sección {{ sectionId }} al envío.", + + // "submission.sections.general.no-collection": "No collection found", + "submission.sections.general.no-collection": "No se encontró ninguna colección", + + // "submission.sections.general.no-sections": "No options available", + "submission.sections.general.no-sections": "No hay opciones disponibles", + + // "submission.sections.general.save_error_notice": "There was an issue when saving the item, please try again later.", + "submission.sections.general.save_error_notice": "Hubo un problema al guardar el ítem. Vuelva a intentarlo más tarde.", + + // "submission.sections.general.save_success_notice": "Submission saved successfully.", + "submission.sections.general.save_success_notice": "Envío guardado con éxito.", + + // "submission.sections.general.search-collection": "Search for a collection", + "submission.sections.general.search-collection": "Buscar una colección", + + // "submission.sections.general.sections_not_valid": "There are incomplete sections.", + "submission.sections.general.sections_not_valid": "Hay secciones incompletas.", + + + // "submission.sections.submit.progressbar.accessCondition": "Item access conditions", + "submission.sections.submit.progressbar.accessCondition": "Condiciones de acceso al ítem", + + // "submission.sections.submit.progressbar.CClicense": "Creative commons license", + "submission.sections.submit.progressbar.CClicense": "Licencia Creative Commons", + + // "submission.sections.submit.progressbar.describe.recycle": "Recycle", + "submission.sections.submit.progressbar.describe.recycle": "Reciclar", + + // "submission.sections.submit.progressbar.describe.stepcustom": "Describe", + "submission.sections.submit.progressbar.describe.stepcustom": "Describir", + + // "submission.sections.submit.progressbar.describe.stepone": "Describe", + "submission.sections.submit.progressbar.describe.stepone": "Describir", + + // "submission.sections.submit.progressbar.describe.steptwo": "Describe", + "submission.sections.submit.progressbar.describe.steptwo": "Describir", + + // "submission.sections.submit.progressbar.detect-duplicate": "Potential duplicates", + "submission.sections.submit.progressbar.detect-duplicate": "Posibles duplicados", + + // "submission.sections.submit.progressbar.license": "Deposit license", + "submission.sections.submit.progressbar.license": "Licencia de depósito", + + // "submission.sections.submit.progressbar.sherpapolicy": "Sherpa policies", + "submission.sections.submit.progressbar.sherpapolicy": "Políticas Sherpa", + + // "submission.sections.submit.progressbar.upload": "Upload files", + "submission.sections.submit.progressbar.upload": "Subir archivos", + + // "submission.sections.submit.progressbar.sherpaPolicies": "Publisher open access policy information", + "submission.sections.submit.progressbar.sherpaPolicies": "Información sobre políticas editoriales de acceso abierto", + + + // "submission.sections.sherpa-policy.title-empty": "No publisher policy information available. If your work has an associated ISSN, please enter it above to see any related publisher open access policies.", + "submission.sections.sherpa-policy.title-empty": "No se encuentra disponible la información sobre política editorial. Si tiene un ISSN asociado, introdúzcalo arriba para ver información sobre políticas editoriales de acceso abierto.", + + // "submission.sections.status.errors.title": "Errors", + "submission.sections.status.errors.title": "Errores", + + // "submission.sections.status.valid.title": "Valid", + "submission.sections.status.valid.title": "Válido", + + // "submission.sections.status.warnings.title": "Warnings", + "submission.sections.status.warnings.title": "Advertencias", + + // "submission.sections.status.errors.aria": "has errors", + "submission.sections.status.errors.aria": "con errores", + + // "submission.sections.status.valid.aria": "is valid", + "submission.sections.status.valid.aria": "es válido", + + // "submission.sections.status.warnings.aria": "has warnings", + "submission.sections.status.warnings.aria": "con avisos", + + // "submission.sections.status.info.title": "Additional Information", + "submission.sections.status.info.title": "Información adicional", + + // "submission.sections.status.info.aria": "Additional Information", + "submission.sections.status.info.aria": "Información adicional", + + // "submission.sections.toggle.open": "Open section", + "submission.sections.toggle.open": "Sección abierta", + + // "submission.sections.toggle.close": "Close section", + "submission.sections.toggle.close": "Cerrar sección", + + // "submission.sections.toggle.aria.open": "Expand {{sectionHeader}} section", + "submission.sections.toggle.aria.open": "Expandir {{sectionHeader}} sección", + + // "submission.sections.toggle.aria.close": "Collapse {{sectionHeader}} section", + "submission.sections.toggle.aria.close": "Contraer {{sectionHeader}} sección", + + // "submission.sections.upload.delete.confirm.cancel": "Cancel", + "submission.sections.upload.delete.confirm.cancel": "Cancelar", + + // "submission.sections.upload.delete.confirm.info": "This operation can't be undone. Are you sure?", + "submission.sections.upload.delete.confirm.info": "Esta operación no se puede deshacer. ¿Está seguro? ", + + // "submission.sections.upload.delete.confirm.submit": "Yes, I'm sure", + "submission.sections.upload.delete.confirm.submit": "Sí, estoy seguro", + + // "submission.sections.upload.delete.confirm.title": "Delete bitstream", + "submission.sections.upload.delete.confirm.title": "Eliminar archivo", + + // "submission.sections.upload.delete.submit": "Delete", + "submission.sections.upload.delete.submit": "Borrar", + + // "submission.sections.upload.download.title": "Download bitstream", + "submission.sections.upload.download.title": "Descargar archivo", + + // "submission.sections.upload.drop-message": "Drop files to attach them to the item", + "submission.sections.upload.drop-message": "Suelte archivos para adjuntarlos al ítem", + + // "submission.sections.upload.edit.title": "Edit bitstream", + "submission.sections.upload.edit.title": "Editar archivo", + + // "submission.sections.upload.form.access-condition-label": "Access condition type", + "submission.sections.upload.form.access-condition-label": "Tipo de condición de acceso", + + // "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": "Seleccione la condición de acceso que se aplicará a los ficheros una vez se deposite el ítem", + + // "submission.sections.upload.form.date-required": "Date is required.", + "submission.sections.upload.form.date-required": "Se requiere la fecha.", + + // "submission.sections.upload.form.date-required-from": "Grant access from date is required.", + "submission.sections.upload.form.date-required-from": "Para aplicar el acceso se requiere una fecha de inicio.", + + // "submission.sections.upload.form.date-required-until": "Grant access until date is required.", + "submission.sections.upload.form.date-required-until": "Para aplicar el acceso se requiere una fecha de finalización.", + + // "submission.sections.upload.form.from-label": "Grant access from", + "submission.sections.upload.form.from-label": "Permitir acceso desde", + + // "submission.sections.upload.form.from-hint": "Select the date from which the related access condition is applied", + "submission.sections.upload.form.from-hint": "Seleccione la fecha a partir de la cúal será aplicada la condición de acceso", + + // "submission.sections.upload.form.from-placeholder": "From", + "submission.sections.upload.form.from-placeholder": "Desde", + + // "submission.sections.upload.form.group-label": "Group", + "submission.sections.upload.form.group-label": "Grupo", + + // "submission.sections.upload.form.group-required": "Group is required.", + "submission.sections.upload.form.group-required": "Se requiere grupo.", + + // "submission.sections.upload.form.until-label": "Grant access until", + "submission.sections.upload.form.until-label": "Conceder acceso hasta", + + // "submission.sections.upload.form.until-hint": "Select the date until which the related access condition is applied", + "submission.sections.upload.form.until-hint": "Seleccione la fecha hasta la cuál será aplicada la condición de acceso", + + // "submission.sections.upload.form.until-placeholder": "Until", + "submission.sections.upload.form.until-placeholder": "Hasta", + + // "submission.sections.upload.header.policy.default.nolist": "Uploaded files in the {{collectionName}} collection will be accessible according to the following group(s):", + "submission.sections.upload.header.policy.default.nolist": "Se podrá acceder a los archivos cargados en la colección {{ collectionName }} de acuerdo con los siguientes grupos:", + + // "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": "Tenga en cuenta que los archivos cargados en la colección {{ collectionName }} serán accesibles, además de lo que se decida explícitamente para el fichero, con los siguientes grupos:", + + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page" + "submission.sections.upload.info": "Aquí encontrará todos los archivos que se encuentran actualmente en el ítem. Puede actualizar los metadatos del fichero y las condiciones de acceso e incluir ficheros adicionales simplemente arrastrando-y-soltando en cualquier instante en la página", + + // "submission.sections.upload.no-entry": "No", + "submission.sections.upload.no-entry": "No", + + // "submission.sections.upload.no-file-uploaded": "No file uploaded yet.", + "submission.sections.upload.no-file-uploaded": "Aún no se ha subido ningún archivo.", + + // "submission.sections.upload.save-metadata": "Save metadata", + "submission.sections.upload.save-metadata": "Guardar metadatos", + + // "submission.sections.upload.undo": "Cancel", + "submission.sections.upload.undo": "Cancelar", + + // "submission.sections.upload.upload-failed": "Upload failed", + "submission.sections.upload.upload-failed": "Subida fallida", + + // "submission.sections.upload.upload-successful": "Upload successful", + "submission.sections.upload.upload-successful": "Subida exitosa", + + // "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": "Si lo marca, el ítem será detectable en el buscador/navegador. Si lo desmarca, el ítems solo estará disponible mediante el enlace directo, y no aparecerá en el buscador/navegador.", + + // "submission.sections.accesses.form.discoverable-label": "Discoverable", + "submission.sections.accesses.form.discoverable-label": "Detectable", + + // "submission.sections.accesses.form.access-condition-label": "Access condition type", + "submission.sections.accesses.form.access-condition-label": "Tipo de condición de acceso", + + // "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": "Seleccione la condición de acceso que se aplicará al ítem una vez depositado", + + // "submission.sections.accesses.form.date-required": "Date is required.", + "submission.sections.accesses.form.date-required": "Se requiere una fecha.", + + // "submission.sections.accesses.form.date-required-from": "Grant access from date is required.", + "submission.sections.accesses.form.date-required-from": "Para aplicar el acceso se requiere una fecha de inicio.", + + // "submission.sections.accesses.form.date-required-until": "Grant access until date is required.", + "submission.sections.accesses.form.date-required-until": "Para aplicar el acceso se requiere una fecha de finalización.", + + // "submission.sections.accesses.form.from-label": "Grant access from", + "submission.sections.accesses.form.from-label": "Permitir acceso desde", + + // "submission.sections.accesses.form.from-hint": "Select the date from which the related access condition is applied", + "submission.sections.accesses.form.from-hint": "Seleccione la fecha a partir de la cúal será aplicada la condición de acceso", + + // "submission.sections.accesses.form.from-placeholder": "From", + "submission.sections.accesses.form.from-placeholder": "Desde", + + // "submission.sections.accesses.form.group-label": "Group", + "submission.sections.accesses.form.group-label": "Grupo", + + // "submission.sections.accesses.form.group-required": "Group is required.", + "submission.sections.accesses.form.group-required": "Se requiere un grupo.", + + // "submission.sections.accesses.form.until-label": "Grant access until", + "submission.sections.accesses.form.until-label": "Permitir acceso hasta", + + // "submission.sections.accesses.form.until-hint": "Select the date until which the related access condition is applied", + "submission.sections.accesses.form.until-hint": "Seleccione la fecha hasta la cuál será aplicada la condición de acceso", + + // "submission.sections.accesses.form.until-placeholder": "Until", + "submission.sections.accesses.form.until-placeholder": "Hasta", // "submission.sections.license.granted-label": "I confirm the license above", "submission.sections.license.granted-label": "Confirmo la licencia", @@ -5323,256 +6270,722 @@ // "submission.sections.license.notgranted": "You must accept the license", "submission.sections.license.notgranted": "Debe aceptar la licencia", - // "submission.submit.breadcrumbs": "New submission", - "submission.submit.breadcrumbs": "Nuevo envío", - // "submission.submit.title": "New submission", - "submission.submit.title": "Nuevo envío", + // "submission.sections.sherpa.publication.information": "Publication information", + "submission.sections.sherpa.publication.information": "Información de la Publicac", + // "submission.sections.sherpa.publication.information.title": "Title", + "submission.sections.sherpa.publication.information.title": "Título", + // "submission.sections.sherpa.publication.information.issns": "ISSNs", + "submission.sections.sherpa.publication.information.issns": "ISSNs", - // "submission.workflow.generic.delete": "Delete", - "submission.workflow.generic.delete": "Borrar", + // "submission.sections.sherpa.publication.information.url": "URL", + "submission.sections.sherpa.publication.information.url": "URL", - // "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": "Si desea descartar este artículo, seleccione \"Eliminar\". Luego se le pedirá que lo confirme.", + // "submission.sections.sherpa.publication.information.publishers": "Publisher", + "submission.sections.sherpa.publication.information.publishers": "Editor", - // "submission.workflow.generic.edit": "Edit", - "submission.workflow.generic.edit": "Editar", + // "submission.sections.sherpa.publication.information.romeoPub": "Romeo Pub", + "submission.sections.sherpa.publication.information.romeoPub": "Romeo Pub", - // "submission.workflow.generic.edit-help": "Select this option to change the item's metadata.", - "submission.workflow.generic.edit-help": "Seleccione esta opción para cambiar los metadatos del artículo.", + // "submission.sections.sherpa.publication.information.zetoPub": "Zeto Pub", + "submission.sections.sherpa.publication.information.zetoPub": "Zeto Pub", - // "submission.workflow.generic.view": "View", - "submission.workflow.generic.view": "Vista", + // "submission.sections.sherpa.publisher.policy": "Publisher Policy", + "submission.sections.sherpa.publisher.policy": "Política editorial", - // "submission.workflow.generic.view-help": "Select this option to view the item's metadata.", - "submission.workflow.generic.view-help": "Seleccione esta opción para ver los metadatos del artículo.", + // "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": "Lq siguiente informacióm se encontró via Sherpa Romeo. En base a esas políticas, se proporcionan consejos sobre las necesidad de un embargo y de aquellos ficheros que puede utilizar. Si tiene dudas, por favor, contacte con el administrador del repositorio mediante el formulario de sugerencias.", + // "submission.sections.sherpa.publisher.policy.openaccess": "Open Access pathways permitted by this journal's policy are listed below by article version. Click on a pathway for a more detailed view", + "submission.sections.sherpa.publisher.policy.openaccess": "Los caminos hacia el Acceso Abierto que esta revista permite se relacionan, por versión de artículo, abajo. Pulse en un camino para una visión mas detallada", + // "submission.sections.sherpa.publisher.policy.more.information": "For more information, please see the following links:", + "submission.sections.sherpa.publisher.policy.more.information": "Para mas información, por favor, siga los siguientes enlaces:", - // "submission.workflow.tasks.claimed.approve": "Approve", - "submission.workflow.tasks.claimed.approve": "Aprobar", + // "submission.sections.sherpa.publisher.policy.version": "Version", + "submission.sections.sherpa.publisher.policy.version": "Versión", - // "submission.workflow.tasks.claimed.approve_help": "If you have reviewed the item and it is suitable for inclusion in the collection, select \"Approve\".", - "submission.workflow.tasks.claimed.approve_help": "Si ha revisado el artículo y es adecuado para su inclusión en la colección, seleccione \"Aprobar \".", + // "submission.sections.sherpa.publisher.policy.embargo": "Embargo", + "submission.sections.sherpa.publisher.policy.embargo": "Embargo", - // "submission.workflow.tasks.claimed.edit": "Edit", - "submission.workflow.tasks.claimed.edit": "Editar", + // "submission.sections.sherpa.publisher.policy.noembargo": "No Embargo", + "submission.sections.sherpa.publisher.policy.noembargo": "Sin Embargo", - // "submission.workflow.tasks.claimed.edit_help": "Select this option to change the item's metadata.", - "submission.workflow.tasks.claimed.edit_help": "Seleccione esta opción para cambiar los metadatos del artículo.", + // "submission.sections.sherpa.publisher.policy.nolocation": "None", + "submission.sections.sherpa.publisher.policy.nolocation": "Ninguno", - // "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": "Ingrese su motivo para rechazar el envío en el cuadro a continuación, indicando si el remitente puede solucionar un problema y volver a enviarlo.", + // "submission.sections.sherpa.publisher.policy.license": "License", + "submission.sections.sherpa.publisher.policy.license": "Licencia", - // "submission.workflow.tasks.claimed.reject.reason.placeholder": "Describe the reason of reject", - "submission.workflow.tasks.claimed.reject.reason.placeholder": "Describe el motivo del rechazo.", + // "submission.sections.sherpa.publisher.policy.prerequisites": "Prerequisites", + "submission.sections.sherpa.publisher.policy.prerequisites": "Prerequisitos", - // "submission.workflow.tasks.claimed.reject.reason.submit": "Reject item", - "submission.workflow.tasks.claimed.reject.reason.submit": "Rechazar artículo", + // "submission.sections.sherpa.publisher.policy.location": "Location", + "submission.sections.sherpa.publisher.policy.location": "Lugar", - // "submission.workflow.tasks.claimed.reject.reason.title": "Reason", - "submission.workflow.tasks.claimed.reject.reason.title": "Razón", + // "submission.sections.sherpa.publisher.policy.conditions": "Conditions", + "submission.sections.sherpa.publisher.policy.conditions": "Condiciones", - // "submission.workflow.tasks.claimed.reject.submit": "Reject", - "submission.workflow.tasks.claimed.reject.submit": "Rechazar", + // "submission.sections.sherpa.publisher.policy.refresh": "Refresh", + "submission.sections.sherpa.publisher.policy.refresh": "Refrescar", - // "submission.workflow.tasks.claimed.reject_help": "If you have reviewed the item and found it is not suitable for inclusion in the collection, select \"Reject\". You will then be asked to enter a message indicating why the item is unsuitable, and whether the submitter should change something and resubmit.", - "submission.workflow.tasks.claimed.reject_help": "Si ha revisado el artículo y ha encontrado que no es adecuado para su inclusión en la colección, seleccione \"Rechazar\". Luego, se le pedirá que ingrese un mensaje que indique por qué el artículo no es adecuado y si el remitente debe cambiar algo y volver a enviarlo.", + // "submission.sections.sherpa.record.information": "Record Information", + "submission.sections.sherpa.record.information": "Informacion del registro", - // "submission.workflow.tasks.claimed.return": "Return to pool", - "submission.workflow.tasks.claimed.return": "Volver a la piscina", + // "submission.sections.sherpa.record.information.id": "ID", + "submission.sections.sherpa.record.information.id": "ID", - // "submission.workflow.tasks.claimed.return_help": "Return the task to the pool so that another user may perform the task.", - "submission.workflow.tasks.claimed.return_help": "Devuelva la tarea al grupo para que otro usuario pueda realizarla.", + // "submission.sections.sherpa.record.information.date.created": "Date Created", + "submission.sections.sherpa.record.information.date.created": "Fecha de creación", + // "submission.sections.sherpa.record.information.date.modified": "Last Modified", + "submission.sections.sherpa.record.information.date.modified": "Última modificación", + // "submission.sections.sherpa.record.information.uri": "URI", + "submission.sections.sherpa.record.information.uri": "URI", - // "submission.workflow.tasks.generic.error": "Error occurred during operation...", - "submission.workflow.tasks.generic.error": "Ocurrió un error durante la operación...", + // "submission.sections.sherpa.error.message": "There was an error retrieving sherpa informations", + "submission.sections.sherpa.error.message": "Hubo un error recuperando la información de Sherpa", - // "submission.workflow.tasks.generic.processing": "Processing...", - "submission.workflow.tasks.generic.processing": "Procesando...", - // "submission.workflow.tasks.generic.submitter": "Submitter", - "submission.workflow.tasks.generic.submitter": "Remitente", - // "submission.workflow.tasks.generic.success": "Operation successful", - "submission.workflow.tasks.generic.success": "Operación exitosa", + // "submission.submit.breadcrumbs": "New submission", + "submission.submit.breadcrumbs": "Nuevo envío", + // "submission.submit.title": "New submission", + "submission.submit.title": "Nuevo envío", - // "submission.workflow.tasks.pool.claim": "Claim", - "submission.workflow.tasks.pool.claim": "Afirmar", - // "submission.workflow.tasks.pool.claim_help": "Assign this task to yourself.", - "submission.workflow.tasks.pool.claim_help": "Asigne esta tarea a usted mismo.", + // "submission.workflow.generic.delete": "Delete", + "submission.workflow.generic.delete": "Borrar", - // "submission.workflow.tasks.pool.hide-detail": "Hide detail", - "submission.workflow.tasks.pool.hide-detail": "Ocultar detalle", + // "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": "Si desea descartar este artículo, seleccione \"Eliminar\". Luego se le pedirá que lo confirme.", - // "submission.workflow.tasks.pool.show-detail": "Show detail", - "submission.workflow.tasks.pool.show-detail": "Mostrar detalle", + // "submission.workflow.generic.edit": "Edit", + "submission.workflow.generic.edit": "Editar", + // "submission.workflow.generic.edit-help": "Select this option to change the item's metadata.", + "submission.workflow.generic.edit-help": "Seleccione esta opción para cambiar los metadatos del artículo.", + // "submission.workflow.generic.view": "View", + "submission.workflow.generic.view": "Vista", - // "thumbnail.default.alt": "Thumbnail Image", - "thumbnail.default.alt": "Imagen en miniatura", + // "submission.workflow.generic.view-help": "Select this option to view the item's metadata.", + "submission.workflow.generic.view-help": "Seleccione esta opción para ver los metadatos del artículo.", - // "thumbnail.default.placeholder": "No Thumbnail Available", - "thumbnail.default.placeholder": "No hay miniatura disponible", + // "submission.workflow.tasks.claimed.approve": "Approve", + "submission.workflow.tasks.claimed.approve": "Aprobar", - // "thumbnail.project.alt": "Project Logo", - "thumbnail.project.alt": "Logotipo del proyecto", + // "submission.workflow.tasks.claimed.approve_help": "If you have reviewed the item and it is suitable for inclusion in the collection, select \"Approve\".", + "submission.workflow.tasks.claimed.approve_help": "Si ha revisado el artículo y es adecuado para su inclusión en la colección, seleccione \"Aprobar \".", - // "thumbnail.project.placeholder": "Project Placeholder Image", - "thumbnail.project.placeholder": "Imagen de marcador de posición del proyecto", + // "submission.workflow.tasks.claimed.edit": "Edit", + "submission.workflow.tasks.claimed.edit": "Editar", - // "thumbnail.orgunit.alt": "OrgUnit Logo", - "thumbnail.orgunit.alt": "Logotipo de OrgUnit", + // "submission.workflow.tasks.claimed.edit_help": "Select this option to change the item's metadata.", + "submission.workflow.tasks.claimed.edit_help": "Seleccione esta opción para cambiar los metadatos del artículo.", - // "thumbnail.orgunit.placeholder": "OrgUnit Placeholder Image", - "thumbnail.orgunit.placeholder": "Imagen de marcador de posición de unidad organizativa", + // "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": "Introduzca su motivo para rechazar el envío en el cuadro a continuación, indicando si el remitente puede solucionar un problema y volver a enviarlo.", - // "thumbnail.person.alt": "Profile Picture", - "thumbnail.person.alt": "Foto de perfil", + // "submission.workflow.tasks.claimed.reject.reason.placeholder": "Describe the reason of reject", + "submission.workflow.tasks.claimed.reject.reason.placeholder": "Describa el motivo del rechazo.", - // "thumbnail.person.placeholder": "No Profile Picture Available", - "thumbnail.person.placeholder": "No hay imagen de perfil disponible", + // "submission.workflow.tasks.claimed.reject.reason.submit": "Reject item", + "submission.workflow.tasks.claimed.reject.reason.submit": "Rechazar el ítem", + // "submission.workflow.tasks.claimed.reject.reason.title": "Reason", + "submission.workflow.tasks.claimed.reject.reason.title": "Razón", + // "submission.workflow.tasks.claimed.reject.submit": "Reject", + "submission.workflow.tasks.claimed.reject.submit": "Rechazar", - // "title": "DSpace", - "title": "DSpace", + // "submission.workflow.tasks.claimed.reject_help": "If you have reviewed the item and found it is not suitable for inclusion in the collection, select \"Reject\". You will then be asked to enter a message indicating why the item is unsuitable, and whether the submitter should change something and resubmit.", + "submission.workflow.tasks.claimed.reject_help": "Si ha revisado el ítem y ha encontrado que no es adecuado para su inclusión en la colección, seleccione \"Rechazar\". Luego, se le pedirá que introduzca un mensaje que indique por qué el artículo no es adecuado y si el remitente debe cambiar algo y volver a enviarlo.", + // "submission.workflow.tasks.claimed.return": "Return to pool", + "submission.workflow.tasks.claimed.return": "Volver al pool", + // "submission.workflow.tasks.claimed.return_help": "Return the task to the pool so that another user may perform the task.", + "submission.workflow.tasks.claimed.return_help": "Devuelva la tarea al pool para que otro usuario pueda realizarla.", - // "vocabulary-treeview.header": "Hierarchical tree view", - "vocabulary-treeview.header": "Vista de árbol jerárquico", - // "vocabulary-treeview.load-more": "Load more", - "vocabulary-treeview.load-more": "Carga más", - // "vocabulary-treeview.search.form.reset": "Reset", - "vocabulary-treeview.search.form.reset": "Reiniciar", + // "submission.workflow.tasks.generic.error": "Error occurred during operation...", + "submission.workflow.tasks.generic.error": "Ocurrió un error durante la operación...", - // "vocabulary-treeview.search.form.search": "Search", - "vocabulary-treeview.search.form.search": "Buscar", + // "submission.workflow.tasks.generic.processing": "Processing...", + "submission.workflow.tasks.generic.processing": "Procesando...", - // "vocabulary-treeview.search.no-result": "There were no items to show", - "vocabulary-treeview.search.no-result": "No había artículos para mostrar", + // "submission.workflow.tasks.generic.submitter": "Submitter", + "submission.workflow.tasks.generic.submitter": "Remitente", - // "vocabulary-treeview.tree.description.nsi": "The Norwegian Science Index", - "vocabulary-treeview.tree.description.nsi": "El índice científico noruego", + // "submission.workflow.tasks.generic.success": "Operation successful", + "submission.workflow.tasks.generic.success": "Operación exitosa", - // "vocabulary-treeview.tree.description.srsc": "Research Subject Categories", - "vocabulary-treeview.tree.description.srsc": "Categorías de temas de investigación", + // "submission.workflow.tasks.pool.claim": "Claim", + "submission.workflow.tasks.pool.claim": "Afirmar", - // "uploader.browse": "browse", - "uploader.browse": "examinar", + // "submission.workflow.tasks.pool.claim_help": "Assign this task to yourself.", + "submission.workflow.tasks.pool.claim_help": "Asigne esta tarea a usted mismo.", - // "uploader.drag-message": "Drag & Drop your files here", - "uploader.drag-message": "Arrastrar", + // "submission.workflow.tasks.pool.hide-detail": "Hide detail", + "submission.workflow.tasks.pool.hide-detail": "Ocultar detalle", - // "uploader.delete.btn-title": "Delete", - "uploader.delete.btn-title": "Borrar", + // "submission.workflow.tasks.pool.show-detail": "Show detail", + "submission.workflow.tasks.pool.show-detail": "Mostrar detalle", - // "uploader.or": ", or ", - "uploader.or": ", o ", - // "uploader.processing": "Processing", - "uploader.processing": "Procesando", + // "submission.workspace.generic.view": "View", + "submission.workspace.generic.view": "Ver", - // "uploader.queue-length": "Queue length", - "uploader.queue-length": "Longitud de la cola", + // "submission.workspace.generic.view-help": "Select this option to view the item's metadata.", + "submission.workspace.generic.view-help": "Seleccione esta opción para ver los metadatos del ítem.", - // "virtual-metadata.delete-item.info": "Select the types for which you want to save the virtual metadata as real metadata", - "virtual-metadata.delete-item.info": "Seleccione los tipos para los que desea guardar los metadatos virtuales como metadatos reales", - // "virtual-metadata.delete-item.modal-head": "The virtual metadata of this relation", - "virtual-metadata.delete-item.modal-head": "Los metadatos virtuales de esta relación", + // "thumbnail.default.alt": "Thumbnail Image", + "thumbnail.default.alt": "Miniatura", - // "virtual-metadata.delete-relationship.modal-head": "Select the items for which you want to save the virtual metadata as real metadata", - "virtual-metadata.delete-relationship.modal-head": "Seleccione los artículos para los que desea guardar los metadatos virtuales como metadatos reales", + // "thumbnail.default.placeholder": "No Thumbnail Available", + "thumbnail.default.placeholder": "No hay miniatura disponible", + // "thumbnail.project.alt": "Project Logo", + "thumbnail.project.alt": "Logotipo del proyecto", + // "thumbnail.project.placeholder": "Project Placeholder Image", + "thumbnail.project.placeholder": "Imagen del proyecto en el marcador de posición ", - // "workflowAdmin.search.results.head": "Administer Workflow", - "workflowAdmin.search.results.head": "Administrar flujo de trabajo", + // "thumbnail.orgunit.alt": "OrgUnit Logo", + "thumbnail.orgunit.alt": "Logotipo de Unidad Organizativa", + // "thumbnail.orgunit.placeholder": "OrgUnit Placeholder Image", + "thumbnail.orgunit.placeholder": "Imagen de Unidad Organizativa en el marcador de posición ", + // "thumbnail.person.alt": "Profile Picture", + "thumbnail.person.alt": "Foto de perfil", - // "workflow-item.edit.breadcrumbs": "Edit workflowitem", - "workflow-item.edit.breadcrumbs": "Editar artículo de flujo de trabajo", + // "thumbnail.person.placeholder": "No Profile Picture Available", + "thumbnail.person.placeholder": "No hay imagen de perfil disponible", - // "workflow-item.edit.title": "Edit workflowitem", - "workflow-item.edit.title": "Editar artículo de flujo de trabajo", - // "workflow-item.delete.notification.success.title": "Deleted", - "workflow-item.delete.notification.success.title": "Eliminado", - // "workflow-item.delete.notification.success.content": "This workflow item was successfully deleted", - "workflow-item.delete.notification.success.content": "Este artículo de flujo de trabajo se eliminó correctamente", + // "title": "DSpace", + "title": "DSpace", - // "workflow-item.delete.notification.error.title": "Something went wrong", - "workflow-item.delete.notification.error.title": "Algo salió mal", - // "workflow-item.delete.notification.error.content": "The workflow item could not be deleted", - "workflow-item.delete.notification.error.content": "No se pudo eliminar el artículo del flujo de trabajo", - // "workflow-item.delete.title": "Delete workflow item", - "workflow-item.delete.title": "Eliminar artículo de flujo de trabajo", + // "vocabulary-treeview.header": "Hierarchical tree view", + "vocabulary-treeview.header": "Vista de árbol jerárquico", - // "workflow-item.delete.header": "Delete workflow item", - "workflow-item.delete.header": "Eliminar artículo de flujo de trabajo", + // "vocabulary-treeview.load-more": "Load more", + "vocabulary-treeview.load-more": "Cargar más", - // "workflow-item.delete.button.cancel": "Cancel", - "workflow-item.delete.button.cancel": "Cancelar", + // "vocabulary-treeview.search.form.reset": "Reset", + "vocabulary-treeview.search.form.reset": "Reiniciar", - // "workflow-item.delete.button.confirm": "Delete", - "workflow-item.delete.button.confirm": "Borrar", + // "vocabulary-treeview.search.form.search": "Search", + "vocabulary-treeview.search.form.search": "Buscar", + // "vocabulary-treeview.search.no-result": "There were no items to show", + "vocabulary-treeview.search.no-result": "No había ítems para mostrar", - // "workflow-item.send-back.notification.success.title": "Sent back to submitter", - "workflow-item.send-back.notification.success.title": "Enviado al remitente", + // "vocabulary-treeview.tree.description.nsi": "The Norwegian Science Index", + "vocabulary-treeview.tree.description.nsi": "El Norwegian Science Index", - // "workflow-item.send-back.notification.success.content": "This workflow item was successfully sent back to the submitter", - "workflow-item.send-back.notification.success.content": "Este artículo de flujo de trabajo se envió correctamente al remitente.", + // "vocabulary-treeview.tree.description.srsc": "Research Subject Categories", + "vocabulary-treeview.tree.description.srsc": "Categorías de temas de investigación", - // "workflow-item.send-back.notification.error.title": "Something went wrong", - "workflow-item.send-back.notification.error.title": "Algo salió mal", - // "workflow-item.send-back.notification.error.content": "The workflow item could not be sent back to the submitter", - "workflow-item.send-back.notification.error.content": "El artículo del flujo de trabajo no se pudo devolver al remitente.", - // "workflow-item.send-back.title": "Send workflow item back to submitter", - "workflow-item.send-back.title": "Enviar el artículo del flujo de trabajo al remitente", + // "uploader.browse": "browse", + "uploader.browse": "examinar", - // "workflow-item.send-back.header": "Send workflow item back to submitter", - "workflow-item.send-back.header": "Enviar el artículo del flujo de trabajo al remitente", + // "uploader.drag-message": "Drag & Drop your files here", + "uploader.drag-message": "Arrastrar y soltar sus ficheros aquí", - // "workflow-item.send-back.button.cancel": "Cancel", - "workflow-item.send-back.button.cancel": "Cancelar", + // "uploader.delete.btn-title": "Delete", + "uploader.delete.btn-title": "Borrar", - // "workflow-item.send-back.button.confirm": "Send back", - "workflow-item.send-back.button.confirm": "Enviar de vuelta", + // "uploader.or": ", or ", + "uploader.or": ", o ", - // "workflow-item.view.breadcrumbs": "Workflow View", - "workflow-item.view.breadcrumbs": "Vista de flujo de trabajo", + // "uploader.processing": "Processing", + "uploader.processing": "Procesando", + // "uploader.queue-length": "Queue length", + "uploader.queue-length": "Longitud de la cola", - // "idle-modal.header": "Session will expire soon", - "idle-modal.header": "La sesión caducará pronto", + // "virtual-metadata.delete-item.info": "Select the types for which you want to save the virtual metadata as real metadata", + "virtual-metadata.delete-item.info": "Seleccione los tipos para los que desea guardar los metadatos virtuales como metadatos reales", - // "idle-modal.info": "For security reasons, user sessions expire after {{ timeToExpire }} minutes of inactivity. Your session will expire soon. Would you like to extend it or log out?", - "idle-modal.info": "Por razones de seguridad, las sesiones de usuario caducan después de {{ timeToExpire }} minutos de inactividad. Tu sesión caducará pronto. ¿Le gustaría extenderla o cerrar la sesión?", + // "virtual-metadata.delete-item.modal-head": "The virtual metadata of this relation", + "virtual-metadata.delete-item.modal-head": "Los metadatos virtuales de esta relación", - // "idle-modal.log-out": "Log out", - "idle-modal.log-out": "Cerrar sesión", + // "virtual-metadata.delete-relationship.modal-head": "Select the items for which you want to save the virtual metadata as real metadata", + "virtual-metadata.delete-relationship.modal-head": "Seleccione los ítems para los que desea guardar los metadatos virtuales como metadatos reales", - // "idle-modal.extend-session": "Extend session" - "idle-modal.extend-session": "Extender sesión", -} + + + // "workspace.search.results.head": "Your submissions", + "workspace.search.results.head": "Sus envíos", + + // "workflowAdmin.search.results.head": "Administer Workflow", + "workflowAdmin.search.results.head": "Administrar flujo de trabajo", + + // "workflow.search.results.head": "Workflow tasks", + "workflow.search.results.head": "Tareas del flujo de trabajo", + + + + // "workflow-item.edit.breadcrumbs": "Edit workflowitem", + "workflow-item.edit.breadcrumbs": "Editar ítem del flujo de trabajo", + + // "workflow-item.edit.title": "Edit workflowitem", + "workflow-item.edit.title": "Editar ítem del flujo de trabajo", + + // "workflow-item.delete.notification.success.title": "Deleted", + "workflow-item.delete.notification.success.title": "Eliminado", + + // "workflow-item.delete.notification.success.content": "This workflow item was successfully deleted", + "workflow-item.delete.notification.success.content": "Este ítem del flujo de trabajo se eliminó correctamente", + + // "workflow-item.delete.notification.error.title": "Something went wrong", + "workflow-item.delete.notification.error.title": "Algo salió mal", + + // "workflow-item.delete.notification.error.content": "The workflow item could not be deleted", + "workflow-item.delete.notification.error.content": "No se pudo eliminar el ítem del flujo de trabajo", + + // "workflow-item.delete.title": "Delete workflow item", + "workflow-item.delete.title": "Eliminar ítem del flujo de trabajo", + + // "workflow-item.delete.header": "Delete workflow item", + "workflow-item.delete.header": "Eliminar ítem del flujo de trabajo", + + // "workflow-item.delete.button.cancel": "Cancel", + "workflow-item.delete.button.cancel": "Cancelar", + + // "workflow-item.delete.button.confirm": "Delete", + "workflow-item.delete.button.confirm": "Borrar", + + + // "workflow-item.send-back.notification.success.title": "Sent back to submitter", + "workflow-item.send-back.notification.success.title": "Devolver al remitente", + + // "workflow-item.send-back.notification.success.content": "This workflow item was successfully sent back to the submitter", + "workflow-item.send-back.notification.success.content": "Este ítem del flujo de trabajo se devolvió correctamente al remitente.", + + // "workflow-item.send-back.notification.error.title": "Something went wrong", + "workflow-item.send-back.notification.error.title": "Algo salió mal", + + // "workflow-item.send-back.notification.error.content": "The workflow item could not be sent back to the submitter", + "workflow-item.send-back.notification.error.content": "El ítem del flujo de trabajo no se pudo devolver al remitente.", + + // "workflow-item.send-back.title": "Send workflow item back to submitter", + "workflow-item.send-back.title": "Enviar el ítem del flujo de trabajo al remitente", + + // "workflow-item.send-back.header": "Send workflow item back to submitter", + "workflow-item.send-back.header": "Enviar el ítem del flujo de trabajo al remitente", + + // "workflow-item.send-back.button.cancel": "Cancel", + "workflow-item.send-back.button.cancel": "Cancelar", + + // "workflow-item.send-back.button.confirm": "Send back", + "workflow-item.send-back.button.confirm": "Devolver", + + // "workflow-item.view.breadcrumbs": "Workflow View", + "workflow-item.view.breadcrumbs": "Vista del flujo de trabajo", + + // "workspace-item.view.breadcrumbs": "Workspace View", + "workspace-item.view.breadcrumbs": "Vista del flujo de trabajo", + + // "workspace-item.view.title": "Workspace View", + "workspace-item.view.title": "Vista del flujo de trabajo", + + // "idle-modal.header": "Session will expire soon", + "idle-modal.header": "La sesión caducará pronto", + + // "idle-modal.info": "For security reasons, user sessions expire after {{ timeToExpire }} minutes of inactivity. Your session will expire soon. Would you like to extend it or log out?", + "idle-modal.info": "Por razones de seguridad, las sesiones de usuario caducan después de {{ timeToExpire }} minutos de inactividad. Su sesión caducará pronto. ¿Le gustaría prolongarla o cerrar la sesión?", + + // "idle-modal.log-out": "Log out", + "idle-modal.log-out": "Cerrar sesión", + + // "idle-modal.extend-session": "Extend session", + "idle-modal.extend-session": "Prolongar la sesión", + + // "researcher.profile.action.processing" : "Processing...", + "researcher.profile.action.processing" : "Procesando...", + + // "researcher.profile.associated": "Researcher profile associated", + "researcher.profile.associated": "Perfil asociado de investigador", + + // "researcher.profile.change-visibility.fail": "An unexpected error occurs while changing the profile visibility", + "researcher.profile.change-visibility.fail": "Ocurrió un error al cambiar la visibilidad del perfil", + + // "researcher.profile.create.new": "Create new", + "researcher.profile.create.new": "Crear nuevo", + + // "researcher.profile.create.success": "Researcher profile created successfully", + "researcher.profile.create.success": "Perfil de investigador creado con éxito", + + // "researcher.profile.create.fail": "An error occurs during the researcher profile creation", + "researcher.profile.create.fail": "Ocurrió un error en la creación del perfil de investigador", + + // "researcher.profile.delete": "Delete", + "researcher.profile.delete": "Borrar", + + // "researcher.profile.expose": "Expose", + "researcher.profile.expose": "Mostrar", + + // "researcher.profile.hide": "Hide", + "researcher.profile.hide": "Ocultar", + + // "researcher.profile.not.associated": "Researcher profile not yet associated", + "researcher.profile.not.associated": "No hay asociado aún un perfil de investigador", + + // "researcher.profile.view": "View", + "researcher.profile.view": "Ver", + + // "researcher.profile.private.visibility" : "PRIVATE", + "researcher.profile.private.visibility" : "PRIVADO", + + // "researcher.profile.public.visibility" : "PUBLIC", + "researcher.profile.public.visibility" : "PÚBLICO", + + // "researcher.profile.status": "Status:", + "researcher.profile.status": "Estado:", + + // "researcherprofile.claim.not-authorized": "You are not authorized to claim this item. For more details contact the administrator(s).", + "researcherprofile.claim.not-authorized": "No está autorizado pare reclamar este ítem. Contacte con el administrador para mas detalles.", + + // "researcherprofile.error.claim.body" : "An error occurred while claiming the profile, please try again later", + "researcherprofile.error.claim.body" : "Hubo un error reclamando el perfil, por favor, inténtelo mas tarde", + + // "researcherprofile.error.claim.title" : "Error", + "researcherprofile.error.claim.title" : "Error", + + // "researcherprofile.success.claim.body" : "Profile claimed with success", + "researcherprofile.success.claim.body" : "Perfil reclamado con éxito", + + // "researcherprofile.success.claim.title" : "Success", + "researcherprofile.success.claim.title" : "Éxito", + + // "person.page.orcid.create": "Create an ORCID ID", + "person.page.orcid.create": "Crear un ORCID ID", + + // "person.page.orcid.granted-authorizations": "Granted authorizations", + "person.page.orcid.granted-authorizations": "Autorizaciones concedidas", + + // "person.page.orcid.grant-authorizations" : "Grant authorizations", + "person.page.orcid.grant-authorizations" : "Conceder autorizaciones", + + // "person.page.orcid.link": "Connect to ORCID ID", + "person.page.orcid.link": "Conectar con ORCID ID", + + // "person.page.orcid.link.processing": "Linking profile to ORCID...", + "person.page.orcid.link.processing": "Conectando perfil con ORCID...", + + // "person.page.orcid.link.error.message": "Something went wrong while connecting the profile with ORCID. If the problem persists, contact the administrator.", + "person.page.orcid.link.error.message": "Algo falló al conectar el perfil con ORCID. Si el problema continuase, contacte con el administrador.", + + // "person.page.orcid.orcid-not-linked-message": "The ORCID iD of this profile ({{ orcid }}) has not yet been connected to an account on the ORCID registry or the connection is expired.", + "person.page.orcid.orcid-not-linked-message": "El ORCID iD de este perfil ({{ orcid }}) no se ha conectado aún con una cuenta en el registro ORCID o la conexión caducó.", + + // "person.page.orcid.unlink": "Disconnect from ORCID", + "person.page.orcid.unlink": "Desconectar de ORCID", + + // "person.page.orcid.unlink.processing": "Processing...", + "person.page.orcid.unlink.processing": "Procesando...", + + // "person.page.orcid.missing-authorizations": "Missing authorizations", + "person.page.orcid.missing-authorizations": "Faltan autorizaciones", + + // "person.page.orcid.missing-authorizations-message": "The following authorizations are missing:", + "person.page.orcid.missing-authorizations-message": "Faltan las siguientes autorizaciones:", + + // "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": "¡Perfecto! esta caja está vacía, por lo que usted ha concedido todos los permisos de acceso para todas las funciones que usa su institución.", + + // "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": "Aun no está asociado con un ORCID iD. Al pulsar en el botón inferior puede enlazar este perfil con una cuenta ORCID.", + + // "person.page.orcid.profile-preferences": "Profile preferences", + "person.page.orcid.profile-preferences": "Preferencias del perfil", + + // "person.page.orcid.funding-preferences": "Funding preferences", + "person.page.orcid.funding-preferences": "Preferencias de financiación", + + // "person.page.orcid.publications-preferences": "Publication preferences", + "person.page.orcid.publications-preferences": "Preferencias de publicación", + + // "person.page.orcid.remove-orcid-message": "If you need to remove your ORCID, please contact the repository administrator", + "person.page.orcid.remove-orcid-message": "Si necesita retirar su ORCID, contacte por favor con el administrador del repositorio", + + // "person.page.orcid.save.preference.changes": "Update settings", + "person.page.orcid.save.preference.changes": "Actualizar configuración", + + // "person.page.orcid.sync-profile.affiliation" : "Affiliation", + "person.page.orcid.sync-profile.affiliation" : "Afiliación", + + // "person.page.orcid.sync-profile.biographical" : "Biographical data", + "person.page.orcid.sync-profile.biographical" : "Biografía", + + // "person.page.orcid.sync-profile.education" : "Education", + "person.page.orcid.sync-profile.education" : "Grados", + + // "person.page.orcid.sync-profile.identifiers" : "Identifiers", + "person.page.orcid.sync-profile.identifiers" : "Identificadores", + + // "person.page.orcid.sync-fundings.all" : "All fundings", + "person.page.orcid.sync-fundings.all" : "Todas las financiaciones", + + // "person.page.orcid.sync-fundings.mine" : "My fundings", + "person.page.orcid.sync-fundings.mine" : "Mi financiación ", + + // "person.page.orcid.sync-fundings.my_selected" : "Selected fundings", + "person.page.orcid.sync-fundings.my_selected" : "Financiaciones seleccionadas", + + // "person.page.orcid.sync-fundings.disabled" : "Disabled", + "person.page.orcid.sync-fundings.disabled" : "Deshabilitado", + + // "person.page.orcid.sync-publications.all" : "All publications", + "person.page.orcid.sync-publications.all" : "Todas las publicaciones", + + // "person.page.orcid.sync-publications.mine" : "My publications", + "person.page.orcid.sync-publications.mine" : "Mis publicaciones", + + // "person.page.orcid.sync-publications.my_selected" : "Selected publications", + "person.page.orcid.sync-publications.my_selected" : "Publicaciones seleccionadas", + + // "person.page.orcid.sync-publications.disabled" : "Disabled", + "person.page.orcid.sync-publications.disabled" : "Deshabilitado", + + // "person.page.orcid.sync-queue.discard" : "Discard the change and do not synchronize with the ORCID registry", + "person.page.orcid.sync-queue.discard" : "Deshechar el cambio y no sincronizar con ORCID", + + // "person.page.orcid.sync-queue.discard.error": "The discarding of the ORCID queue record failed", + "person.page.orcid.sync-queue.discard.error": "Falló el borrado del registro ORCID en la cola", + + // "person.page.orcid.sync-queue.discard.success": "The ORCID queue record have been discarded successfully", + "person.page.orcid.sync-queue.discard.success": "El registro ORCID ha sido eliminado exitosamente de la cola", + + // "person.page.orcid.sync-queue.empty-message": "The ORCID queue registry is empty", + "person.page.orcid.sync-queue.empty-message": "La cola del registro de ORCID está vacía", + + // "person.page.orcid.sync-queue.table.header.type" : "Type", + "person.page.orcid.sync-queue.table.header.type" : "Tipo", + + // "person.page.orcid.sync-queue.table.header.description" : "Description", + "person.page.orcid.sync-queue.table.header.description" : "Descripción", + + // "person.page.orcid.sync-queue.table.header.action" : "Action", + "person.page.orcid.sync-queue.table.header.action" : "Acción", + + // "person.page.orcid.sync-queue.description.affiliation": "Affiliations", + "person.page.orcid.sync-queue.description.affiliation": "Affiliaciones", + + // "person.page.orcid.sync-queue.description.country": "Country", + "person.page.orcid.sync-queue.description.country": "Pais", + + // "person.page.orcid.sync-queue.description.education": "Educations", + "person.page.orcid.sync-queue.description.education": "Grados", + + // "person.page.orcid.sync-queue.description.external_ids": "External ids", + "person.page.orcid.sync-queue.description.external_ids": "IDs externos", + + // "person.page.orcid.sync-queue.description.other_names": "Other names", + "person.page.orcid.sync-queue.description.other_names": "Otras firmas", + + // "person.page.orcid.sync-queue.description.qualification": "Qualifications", + "person.page.orcid.sync-queue.description.qualification": "Cualificaciones", + + // "person.page.orcid.sync-queue.description.researcher_urls": "Researcher urls", + "person.page.orcid.sync-queue.description.researcher_urls": "URLs del Investigador", + + // "person.page.orcid.sync-queue.description.keywords": "Keywords", + "person.page.orcid.sync-queue.description.keywords": "Palabras clave", + + // "person.page.orcid.sync-queue.tooltip.insert": "Add a new entry in the ORCID registry", + "person.page.orcid.sync-queue.tooltip.insert": "Añadir una nueva entrada al registro ORCID", + + // "person.page.orcid.sync-queue.tooltip.update": "Update this entry on the ORCID registry", + "person.page.orcid.sync-queue.tooltip.update": "Actualizar esta entrada en el registro ORCID", + + // "person.page.orcid.sync-queue.tooltip.delete": "Remove this entry from the ORCID registry", + "person.page.orcid.sync-queue.tooltip.delete": "Retirar esta entrada del registro ORCID", + + // "person.page.orcid.sync-queue.tooltip.publication": "Publication", + "person.page.orcid.sync-queue.tooltip.publication": "Publicación", + + // "person.page.orcid.sync-queue.tooltip.project": "Project", + "person.page.orcid.sync-queue.tooltip.project": "Proyecto", + + // "person.page.orcid.sync-queue.tooltip.affiliation": "Affiliation", + "person.page.orcid.sync-queue.tooltip.affiliation": "Afiliación", + + // "person.page.orcid.sync-queue.tooltip.education": "Education", + "person.page.orcid.sync-queue.tooltip.education": "Grados", + + // "person.page.orcid.sync-queue.tooltip.qualification": "Qualification", + "person.page.orcid.sync-queue.tooltip.qualification": "Cualificación", + + // "person.page.orcid.sync-queue.tooltip.other_names": "Other name", + "person.page.orcid.sync-queue.tooltip.other_names": "Otras firmas", + + // "person.page.orcid.sync-queue.tooltip.country": "Country", + "person.page.orcid.sync-queue.tooltip.country": "País", + + // "person.page.orcid.sync-queue.tooltip.keywords": "Keyword", + "person.page.orcid.sync-queue.tooltip.keywords": "Palabras clave", + + // "person.page.orcid.sync-queue.tooltip.external_ids": "External identifier", + "person.page.orcid.sync-queue.tooltip.external_ids": "Identificador externo", + + // "person.page.orcid.sync-queue.tooltip.researcher_urls": "Researcher url", + "person.page.orcid.sync-queue.tooltip.researcher_urls": "URL del investigador", + + // "person.page.orcid.sync-queue.send" : "Synchronize with ORCID registry", + "person.page.orcid.sync-queue.send" : "Sincronizar con el registro ORCID", + + // "person.page.orcid.sync-queue.send.unauthorized-error.title": "The submission to ORCID failed for missing authorizations.", + "person.page.orcid.sync-queue.send.unauthorized-error.title": "Falló el envío a ORCID debdo a autorización insuficiente.", + + // "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": "Pulse aquí para conceder de nuevo los permisos requeridos. Si el problema continuase, contacte con el administrador", + + // "person.page.orcid.sync-queue.send.bad-request-error": "The submission to ORCID failed because the resource sent to ORCID registry is not valid", + "person.page.orcid.sync-queue.send.bad-request-error": "El envío a ORCID falló debido a que el recurso que se envión no era válido", + + // "person.page.orcid.sync-queue.send.error": "The submission to ORCID failed", + "person.page.orcid.sync-queue.send.error": "Falló el envío a ORCID", + + // "person.page.orcid.sync-queue.send.conflict-error": "The submission to ORCID failed because the resource is already present on the ORCID registry", + "person.page.orcid.sync-queue.send.conflict-error": "El envío a ORCID falló debido a que el recurso ya existía en el registro ORCID", + + // "person.page.orcid.sync-queue.send.not-found-warning": "The resource does not exists anymore on the ORCID registry.", + "person.page.orcid.sync-queue.send.not-found-warning": "El recurso no existe ya en el registro ORCID.", + + // "person.page.orcid.sync-queue.send.success": "The submission to ORCID was completed successfully", + "person.page.orcid.sync-queue.send.success": "El envío a ORCID ha sido completado con éxito", + + // "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": "Los datos que quiere sincronizar con ORCID no son válidos", + + // "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "The amount's currency is required", + "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "Se requiere la divisa de la cantidad", + + // "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": "El recurso que se quiere enviar necesita al menos un identificador", + + // "person.page.orcid.sync-queue.send.validation-error.title.required": "The title is required", + "person.page.orcid.sync-queue.send.validation-error.title.required": "Se requiere un título", + + // "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": "Se requiere un dc.type", + + // "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": "Se requiere una fecha de comienzo", + + // "person.page.orcid.sync-queue.send.validation-error.funder.required": "The funder is required", + "person.page.orcid.sync-queue.send.validation-error.funder.required": "Se requiere un financiador", + + // "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": "Los 2 dígitos ISO 3166 de pais son inválidos", + + // "person.page.orcid.sync-queue.send.validation-error.organization.required": "The organization is required", + "person.page.orcid.sync-queue.send.validation-error.organization.required": "Se requiere una organización", + + // "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "The organization's name is required", + "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "Se requiere el nombre de la organización", + + // "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid" : "The publication date must be one year after 1900", + "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid" : "la fecha de la publicación debe ser posterior a 1900", + + // "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "The organization to be sent requires an address", + "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "Se requiere la dirección de la organización", + + // "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": "Se requiere que la dirección de la organización tenga una ciudad", + + // "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": "Se requiere que la dirección de la organización tenga un código de pais de 2 dígitos ISO 3166 válido", + + // "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": "Se requiere un identificador para desambiguar la organización. Los identificadores admitidos son GRID, Ringgold, Legal Entity identifiers (LEIs) y Crossref Funder Registry", + + // "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": "Se requiere que los identificadores de la organización tengan un valor", + + // "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "The organization's identifiers requires a source", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "Se requiere que los identificadores de la organización tengan una fuente", + + // "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": "La fuente de uno de los identificadores de organización es inválida. Las fuentes admitidas son RINGGOLD, GRID, LEI and FUNDREF", + + // "person.page.orcid.synchronization-mode": "Synchronization mode", + "person.page.orcid.synchronization-mode": "Modo sincronización", + + // "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": "Modo sincronización", + + // "person.page.orcid.synchronization-mode-message": "Please select how you would like synchronization to ORCID to occur. The options include \"Manual\" (you must send your data to ORCID manually), or \"Batch\" (the system will send your data to ORCID via a scheduled script).", + "person.page.orcid.synchronization-mode-message": "Seleccione cómo prefiere realizar la sincronización con ORCID. Puede escoger \"Manual\" (usted envía los datos a ORCID manualmente), o \"Batch\" (el sistema enviará sus datos a ORCID via un programa planificado).", + + // "person.page.orcid.synchronization-mode-funding-message": "Select whether to send your linked Project entities to your ORCID record's list of funding information.", + "person.page.orcid.synchronization-mode-funding-message": "Seleccione si enviará información de sus entidades conectadas de tipo Proyecto a la información de financiación de ORCID.", + + // "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": "Seleccione si enviará información de sus entidades conectadas de tipo Publicación a la información de trabajos de ORCID.", + + // "person.page.orcid.synchronization-mode-profile-message": "Select whether to send your biographical data or personal identifiers to your ORCID record.", + "person.page.orcid.synchronization-mode-profile-message": "Seleccione si enviará información de sus datos biográficos o identificadores personales a ORCID", + + // "person.page.orcid.synchronization-settings-update.success": "The synchronization settings have been updated successfully", + "person.page.orcid.synchronization-settings-update.success": "Los ajustes de sincronización se han actualizado con éxito", + + // "person.page.orcid.synchronization-settings-update.error": "The update of the synchronization settings failed", + "person.page.orcid.synchronization-settings-update.error": "Ha fallado la actualización de los ajustes de sincronización", + + // "person.page.orcid.synchronization-mode.manual": "Manual", + "person.page.orcid.synchronization-mode.manual": "Manual", + + // "person.page.orcid.scope.authenticate": "Get your ORCID iD", + "person.page.orcid.scope.authenticate": "Obtenga su ORCID iD", + + // "person.page.orcid.scope.read-limited": "Read your information with visibility set to Trusted Parties", + "person.page.orcid.scope.read-limited": "Lea su información con la visibilidad ajustada a Terceros Confiables", + + // "person.page.orcid.scope.activities-update": "Add/update your research activities", + "person.page.orcid.scope.activities-update": "Añada/actualice sus actividades de investigación", + + // "person.page.orcid.scope.person-update": "Add/update other information about you", + "person.page.orcid.scope.person-update": "Añada/actualice otras informaciones sobre usted", + + // "person.page.orcid.unlink.success": "The disconnection between the profile and the ORCID registry was successful", + "person.page.orcid.unlink.success": "Se efectuó con éxito la desconexión entre el perfil y el registro de ORCID", + + // "person.page.orcid.unlink.error": "An error occurred while disconnecting between the profile and the ORCID registry. Try again", + "person.page.orcid.unlink.error": "Hubo un error en la desconexión entre el perfil y el registro de ORCID. Inténtelo de nuevo", + + // "person.orcid.sync.setting": "ORCID Synchronization settings", + "person.orcid.sync.setting": "Ajustes de sincronización de ORCID", + + // "person.orcid.registry.queue": "ORCID Registry Queue", + // TODO New key - Add a translation + "person.orcid.registry.queue": "Cola de registro de ORCID ", + + // "person.orcid.registry.auth": "ORCID Authorizations", + "person.orcid.registry.auth": "Autorizaciones ORCID ", + + + +} \ No newline at end of file From ca341e53b44210b3b189bb91743dc8dfd3e88968 Mon Sep 17 00:00:00 2001 From: Yana De Pauw Date: Thu, 25 Aug 2022 15:33:23 +0200 Subject: [PATCH 32/39] Close modal on process delete success --- src/app/process-page/detail/process-detail.component.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/process-page/detail/process-detail.component.ts b/src/app/process-page/detail/process-detail.component.ts index f9151d27b8..9d92dece61 100644 --- a/src/app/process-page/detail/process-detail.component.ts +++ b/src/app/process-page/detail/process-detail.component.ts @@ -196,6 +196,7 @@ export class ProcessDetailComponent implements OnInit { ).subscribe((rd) => { if (rd.hasSucceeded) { this.notificationsService.success(this.translateService.get('process.detail.delete.success')); + this.closeModal(); this.router.navigateByUrl(getProcessListRoute()); } else { this.notificationsService.error(this.translateService.get('process.detail.delete.error')); From 72852dd031060887a7112d769f51be449157ce24 Mon Sep 17 00:00:00 2001 From: Yana De Pauw Date: Thu, 25 Aug 2022 17:05:34 +0200 Subject: [PATCH 33/39] Fix test --- src/app/process-page/detail/process-detail.component.spec.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/app/process-page/detail/process-detail.component.spec.ts b/src/app/process-page/detail/process-detail.component.spec.ts index 53e65e62eb..e4ab7d1082 100644 --- a/src/app/process-page/detail/process-detail.component.spec.ts +++ b/src/app/process-page/detail/process-detail.component.spec.ts @@ -243,18 +243,23 @@ describe('ProcessDetailComponent', () => { describe('deleteProcess', () => { it('should delete the process and navigate back to the overview page on success', () => { + spyOn(component, 'closeModal'); component.deleteProcess(process); expect(processService.delete).toHaveBeenCalledWith(process.processId); expect(notificationsService.success).toHaveBeenCalled(); + expect(component.closeModal).toHaveBeenCalled(); expect(router.navigateByUrl).toHaveBeenCalledWith(getProcessListRoute()); }); it('should delete the process and not navigate on error', () => { (processService.delete as jasmine.Spy).and.returnValue(createFailedRemoteDataObject$()); + spyOn(component, 'closeModal'); + component.deleteProcess(process); expect(processService.delete).toHaveBeenCalledWith(process.processId); expect(notificationsService.error).toHaveBeenCalled(); + expect(component.closeModal).not.toHaveBeenCalled(); expect(router.navigateByUrl).not.toHaveBeenCalled(); }); }); From 317c615b3060b56506e7460876e44e09d6f13ea6 Mon Sep 17 00:00:00 2001 From: lotte Date: Thu, 25 Aug 2022 17:12:57 +0200 Subject: [PATCH 34/39] Fixed lgtm issue --- src/app/shared/browse-by/browse-by.component.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/shared/browse-by/browse-by.component.ts b/src/app/shared/browse-by/browse-by.component.ts index 2c1844a310..79edf39096 100644 --- a/src/app/shared/browse-by/browse-by.component.ts +++ b/src/app/shared/browse-by/browse-by.component.ts @@ -12,7 +12,6 @@ import { ViewMode } from '../../core/shared/view-mode.model'; import { RouteService } from '../../core/services/route.service'; import { map } from 'rxjs/operators'; import { hasValue } from '../empty.util'; -import { BBM_PAGINATION_ID } from '../../browse-by/browse-by-metadata-page/browse-by-metadata-page.component'; @Component({ selector: 'ds-browse-by', From 154d66f1e8de1c09996f4775495d2aadacb354a0 Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Fri, 26 Aug 2022 11:25:07 +0200 Subject: [PATCH 35/39] remove unused imports --- src/app/process-page/overview/process-overview.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/process-page/overview/process-overview.component.ts b/src/app/process-page/overview/process-overview.component.ts index 749f76b1a6..1ca29693cb 100644 --- a/src/app/process-page/overview/process-overview.component.ts +++ b/src/app/process-page/overview/process-overview.component.ts @@ -1,5 +1,5 @@ import { Component, OnDestroy, OnInit } from '@angular/core'; -import { BehaviorSubject, Observable, skipWhile, Subscription } from 'rxjs'; +import { Observable, Subscription } from 'rxjs'; import { RemoteData } from '../../core/data/remote-data'; import { PaginatedList } from '../../core/data/paginated-list.model'; import { Process } from '../processes/process.model'; From 310237d30f1bdc0fc3991678e573e55fc4cc805d Mon Sep 17 00:00:00 2001 From: corrad82 Date: Tue, 30 Aug 2022 12:00:27 +0200 Subject: [PATCH 36/39] [CST-6035] updated test description and used example.com domain in test urls --- .../submission-import-external.component.spec.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/app/submission/import-external/submission-import-external.component.spec.ts b/src/app/submission/import-external/submission-import-external.component.spec.ts index 7a9c71f342..1b21203b58 100644 --- a/src/app/submission/import-external/submission-import-external.component.spec.ts +++ b/src/app/submission/import-external/submission-import-external.component.spec.ts @@ -184,7 +184,7 @@ describe('SubmissionImportExternalComponent test suite', () => { }); }); - describe('handle BE response for search query', () => { + describe('handle backend response for search query', () => { const paginatedData: any = { 'timeCompleted': 1657009282990, 'msToLive': 900000, @@ -203,20 +203,20 @@ describe('SubmissionImportExternalComponent test suite', () => { }, '_links': { 'first': { - 'href': 'https://dspacecris7.4science.cloud/server/api/integration/externalsources/scopus/entries?query=test&page=0&size=10&sort=id,asc' + 'href': 'https://example.com/server/api/integration/externalsources/scopus/entries?query=test&page=0&size=10&sort=id,asc' }, 'self': { - 'href': 'https://dspacecris7.4science.cloud/server/api/integration/externalsources/scopus/entries?sort=id,ASC&page=0&size=10&query=test' + 'href': 'https://example.com/server/api/integration/externalsources/scopus/entries?sort=id,ASC&page=0&size=10&query=test' }, 'next': { - 'href': 'https://dspacecris7.4science.cloud/server/api/integration/externalsources/scopus/entries?query=test&page=1&size=10&sort=id,asc' + 'href': 'https://example.com/server/api/integration/externalsources/scopus/entries?query=test&page=1&size=10&sort=id,asc' }, 'last': { - 'href': 'https://dspacecris7.4science.cloud/server/api/integration/externalsources/scopus/entries?query=test&page=1197160&size=10&sort=id,asc' + 'href': 'https://example.com/server/api/integration/externalsources/scopus/entries?query=test&page=1197160&size=10&sort=id,asc' }, 'page': [ { - 'href': 'https://dspacecris7.4science.cloud/server/api/integration/externalsources/scopus/entryValues/2-s2.0-85130258665' + 'href': 'https://example.com/server/api/integration/externalsources/scopus/entryValues/2-s2.0-85130258665' } ] }, @@ -411,7 +411,7 @@ describe('SubmissionImportExternalComponent test suite', () => { }, '_links': { 'self': { - 'href': 'https://dspacecris7.4science.cloud/server/api/integration/externalsources/scopus/entryValues/2-s2.0-85130258665' + 'href': 'https://example.com/server/api/integration/externalsources/scopus/entryValues/2-s2.0-85130258665' } } } @@ -421,7 +421,7 @@ describe('SubmissionImportExternalComponent test suite', () => { }; const errorObj = { errorMessage: 'Http failure response for ' + - 'https://dspacecris7.4science.cloud/server/api/integration/externalsources/pubmed/entries?sort=id,ASC&page=0&size=10&query=test: 500 OK', + 'https://example.com/server/api/integration/externalsources/pubmed/entries?sort=id,ASC&page=0&size=10&query=test: 500 OK', statusCode: 500, timeCompleted: 1656950434666, errors: [{ From 9f609a2966a834e3c94f695164370a1ad1135546 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Fri, 2 Sep 2022 11:53:10 -0400 Subject: [PATCH 37/39] Add themed components to shared module and 'custom' theme. --- src/app/shared/shared.module.ts | 30 +++++++++++++++++++ ...te-collection-parent-selector.component.ts | 11 +++++++ ...e-community-parent-selector.component.html | 19 ++++++++++++ ...e-community-parent-selector.component.scss | 3 ++ ...ate-community-parent-selector.component.ts | 12 ++++++++ ...create-item-parent-selector.component.html | 15 ++++++++++ .../create-item-parent-selector.component.ts | 11 +++++++ .../dso-selector-modal-wrapper.component.html | 11 +++++++ .../edit-collection-selector.component.ts | 11 +++++++ .../edit-community-selector.component.ts | 11 +++++++ .../edit-item-selector.component.ts | 11 +++++++ src/themes/custom/eager-theme.module.ts | 24 +++++++++++++++ 12 files changed, 169 insertions(+) create mode 100644 src/themes/custom/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/create-collection-parent-selector.component.ts create mode 100644 src/themes/custom/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.html create mode 100644 src/themes/custom/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.scss create mode 100644 src/themes/custom/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.ts create mode 100644 src/themes/custom/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component.html create mode 100644 src/themes/custom/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component.ts create mode 100644 src/themes/custom/app/shared/dso-selector/modal-wrappers/dso-selector-modal-wrapper.component.html create mode 100644 src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.ts create mode 100644 src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.ts create mode 100644 src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.ts diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index f40ddd5b90..9036ff98c5 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -124,12 +124,21 @@ import { DSOSelectorComponent } from './dso-selector/dso-selector/dso-selector.c import { CreateCommunityParentSelectorComponent } from './dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component'; +import { + ThemedCreateCommunityParentSelectorComponent +} from './dso-selector/modal-wrappers/create-community-parent-selector/themed-create-community-parent-selector.component'; import { CreateItemParentSelectorComponent } from './dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component'; +import { + ThemedCreateItemParentSelectorComponent +} from './dso-selector/modal-wrappers/create-item-parent-selector/themed-create-item-parent-selector.component'; import { CreateCollectionParentSelectorComponent } from './dso-selector/modal-wrappers/create-collection-parent-selector/create-collection-parent-selector.component'; +import { + ThemedCreateCollectionParentSelectorComponent +} from './dso-selector/modal-wrappers/create-collection-parent-selector/themed-create-collection-parent-selector.component'; import { CommunitySearchResultListElementComponent } from './object-list/search-result-list-element/community-search-result/community-search-result-list-element.component'; @@ -139,12 +148,21 @@ import { import { EditItemSelectorComponent } from './dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component'; +import { + ThemedEditItemSelectorComponent +} from './dso-selector/modal-wrappers/edit-item-selector/themed-edit-item-selector.component'; import { EditCommunitySelectorComponent } from './dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component'; +import { + ThemedEditCommunitySelectorComponent +} from './dso-selector/modal-wrappers/edit-community-selector/themed-edit-community-selector.component'; import { EditCollectionSelectorComponent } from './dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component'; +import { + ThemedEditCollectionSelectorComponent +} from './dso-selector/modal-wrappers/edit-collection-selector/themed-edit-collection-selector.component'; import { ItemListPreviewComponent } from './object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component'; @@ -395,11 +413,17 @@ const COMPONENTS = [ DsoInputSuggestionsComponent, DSOSelectorComponent, CreateCommunityParentSelectorComponent, + ThemedCreateCommunityParentSelectorComponent, CreateCollectionParentSelectorComponent, + ThemedCreateCollectionParentSelectorComponent, CreateItemParentSelectorComponent, + ThemedCreateItemParentSelectorComponent, EditCommunitySelectorComponent, + ThemedEditCommunitySelectorComponent, EditCollectionSelectorComponent, + ThemedEditCollectionSelectorComponent, EditItemSelectorComponent, + ThemedEditItemSelectorComponent, CommunitySearchResultListElementComponent, CollectionSearchResultListElementComponent, BrowseByComponent, @@ -491,11 +515,17 @@ const ENTRY_COMPONENTS = [ StartsWithDateComponent, StartsWithTextComponent, CreateCommunityParentSelectorComponent, + ThemedCreateCommunityParentSelectorComponent, CreateCollectionParentSelectorComponent, + ThemedCreateCollectionParentSelectorComponent, CreateItemParentSelectorComponent, + ThemedCreateItemParentSelectorComponent, EditCommunitySelectorComponent, + ThemedEditCommunitySelectorComponent, EditCollectionSelectorComponent, + ThemedEditCollectionSelectorComponent, EditItemSelectorComponent, + ThemedEditItemSelectorComponent, PlainTextMetadataListElementComponent, ItemMetadataListElementComponent, MetadataRepresentationListElementComponent, diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/create-collection-parent-selector.component.ts b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/create-collection-parent-selector.component.ts new file mode 100644 index 0000000000..6df8807cae --- /dev/null +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/create-collection-parent-selector.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core'; +import { + CreateCollectionParentSelectorComponent as BaseComponent +} from 'src/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/create-collection-parent-selector.component'; + +@Component({ + selector: 'ds-create-collection-parent-selector', + templateUrl: '../dso-selector-modal-wrapper.component.html', +}) +export class CreateCollectionParentSelectorComponent extends BaseComponent { +} diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.html b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.html new file mode 100644 index 0000000000..84fdd34c01 --- /dev/null +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.html @@ -0,0 +1,19 @@ +
    + + +
    diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.scss b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.scss new file mode 100644 index 0000000000..0daf4cfa5f --- /dev/null +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.scss @@ -0,0 +1,3 @@ +#create-community-or-separator { + top: 0; +} \ No newline at end of file diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.ts b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.ts new file mode 100644 index 0000000000..bb2785eab9 --- /dev/null +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; +import { + CreateCommunityParentSelectorComponent as BaseComponent +} from 'src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component'; + +@Component({ + selector: 'ds-create-community-parent-selector', + styleUrls: ['./create-community-parent-selector.component.scss'], + templateUrl: './create-community-parent-selector.component.html', +}) +export class CreateCommunityParentSelectorComponent extends BaseComponent { +} diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component.html b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component.html new file mode 100644 index 0000000000..664aef95c0 --- /dev/null +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component.html @@ -0,0 +1,15 @@ +
    + + +
    diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component.ts b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component.ts new file mode 100644 index 0000000000..e04874c801 --- /dev/null +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component.ts @@ -0,0 +1,11 @@ +import {Component} from '@angular/core'; +import { + CreateItemParentSelectorComponent as BaseComponent +} from 'src/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component'; + +@Component({ + selector: 'ulib-create-item-parent-selector', + templateUrl: './create-item-parent-selector.component.html', +}) +export class CreateItemParentSelectorComponent extends BaseComponent { +} diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/dso-selector-modal-wrapper.component.html b/src/themes/custom/app/shared/dso-selector/modal-wrappers/dso-selector-modal-wrapper.component.html new file mode 100644 index 0000000000..85d8797e66 --- /dev/null +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/dso-selector-modal-wrapper.component.html @@ -0,0 +1,11 @@ +
    + + +
    diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.ts b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.ts new file mode 100644 index 0000000000..6a51908dbc --- /dev/null +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core'; +import { + EditCollectionSelectorComponent as BaseComponent +} from 'src/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component' + +@Component({ + selector: 'ds-edit-collection-selector', + templateUrl: '../dso-selector-modal-wrapper.component.html', +}) +export class EditCollectionSelectorComponent extends BaseComponent { +} \ No newline at end of file diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.ts b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.ts new file mode 100644 index 0000000000..3a20cff266 --- /dev/null +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core'; +import { + EditCommunitySelectorComponent as BaseComponent +} from 'src/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component'; + +@Component({ + selector: 'ds-edit-item-selector', + templateUrl: '../dso-selector-modal-wrapper.component.html', +}) +export class EditCommunitySelectorComponent extends BaseComponent { +} \ No newline at end of file diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.ts b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.ts new file mode 100644 index 0000000000..ddd6cae7b6 --- /dev/null +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core'; +import { + EditItemSelectorComponent as BaseComponent +} from 'src/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component'; + +@Component({ + selector: 'ds-edit-item-selector', + templateUrl: '../dso-selector-modal-wrapper.component.html', +}) +export class EditItemSelectorComponent extends BaseComponent { +} \ No newline at end of file diff --git a/src/themes/custom/eager-theme.module.ts b/src/themes/custom/eager-theme.module.ts index 5256d2fd7c..4c75f63cc9 100644 --- a/src/themes/custom/eager-theme.module.ts +++ b/src/themes/custom/eager-theme.module.ts @@ -21,6 +21,24 @@ import { } from './app/entity-groups/journal-entities/item-pages/journal-volume/journal-volume.component'; import { UntypedItemComponent } from './app/item-page/simple/item-types/untyped-item/untyped-item.component'; import { ItemSharedModule } from '../../app/item-page/item-shared.module'; +import { + CreateCollectionParentSelectorComponent +} from './app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/create-collection-parent-selector.component'; +import { + CreateCommunityParentSelectorComponent +} from './app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component'; +import { + CreateItemParentSelectorComponent +} from './app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component'; +import { + EditCollectionSelectorComponent +} from './app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component'; +import { + EditCommunitySelectorComponent +} from './app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component'; +import { + EditItemSelectorComponent +} from './app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component'; /** * Add components that use a custom decorator to ENTRY_COMPONENTS as well as DECLARATIONS. @@ -41,6 +59,12 @@ const DECLARATIONS = [ HeaderNavbarWrapperComponent, NavbarComponent, FooterComponent, + CreateCollectionParentSelectorComponent, + CreateCommunityParentSelectorComponent, + CreateItemParentSelectorComponent, + EditCollectionSelectorComponent, + EditCommunitySelectorComponent, + EditItemSelectorComponent, ]; @NgModule({ From 1f1b04e88f56ab2e8a70cf2a66e4706f9c592c54 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Fri, 2 Sep 2022 12:04:01 -0400 Subject: [PATCH 38/39] Fix lint issues, incorrect selector copied from local code. --- .../create-item-parent-selector.component.ts | 2 +- .../edit-collection-selector.component.ts | 4 ++-- .../edit-community-selector.component.ts | 2 +- .../edit-item-selector/edit-item-selector.component.ts | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component.ts b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component.ts index e04874c801..44eb6edd18 100644 --- a/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component.ts +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component.ts @@ -4,7 +4,7 @@ import { } from 'src/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component'; @Component({ - selector: 'ulib-create-item-parent-selector', + selector: 'ds-create-item-parent-selector', templateUrl: './create-item-parent-selector.component.html', }) export class CreateItemParentSelectorComponent extends BaseComponent { diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.ts b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.ts index 6a51908dbc..3b463f2851 100644 --- a/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.ts +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.ts @@ -1,11 +1,11 @@ import { Component } from '@angular/core'; import { EditCollectionSelectorComponent as BaseComponent -} from 'src/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component' +} from 'src/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component'; @Component({ selector: 'ds-edit-collection-selector', templateUrl: '../dso-selector-modal-wrapper.component.html', }) export class EditCollectionSelectorComponent extends BaseComponent { -} \ No newline at end of file +} diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.ts b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.ts index 3a20cff266..cd9ea222f4 100644 --- a/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.ts +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.ts @@ -8,4 +8,4 @@ import { templateUrl: '../dso-selector-modal-wrapper.component.html', }) export class EditCommunitySelectorComponent extends BaseComponent { -} \ No newline at end of file +} diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.ts b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.ts index ddd6cae7b6..efff58d2a3 100644 --- a/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.ts +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.ts @@ -8,4 +8,4 @@ import { templateUrl: '../dso-selector-modal-wrapper.component.html', }) export class EditItemSelectorComponent extends BaseComponent { -} \ No newline at end of file +} From ba2f173199ea750706479ffd3fcc0abe23358b62 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Tue, 6 Sep 2022 13:56:04 -0400 Subject: [PATCH 39/39] Address review: add missing templates, commented references to them, reference original templates by default. --- .../create-collection-parent-selector.component.html} | 0 .../create-collection-parent-selector.component.scss | 0 .../create-collection-parent-selector.component.ts | 6 ++++-- .../create-community-parent-selector.component.ts | 8 +++++--- .../create-item-parent-selector.component.scss | 0 .../create-item-parent-selector.component.ts | 6 ++++-- .../edit-collection-selector.component.html | 11 +++++++++++ .../edit-collection-selector.component.scss | 0 .../edit-collection-selector.component.ts | 6 ++++-- .../edit-community-selector.component.html | 11 +++++++++++ .../edit-community-selector.component.scss | 0 .../edit-community-selector.component.ts | 6 ++++-- .../edit-item-selector.component.html | 11 +++++++++++ .../edit-item-selector.component.scss | 0 .../edit-item-selector.component.ts | 4 +++- 15 files changed, 57 insertions(+), 12 deletions(-) rename src/themes/custom/app/shared/dso-selector/modal-wrappers/{dso-selector-modal-wrapper.component.html => create-collection-parent-selector/create-collection-parent-selector.component.html} (100%) create mode 100644 src/themes/custom/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/create-collection-parent-selector.component.scss create mode 100644 src/themes/custom/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component.scss create mode 100644 src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.html create mode 100644 src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.scss create mode 100644 src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.html create mode 100644 src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.scss create mode 100644 src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.html create mode 100644 src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.scss diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/dso-selector-modal-wrapper.component.html b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/create-collection-parent-selector.component.html similarity index 100% rename from src/themes/custom/app/shared/dso-selector/modal-wrappers/dso-selector-modal-wrapper.component.html rename to src/themes/custom/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/create-collection-parent-selector.component.html diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/create-collection-parent-selector.component.scss b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/create-collection-parent-selector.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/create-collection-parent-selector.component.ts b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/create-collection-parent-selector.component.ts index 6df8807cae..22d40ff539 100644 --- a/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/create-collection-parent-selector.component.ts +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/create-collection-parent-selector.component.ts @@ -1,11 +1,13 @@ import { Component } from '@angular/core'; import { CreateCollectionParentSelectorComponent as BaseComponent -} from 'src/app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/create-collection-parent-selector.component'; +} from '../../../../../../../app/shared/dso-selector/modal-wrappers/create-collection-parent-selector/create-collection-parent-selector.component'; @Component({ selector: 'ds-create-collection-parent-selector', - templateUrl: '../dso-selector-modal-wrapper.component.html', + // styleUrls: ['./create-collection-parent-selector.component.scss'], + // templateUrl: './create-collection-parent-selector.component.html', + templateUrl: '../../../../../../../app/shared/dso-selector/modal-wrappers/dso-selector-modal-wrapper.component.html', }) export class CreateCollectionParentSelectorComponent extends BaseComponent { } diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.ts b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.ts index bb2785eab9..8b28ee1bb8 100644 --- a/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.ts +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.ts @@ -1,12 +1,14 @@ import { Component } from '@angular/core'; import { CreateCommunityParentSelectorComponent as BaseComponent -} from 'src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component'; +} from '../../../../../../../app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component'; @Component({ selector: 'ds-create-community-parent-selector', - styleUrls: ['./create-community-parent-selector.component.scss'], - templateUrl: './create-community-parent-selector.component.html', + // styleUrls: ['./create-community-parent-selector.component.scss'], + styleUrls: ['../../../../../../../app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.scss'], + // templateUrl: './create-community-parent-selector.component.html', + templateUrl: '../../../../../../../app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.html', }) export class CreateCommunityParentSelectorComponent extends BaseComponent { } diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component.scss b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component.ts b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component.ts index 44eb6edd18..f8e3401454 100644 --- a/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component.ts +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component.ts @@ -1,11 +1,13 @@ import {Component} from '@angular/core'; import { CreateItemParentSelectorComponent as BaseComponent -} from 'src/app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component'; +} from '../../../../../../../app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component'; @Component({ selector: 'ds-create-item-parent-selector', - templateUrl: './create-item-parent-selector.component.html', + // styleUrls: ['./create-item-parent-selector.component.scss'], + // templateUrl: './create-item-parent-selector.component.html', + templateUrl: '../../../../../../../app/shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component.html', }) export class CreateItemParentSelectorComponent extends BaseComponent { } diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.html b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.html new file mode 100644 index 0000000000..85d8797e66 --- /dev/null +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.html @@ -0,0 +1,11 @@ +
    + + +
    diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.scss b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.ts b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.ts index 3b463f2851..8f4a8dd5cd 100644 --- a/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.ts +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.ts @@ -1,11 +1,13 @@ import { Component } from '@angular/core'; import { EditCollectionSelectorComponent as BaseComponent -} from 'src/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component'; +} from '../../../../../../../app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component'; @Component({ selector: 'ds-edit-collection-selector', - templateUrl: '../dso-selector-modal-wrapper.component.html', + // styleUrls: ['./edit-collection-selector.component.scss'], + // templateUrl: './edit-collection-selector.component.html', + templateUrl: '../../../../../../../app/shared/dso-selector/modal-wrappers/dso-selector-modal-wrapper.component.html', }) export class EditCollectionSelectorComponent extends BaseComponent { } diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.html b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.html new file mode 100644 index 0000000000..85d8797e66 --- /dev/null +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.html @@ -0,0 +1,11 @@ +
    + + +
    diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.scss b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.ts b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.ts index cd9ea222f4..79d52fc350 100644 --- a/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.ts +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.ts @@ -1,11 +1,13 @@ import { Component } from '@angular/core'; import { EditCommunitySelectorComponent as BaseComponent -} from 'src/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component'; +} from '../../../../../../../app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component'; @Component({ selector: 'ds-edit-item-selector', - templateUrl: '../dso-selector-modal-wrapper.component.html', + // styleUrls: ['./edit-community-selector.component.scss'], + // templateUrl: './edit-community-selector.component.html', + templateUrl: '../../../../../../../app/shared/dso-selector/modal-wrappers/dso-selector-modal-wrapper.component.html', }) export class EditCommunitySelectorComponent extends BaseComponent { } diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.html b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.html new file mode 100644 index 0000000000..85d8797e66 --- /dev/null +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.html @@ -0,0 +1,11 @@ +
    + + +
    diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.scss b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.ts b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.ts index efff58d2a3..398dbc933c 100644 --- a/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.ts +++ b/src/themes/custom/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.ts @@ -5,7 +5,9 @@ import { @Component({ selector: 'ds-edit-item-selector', - templateUrl: '../dso-selector-modal-wrapper.component.html', + // styleUrls: ['./edit-item-selector.component.scss'], + // templateUrl: './edit-item-selector.component.html', + templateUrl: '../../../../../../../app/shared/dso-selector/modal-wrappers/dso-selector-modal-wrapper.component.html', }) export class EditItemSelectorComponent extends BaseComponent { }