diff --git a/CLAUDE.md b/CLAUDE.md index fae39dd540..dd661b9e99 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -84,7 +84,7 @@ roda/ 1. **Java 21** (Oracle JDK) — strictly required for compilation 2. **Maven 3.8.6+** — build tool -3. **Docker & Docker Compose** — for running Solr, PostgreSQL, LDAP, etc. +3. **Docker** — required for running the application locally and for tests (via Testcontainers — no manual `docker compose` needed for tests) 4. **GitHub account with PAT** — required for GitHub Packages dependency resolution **Configure Maven for GitHub Packages** (`~/.m2/settings.xml`): @@ -112,6 +112,10 @@ The PAT must have `read:packages` permission. Without this, the build will fail ### Starting Development Dependencies +**For running tests:** No manual setup needed — tests use **Testcontainers** (`TestContainersManager`) which automatically starts ZooKeeper, Solr, PostgreSQL, Mailpit, ClamAV, and Siegfried as ephemeral Docker containers. The `RodaContainersLifecycleListener` TestNG suite listener wires this up before any test class loads. Docker must be running on the host, but no `docker compose` command is required. + +**For running the application locally:** + ```bash # Create required data directories mkdir -p $HOME/.roda/data/{storage,staging-storage} @@ -120,7 +124,7 @@ mkdir -p $HOME/.roda/data/{storage,staging-storage} docker compose -f deploys/standalone/docker-compose-dev.yaml up -d ``` -Services and ports: +Services and ports (for local app, not tests): - ZooKeeper: `2181` - Apache Solr: `8983` - PostgreSQL: `5432` @@ -196,25 +200,23 @@ mvn -f dev/codeserver gwt:codeserver -DrodaPath=$(pwd) ### Running Tests +Tests use **Testcontainers** — no environment variables or `docker compose` setup required. Docker must be available on the host. + ```bash -# All tests (requires Docker services running) -mvn clean test +# All tests +mvn clean test -Pcore # CI subset only (faster) -mvn -Dtestng.groups="travis" -Denforcer.skip=true clean org.jacoco:jacoco-maven-plugin:prepare-agent test +mvn -Dtestng.groups="travis" -Denforcer.skip=true clean org.jacoco:jacoco-maven-plugin:prepare-agent test -Pcore + +# Specific test class +mvn -pl roda-core/roda-core-tests -am test -Dtest=NestedDocumentSearchTest -Dtestng.groups=dev -Denforcer.skip=true -DfailIfNoTests=false # Skip tests mvn clean package -Dmaven.test.skip=true ``` -### Required Environment Variables (for tests matching CI) - -``` -RODA_CORE_SOLR_TYPE=CLOUD -SIEGFRIED_MODE=standalone -``` - -See `.github/workflows/CI.yml` for the full CI test environment configuration. +See `.github/workflows/CI.yml` for the full CI configuration. ### Key Test Classes diff --git a/roda-common/roda-common-data/src/main/java/org/roda/core/data/common/RodaConstants.java b/roda-common/roda-common-data/src/main/java/org/roda/core/data/common/RodaConstants.java index 1f59483aff..4c97634bd3 100644 --- a/roda-common/roda-common-data/src/main/java/org/roda/core/data/common/RodaConstants.java +++ b/roda-common/roda-common-data/src/main/java/org/roda/core/data/common/RodaConstants.java @@ -176,6 +176,15 @@ public enum DateGranularity { public static final String UI_LISTS_PAGE_SIZE_INITIAL = "pageSize.initial"; public static final String UI_LISTS_PAGE_SIZE_INCREMENT = "pageSize.increment"; + public static final String UI_LISTS_INCLUDE_NESTED_DOCUMENTS = "includeNestedDocuments"; + + public static final String UI_CATALOGUE_VIRTUAL_PROPERTY = "ui.catalogue.virtual"; + public static final String UI_LISTS_CATALOGUE_LABEL_I18N_PROPERTY = "catalogue.label.i18n"; + public static final String UI_LISTS_CATALOGUE_ICON_PROPERTY = "catalogue.icon"; + public static final String UI_LISTS_CATALOGUE_FILTER = "catalogue.filter"; + public static final String UI_LISTS_CATALOGUE_CHILDOF_FILTER = "catalogue.childOf.filter"; + public static final String UI_LISTS_CATALOGUE_CLICK_ACTION = "catalogue.click_action"; + public static final String UI_LISTS_CATALOGUE_CLICK_ACTION_BROWSE_PARENT = "browse_parent"; public static final String UI_ICONS_CLASS = "ui.icons.class"; public static final String UI_SERVICE_DROPFOLDER_URL = "ui.service.dropfolder.url"; @@ -1980,6 +1989,8 @@ public String toString() { public static final String SEARCH_FIELD_TYPE_SUGGEST_FIELD = "suggestField"; public static final String SEARCH_FIELD_TYPE_SUGGEST_PARTIAL = "suggestPartial"; public static final String SEARCH_FIELD_TYPE_CONTROLLED = "controlled"; + public static final String SEARCH_FIELD_NESTED_TYPE = "nestedType"; + public static final String SEARCH_FIELD_NESTED_PARENT_TYPE = "nestedParentType"; public static final String SEARCH_WITH_PREFILTER_HANDLER = "$prefilter"; public static final String SEARCH_WITH_SAVED_HANDLER = "$savedSearch"; diff --git a/roda-common/roda-common-data/src/main/java/org/roda/core/data/v2/index/FindRequest.java b/roda-common/roda-common-data/src/main/java/org/roda/core/data/v2/index/FindRequest.java index 060580bee0..048bcf34a0 100644 --- a/roda-common/roda-common-data/src/main/java/org/roda/core/data/v2/index/FindRequest.java +++ b/roda-common/roda-common-data/src/main/java/org/roda/core/data/v2/index/FindRequest.java @@ -61,6 +61,8 @@ public class FindRequest extends CountRequest { private Long childrenLimit; @JsonProperty("childrenFilter") private Filter childrenFilter; + @JsonProperty("includeNestedDocuments") + private boolean includeNestedDocuments; // Private constructor for Jackson deserialization private FindRequest(FindRequestBuilder builder) { @@ -76,6 +78,7 @@ private FindRequest(FindRequestBuilder builder) { this.childrenFieldsToReturn = builder.childrenFieldsToReturn; this.childrenLimit = builder.childrenLimit; this.childrenFilter = builder.childrenFilter; + this.includeNestedDocuments = builder.includeNestedDocuments; } public Sorter getSorter() { @@ -122,6 +125,10 @@ public Filter getChildrenFilter() { return childrenFilter; } + public boolean isIncludeNestedDocuments() { + return includeNestedDocuments; + } + public static FindRequestBuilder getBuilder(final Filter filter, boolean onlyActive) { return new FindRequestBuilder(filter, onlyActive); } @@ -141,6 +148,7 @@ public static class FindRequestBuilder { private List childrenFieldsToReturn; private Long childrenLimit; private Filter childrenFilter; + private boolean includeNestedDocuments; public FindRequestBuilder(@JsonProperty("filter") final Filter filter, @JsonProperty("onlyActive") boolean onlyActive) { @@ -155,6 +163,7 @@ public FindRequestBuilder(@JsonProperty("filter") final Filter filter, this.fieldsToReturn = Collections.emptyList(); this.collapse = null; this.children = false; + this.includeNestedDocuments = false; } public FindRequest build() { @@ -215,5 +224,10 @@ public FindRequestBuilder withChildrenFilter(Filter childrenFilter) { this.childrenFilter = childrenFilter; return this; } + + public FindRequestBuilder withIncludeNestedDocuments(boolean includeNestedDocuments) { + this.includeNestedDocuments = includeNestedDocuments; + return this; + } } } diff --git a/roda-core/roda-core-tests/src/main/java/org/roda/core/CorporaConstants.java b/roda-core/roda-core-tests/src/main/java/org/roda/core/CorporaConstants.java index 57add1a0d6..ce60ca7d59 100644 --- a/roda-core/roda-core-tests/src/main/java/org/roda/core/CorporaConstants.java +++ b/roda-core/roda-core-tests/src/main/java/org/roda/core/CorporaConstants.java @@ -94,6 +94,10 @@ public final class CorporaConstants { public static final String SOURCE_DESC_METADATA_CONTAINER = "DescriptiveMetadata"; public static final String STRANGE_DESC_METADATA_FILE = "strange.xml"; + public static final String EMAIL_ARCHIVE_FULL_FILE = "emailarchive_full.xml"; + public static final String EMAIL_ARCHIVE_MINIMAL_FILE = "emailarchive_minimal.xml"; + public static final String EMAIL_ARCHIVE_NO_EMAILS_FILE = "emailarchive_no_emails.xml"; + public static final String EMAIL_ARCHIVE_METADATA_TYPE = "emailarchive"; public static final String TEXT_XML = "text/xml"; public static final String REPRESENTATION_1_PREMIS_EVENT_ID = "urn:roda:premis:event:roda_398"; diff --git a/roda-core/roda-core-tests/src/main/java/org/roda/core/index/EmailArchiveCrosswalkTest.java b/roda-core/roda-core-tests/src/main/java/org/roda/core/index/EmailArchiveCrosswalkTest.java new file mode 100644 index 0000000000..0721ed9bbd --- /dev/null +++ b/roda-core/roda-core-tests/src/main/java/org/roda/core/index/EmailArchiveCrosswalkTest.java @@ -0,0 +1,239 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE file at the root of the source + * tree and available online at + * + * https://github.com/keeps/roda + */ +package org.roda.core.index; + +import static org.testng.AssertJUnit.assertEquals; +import static org.testng.AssertJUnit.assertNotNull; +import static org.testng.AssertJUnit.assertNull; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Collection; + +import org.apache.solr.common.SolrInputDocument; +import org.apache.solr.common.SolrInputField; +import org.roda.core.CorporaConstants; +import org.roda.core.RodaCoreFactory; +import org.roda.core.data.common.RodaConstants; +import org.roda.core.data.exceptions.GenericException; +import org.roda.core.data.exceptions.NotFoundException; +import org.roda.core.data.exceptions.RODAException; +import org.roda.core.index.utils.SolrUtils; +import org.roda.core.storage.Binary; +import org.roda.core.storage.DefaultStoragePath; +import org.roda.core.storage.StorageService; +import org.roda.core.storage.fs.FileStorageService; +import org.testng.Assert; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +@Test(groups = {RodaConstants.TEST_GROUP_ALL, RodaConstants.TEST_GROUP_DEV, RodaConstants.TEST_GROUP_TRAVIS}) +public class EmailArchiveCrosswalkTest { + + private static StorageService corporaService; + + @BeforeClass + public static void setUp() throws URISyntaxException, GenericException { + URL corporaURL = IndexServiceTest.class.getResource("/corpora"); + Path corporaPath = Paths.get(corporaURL.toURI()); + corporaService = new FileStorageService(corporaPath); + } + + @BeforeMethod + public void init() { + RodaCoreFactory.instantiateTest(false, false, false, false, false, false, false); + } + + @AfterMethod + public void cleanup() throws NotFoundException, GenericException, IOException { + RodaCoreFactory.shutdown(); + } + + // --------------------------------------------------------------------------- + // Full fixture — 3 emails + // --------------------------------------------------------------------------- + + @Test + public void testFullCrosswalkProducesParentFields() throws RODAException { + SolrInputDocument doc = getCrosswalkResult(CorporaConstants.EMAIL_ARCHIVE_FULL_FILE); + + assertNotNull(doc); + assertFieldValue(doc, "custodian_txt", "João Silva"); + assertFieldValue(doc, "emailAddress_s", "joao.silva@empresa.pt"); + assertFieldValue(doc, "totalMessages_i", "3"); + assertFieldValue(doc, "originalFormat_s", "PST"); + assertFieldValue(doc, "archivingMotive_txt", "Offboarding"); + assertFieldValue(doc, "content_type", "emailarchive"); + } + + @Test + public void testFullCrosswalkProducesDateFields() throws RODAException { + SolrInputDocument doc = getCrosswalkResult(CorporaConstants.EMAIL_ARCHIVE_FULL_FILE); + + assertNotNull(doc); + assertFieldValue(doc, "dateStart_dt", "2020-01-01T00:00:00Z"); + assertFieldValue(doc, "dateEnd_dt", "2023-12-31T00:00:00Z"); + } + + @Test + public void testFullCrosswalkProducesThreeChildDocuments() throws RODAException { + SolrInputDocument doc = getCrosswalkResult(CorporaConstants.EMAIL_ARCHIVE_FULL_FILE); + + assertNotNull(doc); + SolrInputField emailsField = doc.getField("emails"); + assertNotNull("'emails' field must be present for nested children", emailsField); + + Collection children = getChildDocuments(emailsField); + assertEquals("Expected 3 child email documents", 3, children.size()); + } + + @Test + public void testFullCrosswalkFirstChildFields() throws RODAException { + SolrInputDocument doc = getCrosswalkResult(CorporaConstants.EMAIL_ARCHIVE_FULL_FILE); + SolrInputDocument first = getChildAt(doc, 0); + + assertFieldValue(first, "content_type", "email"); + assertFieldValue(first, "messageId_s", ""); + assertFieldValue(first, "subject_txt", "Quarterly Report Q1 2021"); + assertFieldValue(first, "sender_s", "joao.silva@empresa.pt"); + assertFieldValue(first, "sentDate_dt", "2021-03-15T09:42:00Z"); + assertFieldValue(first, "folderPath_s", "Inbox/Projects"); + assertFieldValue(first, "hasAttachments_b", "true"); + assertFieldValue(first, "filePath_s", "Inbox/Projects/msg_001.eml"); + } + + @Test + public void testFullCrosswalkMultipleRecipients() throws RODAException { + SolrInputDocument doc = getCrosswalkResult(CorporaConstants.EMAIL_ARCHIVE_FULL_FILE); + SolrInputDocument first = getChildAt(doc, 0); + + // First email has two recipients: ana.costa and rui.pinto + SolrInputField recipientsField = first.getField("recipients_txt"); + assertNotNull("recipients_txt field must be present", recipientsField); + Collection values = recipientsField.getValues(); + assertNotNull(values); + assertEquals("Expected 2 recipient values", 2, values.size()); + } + + @Test + public void testFullCrosswalkThirdChildFields() throws RODAException { + SolrInputDocument doc = getCrosswalkResult(CorporaConstants.EMAIL_ARCHIVE_FULL_FILE); + SolrInputDocument third = getChildAt(doc, 2); + + assertFieldValue(third, "subject_txt", "Budget Approval Request"); + assertFieldValue(third, "folderPath_s", "Sent"); + assertFieldValue(third, "filePath_s", "Sent/msg_003.eml"); + } + + // --------------------------------------------------------------------------- + // Minimal fixture — 1 email, only required fields + // --------------------------------------------------------------------------- + + @Test + public void testMinimalCrosswalkProducesRequiredFields() throws RODAException { + SolrInputDocument doc = getCrosswalkResult(CorporaConstants.EMAIL_ARCHIVE_MINIMAL_FILE); + + assertNotNull(doc); + assertFieldValue(doc, "custodian_txt", "Jane Doe"); + assertFieldValue(doc, "emailAddress_s", "jane.doe@example.org"); + assertFieldValue(doc, "content_type", "emailarchive"); + } + + @Test + public void testMinimalCrosswalkOmitsAbsentOptionalFields() throws RODAException { + SolrInputDocument doc = getCrosswalkResult(CorporaConstants.EMAIL_ARCHIVE_MINIMAL_FILE); + + assertNotNull(doc); + assertNull("dateStart_dt should be absent when not in source", doc.getField("dateStart_dt")); + assertNull("dateEnd_dt should be absent when not in source", doc.getField("dateEnd_dt")); + assertNull("totalMessages_i should be absent when not in source", doc.getField("totalMessages_i")); + assertNull("originalFormat_s should be absent when not in source", doc.getField("originalFormat_s")); + assertNull("archivingMotive_txt should be absent when not in source", doc.getField("archivingMotive_txt")); + } + + @Test + public void testMinimalCrosswalkProducesOneChild() throws RODAException { + SolrInputDocument doc = getCrosswalkResult(CorporaConstants.EMAIL_ARCHIVE_MINIMAL_FILE); + SolrInputField emailsField = doc.getField("emails"); + assertNotNull(emailsField); + assertEquals(1, getChildDocuments(emailsField).size()); + } + + @Test + public void testMinimalCrosswalkChildHasRequiredFields() throws RODAException { + SolrInputDocument doc = getCrosswalkResult(CorporaConstants.EMAIL_ARCHIVE_MINIMAL_FILE); + SolrInputDocument child = getChildAt(doc, 0); + + assertFieldValue(child, "content_type", "email"); + assertFieldValue(child, "messageId_s", ""); + assertFieldValue(child, "subject_txt", "Hello World"); + assertFieldValue(child, "hasAttachments_b", "false"); + } + + // --------------------------------------------------------------------------- + // No-emails fixture — mailbox with zero email records + // --------------------------------------------------------------------------- + + @Test + public void testNoEmailsCrosswalkProducesParentFieldsOnly() throws RODAException { + SolrInputDocument doc = getCrosswalkResult(CorporaConstants.EMAIL_ARCHIVE_NO_EMAILS_FILE); + + assertNotNull(doc); + assertFieldValue(doc, "custodian_txt", "Empty Mailbox User"); + assertFieldValue(doc, "content_type", "emailarchive"); + assertFieldValue(doc, "totalMessages_i", "0"); + } + + @Test + public void testNoEmailsCrosswalkProducesNoChildDocumentsField() throws RODAException { + SolrInputDocument doc = getCrosswalkResult(CorporaConstants.EMAIL_ARCHIVE_NO_EMAILS_FILE); + assertNull("'emails' field must be absent when there are no child emails", doc.getField("emails")); + } + + // --------------------------------------------------------------------------- + // Helpers + // --------------------------------------------------------------------------- + + private SolrInputDocument getCrosswalkResult(String filename) throws RODAException { + try { + DefaultStoragePath path = DefaultStoragePath.parse( + CorporaConstants.SOURCE_DESC_METADATA_CONTAINER, filename); + Binary binary = corporaService.getBinary(path); + return SolrUtils.getDescriptiveMetadataFields(binary, CorporaConstants.EMAIL_ARCHIVE_METADATA_TYPE, null); + } catch (Exception e) { + Assert.fail("Unexpected exception loading fixture '" + filename + "': " + e.getMessage()); + return null; + } + } + + private void assertFieldValue(SolrInputDocument doc, String fieldName, String expectedValue) { + SolrInputField field = doc.getField(fieldName); + assertNotNull("Field '" + fieldName + "' must be present", field); + assertEquals("Field '" + fieldName + "' value mismatch", expectedValue, field.getValue().toString()); + } + + @SuppressWarnings("unchecked") + private Collection getChildDocuments(SolrInputField emailsField) { + Object value = emailsField.getValue(); + assertNotNull("'emails' field value must not be null", value); + return (Collection) value; + } + + private SolrInputDocument getChildAt(SolrInputDocument parent, int index) { + SolrInputField emailsField = parent.getField("emails"); + assertNotNull(emailsField); + Collection children = getChildDocuments(emailsField); + return children.stream().skip(index).findFirst() + .orElseThrow(() -> new AssertionError("No child document at index " + index)); + } +} diff --git a/roda-core/roda-core-tests/src/main/java/org/roda/core/index/NestedDocumentSearchTest.java b/roda-core/roda-core-tests/src/main/java/org/roda/core/index/NestedDocumentSearchTest.java new file mode 100644 index 0000000000..37e35187bc --- /dev/null +++ b/roda-core/roda-core-tests/src/main/java/org/roda/core/index/NestedDocumentSearchTest.java @@ -0,0 +1,188 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE file at the root of the source + * tree and available online at + * + * https://github.com/keeps/roda + */ +package org.roda.core.index; + +import static org.testng.AssertJUnit.assertEquals; +import static org.testng.AssertJUnit.assertTrue; + +import java.io.IOException; +import java.net.URL; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.Collections; + +import org.apache.solr.client.solrj.SolrQuery; +import org.apache.solr.client.solrj.response.QueryResponse; +import org.roda.core.CorporaConstants; +import org.roda.core.RodaCoreFactory; +import org.roda.core.TestsHelper; +import org.roda.core.config.TestConfig; +import org.roda.core.data.common.RodaConstants; +import org.roda.core.data.exceptions.RODAException; +import org.roda.core.data.v2.index.IndexResult; +import org.roda.core.data.v2.index.filter.AllFilterParameter; +import org.roda.core.data.v2.index.filter.AndFiltersParameters; +import org.roda.core.data.v2.index.filter.Filter; +import org.roda.core.data.v2.index.filter.ParentWhichFilterParameter; +import org.roda.core.data.v2.index.filter.SimpleFilterParameter; +import org.roda.core.data.v2.index.sort.Sorter; +import org.roda.core.data.v2.index.sublist.Sublist; +import org.roda.core.data.v2.ip.AIP; +import org.roda.core.data.v2.ip.IndexedAIP; +import org.roda.core.index.utils.IterableIndexResult; +import org.roda.core.index.utils.SolrUtils; +import org.roda.core.model.ModelService; +import org.roda.core.security.LdapUtilityTestHelper; +import org.roda.core.storage.DefaultStoragePath; +import org.roda.core.storage.StorageService; +import org.roda.core.storage.fs.FSUtils; +import org.roda.core.storage.fs.FileStorageService; +import org.roda.core.util.IdUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.testng.AbstractTestNGSpringContextTests; +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +@SpringBootTest(classes = TestConfig.class) +@Test(groups = {RodaConstants.TEST_GROUP_ALL, RodaConstants.TEST_GROUP_DEV, RodaConstants.TEST_GROUP_TRAVIS}) +public class NestedDocumentSearchTest extends AbstractTestNGSpringContextTests { + + private static final Logger LOGGER = LoggerFactory.getLogger(NestedDocumentSearchTest.class); + + private static Path basePath; + private static ModelService model; + private static IndexService index; + private static LdapUtilityTestHelper ldapUtilityTestHelper; + private static StorageService corporaService; + + @BeforeClass + public void setUp() throws Exception { + basePath = TestsHelper.createBaseTempDir(getClass(), true); + ldapUtilityTestHelper = new LdapUtilityTestHelper(); + + RodaCoreFactory.instantiateTest(true, true, false, false, false, false, false, + ldapUtilityTestHelper.getLdapUtility()); + + model = RodaCoreFactory.getModelService(); + index = RodaCoreFactory.getIndexService(); + + URL corporaURL = getClass().getResource("/corpora"); + corporaService = new FileStorageService(Paths.get(corporaURL.toURI())); + + LOGGER.debug("Running nested document search tests under {}", basePath); + } + + @AfterClass + public void tearDown() throws Exception { + IndexTestUtils.resetIndex(); + ldapUtilityTestHelper.shutdown(); + RodaCoreFactory.shutdown(); + FSUtils.deletePath(basePath); + } + + @AfterMethod + public void cleanUp() throws RODAException { + try (IterableIndexResult result = index.findAll(IndexedAIP.class, Filter.ALL, Collections.emptyList())) { + for (IndexedAIP aip : result) { + try { + model.deleteAIP(aip.getId()); + } catch (Exception e) { + // ignore + } + } + index.clearAIPs(); + } catch (IOException e) { + LOGGER.error("Error cleaning up AIPs", e); + } finally { + index.commitAIPs(); + } + } + + @Test + public void testParentWhichFilterFindsEmailArchiveAIPByChildSender() throws Exception { + // Create AIP and attach emailarchive descriptive metadata + String aipId = IdUtils.createUUID(); + model.createAIP(aipId, corporaService, + DefaultStoragePath.parse(CorporaConstants.SOURCE_AIP_CONTAINER, CorporaConstants.SOURCE_AIP_EMPTY), + RodaConstants.ADMIN); + + org.roda.core.storage.Binary metaBinary = corporaService + .getBinary(DefaultStoragePath.parse(CorporaConstants.SOURCE_DESC_METADATA_CONTAINER, + CorporaConstants.EMAIL_ARCHIVE_FULL_FILE)); + + model.createDescriptiveMetadata(aipId, "emailarchive.xml", metaBinary.getContent(), + CorporaConstants.EMAIL_ARCHIVE_METADATA_TYPE, null, RodaConstants.ADMIN); + + // Reindex and commit + AIP aip = model.retrieveAIP(aipId); + index.reindexAIP(aip); + index.commitAIPs(); + + // Layer 1: parent AIP is indexed + long parentCount = index.count(IndexedAIP.class, + new Filter(new SimpleFilterParameter(RodaConstants.INDEX_UUID, aipId))); + assertEquals("Parent AIP should be indexed", 1L, parentCount); + + // Layer 2: content_type field is populated on the parent document + long contentTypeCount = index.count(IndexedAIP.class, + new Filter(new SimpleFilterParameter("content_type", "emailarchive"))); + assertEquals("AIP should be findable by content_type=emailarchive", 1L, contentTypeCount); + + // Layer 3: child email documents are indexed in Solr + QueryResponse childResp = index.getSolrClient().query(RodaConstants.INDEX_AIP, + new SolrQuery("content_type:email").setRows(0)); + long childCount = childResp.getResults().getNumFound(); + assertTrue("Child email documents should be indexed in Solr (found " + childCount + ")", childCount > 0); + + // Layer 4: block-join ParentWhichFilterParameter — verify generated query string and Solr result + Filter nestedFilter = new Filter( + new ParentWhichFilterParameter( + new SimpleFilterParameter("content_type", "emailarchive"), + new AndFiltersParameters(Arrays.asList( + new SimpleFilterParameter("sender_s", "joao.silva@empresa.pt"), + new SimpleFilterParameter("content_type", "email"))))); + + String nestedQuery = SolrUtils.parseFilter(nestedFilter); + assertEquals("Block-join query must use v= local param to avoid outer-parser whitespace splitting", + "{!parent which=\"content_type:emailarchive\" v=\"(+sender_s:\\\"joao.silva@empresa.pt\\\" +content_type:\\\"email\\\")\"}", + nestedQuery); + + IndexResult result = index.find(IndexedAIP.class, nestedFilter, Sorter.NONE, + new Sublist(0, 10), Collections.emptyList()); + + assertEquals("ParentWhichFilterParameter should return exactly 1 AIP", 1L, result.getTotalCount()); + assertEquals("Returned AIP id should match", aipId, result.getResults().get(0).getId()); + + // Layer 5: AllFilterParameter combined with ParentWhichFilterParameter must not emit *:* prefix + // (production scenario: default filter adds AllFilterParameter, should not break block-join) + Filter combinedFilter = new Filter( + new AllFilterParameter(), + new ParentWhichFilterParameter( + new SimpleFilterParameter("content_type", "emailarchive"), + new AndFiltersParameters(Arrays.asList( + new SimpleFilterParameter("sender_s", "joao.silva@empresa.pt"), + new SimpleFilterParameter("content_type", "email"))))); + + String combinedQuery = SolrUtils.parseFilter(combinedFilter); + assertEquals("AllFilterParameter combined with block-join produces *:* AND prefix (harmless, matches everything)", + "*:* AND {!parent which=\"content_type:emailarchive\" v=\"(+sender_s:\\\"joao.silva@empresa.pt\\\" +content_type:\\\"email\\\")\"}", + combinedQuery); + + IndexResult combinedResult = index.find(IndexedAIP.class, combinedFilter, Sorter.NONE, + new Sublist(0, 10), Collections.emptyList()); + + assertEquals("AllFilter + ParentWhichFilterParameter should return exactly 1 AIP", 1L, + combinedResult.getTotalCount()); + assertEquals("Returned AIP id should match", aipId, combinedResult.getResults().get(0).getId()); + } +} diff --git a/roda-core/roda-core-tests/src/main/resources/corpora/DescriptiveMetadata/emailarchive_full.xml b/roda-core/roda-core-tests/src/main/resources/corpora/DescriptiveMetadata/emailarchive_full.xml new file mode 100644 index 0000000000..c3b239f680 --- /dev/null +++ b/roda-core/roda-core-tests/src/main/resources/corpora/DescriptiveMetadata/emailarchive_full.xml @@ -0,0 +1,44 @@ + + + João Silva + joao.silva@empresa.pt + 2020-01-01 + 2023-12-31 + 3 + PST + Offboarding + + + <msg001@empresa.pt> + Quarterly Report Q1 2021 + joao.silva@empresa.pt + ana.costa@empresa.pt + rui.pinto@empresa.pt + 2021-03-15T09:42:00Z + Inbox/Projects + true + Inbox/Projects/msg_001.eml + + + + <msg002@empresa.pt> + Re: Quarterly Report Q1 2021 + ana.costa@empresa.pt + joao.silva@empresa.pt + 2021-03-15T11:05:00Z + Inbox/Projects + false + Inbox/Projects/msg_002.eml + + + + <msg003@empresa.pt> + Budget Approval Request + joao.silva@empresa.pt + board@empresa.pt + 2021-06-01T08:00:00Z + Sent + true + Sent/msg_003.eml + + diff --git a/roda-core/roda-core-tests/src/main/resources/corpora/DescriptiveMetadata/emailarchive_minimal.xml b/roda-core/roda-core-tests/src/main/resources/corpora/DescriptiveMetadata/emailarchive_minimal.xml new file mode 100644 index 0000000000..c955368e18 --- /dev/null +++ b/roda-core/roda-core-tests/src/main/resources/corpora/DescriptiveMetadata/emailarchive_minimal.xml @@ -0,0 +1,15 @@ + + + Jane Doe + jane.doe@example.org + + + <only-email@example.org> + Hello World + sender@example.org + jane.doe@example.org + 2022-05-10T14:30:00Z + false + Inbox/msg_0001.eml + + diff --git a/roda-core/roda-core-tests/src/main/resources/corpora/DescriptiveMetadata/emailarchive_no_emails.xml b/roda-core/roda-core-tests/src/main/resources/corpora/DescriptiveMetadata/emailarchive_no_emails.xml new file mode 100644 index 0000000000..f74b622617 --- /dev/null +++ b/roda-core/roda-core-tests/src/main/resources/corpora/DescriptiveMetadata/emailarchive_no_emails.xml @@ -0,0 +1,11 @@ + + + + Empty Mailbox User + empty@example.org + 2023-01-01 + 2023-01-01 + 0 + MBOX + Legal Hold + diff --git a/roda-core/roda-core/src/main/java/org/roda/core/index/utils/SolrUtils.java b/roda-core/roda-core/src/main/java/org/roda/core/index/utils/SolrUtils.java index af3212aaa2..50d297409b 100644 --- a/roda-core/roda-core/src/main/java/org/roda/core/index/utils/SolrUtils.java +++ b/roda-core/roda-core/src/main/java/org/roda/core/index/utils/SolrUtils.java @@ -312,6 +312,11 @@ public static Pair, String> find(SolrClient query.addFilterQuery(getFilterQueries(user, justActive, classToRetrieve)); } + if (IndexedAIP.class.isAssignableFrom(classToRetrieve) + && !hasNestedDocumentsFilter(filter, classToRetrieve)) { + query.addFilterQuery("-_nest_path_:*"); + } + query.set(CursorMarkParams.CURSOR_MARK_PARAM, cursorMark); query.setRows(pageSize); query.setSorts(Arrays.asList(SortClause.asc(RodaConstants.INDEX_UUID))); @@ -361,6 +366,12 @@ public static IndexResult find(SolrClient index, Class< query.addFilterQuery(getFilterQueries(user, findRequest.isOnlyActive(), classToRetrieve)); } + if (IndexedAIP.class.isAssignableFrom(classToRetrieve) + && !hasNestedDocumentsFilter(findRequest.getFilter(), classToRetrieve) + && !findRequest.isIncludeNestedDocuments()) { + query.addFilterQuery("-_nest_path_:*"); + } + if (hasNestedDocumentsFilter(findRequest.getFilter(), classToRetrieve)) { ChildOfFilterParameter childOfFilter = (ChildOfFilterParameter) findRequest.getFilter().getParameters() .getFirst(); @@ -1032,33 +1043,115 @@ private static void parseFilterParameter(StringBuilder ret, FilterParameter para private static void appendBlockJoinChildrenFilterParameter(StringBuilder ret, ChildOfFilterParameter parameter, boolean prefixWithANDOperatorIfBuilderNotEmpty) throws RequestNotValidException { - StringBuilder blockMask = new StringBuilder(); - parseFilterParameter(blockMask, parameter.getChildrenOfFilter(), prefixWithANDOperatorIfBuilderNotEmpty); - String replace = blockMask.toString().replace(": ", ":"); + appendANDOperator(ret, prefixWithANDOperatorIfBuilderNotEmpty); + String maskValue = buildBlockJoinMask(parameter.getChildrenOfFilter()); + String escapedMask = maskValue.replace("\"", "\\\""); if (parameter.getParentFilter() != null) { - StringBuilder someParents = new StringBuilder(); - parseFilterParameter(someParents, parameter.getParentFilter(), prefixWithANDOperatorIfBuilderNotEmpty); - - ret.append("{!child of=").append(replace).append("} ").append(someParents); + String parentQuery = buildBlockJoinSubQuery(parameter.getParentFilter()).replace("\"", "\\\""); + ret.append("{!child of=\"").append(escapedMask).append("\" v=\"").append(parentQuery).append("\"}"); } else { - ret.append("{!child of=").append(replace).append("}"); + ret.append("{!child of=\"").append(escapedMask).append("\"}"); } } private static void appendBlockJoinFilterParameter(StringBuilder ret, ParentWhichFilterParameter parameter, boolean prefixWithANDOperatorIfBuilderNotEmpty) throws RequestNotValidException { - StringBuilder blockMask = new StringBuilder(); - parseFilterParameter(blockMask, parameter.getParentFilter(), prefixWithANDOperatorIfBuilderNotEmpty); - String replace = blockMask.toString().replace(": ", ":"); + appendANDOperator(ret, prefixWithANDOperatorIfBuilderNotEmpty); + String maskValue = buildBlockJoinMask(parameter.getParentFilter()); + String escapedMask = maskValue.replace("\"", "\\\""); if (parameter.getChildrenFilter() != null) { - StringBuilder someChildren = new StringBuilder(); - parseFilterParameter(someChildren, parameter.getChildrenFilter(), prefixWithANDOperatorIfBuilderNotEmpty); + String childQuery = buildBlockJoinSubQuery(parameter.getChildrenFilter()).replace("\"", "\\\""); + ret.append("{!parent which=\"").append(escapedMask).append("\" v=\"").append(childQuery).append("\"}"); + } else { + ret.append("{!parent which=\"").append(escapedMask).append("\"}"); + } + } + + private static String buildBlockJoinMask(FilterParameter parameter) throws RequestNotValidException { + if (parameter instanceof SimpleFilterParameter simplePar) { + String value = simplePar.getValue(); + if (value.matches("[\\w.-]+")) { + return simplePar.getName() + ":" + value; + } else { + return simplePar.getName() + ":\"" + value.replace("\"", "\\\"") + "\""; + } + } + StringBuilder sb = new StringBuilder(); + parseFilterParameter(sb, parameter, false); + String s = sb.toString().replace(": ", ":"); + if (s.startsWith("(") && s.endsWith(")")) { + s = s.substring(1, s.length() - 1); + } + return s; + } - ret.append("{!parent which=").append(replace).append("} ").append(someChildren); + private static String buildBlockJoinSubQuery(FilterParameter parameter) throws RequestNotValidException { + StringBuilder sb = new StringBuilder(); + buildBlockJoinSubQueryClause(sb, parameter); + return "(" + sb.toString() + ")"; + } + + private static void buildBlockJoinSubQueryClause(StringBuilder sb, FilterParameter parameter) + throws RequestNotValidException { + if (parameter instanceof SimpleFilterParameter simplePar) { + sb.append("+").append(simplePar.getName()).append(":\"") + .append(simplePar.getValue().replace("\"", "\\\"")).append("\""); + } else if (parameter instanceof BasicSearchFilterParameter basicPar) { + String value = basicPar.getValue(); + if (StringUtils.isBlank(value) || "*".equals(value)) { + sb.append("+").append(basicPar.getName()).append(":*"); + } else if (value.contains("*") || value.contains("?")) { + // wildcards cannot appear inside quoted phrases — emit each token unquoted + for (String token : value.trim().split("\\s+")) { + if (sb.length() > 0) { + sb.append(" "); + } + sb.append("+").append(basicPar.getName()).append(":").append(escapeSolrSpecialChars(token)); + } + } else { + String cleanValue = value.matches("^\".+\"$") ? value.substring(1, value.length() - 1) : value; + sb.append("+").append(basicPar.getName()).append(":\"").append(cleanValue.replace("\"", "\\\"")).append("\""); + } + } else if (parameter instanceof AndFiltersParameters andPar) { + List values = andPar.getValues(); + for (int i = 0; i < values.size(); i++) { + if (i > 0) { + sb.append(" "); + } + buildBlockJoinSubQueryClause(sb, values.get(i)); + } + } else if (parameter instanceof OrFiltersParameters orPar) { + sb.append("("); + List values = orPar.getValues(); + for (int i = 0; i < values.size(); i++) { + if (i > 0) { + sb.append(" OR "); + } + buildBlockJoinSubQueryClause(sb, values.get(i)); + } + sb.append(")"); + } else if (parameter instanceof DateIntervalFilterParameter dateIntervalPar) { + if (dateIntervalPar.getFromValue() != null || dateIntervalPar.getToValue() != null) { + sb.append("+").append(dateIntervalPar.getFromName()).append(":[") + .append(processFromDate(dateIntervalPar.getFromValue())).append(" TO ") + .append(processToDate(dateIntervalPar.getToValue(), dateIntervalPar.getGranularity())).append("]"); + } + } else if (parameter instanceof DateRangeFilterParameter dateRangePar) { + if (dateRangePar.getFromValue() != null || dateRangePar.getToValue() != null) { + sb.append("+").append(dateRangePar.getName()).append(":[") + .append(processFromDate(dateRangePar.getFromValue())).append(" TO ") + .append(processToDate(dateRangePar.getToValue(), dateRangePar.getGranularity(), false)).append("]"); + } + } else if (parameter instanceof LongRangeFilterParameter longRangePar) { + if (longRangePar.getFromValue() != null || longRangePar.getToValue() != null) { + sb.append("+").append(longRangePar.getName()).append(":[") + .append(longRangePar.getFromValue() != null ? longRangePar.getFromValue() : "*").append(" TO ") + .append(longRangePar.getToValue() != null ? longRangePar.getToValue() : "*").append("]"); + } } else { - ret.append("{!parent which=").append(replace).append("}"); + parseFilterParameter(sb, parameter, !sb.isEmpty()); } } @@ -1784,6 +1877,9 @@ public static List suggest(SolrClient index, Class if (hasPermissionFilters(classToRetrieve)) { query.addFilterQuery(getFilterQueries(user, justActive, classToRetrieve)); } + if (IndexedAIP.class.isAssignableFrom(classToRetrieve)) { + query.addFilterQuery("-_nest_path_:*"); + } parseAndConfigureFacets(new Facets(new SimpleFacetParameter(field)), query); List suggestions = new ArrayList<>(); try { diff --git a/roda-core/roda-core/src/main/resources/config/crosswalks/ingest/emailarchive.xslt b/roda-core/roda-core/src/main/resources/config/crosswalks/ingest/emailarchive.xslt new file mode 100644 index 0000000000..f720ec15e8 --- /dev/null +++ b/roda-core/roda-core/src/main/resources/config/crosswalks/ingest/emailarchive.xslt @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + item + + + + + + + + + T00:00:00Z + + + T00:00:00Z + + + + + + + + + + + emailarchive + + + + + + + email + ACTIVE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/roda-core/roda-core/src/main/resources/config/schemas/emailarchive.xsd b/roda-core/roda-core/src/main/resources/config/schemas/emailarchive.xsd new file mode 100644 index 0000000000..1f9afec551 --- /dev/null +++ b/roda-core/roda-core/src/main/resources/config/schemas/emailarchive.xsd @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/AsyncTableCell.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/AsyncTableCell.java index 10046ebc4d..8bc786bb03 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/AsyncTableCell.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/AsyncTableCell.java @@ -389,7 +389,16 @@ public void onValueChange(ValueChangeEvent> event) { // autoUpdateConsumers.add(st -> GWT.log(st.toString())); addAutoUpdateControlListener(); - if (options.isBindOpener()) { + if (options.getCustomOpener() != null) { + final java.util.function.Consumer opener = options.getCustomOpener(); + getSelectionModel().addSelectionChangeHandler(event -> { + ListSelectionState state = getListSelectionState(); + if (state != null) { + clearSelected(); + opener.accept(state.getSelected()); + } + }); + } else if (options.isBindOpener()) { ListSelectionUtils.bindBrowseOpener(this); } @@ -615,7 +624,7 @@ private CompletableFuture> getData(Sublist sublist, Sorter sorter Services services = new Services(reason, "get"); FindRequest findRequest = FindRequest.getBuilder(getFilter(), getJustActive()).withSublist(sublist) .withFacets(getFacets()).withExportFacets(false).withSorter(sorter).withFieldsToReturn(fieldsToReturn) - .withCollapse(getCollapse()).build(); + .withCollapse(getCollapse()).withIncludeNestedDocuments(options.isIncludeNestedDocuments()).build(); return services.rodaEntityRestService(s -> s.find(findRequest, LocaleInfo.getCurrentLocale().getLocaleName()), getClassToReturn()); } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/AsyncTableCellOptions.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/AsyncTableCellOptions.java index 87fc83ca53..fabc33fa4b 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/AsyncTableCellOptions.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/AsyncTableCellOptions.java @@ -10,6 +10,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.function.Consumer; import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.index.IndexResult; @@ -54,6 +55,8 @@ public class AsyncTableCellOptions { private String searchPlaceholder; private boolean forceSelectable; private boolean redirectOnSingleResult; + private boolean includeNestedDocuments; + private Consumer customOpener; private List columnOptions; private String defaultSortListColumnName; @@ -88,6 +91,9 @@ public AsyncTableCellOptions(Class classToReturn, String listId) { searchPlaceholder = null; forceSelectable = false; redirectOnSingleResult = false; + customOpener = null; + includeNestedDocuments = ConfigurationManager.getBoolean(false, RodaConstants.UI_LISTS_PROPERTY, listId, + RodaConstants.UI_LISTS_INCLUDE_NESTED_DOCUMENTS); columnOptions = ColumnOptionsFactory.getColumnOptions(listId); defaultSortListColumnName = ConfigurationManager.getStringWithDefault("", RodaConstants.UI_LISTS_PROPERTY, listId, @@ -318,6 +324,24 @@ public boolean getRedirectOnSingleResult() { return redirectOnSingleResult; } + public boolean isIncludeNestedDocuments() { + return includeNestedDocuments; + } + + public AsyncTableCellOptions withIncludeNestedDocuments(boolean includeNestedDocuments) { + this.includeNestedDocuments = includeNestedDocuments; + return this; + } + + public Consumer getCustomOpener() { + return customOpener; + } + + public AsyncTableCellOptions withCustomOpener(Consumer customOpener) { + this.customOpener = customOpener; + return this; + } + /** * @return the columnOptions */ diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/ConfigurableAsyncTableCell.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/ConfigurableAsyncTableCell.java index b44f3bdd90..8afba84fea 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/ConfigurableAsyncTableCell.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/ConfigurableAsyncTableCell.java @@ -375,7 +375,7 @@ private String renderValue(Object value, RenderingHint hint) { case DATE_FORMAT_SIMPLE: return Humanize.formatDate((String) value, false); case LIST: - List renderedList = ((List) value).stream().map(v -> renderValue(v, hint)).collect(Collectors.toList()); + List renderedList = ((List) value).stream().map(v -> renderValue(v, null)).collect(Collectors.toList()); return StringUtils.prettyPrint(renderedList); default: return value.toString(); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/AdvancedSearchFieldsPanel.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/AdvancedSearchFieldsPanel.java index 072081bde1..c133fc3636 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/AdvancedSearchFieldsPanel.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/AdvancedSearchFieldsPanel.java @@ -91,6 +91,17 @@ private static List getSearchFieldsFromConfig(String classSimpleNam } searchField.setSuggestPartial(suggestPartial); + + String nestedType = ConfigurationManager.getString(fieldPrefix, RodaConstants.SEARCH_FIELD_NESTED_TYPE); + String nestedParentType = ConfigurationManager.getString(fieldPrefix, + RodaConstants.SEARCH_FIELD_NESTED_PARENT_TYPE); + if (nestedType != null) { + searchField.setNestedType(nestedType); + } + if (nestedParentType != null) { + searchField.setNestedParentType(nestedParentType); + } + searchFields.add(searchField); } } @@ -204,6 +215,10 @@ private void setSuggestions(SearchFieldPanel searchFieldPanel) { } } + public SearchField getSearchField(String id) { + return searchFields.get(id); + } + @Override public HandlerRegistration addValueChangeHandler(ValueChangeHandler handler) { return addHandler(handler, ValueChangeEvent.getType()); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/CatalogueSearch.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/CatalogueSearch.java index b2e36cdef1..89f227b893 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/CatalogueSearch.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/CatalogueSearch.java @@ -20,7 +20,9 @@ import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.index.IsIndexed; import org.roda.core.data.v2.index.filter.AllFilterParameter; +import org.roda.core.data.v2.index.filter.ChildOfFilterParameter; import org.roda.core.data.v2.index.filter.Filter; +import org.roda.core.data.v2.index.filter.SimpleFilterParameter; import org.roda.core.data.v2.ip.AIPState; import org.roda.core.data.v2.ip.IndexedAIP; import org.roda.core.data.v2.ip.IndexedFile; @@ -35,6 +37,8 @@ import org.roda.wui.client.common.utils.JavascriptUtils; import org.roda.wui.client.common.utils.PermissionClientUtils; import org.roda.wui.common.client.ClientLogger; +import org.roda.wui.common.client.tools.ConfigurationManager; +import org.roda.wui.common.client.tools.HistoryUtils; import org.roda.wui.common.client.tools.StringUtils; import com.google.gwt.core.client.GWT; @@ -83,50 +87,93 @@ public CatalogueSearch(List filterHistoryTokens, boolean justActive, Str searchWrapper = new SearchWrapper(true); + // 1. Intellectual Entities (AIP) String preselectedDropdownValue = null; - for (Class searchableClass : searchableClasses) { - if (classFilters.containsKey(searchableClass.getSimpleName())) { - - Filter filter = classFilters.get(searchableClass.getSimpleName()); - ListBuilder listBuilder = null; - if (searchableClass.equals(IndexedAIP.class) - && PermissionClientUtils.hasPermissions(RodaConstants.PERMISSION_METHOD_FIND_AIP)) { - - listBuilder = new ListBuilder<>(() -> new ConfigurableAsyncTableCell<>(), - new AsyncTableCellOptions<>(IndexedAIP.class, itemsListId) - .withActionable(AipSearchWrapperActions.getWithoutNoAipActions(null, AIPState.ACTIVE, permissions)) - .withRedirectOnSingleResult(redirectOnSingleResult).withJustActive(justActive).bindOpener() - .withFilter(filter).withStartHidden(startHidden) - .withActionBlacklist(List.of(AipSearchWrapperActions.AipSearchWrapperAction.NEW_CHILD_AIP_BELOW, - AipSearchWrapperActions.AipSearchWrapperAction.APPRAISAL_ACCEPT, - AipSearchWrapperActions.AipSearchWrapperAction.APPRAISAL_REJECT))); - } else if (searchableClass.equals(IndexedRepresentation.class) - && PermissionClientUtils.hasPermissions(RodaConstants.PERMISSION_METHOD_FIND_REPRESENTATION)) { - - listBuilder = new ListBuilder<>(() -> new ConfigurableAsyncTableCell<>(), - new AsyncTableCellOptions<>(IndexedRepresentation.class, representationsListId) - .withActionable(RepresentationSearchWrapperActions.getWithoutNoRepresentationActions(null, null)) - .withRedirectOnSingleResult(redirectOnSingleResult).withJustActive(justActive).bindOpener() - .withFilter(filter).withStartHidden(startHidden)); - } else if (searchableClass.equals(IndexedFile.class) - && PermissionClientUtils.hasPermissions(RodaConstants.PERMISSION_METHOD_FIND_FILE)) { - - listBuilder = new ListBuilder<>(() -> new ConfigurableAsyncTableCell<>(), - new AsyncTableCellOptions<>(IndexedFile.class, filesListId) - .withActionable(FileSearchWrapperActions.getWithoutNoFileActions(null, null, null, null, null)) - .withRedirectOnSingleResult(redirectOnSingleResult).withJustActive(justActive).bindOpener() - .withFilter(filter).withStartHidden(startHidden)); - } + if (classFilters.containsKey(IndexedAIP.class.getSimpleName()) + && PermissionClientUtils.hasPermissions(RodaConstants.PERMISSION_METHOD_FIND_AIP)) { + Filter filter = classFilters.get(IndexedAIP.class.getSimpleName()); + ListBuilder listBuilder = new ListBuilder<>(() -> new ConfigurableAsyncTableCell<>(), + new AsyncTableCellOptions<>(IndexedAIP.class, itemsListId) + .withActionable(AipSearchWrapperActions.getWithoutNoAipActions(null, AIPState.ACTIVE, permissions)) + .withRedirectOnSingleResult(redirectOnSingleResult).withJustActive(justActive).bindOpener() + .withFilter(filter).withStartHidden(startHidden) + .withActionBlacklist(List.of(AipSearchWrapperActions.AipSearchWrapperAction.NEW_CHILD_AIP_BELOW, + AipSearchWrapperActions.AipSearchWrapperAction.APPRAISAL_ACCEPT, + AipSearchWrapperActions.AipSearchWrapperAction.APPRAISAL_REJECT))); + preselectedDropdownValue = IndexedAIP.class.getSimpleName(); + searchWrapper.createListAndSearchPanel(listBuilder, true, true); + } - if (listBuilder != null) { - if (preselectedDropdownValue == null) { - preselectedDropdownValue = searchableClass.getSimpleName(); + // 2. Virtual catalogues (after AIPs, before Representations/Files) + if (PermissionClientUtils.hasPermissions(RodaConstants.PERMISSION_METHOD_FIND_AIP)) { + List virtualCatalogueIds = ConfigurationManager + .getStringList(RodaConstants.UI_CATALOGUE_VIRTUAL_PROPERTY); + for (String virtualListId : virtualCatalogueIds) { + String childOfFilterStr = ConfigurationManager.getString(RodaConstants.UI_LISTS_PROPERTY, virtualListId, + RodaConstants.UI_LISTS_CATALOGUE_CHILDOF_FILTER); + String filterStr = ConfigurationManager.getString(RodaConstants.UI_LISTS_PROPERTY, virtualListId, + RodaConstants.UI_LISTS_CATALOGUE_FILTER); + + ListBuilder virtualListBuilder = null; + + if (childOfFilterStr != null && !childOfFilterStr.isEmpty()) { + SimpleFilterParameter maskParam = parseFieldValueFilter(childOfFilterStr); + if (maskParam != null) { + Filter childFilter = new Filter(new ChildOfFilterParameter(null, maskParam)); + virtualListBuilder = new ListBuilder<>(() -> new ConfigurableAsyncTableCell<>(), + new AsyncTableCellOptions<>(IndexedAIP.class, virtualListId).withFilter(childFilter) + .withIncludeNestedDocuments(true).withStartHidden(startHidden) + .withCustomOpener(aip -> { + String id = aip.getId(); + String parentId = id.contains("/") ? id.split("/")[0] : id; + HistoryUtils.newHistory(HistoryUtils.getHistoryBrowse(parentId)); + })); + } + } else if (filterStr != null && !filterStr.isEmpty()) { + SimpleFilterParameter filterParam = parseFieldValueFilter(filterStr); + if (filterParam != null) { + Filter aipFilter = new Filter(filterParam); + virtualListBuilder = new ListBuilder<>(() -> new ConfigurableAsyncTableCell<>(), + new AsyncTableCellOptions<>(IndexedAIP.class, virtualListId).withFilter(aipFilter) + .withJustActive(justActive).bindOpener().withStartHidden(startHidden)); } - searchWrapper.createListAndSearchPanel(listBuilder, true, true); + } + + if (virtualListBuilder != null) { + searchWrapper.createVirtualListAndSearchPanel(virtualListBuilder, true, true); } } } + // 3. Representations and Files + if (classFilters.containsKey(IndexedRepresentation.class.getSimpleName()) + && PermissionClientUtils.hasPermissions(RodaConstants.PERMISSION_METHOD_FIND_REPRESENTATION)) { + Filter filter = classFilters.get(IndexedRepresentation.class.getSimpleName()); + ListBuilder listBuilder = new ListBuilder<>(() -> new ConfigurableAsyncTableCell<>(), + new AsyncTableCellOptions<>(IndexedRepresentation.class, representationsListId) + .withActionable(RepresentationSearchWrapperActions.getWithoutNoRepresentationActions(null, null)) + .withRedirectOnSingleResult(redirectOnSingleResult).withJustActive(justActive).bindOpener() + .withFilter(filter).withStartHidden(startHidden)); + if (preselectedDropdownValue == null) { + preselectedDropdownValue = IndexedRepresentation.class.getSimpleName(); + } + searchWrapper.createListAndSearchPanel(listBuilder, true, true); + } + + if (classFilters.containsKey(IndexedFile.class.getSimpleName()) + && PermissionClientUtils.hasPermissions(RodaConstants.PERMISSION_METHOD_FIND_FILE)) { + Filter filter = classFilters.get(IndexedFile.class.getSimpleName()); + ListBuilder listBuilder = new ListBuilder<>(() -> new ConfigurableAsyncTableCell<>(), + new AsyncTableCellOptions<>(IndexedFile.class, filesListId) + .withActionable(FileSearchWrapperActions.getWithoutNoFileActions(null, null, null, null, null)) + .withRedirectOnSingleResult(redirectOnSingleResult).withJustActive(justActive).bindOpener() + .withFilter(filter).withStartHidden(startHidden)); + if (preselectedDropdownValue == null) { + preselectedDropdownValue = IndexedFile.class.getSimpleName(); + } + searchWrapper.createListAndSearchPanel(listBuilder, true, true); + } + if (preselectedDropdownValue != null) { searchWrapper.changeDropdownSelectedValue(preselectedDropdownValue); } @@ -134,6 +181,16 @@ public CatalogueSearch(List filterHistoryTokens, boolean justActive, Str initWidget(uiBinder.createAndBindUi(this)); } + private static SimpleFilterParameter parseFieldValueFilter(String filterStr) { + int colonIdx = filterStr.indexOf(':'); + if (colonIdx > 0 && colonIdx < filterStr.length() - 1) { + String field = filterStr.substring(0, colonIdx).trim(); + String value = filterStr.substring(colonIdx + 1).trim(); + return new SimpleFilterParameter(field, value); + } + return null; + } + public CatalogueSearch(boolean justActive, String itemsListId, String representationsListId, String filesListId, Permissions permissions, boolean startHidden, boolean redirectOnSingleResult) { this(Collections.emptyList(), justActive, itemsListId, representationsListId, filesListId, permissions, startHidden, diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchField.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchField.java index f7fef9703e..108a3f3e58 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchField.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchField.java @@ -22,6 +22,8 @@ public class SearchField implements Serializable { private Tree terms; private String suggestField; private boolean suggestPartial; + private String nestedType; + private String nestedParentType; public SearchField() { super(); @@ -115,10 +117,26 @@ public void setSuggestPartial(boolean suggestPartial) { this.suggestPartial = suggestPartial; } + public String getNestedType() { + return nestedType; + } + + public void setNestedType(String nestedType) { + this.nestedType = nestedType; + } + + public String getNestedParentType() { + return nestedParentType; + } + + public void setNestedParentType(String nestedParentType) { + this.nestedParentType = nestedParentType; + } + @Override public String toString() { return "SearchField [id=" + id + ", searchFields=" + searchFields + ", label=" + label + ", type=" + type + ", fixed=" + fixed + ", terms=" + terms + ", suggestField=" + suggestField + ", suggestPartial=" - + suggestPartial + "]"; + + suggestPartial + ", nestedType=" + nestedType + ", nestedParentType=" + nestedParentType + "]"; } } \ No newline at end of file diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchPanel.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchPanel.java index 4dce92bee0..8812f4a782 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchPanel.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchPanel.java @@ -9,16 +9,20 @@ import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.index.IsIndexed; import org.roda.core.data.v2.index.filter.AllFilterParameter; +import org.roda.core.data.v2.index.filter.AndFiltersParameters; import org.roda.core.data.v2.index.filter.BasicSearchFilterParameter; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.filter.FilterParameter; import org.roda.core.data.v2.index.filter.OrFiltersParameters; +import org.roda.core.data.v2.index.filter.ParentWhichFilterParameter; import org.roda.core.data.v2.index.filter.SimpleFilterParameter; import org.roda.core.data.v2.ip.IndexedAIP; import org.roda.wui.client.common.NoAsyncCallback; @@ -197,7 +201,7 @@ private void setupAdvancedSearch(boolean makeAdvancedPanelVisible) { if (advancedSearchEnabled) { searchAdvancedDisclosureButton.addClickHandler(event -> toggleAdvancedSearchPanel()); - advancedSearchFieldsPanel = new AdvancedSearchFieldsPanel(list.getClassToReturn().getSimpleName(), keyCode -> { + advancedSearchFieldsPanel = new AdvancedSearchFieldsPanel(resolveSearchFieldScope(), keyCode -> { if (KeyCodes.KEY_ENTER == keyCode && searchAdvancedGo.isEnabled()) { searchAdvancedGo.click(); } @@ -211,6 +215,12 @@ private void setupAdvancedSearch(boolean makeAdvancedPanelVisible) { } } + private String resolveSearchFieldScope() { + String listId = list.getListId(); + List listIdFields = ConfigurationManager.getStringList(RodaConstants.SEARCH_FIELD_PREFIX, listId); + return !listIdFields.isEmpty() ? listId : list.getClassToReturn().getSimpleName(); + } + /** * Sets the default filter and incremental boolean for the search, shows the * preFilters in the UI if they should be shown according to the constructor @@ -400,6 +410,31 @@ private Filter buildSearchFilter() { } } + // Group nested-type fields into ParentWhichFilterParameter block-join queries + Map> nestedGroups = new LinkedHashMap<>(); + Iterator> it = advancedSearchFilters.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry entry = it.next(); + SearchField sf = advancedSearchFieldsPanel.getSearchField(entry.getKey()); + if (sf != null && sf.getNestedType() != null && sf.getNestedParentType() != null) { + String groupKey = sf.getNestedType() + "\0" + sf.getNestedParentType(); + nestedGroups.computeIfAbsent(groupKey, k -> new ArrayList<>()).add(entry.getValue()); + it.remove(); + } + } + + for (Map.Entry> entry : nestedGroups.entrySet()) { + String[] parts = entry.getKey().split("\0", 2); + String nestedType = parts[0]; + String nestedParentType = parts[1]; + List childFilters = new ArrayList<>(entry.getValue()); + childFilters.add(new SimpleFilterParameter("content_type", nestedType)); + FilterParameter childrenFilter = childFilters.size() == 1 ? childFilters.get(0) + : new AndFiltersParameters(childFilters); + parameters.add(new ParentWhichFilterParameter(new SimpleFilterParameter("content_type", nestedParentType), + childrenFilter)); + } + parameters.addAll(advancedSearchFilters.values()); } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchWrapper.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchWrapper.java index 0070d562f4..4808c827eb 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchWrapper.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchWrapper.java @@ -276,6 +276,42 @@ private void attachComponents(String objectClassSimpleName searchPanel.attachSearchPanelSelectionDropdown(searchPanelSelectionDropdown); } + public SearchWrapper createVirtualListAndSearchPanel(ListBuilder listBuilder, + boolean showSaveButton, boolean hideListAfterClear) { + AsyncTableCell list = listBuilder.build(); + String listId = list.getListId(); + + String labelI18nKey = ConfigurationManager.resolveTranslation(RodaConstants.UI_LISTS_PROPERTY, listId, + RodaConstants.UI_LISTS_CATALOGUE_LABEL_I18N_PROPERTY); + if (labelI18nKey == null) { + labelI18nKey = listId; + } + + String icon = ConfigurationManager.getString(RodaConstants.UI_LISTS_PROPERTY, listId, + RodaConstants.UI_LISTS_CATALOGUE_ICON_PROPERTY); + + Filter filter = list.getFilter(); + String allFilter = SearchFilters.searchField(); + boolean incremental = SearchFilters.shouldBeIncremental(filter); + + SearchPanel searchPanel = new SearchPanel<>(list, filter, allFilter, incremental, + listBuilder.getOptions().getSearchPlaceholder(), hasMultipleSearchPanels, showSaveButton, hideListAfterClear); + + initSearchPanelSelectionDropdown(); + searchPanelSelectionDropdown.addItem(labelI18nKey, listId, icon); + searchPanel.setVisible(true); + + components.putVirtual(listId, searchPanel, list); + + if (mainPanel.getWidgetCount() == 0) { + if (preselectedDropdownValue == null || preselectedDropdownValue.equals(listId)) { + attachComponents(listId); + } + } + + return this; + } + /** * Auxiliary manager for inner components (groups of one searchWrapper and one * BasicAsyncTableCell, at least for now) that is used to enforce type coherence @@ -284,6 +320,8 @@ private void attachComponents(String objectClassSimpleName private class Components { private final Map, SearchPanel> searchPanels = new LinkedHashMap<>(); private final Map, AsyncTableCell> lists = new LinkedHashMap<>(); + private final Map> virtualSearchPanels = new LinkedHashMap<>(); + private final Map> virtualLists = new LinkedHashMap<>(); /** * Add a new set of components associated with a class. @@ -302,6 +340,11 @@ public void put(Class objectClass, SearchPanel searc lists.put(objectClass, list); } + void putVirtual(String listId, SearchPanel searchPanel, AsyncTableCell list) { + virtualSearchPanels.put(listId, searchPanel); + virtualLists.put(listId, list); + } + SearchPanel getSearchPanel(Class objectClass) { return (SearchPanel) searchPanels.get(objectClass); } @@ -310,18 +353,26 @@ AsyncTableCell getList(Class objectClass) { return (AsyncTableCell) lists.get(objectClass); } - SearchPanel getSearchPanel(String className) { - return (SearchPanel) searchPanels.get(classForName(className)); + SearchPanel getSearchPanel(String key) { + if (virtualSearchPanels.containsKey(key)) { + return (SearchPanel) virtualSearchPanels.get(key); + } + return (SearchPanel) searchPanels.get(classForName(key)); } - AsyncTableCell getList(String className) { - return (AsyncTableCell) lists.get(classForName(className)); + AsyncTableCell getList(String key) { + if (virtualLists.containsKey(key)) { + return (AsyncTableCell) virtualLists.get(key); + } + return (AsyncTableCell) lists.get(classForName(key)); } void forEachList(Consumer> action) { for (AsyncTableCell value : lists.values()) { - AsyncTableCell list = (AsyncTableCell) value; - action.accept(list); + action.accept((AsyncTableCell) value); + } + for (AsyncTableCell value : virtualLists.values()) { + action.accept((AsyncTableCell) value); } } diff --git a/roda-ui/roda-wui/src/main/resources/config/crosswalks/dissemination/html/emailarchive.xslt b/roda-ui/roda-wui/src/main/resources/config/crosswalks/dissemination/html/emailarchive.xslt new file mode 100644 index 0000000000..42be415cfb --- /dev/null +++ b/roda-ui/roda-wui/src/main/resources/config/crosswalks/dissemination/html/emailarchive.xslt @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+
+
+
+
+ +
diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages.properties index 875b2871d6..7f8e2dd42c 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages.properties @@ -13,6 +13,9 @@ ui.search.fields.IndexedAIP.level=Level ui.search.fields.IndexedAIP.ingestSIPIds=Ingest SIP identifier ui.search.fields.IndexedAIP.type=Type ui.search.fields.IndexedAIP.hasRepresentations=With files +ui.search.fields.IndexedAIP.emailSubject=Email subject +ui.search.fields.IndexedAIP.emailSender=Email sender +ui.search.fields.IndexedAIP.emailSentDate=Email sent date ui.search.fields.IndexedAIP.retentionPeriodStartDate=Retention start date ui.search.fields.IndexedAIP.overdueDate=Overdue on ui.search.fields.IndexedAIP.destroyedOn=Destroyed on @@ -141,6 +144,10 @@ ui.facets.IndexedAIP.level.series: Series ui.facets.IndexedAIP.disposalScheduleName: Disposal schedule ui.facets.IndexedAIP.destroyedBy: Destroyed by ui.facets.IndexedAIP.instanceName: Instance +ui.facets.IndexedAIP.sender_s: Sender + +ui.catalogue.virtual.Search_emailarchive.label: Search Email Archives +ui.catalogue.virtual.Search_emails.label: Search Emails ui.facets.IndexedFile.fileFormat: Formats ui.facets.IndexedFile.formatPronom: PRONOM IDs @@ -362,6 +369,7 @@ ui.browse.metadata.descriptive.type.ead-c_dglab=Encoded Archival Description Com ui.browse.metadata.descriptive.type.ead_3=Encoded Archival Description 3 ui.browse.metadata.descriptive.type.ead-c=Encoded Archival Description Component ui.browse.metadata.descriptive.type.key-value=Key-Value +ui.browse.metadata.descriptive.type.emailarchive=Email Archive ########################################## # Technical Metadata @@ -583,6 +591,22 @@ crosswalks.dissemination.html.dc_simpledc20021212.source=Source crosswalks.dissemination.html.dc_simpledc20021212.subject=Subject crosswalks.dissemination.html.dc_simpledc20021212.type=Type +crosswalks.dissemination.html.emailarchive.custodian=Custodian +crosswalks.dissemination.html.emailarchive.emailAddress=Email address +crosswalks.dissemination.html.emailarchive.dateStart=Date range start +crosswalks.dissemination.html.emailarchive.dateEnd=Date range end +crosswalks.dissemination.html.emailarchive.totalMessages=Total messages +crosswalks.dissemination.html.emailarchive.originalFormat=Original format +crosswalks.dissemination.html.emailarchive.archivingMotive=Archiving motive +crosswalks.dissemination.html.emailarchive.emails=Messages +crosswalks.dissemination.html.emailarchive.emails.messageId=Message ID +crosswalks.dissemination.html.emailarchive.emails.subject=Subject +crosswalks.dissemination.html.emailarchive.emails.sender=Sender +crosswalks.dissemination.html.emailarchive.emails.recipients=Recipients +crosswalks.dissemination.html.emailarchive.emails.sentDate=Sent date +crosswalks.dissemination.html.emailarchive.emails.folderPath=Folder +crosswalks.dissemination.html.emailarchive.emails.hasAttachments=Has attachments + crosswalks.dissemination.html.event.identifierType: Identifier type crosswalks.dissemination.html.event.identifierValue: Identifier value crosswalks.dissemination.html.event.dateTime: Date diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_de_AT.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_de_AT.properties index 18d713ad8d..0b91f9acea 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_de_AT.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_de_AT.properties @@ -141,6 +141,10 @@ ui.facets.IndexedAIP.level.series: Serie ui.facets.IndexedAIP.disposalScheduleName: Skartierungsplan ui.facets.IndexedAIP.destroyedBy: Vernichtet von ui.facets.IndexedAIP.instanceName: Instanz +ui.facets.IndexedAIP.sender_s: Absender + +ui.catalogue.virtual.Search_emailarchive.label: E-Mail-Archive durchsuchen +ui.catalogue.virtual.Search_emails.label: E-Mails durchsuchen ui.facets.IndexedFile.fileFormat: Formate ui.facets.IndexedFile.formatPronom: PRONOM-ID diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_de_DE.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_de_DE.properties index efb88f675b..3a64fb3c19 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_de_DE.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_de_DE.properties @@ -141,6 +141,10 @@ ui.facets.IndexedAIP.level.series: Reihe ui.facets.IndexedAIP.disposalScheduleName: Kassationsplan ui.facets.IndexedAIP.destroyedBy: Vernichtet von ui.facets.IndexedAIP.instanceName: Instanz +ui.facets.IndexedAIP.sender_s: Absender + +ui.catalogue.virtual.Search_emailarchive.label: E-Mail-Archive durchsuchen +ui.catalogue.virtual.Search_emails.label: E-Mails durchsuchen ui.facets.IndexedFile.fileFormat: Formate ui.facets.IndexedFile.formatPronom: PRONOM-ID diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_es.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_es.properties index 8f99070f13..983be1d912 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_es.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_es.properties @@ -10,14 +10,14 @@ ui.search.fields.IndexedAIP.scope=Descripción ui.search.fields.IndexedAIP.origination=Origen ui.search.fields.IndexedAIP.dates=Fecha ui.search.fields.IndexedAIP.level=Nivel -ui.search.fields.IndexedAIP.ingestSIPIds=Ingest SIP identifier +ui.search.fields.IndexedAIP.ingestSIPIds=Identificador del SIP de ingesta ui.search.fields.IndexedAIP.type=Tipo -ui.search.fields.IndexedAIP.hasRepresentations=With files -ui.search.fields.IndexedAIP.retentionPeriodStartDate=Retention start date -ui.search.fields.IndexedAIP.overdueDate=Overdue on -ui.search.fields.IndexedAIP.destroyedOn=Destroyed on -ui.search.fields.IndexedAIP.destroyedBy=Destroyed by -ui.search.fields.IndexedAIP.disposalScheduleName=Disposal schedule +ui.search.fields.IndexedAIP.hasRepresentations=Con archivos +ui.search.fields.IndexedAIP.retentionPeriodStartDate=Fecha de inicio de retención +ui.search.fields.IndexedAIP.overdueDate=Vence el +ui.search.fields.IndexedAIP.destroyedOn=Destruido el +ui.search.fields.IndexedAIP.destroyedBy=Destruido por +ui.search.fields.IndexedAIP.disposalScheduleName=Calendario de eliminación ui.search.fields.IndexedRepresentation.identifier=Identificador ui.search.fields.IndexedRepresentation.uuid=Identificador @@ -31,16 +31,16 @@ ui.search.fields.IndexedRepresentation.representationStates=Estado ui.search.fields.IndexedFile.uuid=Identificador ui.search.fields.IndexedFile.filename=Nombre del archivo -ui.search.fields.IndexedFile.width=Width -ui.search.fields.IndexedFile.height=Height -ui.search.fields.IndexedFile.compression=Lossless compression +ui.search.fields.IndexedFile.width=Ancho +ui.search.fields.IndexedFile.height=Alto +ui.search.fields.IndexedFile.compression=Compresión sin pérdidas ui.search.fields.IndexedFile.path=Ruta ui.search.fields.IndexedFile.format=Formato ui.search.fields.IndexedFile.formatVersion=Versión del formato ui.search.fields.IndexedFile.pronom=PRONOM ui.search.fields.IndexedFile.mimetype=Mimetype ui.search.fields.IndexedFile.extension=Extensión -ui.search.fields.IndexedFile.formatDesignation=Format designation +ui.search.fields.IndexedFile.formatDesignation=Designación del formato ui.search.fields.IndexedFile.filesize=Tamaño del archivo ui.search.fields.IndexedFile.fulltext=Texto completo @@ -48,10 +48,10 @@ ui.search.fields.Job.name=Nombre ui.search.fields.Job.dates=Fechas ui.search.fields.IndexedReport.dates=Fechas -ui.search.fields.IndexedReport.sourceObjectOriginalIds=Source original identifiers -ui.search.fields.IndexedReport.sourceObjectOriginalName=Source original name -ui.search.fields.IndexedReport.outcomeObjectId=Outcome object identifier -ui.search.fields.IndexedReport.outcomeObjectLabel=Outcome object label +ui.search.fields.IndexedReport.sourceObjectOriginalIds=Identificadores originales de origen +ui.search.fields.IndexedReport.sourceObjectOriginalName=Nombre original de origen +ui.search.fields.IndexedReport.outcomeObjectId=Identificador del objeto resultado +ui.search.fields.IndexedReport.outcomeObjectLabel=Etiqueta del objeto resultado ui.search.fields.IndexedPreservationEvent.dates=Fechas @@ -63,68 +63,68 @@ ui.search.fields.Notification.dates=Fechas ui.search.fields.TransferredResource.dates=Fechas ui.search.fields.TransferredResource.size=Tamaño -ui.search.fields.IndexedRisk.dates=Identification date +ui.search.fields.IndexedRisk.dates=Fecha de identificación ui.search.fields.IndexedRisk.name=Nombre -ui.search.fields.RiskIncidence.mitigatedOn=Mitigation date -ui.search.fields.RiskIncidence.detectedOn=Detection date +ui.search.fields.RiskIncidence.mitigatedOn=Fecha de mitigación +ui.search.fields.RiskIncidence.detectedOn=Fecha de detección ui.search.fields.RepresentationInformation.name=Nombre ui.search.fields.RepresentationInformation.description=Descripción -ui.search.fields.RepresentationInformation.tags=Tags +ui.search.fields.RepresentationInformation.tags=Etiquetas ########################################################################## # Representation information relation configurations and their inverses ########################################################################## -ui.search.fields.RepresentationInformation.relation.conforms_to=Conforms to -ui.search.fields.RepresentationInformation.relation.has_created=Has created -ui.search.fields.RepresentationInformation.relation.was_created_by=Was created by -ui.search.fields.RepresentationInformation.relation.has_format=Has format -ui.search.fields.RepresentationInformation.relation.is_format_of=Is format of -ui.search.fields.RepresentationInformation.relation.has_part=Has part -ui.search.fields.RepresentationInformation.relation.is_part_of=Is part of -ui.search.fields.RepresentationInformation.relation.has_version=Has version -ui.search.fields.RepresentationInformation.relation.is_version_of=Is version of -ui.search.fields.RepresentationInformation.relation.references=References -ui.search.fields.RepresentationInformation.relation.is_referenced_by=Is referenced by -ui.search.fields.RepresentationInformation.relation.replaces=Replaces -ui.search.fields.RepresentationInformation.relation.is_replaced_by=Is replaced by -ui.search.fields.RepresentationInformation.relation.requires=Requires -ui.search.fields.RepresentationInformation.relation.is_required_by=Is required by -ui.search.fields.RepresentationInformation.relation.has_source=Has source -ui.search.fields.RepresentationInformation.relation.is_source_of=Is source of -ui.search.fields.RepresentationInformation.relation.rendered_by=Rendered by -ui.search.fields.RepresentationInformation.relation.executed_by=Executed by -ui.search.fields.RepresentationInformation.relation.specified_by=Specified by -ui.search.fields.RepresentationInformation.relation.represents=Represents - -ui.search.fields.RepresentationInformation.relation.subtype_of=Subtype of -ui.search.fields.RepresentationInformation.relation.has_subtype=Has subtype -ui.search.fields.RepresentationInformation.relation.component_of=Component of -ui.search.fields.RepresentationInformation.relation.has_component=Has component -ui.search.fields.RepresentationInformation.relation.contains=Contains -ui.search.fields.RepresentationInformation.relation.is_contained=Is contained -ui.search.fields.RepresentationInformation.relation.extension_of=Extension of -ui.search.fields.RepresentationInformation.relation.has_extension=Has extension -ui.search.fields.RepresentationInformation.relation.modification_of=Modification of -ui.search.fields.RepresentationInformation.relation.has_modification=Has modification -ui.search.fields.RepresentationInformation.relation.used_by=Used by -ui.search.fields.RepresentationInformation.relation.uses=Uses -ui.search.fields.RepresentationInformation.relation.affinity_to=Affinity to -ui.search.fields.RepresentationInformation.relation.defined_via=Defined via -ui.search.fields.RepresentationInformation.relation.equivalent_to=Equivalent to -ui.search.fields.RepresentationInformation.relation.may_contain=May contain -ui.search.fields.RepresentationInformation.relation.may_have_component=May have component -ui.search.fields.RepresentationInformation.relation.must_have_component=Must have component -ui.search.fields.RepresentationInformation.relation.has_modified_version=Has modified version -ui.search.fields.RepresentationInformation.relation.has_later_version=Has later version -ui.search.fields.RepresentationInformation.relation.has_earlier_version=Has earlier version -ui.search.fields.RepresentationInformation.relation.see_also=See also +ui.search.fields.RepresentationInformation.relation.conforms_to=Conforme a +ui.search.fields.RepresentationInformation.relation.has_created=Ha creado +ui.search.fields.RepresentationInformation.relation.was_created_by=Fue creado por +ui.search.fields.RepresentationInformation.relation.has_format=Tiene formato +ui.search.fields.RepresentationInformation.relation.is_format_of=Es formato de +ui.search.fields.RepresentationInformation.relation.has_part=Tiene parte +ui.search.fields.RepresentationInformation.relation.is_part_of=Es parte de +ui.search.fields.RepresentationInformation.relation.has_version=Tiene versión +ui.search.fields.RepresentationInformation.relation.is_version_of=Es versión de +ui.search.fields.RepresentationInformation.relation.references=Referencias +ui.search.fields.RepresentationInformation.relation.is_referenced_by=Es referenciado por +ui.search.fields.RepresentationInformation.relation.replaces=Reemplaza +ui.search.fields.RepresentationInformation.relation.is_replaced_by=Es reemplazado por +ui.search.fields.RepresentationInformation.relation.requires=Requiere +ui.search.fields.RepresentationInformation.relation.is_required_by=Es requerido por +ui.search.fields.RepresentationInformation.relation.has_source=Tiene fuente +ui.search.fields.RepresentationInformation.relation.is_source_of=Es fuente de +ui.search.fields.RepresentationInformation.relation.rendered_by=Renderizado por +ui.search.fields.RepresentationInformation.relation.executed_by=Ejecutado por +ui.search.fields.RepresentationInformation.relation.specified_by=Especificado por +ui.search.fields.RepresentationInformation.relation.represents=Representa + +ui.search.fields.RepresentationInformation.relation.subtype_of=Subtipo de +ui.search.fields.RepresentationInformation.relation.has_subtype=Tiene subtipo +ui.search.fields.RepresentationInformation.relation.component_of=Componente de +ui.search.fields.RepresentationInformation.relation.has_component=Tiene componente +ui.search.fields.RepresentationInformation.relation.contains=Contiene +ui.search.fields.RepresentationInformation.relation.is_contained=Está contenido +ui.search.fields.RepresentationInformation.relation.extension_of=Extensión de +ui.search.fields.RepresentationInformation.relation.has_extension=Tiene extensión +ui.search.fields.RepresentationInformation.relation.modification_of=Modificación de +ui.search.fields.RepresentationInformation.relation.has_modification=Tiene modificación +ui.search.fields.RepresentationInformation.relation.used_by=Usado por +ui.search.fields.RepresentationInformation.relation.uses=Usa +ui.search.fields.RepresentationInformation.relation.affinity_to=Afinidad con +ui.search.fields.RepresentationInformation.relation.defined_via=Definido mediante +ui.search.fields.RepresentationInformation.relation.equivalent_to=Equivalente a +ui.search.fields.RepresentationInformation.relation.may_contain=Puede contener +ui.search.fields.RepresentationInformation.relation.may_have_component=Puede tener componente +ui.search.fields.RepresentationInformation.relation.must_have_component=Debe tener componente +ui.search.fields.RepresentationInformation.relation.has_modified_version=Tiene versión modificada +ui.search.fields.RepresentationInformation.relation.has_later_version=Tiene versión posterior +ui.search.fields.RepresentationInformation.relation.has_earlier_version=Tiene versión anterior +ui.search.fields.RepresentationInformation.relation.see_also=Véase también ui.search.fields.RepresentationInformation.relation.other=Otro ui.search.fields.DisposalConfirmation.createdOn=Fecha de creación -ui.search.fields.DisposalConfirmation.executedOn=Execution date -ui.search.fields.DisposalConfirmation.restoredOn=Restoration date +ui.search.fields.DisposalConfirmation.executedOn=Fecha de ejecución +ui.search.fields.DisposalConfirmation.restoredOn=Fecha de restauración ########################################## # facets @@ -138,16 +138,20 @@ ui.facets.IndexedAIP.level.fonds: Fonds ui.facets.IndexedAIP.level.item: Item ui.facets.IndexedAIP.level.other: Otro ui.facets.IndexedAIP.level.series: Série -ui.facets.IndexedAIP.disposalScheduleName: Disposal schedule -ui.facets.IndexedAIP.destroyedBy: Destroyed by -ui.facets.IndexedAIP.instanceName: Instance +ui.facets.IndexedAIP.disposalScheduleName: Calendario de eliminación +ui.facets.IndexedAIP.destroyedBy: Destruido por +ui.facets.IndexedAIP.instanceName: Instancia +ui.facets.IndexedAIP.sender_s: Remitente -ui.facets.IndexedFile.fileFormat: Formats -ui.facets.IndexedFile.formatPronom: PRONOM IDs -ui.facets.IndexedFile.formatMimetype: Mimetypes -ui.facets.IndexedFile.isDirectory: File type -ui.facets.IndexedFile.isDirectory.false: regular file -ui.facets.IndexedFile.isDirectory.true: directory +ui.catalogue.virtual.Search_emailarchive.label: Buscar Archivo de Email +ui.catalogue.virtual.Search_emails.label: Buscar Correos electrónicos + +ui.facets.IndexedFile.fileFormat: Formatos +ui.facets.IndexedFile.formatPronom: IDs PRONOM +ui.facets.IndexedFile.formatMimetype: Tipos MIME +ui.facets.IndexedFile.isDirectory: Tipo de archivo +ui.facets.IndexedFile.isDirectory.false: archivo normal +ui.facets.IndexedFile.isDirectory.true: directorio ui.facets.IndexedPreservationAgent.type: Tipo @@ -157,33 +161,33 @@ ui.facets.IndexedPreservationEvent.eventOutcome.PARTIAL_SUCCESS: Éxito parcial ui.facets.IndexedPreservationEvent.eventOutcome.SUCCESS: Éxito ui.facets.IndexedPreservationEvent.eventOutcome.SKIPPED: Omitida ui.facets.IndexedPreservationEvent.eventType: Tipo -ui.facets.IndexedPreservationEvent.objectClass: Entity +ui.facets.IndexedPreservationEvent.objectClass: Entidad ui.facets.IndexedPreservationEvent.objectClass.AIP: Entidad intelectual ui.facets.IndexedPreservationEvent.objectClass.FILE: Archivo ui.facets.IndexedPreservationEvent.objectClass.REPOSITORY: Repositorio ui.facets.IndexedPreservationEvent.objectClass.REPRESENTATION: Representación -ui.facets.IndexedPreservationEvent.instanceName: Instance +ui.facets.IndexedPreservationEvent.instanceName: Instancia ui.facets.IndexedReport.pluginName: Ejecutar última tarea -ui.facets.IndexedReport.pluginState: Report status +ui.facets.IndexedReport.pluginState: Estado del informe ui.facets.IndexedReport.pluginState.FAILURE: Fracaso ui.facets.IndexedReport.pluginState.PARTIAL_SUCCESS: Éxito parcial ui.facets.IndexedReport.pluginState.RUNNING: Corriendo ui.facets.IndexedReport.pluginState.SUCCESS: Éxito ui.facets.IndexedReport.pluginState.SKIPPED: Omitida -ui.facets.IndexedReport.successfulPlugins: Successful inner processes -ui.facets.IndexedReport.unsuccessfulPlugins: Unsuccessful inner processes -ui.facets.IndexedReport.instanceName: Instance +ui.facets.IndexedReport.successfulPlugins: Procesos internos exitosos +ui.facets.IndexedReport.unsuccessfulPlugins: Procesos internos fallidos +ui.facets.IndexedReport.instanceName: Instancia ui.facets.IndexedRepresentation.original: Original ui.facets.IndexedRepresentation.original.false: no ui.facets.IndexedRepresentation.original.true: si -ui.facets.IndexedRepresentation.representationStates: States +ui.facets.IndexedRepresentation.representationStates: Estados ui.facets.IndexedRepresentation.representationStates.ACCESS: Accesos -ui.facets.IndexedRepresentation.representationStates.INGESTED: Ingested +ui.facets.IndexedRepresentation.representationStates.INGESTED: Ingestado ui.facets.IndexedRepresentation.representationStates.ORIGINAL: Original -ui.facets.IndexedRepresentation.representationStates.PRESERVATION: Preservation -ui.facets.IndexedRepresentation.instanceName: Instance +ui.facets.IndexedRepresentation.representationStates.PRESERVATION: Preservación +ui.facets.IndexedRepresentation.instanceName: Instancia ui.facets.IndexedRepresentation.type: Tipo ui.facets.IndexedRisk.categories: Categoría @@ -196,62 +200,62 @@ ui.facets.IndexedRisk.posMitigationSeverityLevel.HIGH: Alta ui.facets.IndexedRisk.posMitigationSeverityLevel.LOW: Baja ui.facets.IndexedRisk.posMitigationSeverityLevel.MODERATE: Moderado -ui.facets.IndexedJob.pluginType: Job types +ui.facets.IndexedJob.pluginType: Tipos de proceso ui.facets.IndexedJob.pluginType.AIP_TO_AIP: AIP a AIP ui.facets.IndexedJob.pluginType.AIP_TO_SIP: AIP a SIP ui.facets.IndexedJob.pluginType.INGEST: Ingesta -ui.facets.IndexedJob.pluginType.INTERNAL: Internal +ui.facets.IndexedJob.pluginType.INTERNAL: Interno ui.facets.IndexedJob.pluginType.MISC: Misceláneos ui.facets.IndexedJob.pluginType.SIP_TO_AIP: SIP a AIP -ui.facets.IndexedJob.pluginType.MULTI: Multiple +ui.facets.IndexedJob.pluginType.MULTI: Múltiple ui.facets.IndexedJob.state: Estado ui.facets.IndexedJob.state.COMPLETED: Hecho ui.facets.IndexedJob.state.CREATED: esperando para comenzar ui.facets.IndexedJob.state.FAILED_DURING_CREATION: Falló inicio -ui.facets.IndexedJob.state.PENDING_APPROVAL:pending -ui.facets.IndexedJob.state.SCHEDULED:scheduled +ui.facets.IndexedJob.state.PENDING_APPROVAL:pendiente de aprobación +ui.facets.IndexedJob.state.SCHEDULED:programado ui.facets.IndexedJob.state.REJECTED:rechazado ui.facets.IndexedJob.state.FAILED_TO_COMPLETE: Falló ui.facets.IndexedJob.state.STARTED: ejecutando ui.facets.IndexedJob.state.STOPPED: Detenido ui.facets.IndexedJob.state.STOPPING: Parada ui.facets.IndexedJob.state.TO_BE_CLEANED: en mantenimiento -ui.facets.IndexedJob.username: Creators -ui.facets.IndexedJob.hasFailures: Failures -ui.facets.IndexedJob.hasFailures.true: with failures -ui.facets.IndexedJob.hasFailures.false: without failures -ui.facets.IndexedJob.hasPartialSuccess: Partial Success -ui.facets.IndexedJob.hasPartialSuccess.true: with partial success -ui.facets.IndexedJob.hasPartialSuccess.false: without partial success +ui.facets.IndexedJob.username: Creadores +ui.facets.IndexedJob.hasFailures: Fallos +ui.facets.IndexedJob.hasFailures.true: con fallos +ui.facets.IndexedJob.hasFailures.false: sin fallos +ui.facets.IndexedJob.hasPartialSuccess: Éxito parcial +ui.facets.IndexedJob.hasPartialSuccess.true: con éxito parcial +ui.facets.IndexedJob.hasPartialSuccess.false: sin éxito parcial ui.facets.IndexedJob.hasSkipped: Omitida -ui.facets.IndexedJob.hasSkipped.true: with skipped -ui.facets.IndexedJob.hasSkipped.false: without skipped -ui.facets.IndexedJob.instanceName: Instance +ui.facets.IndexedJob.hasSkipped.true: con omitidos +ui.facets.IndexedJob.hasSkipped.false: sin omitidos +ui.facets.IndexedJob.instanceName: Instancia -ui.facets.LogEntry.actionComponent: Components +ui.facets.LogEntry.actionComponent: Componentes # V2 ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.DisposalHoldController = Disposal holds ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.DisposalRuleController = Disposal rules ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.DisposalScheduleController = Disposal schedules ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.DisposalConfirmationController = Disposal confirmations ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.RiskController = Riesgos -ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.RiskIncidenceController = Risk Incidences +ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.RiskIncidenceController = Incidencias de riesgo ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.TransferredResourceController = Recursos transferidos -ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.services.IndexService = Index +ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.services.IndexService = Índice ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.PreservationEventController = Eventos de preservación ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.PreservationAgentController = Eventos de preservación ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.AIPController = AIPs ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.FilesController = Archivos ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.RepresentationController = Representaciones ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.RepresentationInformationController = Información de representación -ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.MembersController = Users & Groups -ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.ConfigurationController = Configurations +ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.MembersController = Usuarios y grupos +ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.ConfigurationController = Configuraciones ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.JobsController = Procesos -ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.NotificationController = Notifications -ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.MetricsController = Metrics -ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.ClassificationPlanController = Classification plan +ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.NotificationController = Notificaciones +ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.MetricsController = Métricas +ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.ClassificationPlanController = Plan de clasificación ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.DIPPlanController = DIPs -ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.DistributedInstances = Distributed instances +ui.facets.LogEntry.actionComponent.org.roda.wui.api.v2.controller.DistributedInstances = Instancias distribuidas @@ -268,41 +272,41 @@ ui.facets.LogEntry.actionComponent.org.roda.wui.api.v1.ManagementTasksResource: ui.facets.LogEntry.actionComponent.org.roda.wui.filter.CasWebAuthFilter: CAS Login (Before RODA 6) ui.facets.LogEntry.actionComponent.org.roda.wui.security.SecurityObserverImpl: Seguridad -ui.facets.LogEntry.actionMethod: Methods +ui.facets.LogEntry.actionMethod: Métodos ui.facets.LogEntry.state: Resultado ui.facets.LogEntry.state.FAILURE: Fracaso ui.facets.LogEntry.state.SUCCESS: Éxito ui.facets.LogEntry.state.UNAUTHORIZED: No autorizado ui.facets.LogEntry.state.UNKNOWN: {0} ui.facets.LogEntry.username: Nombre de usuario -ui.facets.LogEntry.instanceId: Instance +ui.facets.LogEntry.instanceId: Instancia ui.facets.Notification.isAcknowledged: Reconocido ui.facets.Notification.isAcknowledged.false: No reconocido ui.facets.Notification.isAcknowledged.true: Reconocido -ui.facets.Notification.recipientUsers: Recipient Users +ui.facets.Notification.recipientUsers: Usuarios destinatarios ui.facets.Notification.state: Estado ui.facets.Notification.state.COMPLETED: Éxito ui.facets.Notification.state.CREATED: Creado ui.facets.Notification.state.FAILED: Fracaso -ui.facets.RepresentationInformation.support: Support level -ui.facets.RepresentationInformation.support.KNOWN: Known +ui.facets.RepresentationInformation.support: Nivel de soporte +ui.facets.RepresentationInformation.support.KNOWN: Conocido ui.facets.RepresentationInformation.support.SUPPORTED: Soportado -ui.facets.RepresentationInformation.support.UNSUPPORTED: Unsupported -ui.facets.RepresentationInformation.tags: Tags -ui.facets.RepresentationInformation.family: Family -ui.facets.RepresentationInformation.family.fileformat: File format +ui.facets.RepresentationInformation.support.UNSUPPORTED: No soportado +ui.facets.RepresentationInformation.tags: Etiquetas +ui.facets.RepresentationInformation.family: Familia +ui.facets.RepresentationInformation.family.fileformat: Formato de archivo ui.facets.RepresentationInformation.family.software: Software -ui.facets.RepresentationInformation.family.organisation: Organisation -ui.facets.RepresentationInformation.family.data: Data +ui.facets.RepresentationInformation.family.organisation: Organización +ui.facets.RepresentationInformation.family.data: Datos ui.facets.RiskIncidence.mitigatedBy: Mitigado por ui.facets.RiskIncidence.detectedBy: Detectado por ui.facets.RiskIncidence.severity.HIGH: Alta ui.facets.RiskIncidence.severity.LOW: Baja ui.facets.RiskIncidence.severity.MODERATE: Moderado -ui.facets.RiskIncidence.status: Incidence status +ui.facets.RiskIncidence.status: Estado de incidencia ui.facets.RiskIncidence.status.ACCEPT_RISK: Riesgo aceptado ui.facets.RiskIncidence.status.FALSE_POSITIVE: Falso positivo ui.facets.RiskIncidence.status.MITIGATED: mitigado @@ -317,11 +321,11 @@ ui.facets.RODAMember.isUser.true: usuario ui.facets.RODAMember.groups: Grupos ui.facets.DisposalConfirmation.state: Estado -ui.facets.DisposalConfirmation.state.APPROVED: Approved -ui.facets.DisposalConfirmation.state.PENDING: Pending -ui.facets.DisposalConfirmation.state.RESTORED: Restored +ui.facets.DisposalConfirmation.state.APPROVED: Aprobado +ui.facets.DisposalConfirmation.state.PENDING: Pendiente +ui.facets.DisposalConfirmation.state.RESTORED: Restaurado ui.facets.DisposalConfirmation.state.PERMANENTLY_DELETED: Eliminado -ui.facets.DisposalConfirmation.state.EXECUTION_FAILED: Execution failed +ui.facets.DisposalConfirmation.state.EXECUTION_FAILED: Ejecución fallida ui.facets.DisposalConfirmation.createdBy: Creador ########################################## @@ -342,36 +346,36 @@ ui.browse.metadata.descriptive.type.key-value=Valor clave # dissemination: html (xslt, etc) ########################################## -crosswalks.dissemination.html.ead.creator=Creators -crosswalks.dissemination.html.ead.producer=Producer -crosswalks.dissemination.html.ead.publicationdate=Publication date +crosswalks.dissemination.html.ead.creator=Creadores +crosswalks.dissemination.html.ead.producer=Productor +crosswalks.dissemination.html.ead.publicationdate=Fecha de publicación crosswalks.dissemination.html.ead.custodialhistory=historial de custodia crosswalks.dissemination.html.ead.acquisitioninformation=Información de adquisición crosswalks.dissemination.html.ead.acquisitionnumber=Número de adquisición crosswalks.dissemination.html.ead.acquistiondate=Fecha adquisición -crosswalks.dissemination.html.ead.contentarea=Content and structure +crosswalks.dissemination.html.ead.contentarea=Contenido y estructura crosswalks.dissemination.html.ead.description=Descripción -crosswalks.dissemination.html.ead.accessarea=Conditions of access and use +crosswalks.dissemination.html.ead.accessarea=Condiciones de acceso y uso crosswalks.dissemination.html.ead.accessrestrictions=Restricción de acceso crosswalks.dissemination.html.ead.languageScriptNotes=Lenguaje crosswalks.dissemination.html.ead.languages=Lenguaje (controlada) crosswalks.dissemination.html.ead.phystech=Características físicas y requisitos técnicos crosswalks.dissemination.html.ead.otherfindaids=Otras ayudas AIDS -crosswalks.dissemination.html.ead.alliedarea=Allied materials +crosswalks.dissemination.html.ead.alliedarea=Materiales relacionados crosswalks.dissemination.html.ead.relatedmaterials=Materiales relacionados -crosswalks.dissemination.html.ead.oddarea=Other description metadata -crosswalks.dissemination.html.ead.accesspointarea=Access points -crosswalks.dissemination.html.ead.nameaccesspoint=Name access point -crosswalks.dissemination.html.ead.subjectaccesspoint=Subject access point -crosswalks.dissemination.html.ead.placeaccesspoint=Place access point -crosswalks.dissemination.html.ead.descriptionidentifier=Description identifier -crosswalks.dissemination.html.ead.institutionidentifier=Institution identifier -crosswalks.dissemination.html.ead.rules=Rules -crosswalks.dissemination.html.ead.statusdescription=Status of description -crosswalks.dissemination.html.ead.levelofdetail=Level of detail -crosswalks.dissemination.html.ead.processdates=Date of creation or revision -crosswalks.dissemination.html.ead.sources=Sources -crosswalks.dissemination.html.ead.archivistNotes=Archivist notes +crosswalks.dissemination.html.ead.oddarea=Otros metadatos descriptivos +crosswalks.dissemination.html.ead.accesspointarea=Puntos de acceso +crosswalks.dissemination.html.ead.nameaccesspoint=Punto de acceso por nombre +crosswalks.dissemination.html.ead.subjectaccesspoint=Punto de acceso por materia +crosswalks.dissemination.html.ead.placeaccesspoint=Punto de acceso por lugar +crosswalks.dissemination.html.ead.descriptionidentifier=Identificador de descripción +crosswalks.dissemination.html.ead.institutionidentifier=Identificador de institución +crosswalks.dissemination.html.ead.rules=Reglas +crosswalks.dissemination.html.ead.statusdescription=Estado de descripción +crosswalks.dissemination.html.ead.levelofdetail=Nivel de detalle +crosswalks.dissemination.html.ead.processdates=Fecha de creación o revisión +crosswalks.dissemination.html.ead.sources=Fuentes +crosswalks.dissemination.html.ead.archivistNotes=Notas del archivero crosswalks.dissemination.html.ead.materialspecification=Especificación de material crosswalks.dissemination.html.ead.physicaldescription=Descripción física crosswalks.dissemination.html.ead.administrativeandbiographicalhistory=Historia administrativa y biográfica @@ -391,19 +395,19 @@ crosswalks.dissemination.html.ead.origination=Origen crosswalks.dissemination.html.ead.dateofinitialphysicaldescription=Fecha de inicio de descripción física crosswalks.dissemination.html.ead.dateoffinalphysicaldescription=Fecha de final de descripción física crosswalks.dissemination.html.ead.materialspec=Especificación de material -crosswalks.dissemination.html.ead.physfacet=Physical facet -crosswalks.dissemination.html.ead.levelofdetail.full=Full -crosswalks.dissemination.html.ead.levelofdetail.partial=Partial -crosswalks.dissemination.html.ead.levelofdetail.minimal=Minimal +crosswalks.dissemination.html.ead.physfacet=Faceta física +crosswalks.dissemination.html.ead.levelofdetail.full=Completo +crosswalks.dissemination.html.ead.levelofdetail.partial=Parcial +crosswalks.dissemination.html.ead.levelofdetail.minimal=Mínimo crosswalks.dissemination.html.ead.statusdescription.final=Final -crosswalks.dissemination.html.ead.statusdescription.revised=Revised -crosswalks.dissemination.html.ead.statusdescription.draft=Draft -crosswalks.dissemination.html.ead.identityarea=Identity +crosswalks.dissemination.html.ead.statusdescription.revised=Revisado +crosswalks.dissemination.html.ead.statusdescription.draft=Borrador +crosswalks.dissemination.html.ead.identityarea=Identidad crosswalks.dissemination.html.ead.level=Nivel -crosswalks.dissemination.html.ead.otherlevel=Other level +crosswalks.dissemination.html.ead.otherlevel=Otro nivel crosswalks.dissemination.html.ead.reference=Referencia crosswalks.dissemination.html.ead.repositorycode=Código del repositorio -crosswalks.dissemination.html.ead.countrycode=Country code +crosswalks.dissemination.html.ead.countrycode=Código de país crosswalks.dissemination.html.ead.title=Titulo crosswalks.dissemination.html.ead.titletype=Tipo del titulo crosswalks.dissemination.html.ead.repository=Repositorio @@ -412,51 +416,51 @@ crosswalks.dissemination.html.ead.finaldate=Fecha final crosswalks.dissemination.html.ead.unitdate=Fecha crosswalks.dissemination.html.ead.dimensions=Dimensiones crosswalks.dissemination.html.ead.extent=Extensión -crosswalks.dissemination.html.ead.contextarea=Context +crosswalks.dissemination.html.ead.contextarea=Contexto #crosswalks.dissemination.html.ead.author=Author -crosswalks.dissemination.html.ead.bioghist=Biography or history -crosswalks.dissemination.html.ead.geogname=Geographic name -crosswalks.dissemination.html.ead.legalstatus=Legal status +crosswalks.dissemination.html.ead.bioghist=Biografía o historia +crosswalks.dissemination.html.ead.geogname=Nombre geográfico +crosswalks.dissemination.html.ead.legalstatus=Estatus legal crosswalks.dissemination.html.ead.custodhist=historial de custodia crosswalks.dissemination.html.ead.acqinfo=Información de adquisición -crosswalks.dissemination.html.ead.contentstructurearea=Content and structure +crosswalks.dissemination.html.ead.contentstructurearea=Contenido y estructura crosswalks.dissemination.html.ead.scopecontent=Descripción crosswalks.dissemination.html.ead.appraisal=Evaluación crosswalks.dissemination.html.ead.accruals=Acumulativos -crosswalks.dissemination.html.ead.arrangement=System of arrangement -crosswalks.dissemination.html.ead.useaccessarea=Access and use +crosswalks.dissemination.html.ead.arrangement=Sistema de ordenación +crosswalks.dissemination.html.ead.useaccessarea=Acceso y uso crosswalks.dissemination.html.ead.accessrestrict=Restricción de acceso crosswalks.dissemination.html.ead.userestrict=Uso restrito -crosswalks.dissemination.html.ead.physloc=Physical location -crosswalks.dissemination.html.ead.langmaterial=Language of the material -crosswalks.dissemination.html.ead.alliedmaterialarea=Associated documentation +crosswalks.dissemination.html.ead.physloc=Ubicación física +crosswalks.dissemination.html.ead.langmaterial=Idioma del material +crosswalks.dissemination.html.ead.alliedmaterialarea=Documentación asociada crosswalks.dissemination.html.ead.originalsloc=Localizaciones originales crosswalks.dissemination.html.ead.altformavail=Formas alternativas disponíbles crosswalks.dissemination.html.ead.bibliography=Bibliografía crosswalks.dissemination.html.ead.notesarea=Notas crosswalks.dissemination.html.ead.notes=Notas -crosswalks.dissemination.html.ead.descriptioncontrolarea=Description control -crosswalks.dissemination.html.ead.processinfo=Arquivist notes -crosswalks.dissemination.html.ead.level.AG=Aggregation +crosswalks.dissemination.html.ead.descriptioncontrolarea=Control de descripción +crosswalks.dissemination.html.ead.processinfo=Notas del archivero +crosswalks.dissemination.html.ead.level.AG=Agregación crosswalks.dissemination.html.ead.level.C=Coleção crosswalks.dissemination.html.ead.level.CL=Coleção crosswalks.dissemination.html.ead.level.D=Item crosswalks.dissemination.html.ead.level.DC=Archivo crosswalks.dissemination.html.ead.level.F=Fonds -crosswalks.dissemination.html.ead.level.P=Producer -crosswalks.dissemination.html.ead.level.SC=Section -crosswalks.dissemination.html.ead.level.SCL=Subcollection +crosswalks.dissemination.html.ead.level.P=Productor +crosswalks.dissemination.html.ead.level.SC=Sección +crosswalks.dissemination.html.ead.level.SCL=Subcolección crosswalks.dissemination.html.ead.level.SF=Subfonds crosswalks.dissemination.html.ead.level.SR=Série -crosswalks.dissemination.html.ead.level.SSC=Subsection -crosswalks.dissemination.html.ead.level.SSCL=Subsubcollection -crosswalks.dissemination.html.ead.level.SSF=Subsubfonds +crosswalks.dissemination.html.ead.level.SSC=Subsección +crosswalks.dissemination.html.ead.level.SSCL=Sub-subcolección +crosswalks.dissemination.html.ead.level.SSF=Sub-subfonds crosswalks.dissemination.html.ead.level.SSR=Subsérie -crosswalks.dissemination.html.ead.level.SSSC=Subsubsection -crosswalks.dissemination.html.ead.level.SSSR=Subsubseries -crosswalks.dissemination.html.ead.level.SSUI=Subsubcontainers -crosswalks.dissemination.html.ead.level.SUI=Subcontainer -crosswalks.dissemination.html.ead.level.UI=Installation unit +crosswalks.dissemination.html.ead.level.SSSC=Sub-subsección +crosswalks.dissemination.html.ead.level.SSSR=Sub-subsérie +crosswalks.dissemination.html.ead.level.SSUI=Sub-subcontenedores +crosswalks.dissemination.html.ead.level.SUI=Subcontenedor +crosswalks.dissemination.html.ead.level.UI=Unidad de instalación crosswalks.dissemination.html.ead.level.DS=Item crosswalks.dissemination.html.ead_3.title=Titulo @@ -552,8 +556,8 @@ crosswalks.dissemination.html.dc_simpledc20021212.source=Fuente crosswalks.dissemination.html.dc_simpledc20021212.subject=Asunto crosswalks.dissemination.html.dc_simpledc20021212.type=Tipo -crosswalks.dissemination.html.event.identifierType: Identifier type -crosswalks.dissemination.html.event.identifierValue: Identifier value +crosswalks.dissemination.html.event.identifierType: Tipo de identificador +crosswalks.dissemination.html.event.identifierValue: Valor del identificador crosswalks.dissemination.html.event.dateTime: Fecha crosswalks.dissemination.html.event.outcome: Resultado crosswalks.dissemination.html.event.type: Tipo @@ -565,9 +569,9 @@ crosswalks.dissemination.html.event.outcomeDetailExtension: Extensión # Representation information families ########################################## ri.family.software: Software -ri.family.fileformat: File format -ri.family.organisation: Organisation -ri.family.data: Data +ri.family.fileformat: Formato de archivo +ri.family.organisation: Organización +ri.family.data: Datos ########################################## # Representation information extra fields @@ -576,56 +580,56 @@ ri.data.notes: Notas ri.data.general: General ri.data.history: Historia -ri.data.dataDescription: Data description -ri.data.strutureInformation: Structure information -ri.data.semanticInformation: Semantic information +ri.data.dataDescription: Descripción de datos +ri.data.strutureInformation: Información de estructura +ri.data.semanticInformation: Información semántica -ri.data.organisationCategory: Organisation category -ri.data.organisationDesignation: Organisation designation +ri.data.organisationCategory: Categoría de organización +ri.data.organisationDesignation: Designación de organización ri.data.country: País -ri.data.headquarters: Headquarters +ri.data.headquarters: Sede central ri.data.website: Sitio web -ri.data.servedArea: Served area +ri.data.servedArea: Área de servicio ri.data.services: Servicios -ri.data.sustainabilityFactors: Sustainability factors -ri.data.dateOfEstablishment: Date of establishment -ri.data.numberOfEmployees: Number of employees -ri.data.revenue: Anual revenue -ri.data.operatingCosts: Anual operational costs -ri.data.netWorth: Net worth - -ri.data.formatDescription: Format description -ri.data.formatCategory: Format category -ri.data.formatDesignation: Format designation +ri.data.sustainabilityFactors: Factores de sostenibilidad +ri.data.dateOfEstablishment: Fecha de fundación +ri.data.numberOfEmployees: Número de empleados +ri.data.revenue: Ingresos anuales +ri.data.operatingCosts: Costes operativos anuales +ri.data.netWorth: Patrimonio neto + +ri.data.formatDescription: Descripción del formato +ri.data.formatCategory: Categoría del formato +ri.data.formatDesignation: Designación del formato ri.data.version: Versión -ri.data.disclosure: Disclosure -ri.data.documentation: Documentation -ri.data.adoption: Adoption -ri.data.licensingAndPatents: Licensing and patents -ri.data.transparency: Transparency -ri.data.selfdocumentation: Self-documentation -ri.data.externalDependencies: External dependencies -ri.data.technicalProtectionConsiderations: Content technical protection considerations (i.e DRM) -ri.data.formatCharacteristics: Format characteristics -ri.data.relevantCharacteristics: Other relevant characteristics -ri.data.functionalityBeyondNormalRendering: Functionality beyond normal rendering -ri.data.formatIdentifiers: Format identifiers +ri.data.disclosure: Divulgación +ri.data.documentation: Documentación +ri.data.adoption: Adopción +ri.data.licensingAndPatents: Licencias y patentes +ri.data.transparency: Transparencia +ri.data.selfdocumentation: Autodocumentación +ri.data.externalDependencies: Dependencias externas +ri.data.technicalProtectionConsiderations: Consideraciones de protección técnica del contenido (p. ej. DRM) +ri.data.formatCharacteristics: Características del formato +ri.data.relevantCharacteristics: Otras características relevantes +ri.data.functionalityBeyondNormalRendering: Funcionalidad más allá del renderizado normal +ri.data.formatIdentifiers: Identificadores del formato ri.data.filenameExtension: Extensión ri.data.internetMediaType: Mimetype ri.data.pronomPUID: Pronom PUID -ri.data.softwareDescription: Software description -ri.data.softwareCategory: Software category -ri.data.softwareDesignation: Software designation -ri.data.softwareHistory: Software history -ri.data.platforms: Platforms/Operative system -ri.data.softwareCharacteristics: Software characteristics +ri.data.softwareDescription: Descripción del software +ri.data.softwareCategory: Categoría del software +ri.data.softwareDesignation: Designación del software +ri.data.softwareHistory: Historia del software +ri.data.platforms: Plataformas/Sistema operativo +ri.data.softwareCharacteristics: Características del software ########################################## # Upload errors ########################################## -ui.upload.error.alreadyexists=The file already exists! +ui.upload.error.alreadyexists=¡El archivo ya existe! ########################################## # Appraisal @@ -657,13 +661,13 @@ level.noneselected = Ninguna seleccionada email.verification.subject = Registro en RODA email.verification.from = Administrador do RODA email.recoverlogin.subject = Recuperar entrada en RODA -email.setpassword.subject = Set RODA password +email.setpassword.subject = Establecer contraseña de RODA email.recoverlogin.from = Administrador do RODA ########################################## # Objects ########################################## -lists.label.BrowseAIP_aipChildren.single: sublevel -lists.label.BrowseAIP_aipChildren.multiple: sublevels -lists.label.BrowseAIPPortal_aipChildren.single: sublevel -lists.label.BrowseAIPPortal_aipChildren.multiple: sublevels +lists.label.BrowseAIP_aipChildren.single: subnivel +lists.label.BrowseAIP_aipChildren.multiple: subniveles +lists.label.BrowseAIPPortal_aipChildren.single: subnivel +lists.label.BrowseAIPPortal_aipChildren.multiple: subniveles diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_es_CL.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_es_CL.properties index e807704fc7..cea018d6c3 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_es_CL.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_es_CL.properties @@ -339,3 +339,7 @@ email.verification.subject = Registro en RODA email.verification.from = Administrador do RODA email.recoverlogin.subject = Recuperar entrada en RODA email.recoverlogin.from = Administrador do RODA + +ui.facets.IndexedAIP.sender_s: Remitente +ui.catalogue.virtual.Search_emailarchive.label: Buscar Archivo de Email +ui.catalogue.virtual.Search_emails.label: Buscar Correos electrónicos diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_hr.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_hr.properties index e630649e2e..c93d9fb2f4 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_hr.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_hr.properties @@ -137,6 +137,10 @@ ui.facets.IndexedAIP.level.other: Ostalo ui.facets.IndexedAIP.level.series: Niz ui.facets.IndexedAIP.disposalScheduleName: Raspored izlučivanja ui.facets.IndexedAIP.destroyedBy: Uništio +ui.facets.IndexedAIP.sender_s: Pošiljatelj + +ui.catalogue.virtual.Search_emailarchive.label: Pretraži Email arhivu +ui.catalogue.virtual.Search_emails.label: Pretraži elektroničku poštu ui.facets.IndexedFile.fileFormat: Formati ui.facets.IndexedFile.formatPronom: PRONOM ID-ovi diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_hu.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_hu.properties index 9926d9b966..6bb5151aa2 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_hu.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_hu.properties @@ -141,6 +141,10 @@ ui.facets.IndexedAIP.level.series: Sorozat ui.facets.IndexedAIP.disposalScheduleName: Eltávolítási ütemterv ui.facets.IndexedAIP.destroyedBy: Destroyed by ui.facets.IndexedAIP.instanceName: Példa +ui.facets.IndexedAIP.sender_s: Feladó + +ui.catalogue.virtual.Search_emailarchive.label: Email Archívum keresése +ui.catalogue.virtual.Search_emails.label: Email keresése ui.facets.IndexedFile.fileFormat: Formátumok ui.facets.IndexedFile.formatPronom: PRONOM azonosítók diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_pt_BR.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_pt_BR.properties index da2d641f1f..3602a49481 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_pt_BR.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_pt_BR.properties @@ -141,6 +141,10 @@ ui.facets.IndexedAIP.level.series: Série ui.facets.IndexedAIP.disposalScheduleName: Tabela de seleção ui.facets.IndexedAIP.destroyedBy: Eliminado por ui.facets.IndexedAIP.instanceName: Instância +ui.facets.IndexedAIP.sender_s: Remetente + +ui.catalogue.virtual.Search_emailarchive.label: Pesquisar Arquivo de Email +ui.catalogue.virtual.Search_emails.label: Pesquisar Emails ui.facets.IndexedFile.fileFormat: Formatos ui.facets.IndexedFile.formatPronom: PRONOM IDs diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_pt_PT.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_pt_PT.properties index 7fef8a4fee..4d2d7390da 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_pt_PT.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_pt_PT.properties @@ -141,6 +141,10 @@ ui.facets.IndexedAIP.level.series: Série ui.facets.IndexedAIP.disposalScheduleName: Tabela de seleção ui.facets.IndexedAIP.destroyedBy: Eliminado por ui.facets.IndexedAIP.instanceName: Instância +ui.facets.IndexedAIP.sender_s: Remetente + +ui.catalogue.virtual.Search_emailarchive.label: Pesquisar Arquivo de Email +ui.catalogue.virtual.Search_emails.label: Pesquisar Emails ui.facets.IndexedFile.fileFormat: Formatos ui.facets.IndexedFile.formatPronom: PRONOM IDs diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_sv_SE.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_sv_SE.properties index d95c0dfc09..5c1581ae40 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_sv_SE.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_sv_SE.properties @@ -141,6 +141,10 @@ ui.facets.IndexedAIP.level.series: Serie ui.facets.IndexedAIP.disposalScheduleName: Gallringsschema ui.facets.IndexedAIP.destroyedBy: Gallrad av ui.facets.IndexedAIP.instanceName: Instans +ui.facets.IndexedAIP.sender_s: Avsändare + +ui.catalogue.virtual.Search_emailarchive.label: Sök E-postarkiv +ui.catalogue.virtual.Search_emails.label: Sök E-postmeddelanden ui.facets.IndexedFile.fileFormat: Format ui.facets.IndexedFile.formatPronom: PRONOM IDs diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_de_AT.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_de_AT.properties index 4203bcf7b6..eb7cae2997 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_de_AT.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_de_AT.properties @@ -263,6 +263,7 @@ oneOfAObject[org.roda.core.data.v2.disposal.hold.DisposalHold]:Entsorgungssperre oneOfAObject[org.roda.core.data.v2.disposal.confirmation.DisposalConfirmation]:Entsorgungsbestätigung oneOfAObject[org.roda.core.data.v2.disposal.rule.DisposalRule]:Entsorgungsregel selected[\=1]:{0,number} {1} ausgewählt +selected[one]:{0,number} {1} ausgewählt selected:{0,number} {1} ausgewählt inspectTransferredResource:Übertragene Ressource untersuchen identifierNotFound:Indentifikator (nicht gefunden) @@ -841,12 +842,15 @@ representationInformationEditAssociations:Assoziationen bearbeiten representationInformationIntellectualEntities:Es sind {0,number} intellektuellen Entitäten mit dieser Repräsentationsinformation verknüpft representationInformationIntellectualEntities[\=0]:Es gibt keine intellektuellen Entitäten, die mit dieser Repräsentationsinformartion verknüpft sind representationInformationIntellectualEntities[\=1]:Es ist eine intellektuelle Entität mit dieser Repräsentationsinformation verknüpft +representationInformationIntellectualEntities[one]:Es ist eine intellektuelle Entität mit dieser Repräsentationsinformation verknüpft representationInformationRepresentations:Es sind {0,number} Repräsentationen mit dieser Repräsentationsinformation verknüpft representationInformationRepresentations[\=0]:Es gibt keine Repräsentationen, die mit dieser Repräsentationsinformartion verknüpft sind representationInformationRepresentations[\=1]:Es ist eine Repräsentation mit dieser Repräsentationsinformation verknüpft +representationInformationRepresentations[one]:Es ist eine Repräsentation mit dieser Repräsentationsinformation verknüpft representationInformationFiles:Es sind {0,number} Dateien mit dieser Repräsentationsinformation verknüpft representationInformationFiles[\=0]:Es gibt keine Dateien, die mit dieser Repräsentationsinformartion verknüpft sind representationInformationFiles[\=1]:Es ist eine Datei mit dieser Repräsentationsinformation verknüpft +representationInformationFiles[one]:Es ist eine Datei mit dieser Repräsentationsinformation verknüpft # Descriptive Metadata metadataType:Typ @@ -1518,6 +1522,7 @@ clearDisposalHoldDialogMessage[one]:Sind Sie sicher, dass Sie alle Entsorgungssp clearDisposalHoldDialogMessage:Sind Sie sicher, dass Sie alle Entsorgungssperren auf die ausgewählten {0, number} Elemente aufheben möchten? liftDisposalHoldDialogTitle:Kassationsperre aufheben liftDisposalHoldDialogMessage[\=1]:Sind Sie sicher, dass Sie die Kassationsperre aufheben wollen? +liftDisposalHoldDialogMessage[one]:Sind Sie sicher, dass Sie die Kassationsperre aufheben wollen? liftDisposalHoldDialogMessage:Sind Sie sicher, dass Sie die {0, Zahl} ausgewählten Kassationsperren aufheben wollen? disassociateDisposalHoldDialogTitle:Entsorgungssperre aufheben disassociateDisposalHoldDialogMessage[one]:Sind Sie sicher, dass Sie die Entsorgungssperre auf das ausgewählte Element aufheben möchten? @@ -1529,6 +1534,7 @@ disposalHoldAssociatedOn:Verbunden am disposalHoldAssociatedBy:Verbunden von disposalHoldAssociatedFrom:Verbunden von disposalHoldAssociatedFromValue[\=1]:{0} AIP +disposalHoldAssociatedFromValue[one]:{0} AIP disposalHoldAssociatedFromValue:{0} AIPs disposalScheduleAssociationInformationTitle:Aufbewahrugsfrist disposalScheduleAssociationTitle:Entsorgungsplan @@ -1559,12 +1565,16 @@ disposalPolicyRetainPermanently:Dauerhaft erhalten disposalPolicyDestroyedAIPSummary:Vernichtet am {0} retentionPeriod:{0} retentionPeriod[\=1|DAYS]:1 Tag +retentionPeriod[one|DAYS]:1 Tag retentionPeriod[other|DAYS]:{0,number} Tage retentionPeriod[\=1|WEEKS]:1 Woche +retentionPeriod[one|WEEKS]:1 Woche retentionPeriod[other|WEEKS]:{0,number} Wochen retentionPeriod[\=1|MONTHS]:1 Monat +retentionPeriod[one|MONTHS]:1 Monat retentionPeriod[other|MONTHS]:{0,number} Monate retentionPeriod[\=1|YEARS]:1 Jahr +retentionPeriod[one|YEARS]:1 Jahr retentionPeriod[other|YEARS]:{0,number} Jahre retentionPeriod[other|NO_RETENTION_PERIOD]:Keine Aufbewahrugsfrist permanentlyDeleteConfirmDialogTitle:Datensätze dauerhaft aus dem Papierkorb löschen diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_de_DE.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_de_DE.properties index 58308e8e32..93ec52c6e6 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_de_DE.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_de_DE.properties @@ -263,6 +263,7 @@ oneOfAObject[org.roda.core.data.v2.disposal.hold.DisposalHold]:Kassationssperre oneOfAObject[org.roda.core.data.v2.disposal.confirmation.DisposalConfirmation]:Kassationsbestätigung oneOfAObject[org.roda.core.data.v2.disposal.rule.DisposalRule]:Kassationsregel selected[\=1]:{0,number} {1} ausgewählt +selected[one]:{0,number} {1} ausgewählt selected:{0,number} {1} ausgewählt inspectTransferredResource:Übertragene Ressource untersuchen identifierNotFound:Indentifikator (nicht gefunden) @@ -841,12 +842,15 @@ representationInformationEditAssociations:Assoziationen bearbeiten representationInformationIntellectualEntities:Es sind {0,number} intellektuellen Entitäten mit dieser Repräsentationsinformation verknüpft representationInformationIntellectualEntities[\=0]:Es gibt keine intellektuellen Entitäten, die mit dieser Repräsentationsinformartion verknüpft sind representationInformationIntellectualEntities[\=1]:Es ist eine intellektuelle Entität mit dieser Repräsentationsinformation verknüpft +representationInformationIntellectualEntities[one]:Es ist eine intellektuelle Entität mit dieser Repräsentationsinformation verknüpft representationInformationRepresentations:Es sind {0,number} Repräsentationen mit dieser Repräsentationsinformation verknüpft representationInformationRepresentations[\=0]:Es gibt keine Repräsentationen, die mit dieser Repräsentationsinformartion verknüpft sind representationInformationRepresentations[\=1]:Es ist eine Repräsentation mit dieser Repräsentationsinformation verknüpft +representationInformationRepresentations[one]:Es ist eine Repräsentation mit dieser Repräsentationsinformation verknüpft representationInformationFiles:Es sind {0,number} Dateien mit dieser Repräsentationsinformation verknüpft representationInformationFiles[\=0]:Es gibt keine Dateien, die mit dieser Repräsentationsinformartion verknüpft sind representationInformationFiles[\=1]:Es ist eine Datei mit dieser Repräsentationsinformation verknüpft +representationInformationFiles[one]:Es ist eine Datei mit dieser Repräsentationsinformation verknüpft # Descriptive Metadata metadataType:Typ @@ -1518,6 +1522,7 @@ clearDisposalHoldDialogMessage[one]:Sind Sie sicher, dass Sie alle Kassationsspe clearDisposalHoldDialogMessage:Sind Sie sicher, dass Sie alle Kassationssperren für die ausgewählten {0, number} Elemente aufheben möchten? liftDisposalHoldDialogTitle:Kassationsperre aufheben liftDisposalHoldDialogMessage[\=1]:Sind Sie sicher, dass Sie die Kassationsperre aufheben wollen? +liftDisposalHoldDialogMessage[one]:Sind Sie sicher, dass Sie die Kassationsperre aufheben wollen? liftDisposalHoldDialogMessage:Sind Sie sicher, dass Sie die {0, Zahl} ausgewählten Kassationsperren aufheben wollen? disassociateDisposalHoldDialogTitle:Kassationssperre aufheben disassociateDisposalHoldDialogMessage[one]:Sind Sie sicher, dass Sie die Kassationssperre für das ausgewählte Element aufheben möchten? @@ -1529,6 +1534,7 @@ disposalHoldAssociatedOn:Assoziiert am disposalHoldAssociatedBy:Assoziiert druch disposalHoldAssociatedFrom:Assoziiert von disposalHoldAssociatedFromValue[\=1]:{0} AIP +disposalHoldAssociatedFromValue[one]:{0} AIP disposalHoldAssociatedFromValue:{0} AIPs disposalScheduleAssociationInformationTitle:Aufbewahrugsfrist disposalScheduleAssociationTitle:Kassationsplan @@ -1559,12 +1565,16 @@ disposalPolicyRetainPermanently:Dauerhaft erhalten disposalPolicyDestroyedAIPSummary:Vernichtet am {0} retentionPeriod:{0} retentionPeriod[\=1|DAYS]:1 Tag +retentionPeriod[one|DAYS]:1 Tag retentionPeriod[other|DAYS]:{0,number} Tage retentionPeriod[\=1|WEEKS]:1 Woche +retentionPeriod[one|WEEKS]:1 Woche retentionPeriod[other|WEEKS]:{0,number} Wochen retentionPeriod[\=1|MONTHS]:1 Monat +retentionPeriod[one|MONTHS]:1 Monat retentionPeriod[other|MONTHS]:{0,number} Monate retentionPeriod[\=1|YEARS]:1 Jahr +retentionPeriod[one|YEARS]:1 Jahr retentionPeriod[other|YEARS]:{0,number} Jahre retentionPeriod[other|NO_RETENTION_PERIOD]:Keine Aufbewahrugsfrist permanentlyDeleteConfirmDialogTitle:Datensätze dauerhaft aus dem Papierkorb löschen diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_es.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_es.properties index 16ea5b2a27..b6150334df 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_es.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_es.properties @@ -1,16 +1,16 @@ moveNoSuchObject:No se puede mover el elemento porque el destino no se encuentra en el repositorio. Detalles\: {0} of:de -ofOver:of over -and:and +ofOver:de más de +and:y # Titles genericTitle:Titulo processTitle:Procesos reportTitle:Informe de procesamiento de paquete de información ingestAppraisalTitle:Evaluación de la Ingesta riskHistoryTitle:Historial de Riesgos -editIncidenceTitle:Edit risk incidence -editIncidencesTitle:Edit risk incidences -showRiskIncidenceTitle:Risk incidence +editIncidenceTitle:Editar incidencia de riesgo +editIncidencesTitle:Editar incidencias de riesgo +showRiskIncidenceTitle:Incidencia de riesgo createRepresentationInformationTitle:Crear información de representación editRepresentationInformationTitle:Editar información de representación showRepresentationInformationTitle:Información de representación @@ -26,123 +26,123 @@ catalogueItemTitle:Entidades intelectuales catalogueRepresentationTitle:Representación catalogueFileTitle:Archivo catalogueDIPTitle:Diseminación -preservationActionsTitle:Preservation actions -ingestProcessTitle:Ingest process -internalProcessTitle:Internal actions +preservationActionsTitle:Acciones de preservación +ingestProcessTitle:Proceso de ingesta +internalProcessTitle:Acciones internas loginTitle:Usuario searchTitle:Buscar -activityLogTitle:Audit logs -showLogEntryTitle:Audit log -notificationsTitle:Notification logs -notificationTitle:Notification log -usersAndGroupsTitle:Users and groups +activityLogTitle:Registros de auditoría +showLogEntryTitle:Registro de auditoría +notificationsTitle:Registros de notificaciones +notificationTitle:Registro de notificaciones +usersAndGroupsTitle:Usuarios y grupos usersAndGroupsSearchPlaceHolder:Buscar usuarios y grupos... logsTitle:Logs changeTypeTitle:Cambiar tipo changeStatusTitle:Cambiar Estado -changeStatusSuccessful:Status changed successfully +changeStatusSuccessful:Estado cambiado correctamente statusLabel:{0} statusLabel[ORIGINAL]:Original -statusLabel[INGESTED]:Ingested +statusLabel[INGESTED]:Ingestado statusLabel[ACCESS]:Accesos -statusLabel[PRESERVATION]:Preservation +statusLabel[PRESERVATION]:Preservación tikaTitles:{0} -tikaTitles[tika_pdf_num3DAnnotations_txt]:Number of 3d Annotations -tikaTitles[tika_pdf_PDFVersion_txt]:Pdf version -tikaTitles[tika_access_permission_can_print_degraded_txt]:Permission to print degraded text -tikaTitles[tika_access_permission_extract_for_accessibility_txt]:Permission to extract for accessibility text -tikaTitles[tika_xmpTPg_NPages_txt]:Number of pages -tikaTitles[tika_pdf_totalUnmappedUnicodeChars_txt]:Number of unmapped unicode characters -tikaTitles[tika_pdf_hasXFA_txt]:Has XFA -tikaTitles[tika_pdf_hasXMP_txt]:Has XMP -tikaTitles[tika_access_permission_extract_content_txt]:Permission to extract content -tikaTitles[tika_access_permission_can_print_txt]:Permission to print -tikaTitles[tika_pdf_overallPercentageUnmappedUnicodeChars_txt]:Overall percentage of unmapped unicode characters -tikaTitles[tika_X-TIKA_Parsed-By_txt]:Tika parsed by -tikaTitles[tika_pdf_docinfo_created_txt]:Document info creation date -tikaTitles[tika_access_permission_modify_annotations_txt]:Permission to modify annotations -tikaTitles[tika_pdf_hasMarkedContent_txt]:Has marked content -tikaTitles[tika_xmp_CreatorTool_txt]:Creator tool -tikaTitles[tika_Content-Type_txt]:Content type -tikaTitles[tika_X-TIKA_Parsed-By-Full-Set_txt]:Parsed by -tikaTitles[tika_pdf_encrypted_txt]:Encrypted -tikaTitles[tika_access_permission_can_modify_txt]: Permission to modify -tikaTitles[tika_pdf_docinfo_creator_tool_txt]:Document info creator tool -tikaTitles[tika_pdf_containsNonEmbeddedFont_txt]:Contains non embedded font -tikaTitles[tika_access_permission_fill_in_form_txt]:Permission to fill in form -tikaTitles[tika_pdf_containsDamagedFont_txt]:Contains damaged font -tikaTitles[tika_dc_format_txt]:DC format -tikaTitles[tika_pdf_charsPerPage_txt]:Characters per page -tikaTitles[tika_pdf_docinfo_producer_txt]:Document info producer -tikaTitles[tika_pdf_hasCollection_txt]:Has collection -tikaTitles[tika_access_permission_assemble_document_txt]:Permission to assemble document -tikaTitles[tika_pdf_producer_txt]:Producer -tikaTitles[tika_pdf_unmappedUnicodeCharsPerPage_txt]:Unmapped unicode characters per page -tikaTitles[tika_dcterms_created_txt]:Terms creation date -tikaTitles[tika_tEXt_tEXtEntry_txt]:Text Entry -tikaTitles[tika_Dimension_PixelAspectRatio_txt]:Pixel aspect ratio dimensions -tikaTitles[tika_Data_PlanarConfiguration_txt]:Data planar configuration -tikaTitles[tika_Transparency_Alpha_txt]:Transpericy alpha +tikaTitles[tika_pdf_num3DAnnotations_txt]:Número de anotaciones 3D +tikaTitles[tika_pdf_PDFVersion_txt]:Versión PDF +tikaTitles[tika_access_permission_can_print_degraded_txt]:Permiso para imprimir con calidad reducida +tikaTitles[tika_access_permission_extract_for_accessibility_txt]:Permiso para extraer contenido con fines de accesibilidad +tikaTitles[tika_xmpTPg_NPages_txt]:Número de páginas +tikaTitles[tika_pdf_totalUnmappedUnicodeChars_txt]:Número total de caracteres Unicode sin asignar +tikaTitles[tika_pdf_hasXFA_txt]:Tiene XFA +tikaTitles[tika_pdf_hasXMP_txt]:Tiene XMP +tikaTitles[tika_access_permission_extract_content_txt]:Permiso para extraer contenido +tikaTitles[tika_access_permission_can_print_txt]:Permiso para imprimir +tikaTitles[tika_pdf_overallPercentageUnmappedUnicodeChars_txt]:Porcentaje global de caracteres Unicode sin asignar +tikaTitles[tika_X-TIKA_Parsed-By_txt]:Analizado por Tika +tikaTitles[tika_pdf_docinfo_created_txt]:Fecha de creación de información del documento +tikaTitles[tika_access_permission_modify_annotations_txt]:Permiso para modificar anotaciones +tikaTitles[tika_pdf_hasMarkedContent_txt]:Tiene contenido marcado +tikaTitles[tika_xmp_CreatorTool_txt]:Herramienta de creación +tikaTitles[tika_Content-Type_txt]:Tipo de contenido +tikaTitles[tika_X-TIKA_Parsed-By-Full-Set_txt]:Analizado por +tikaTitles[tika_pdf_encrypted_txt]:Cifrado +tikaTitles[tika_access_permission_can_modify_txt]: Permiso para modificar +tikaTitles[tika_pdf_docinfo_creator_tool_txt]:Herramienta de creación de información del documento +tikaTitles[tika_pdf_containsNonEmbeddedFont_txt]:Contiene fuente no incrustada +tikaTitles[tika_access_permission_fill_in_form_txt]:Permiso para rellenar formularios +tikaTitles[tika_pdf_containsDamagedFont_txt]:Contiene fuente dañada +tikaTitles[tika_dc_format_txt]:Formato DC +tikaTitles[tika_pdf_charsPerPage_txt]:Caracteres por página +tikaTitles[tika_pdf_docinfo_producer_txt]:Productor de información del documento +tikaTitles[tika_pdf_hasCollection_txt]:Tiene colección +tikaTitles[tika_access_permission_assemble_document_txt]:Permiso para ensamblar documento +tikaTitles[tika_pdf_producer_txt]:Productor +tikaTitles[tika_pdf_unmappedUnicodeCharsPerPage_txt]:Caracteres Unicode sin asignar por página +tikaTitles[tika_dcterms_created_txt]:Fecha de creación de términos DC +tikaTitles[tika_tEXt_tEXtEntry_txt]:Entrada de texto +tikaTitles[tika_Dimension_PixelAspectRatio_txt]:Relación de aspecto de píxel +tikaTitles[tika_Data_PlanarConfiguration_txt]:Configuración planar de datos +tikaTitles[tika_Transparency_Alpha_txt]:Canal alfa de transparencia tikaTitles[tika_sBIT_sBIT_RGBAlpha_txt]:RGB -tikaTitles[tika_Compression_Lossless_b]:Compression lossless -tikaTitles[tika_Compression_CompressionTypeName_txt]:Compression type name -tikaTitles[tika_Chroma_NumChannels_txt]:Chroma number of channels -tikaTitles[tika_Compression_NumProgressiveScans_txt]:Number of progressive scans -tikaTitles[tika_imagereader_NumImages_txt]:Number of images -tikaTitles[tika_Data_SampleFormat_txt]:Sample format -tikaTitles[tika_tiff_ImageWidth_d]:Image width -tikaTitles[tika_tiff_ImageLength_d]:Image length -tikaTitles[tika_Text_TextEntry_txt]:Text entry -tikaTitles[tika_Data_BitsPerSample_txt]:Bits per sample (Data) -tikaTitles[tika_Data_SignificantBitsPerSample_txt]:Significant bits per sample -tikaTitles[tika_tiff_BitsPerSample_txt]:Bits per sample (Tiff) +tikaTitles[tika_Compression_Lossless_b]:Compresión sin pérdida +tikaTitles[tika_Compression_CompressionTypeName_txt]:Nombre del tipo de compresión +tikaTitles[tika_Chroma_NumChannels_txt]:Número de canales de croma +tikaTitles[tika_Compression_NumProgressiveScans_txt]:Número de exploraciones progresivas +tikaTitles[tika_imagereader_NumImages_txt]:Número de imágenes +tikaTitles[tika_Data_SampleFormat_txt]:Formato de muestra +tikaTitles[tika_tiff_ImageWidth_d]:Anchura de imagen +tikaTitles[tika_tiff_ImageLength_d]:Longitud de imagen +tikaTitles[tika_Text_TextEntry_txt]:Entrada de texto +tikaTitles[tika_Data_BitsPerSample_txt]:Bits por muestra (datos) +tikaTitles[tika_Data_SignificantBitsPerSample_txt]:Bits significativos por muestra +tikaTitles[tika_tiff_BitsPerSample_txt]:Bits por muestra (Tiff) tikaTitles[tika_IHDR_txt]:IHDR -tikaTitles[tika_Dimension_ImageOrientation_txt]:Image orientation -tikaTitles[tika_Chroma_ColorSpaceType_txt]:Color space type -tikaTitles[tika_Chroma_BlackIsZero_txt]:Black is zero -otherStatusLabel:Other status: +tikaTitles[tika_Dimension_ImageOrientation_txt]:Orientación de imagen +tikaTitles[tika_Chroma_ColorSpaceType_txt]:Tipo de espacio de color +tikaTitles[tika_Chroma_BlackIsZero_txt]:Negro es cero +otherStatusLabel:Otro estado: otherStatusPlaceholder:Agregar nueva representación de estado -createFolderTitle:Create folder -createFolderPlaceholder:Write folder name -createFolderAlreadyExistsTitle:Cannot create folder -createFolderAlreadyExistsMessage:Folder name already exists -renameFolderAlreadyExistsTitle: Cannot rename folder -renameFolderAlreadyExistsMessage: Folder name already exists -outcomeDetailTitle:Action detail -outcomeDetailPlaceholder:Detail the reason to do it -chooseEntityTitle:Choose entity to relate +createFolderTitle:Crear carpeta +createFolderPlaceholder:Escriba el nombre de la carpeta +createFolderAlreadyExistsTitle:No se puede crear la carpeta +createFolderAlreadyExistsMessage:Ya existe una carpeta con ese nombre +renameFolderAlreadyExistsTitle: No se puede renombrar la carpeta +renameFolderAlreadyExistsMessage: Ya existe una carpeta con ese nombre +outcomeDetailTitle:Detalle de la acción +outcomeDetailPlaceholder:Detalle el motivo +chooseEntityTitle:Elegir entidad a relacionar # Sidebars sidebarFilterDates:Fechas sidebarFoldersFilesTitle:Carpetas y archivos sidebarProcessTitle:Procesos sidebarIngestTitle:Ingesta sidebarActionsTitle:Acciones -sidebarDisposalBinTitle:Disposal bin -sidebarDisposalScheduleTitle:Disposal Schedule -sidebarDisposalConfirmationTitle:Disposal Confirmation -sidebarAppraisalTitle:Assessment +sidebarDisposalBinTitle:Papelera de eliminación +sidebarDisposalScheduleTitle:Calendario de eliminación +sidebarDisposalConfirmationTitle:Confirmación de eliminación +sidebarAppraisalTitle:Evaluación metadataParseError:Error en linea {0}, columna {1}\: {2} notFoundError:No encontrado descriptiveMetadataTransformToHTMLError:Ha ocurrido un error mientras está transformando metadato descriptivo en HTML -preservationEventDetailsTransformToHTMLError:Error transforming preservation event details into HTML +preservationEventDetailsTransformToHTMLError:Error al transformar los detalles del evento de preservación en HTML allCollectionsTitle:Catalogo errorLoadingDescriptiveMetadata:Ha ocurrido un error mientras está cargando metadato descriptivo\: {0} -errorLoadingPreservationEventDetails:Error loading preservation event details: {0} -errorLoadingJobReport:Error loading job report: {0} +errorLoadingPreservationEventDetails:Error al cargar los detalles del evento de preservación: {0} +errorLoadingJobReport:Error al cargar el informe del proceso: {0} titleDatesEmpty: titleDatesNoFinal:Desde {0} titleDatesNoInitial:Hasta {0} -titleDates:Desde {0} to {1} +titleDates:Desde {0} hasta {1} simpleDatesEmpty: simpleDatesNoFinal:{0} simpleDatesNoInitial:a {0} -simpleDates:{0} to {1} +simpleDates:{0} hasta {1} rejectMessage:Mensaje de rechazo rejectQuestion:¿Cuál es la razón de rechazar este item? -renameSIPFailed:Rename of a SIP failed -renameSIPSuccessful:Rename of a SIP was successful -moveSIPFailed:SIP move failed -movingAIP:Moving AIP(s) in background +renameSIPFailed:Error al renombrar el SIP +renameSIPSuccessful:El SIP se renombró correctamente +moveSIPFailed:Error al mover el SIP +movingAIP:Moviendo AIP(s) en segundo plano jobNotFound:El trabajo que ha solicitado no fue encontrado updateIsCurrentlyRunning:Se está ejecutando otra actualización actualmente. Favor intentar luego nuevamente. updatedFilesUnderFolder:Archivos contenidos en carpeta actualizados @@ -152,15 +152,15 @@ otherItem:Otro metadataFileCreated:Archivo metadata descriptiva creado metadataFileSaved:Archivo metadata descriptiva guardado metadataFileRemoved:Archivo metadata descriptiva eliminado -removeMetadataFileTitle:Confirm descriptive metadata removal -removeMetadataFileLabel:Are you sure you want to remove the descriptive metadata of this entity? -updateMetadataFileTitle:Confirm descriptive metadata update -updateMetadataFileLabel:Are you sure you want to update the descriptive metadata of this entity? +removeMetadataFileTitle:Confirmar eliminación de metadatos descriptivos +removeMetadataFileLabel:¿Está seguro de que desea eliminar los metadatos descriptivos de esta entidad? +updateMetadataFileTitle:Confirmar actualización de metadatos descriptivos +updateMetadataFileLabel:¿Está seguro de que desea actualizar los metadatos descriptivos de esta entidad? versionReverted:Versión revertida versionDeleted:Versión eliminada selectUserOrGroupToAdd:Seleccione usuarios y grupos para agregar couldNotFindPreservationEvent:No pudo ser encontrado el evento de preservación -couldNotFindPreservationAgent:Could not find preservation agent +couldNotFindPreservationAgent:No se encontró el agente de preservación intellectualEntity:Entidad intelectual inspectIntellectualEntity:Inspeccionar entidad intelectual inspectRepresentation:Inspeccionar representación @@ -189,81 +189,82 @@ allOfAObject[org.roda.core.data.v2.jobs.IndexedJob]:Procesos allOfAObject[org.roda.core.data.v2.jobs.Report]:Reportes allOfAObject[org.roda.core.data.v2.jobs.IndexedReport]:Reportes allOfAObject[org.roda.core.data.v2.notifications.Notification]:Notificaciones -allOfAObject[org.roda.core.data.v2.log.LogEntry]:All audit logs +allOfAObject[org.roda.core.data.v2.log.LogEntry]:Todos los registros de auditoría allOfAObject[org.roda.core.data.v2.user.RODAMember]:Usuarios y grupos allOfAObject[org.roda.core.data.v2.ip.metadata.DescriptiveMetadata]:Metadatos descriptivos allOfAObject[org.roda.core.data.v2.ip.metadata.PreservationMetadata]:Metadatos de preservación allOfAObject[org.roda.core.data.v2.formats.Format]:Formatos -allOfAObject[org.roda.core.data.v2.ip.metadata.IndexedPreservationEvent]:All preservation events -allOfAObject[org.roda.core.data.v2.ip.metadata.IndexedPreservationAgent]:All preservation agents +allOfAObject[org.roda.core.data.v2.ip.metadata.IndexedPreservationEvent]:Todos los eventos de preservación +allOfAObject[org.roda.core.data.v2.ip.metadata.IndexedPreservationAgent]:Todos los agentes de preservación allOfAObject[org.roda.core.data.v2.Void]:No hay objetos de entrada someOfAObject:{0} -someOfAObject[org.roda.core.data.v2.ip.AIP]:intellectual entities -someOfAObject[org.roda.core.data.v2.ip.IndexedAIP]:intellectual entities -someOfAObject[org.roda.core.data.v2.ip.Representation]:representations -someOfAObject[org.roda.core.data.v2.ip.IndexedRepresentation]:representations -someOfAObject[org.roda.core.data.v2.ip.File]:files -someOfAObject[org.roda.core.data.v2.ip.IndexedFile]:files -someOfAObject[org.roda.core.data.v2.ip.TransferredResource]:transferred resources -someOfAObject[org.roda.core.data.v2.ip.DIP]:disseminations -someOfAObject[org.roda.core.data.v2.ip.IndexedDIP]:disseminations -someOfAObject[org.roda.core.data.v2.ip.DIPFile]:dissemination files -someOfAObject[org.roda.core.data.v2.risks.Risk]:risks -someOfAObject[org.roda.core.data.v2.risks.IndexedRisk]:risks -someOfAObject[org.roda.core.data.v2.risks.RiskIncidence]:incidences -someOfAObject[org.roda.core.data.v2.ri.RepresentationInformation]:representation information -someOfAObject[org.roda.core.data.v2.jobs.Job]:jobs -someOfAObject[org.roda.core.data.v2.jobs.IndexedJob]:jobs -someOfAObject[org.roda.core.data.v2.jobs.Report]:reports -someOfAObject[org.roda.core.data.v2.jobs.IndexedReport]:reports -someOfAObject[org.roda.core.data.v2.notifications.Notification]:notifications -someOfAObject[org.roda.core.data.v2.log.LogEntry]:Audit logs -someOfAObject[org.roda.core.data.v2.user.RODAMember]:users and groups -someOfAObject[org.roda.core.data.v2.ip.metadata.DescriptiveMetadata]:descriptive metadata -someOfAObject[org.roda.core.data.v2.ip.metadata.PreservationMetadata]:preservation metadata -someOfAObject[org.roda.core.data.v2.formats.Format]:formats -someOfAObject[org.roda.core.data.v2.ip.metadata.IndexedPreservationEvent]:preservation events -someOfAObject[org.roda.core.data.v2.ip.metadata.IndexedPreservationAgent]:preservation agents +someOfAObject[org.roda.core.data.v2.ip.AIP]:entidades intelectuales +someOfAObject[org.roda.core.data.v2.ip.IndexedAIP]:entidades intelectuales +someOfAObject[org.roda.core.data.v2.ip.Representation]:representaciones +someOfAObject[org.roda.core.data.v2.ip.IndexedRepresentation]:representaciones +someOfAObject[org.roda.core.data.v2.ip.File]:archivos +someOfAObject[org.roda.core.data.v2.ip.IndexedFile]:archivos +someOfAObject[org.roda.core.data.v2.ip.TransferredResource]:recursos transferidos +someOfAObject[org.roda.core.data.v2.ip.DIP]:diseminaciones +someOfAObject[org.roda.core.data.v2.ip.IndexedDIP]:diseminaciones +someOfAObject[org.roda.core.data.v2.ip.DIPFile]:archivos de diseminación +someOfAObject[org.roda.core.data.v2.risks.Risk]:riesgos +someOfAObject[org.roda.core.data.v2.risks.IndexedRisk]:riesgos +someOfAObject[org.roda.core.data.v2.risks.RiskIncidence]:incidencias +someOfAObject[org.roda.core.data.v2.ri.RepresentationInformation]:información de representación +someOfAObject[org.roda.core.data.v2.jobs.Job]:procesos +someOfAObject[org.roda.core.data.v2.jobs.IndexedJob]:procesos +someOfAObject[org.roda.core.data.v2.jobs.Report]:informes +someOfAObject[org.roda.core.data.v2.jobs.IndexedReport]:informes +someOfAObject[org.roda.core.data.v2.notifications.Notification]:notificaciones +someOfAObject[org.roda.core.data.v2.log.LogEntry]:Registros de auditoría +someOfAObject[org.roda.core.data.v2.user.RODAMember]:usuarios y grupos +someOfAObject[org.roda.core.data.v2.ip.metadata.DescriptiveMetadata]:metadatos descriptivos +someOfAObject[org.roda.core.data.v2.ip.metadata.PreservationMetadata]:metadatos de preservación +someOfAObject[org.roda.core.data.v2.formats.Format]:formatos +someOfAObject[org.roda.core.data.v2.ip.metadata.IndexedPreservationEvent]:eventos de preservación +someOfAObject[org.roda.core.data.v2.ip.metadata.IndexedPreservationAgent]:agentes de preservación someOfAObject[org.roda.core.data.v2.Void]:No hay objetos de entrada -someOfAObject[org.roda.core.data.v2.disposal.schedule.DisposalSchedule]:disposal schedules -someOfAObject[org.roda.core.data.v2.disposal.hold.DisposalHold]:disposal holds -someOfAObject[org.roda.core.data.v2.disposal.confirmation.DisposalConfirmation]:disposal confirmations -someOfAObject[org.roda.core.data.v2.disposal.rule.DisposalRule]:disposal rules -someOfAObject[org.roda.core.data.v2.synchronization.central.DistributedInstances]:distributed instances -someOfAObject[org.roda.core.data.v2.accessKey.AccessKeys]:access tokens +someOfAObject[org.roda.core.data.v2.disposal.schedule.DisposalSchedule]:calendarios de eliminación +someOfAObject[org.roda.core.data.v2.disposal.hold.DisposalHold]:bloqueos de eliminación +someOfAObject[org.roda.core.data.v2.disposal.confirmation.DisposalConfirmation]:confirmaciones de eliminación +someOfAObject[org.roda.core.data.v2.disposal.rule.DisposalRule]:reglas de eliminación +someOfAObject[org.roda.core.data.v2.synchronization.central.DistributedInstances]:instancias distribuidas +someOfAObject[org.roda.core.data.v2.accessKey.AccessKeys]:tokens de acceso oneOfAObject:{0} -oneOfAObject[org.roda.core.data.v2.ip.AIP]:intellectual entity -oneOfAObject[org.roda.core.data.v2.ip.IndexedAIP]:intellectual entity -oneOfAObject[org.roda.core.data.v2.ip.Representation]:representation -oneOfAObject[org.roda.core.data.v2.ip.IndexedRepresentation]:representation +oneOfAObject[org.roda.core.data.v2.ip.AIP]:entidad intelectual +oneOfAObject[org.roda.core.data.v2.ip.IndexedAIP]:entidad intelectual +oneOfAObject[org.roda.core.data.v2.ip.Representation]:representación +oneOfAObject[org.roda.core.data.v2.ip.IndexedRepresentation]:representación oneOfAObject[org.roda.core.data.v2.ip.File]:archivo oneOfAObject[org.roda.core.data.v2.ip.IndexedFile]:archivo -oneOfAObject[org.roda.core.data.v2.ip.TransferredResource]:transferred resource +oneOfAObject[org.roda.core.data.v2.ip.TransferredResource]:recurso transferido oneOfAObject[org.roda.core.data.v2.ip.DIP]:diseminación oneOfAObject[org.roda.core.data.v2.ip.IndexedDIP]:diseminación -oneOfAObject[org.roda.core.data.v2.ip.DIPFile]:dissemination file -oneOfAObject[org.roda.core.data.v2.risks.Risk]:risk -oneOfAObject[org.roda.core.data.v2.risks.IndexedRisk]:risk -oneOfAObject[org.roda.core.data.v2.risks.RiskIncidence]:incidence -oneOfAObject[org.roda.core.data.v2.ri.RepresentationInformation]:representation information +oneOfAObject[org.roda.core.data.v2.ip.DIPFile]:archivo de diseminación +oneOfAObject[org.roda.core.data.v2.risks.Risk]:riesgo +oneOfAObject[org.roda.core.data.v2.risks.IndexedRisk]:riesgo +oneOfAObject[org.roda.core.data.v2.risks.RiskIncidence]:incidencia +oneOfAObject[org.roda.core.data.v2.ri.RepresentationInformation]:información de representación oneOfAObject[org.roda.core.data.v2.jobs.Job]:trabajo oneOfAObject[org.roda.core.data.v2.jobs.IndexedJob]:trabajo -oneOfAObject[org.roda.core.data.v2.jobs.Report]:report -oneOfAObject[org.roda.core.data.v2.jobs.IndexedReport]:report -oneOfAObject[org.roda.core.data.v2.notifications.Notification]:notification -oneOfAObject[org.roda.core.data.v2.log.LogEntry]:Audit log -oneOfAObject[org.roda.core.data.v2.user.RODAMember]:user or group -oneOfAObject[org.roda.core.data.v2.ip.metadata.DescriptiveMetadata]:descriptive metadata -oneOfAObject[org.roda.core.data.v2.ip.metadata.PreservationMetadata]:preservation metadata -oneOfAObject[org.roda.core.data.v2.formats.Format]:format -oneOfAObject[org.roda.core.data.v2.ip.metadata.IndexedPreservationEvent]:preservation event -oneOfAObject[org.roda.core.data.v2.ip.metadata.IndexedPreservationAgent]:preservation agent -oneOfAObject[org.roda.core.data.v2.disposal.schedule.DisposalSchedule]:disposal schedule -oneOfAObject[org.roda.core.data.v2.disposal.hold.DisposalHold]:disposal hold -oneOfAObject[org.roda.core.data.v2.disposal.confirmation.DisposalConfirmation]:disposal confirmation -oneOfAObject[org.roda.core.data.v2.disposal.rule.DisposalRule]:disposal rule -selected[\=1]:{0,number} {1} selected -selected:{0,number} {1} selected +oneOfAObject[org.roda.core.data.v2.jobs.Report]:informe +oneOfAObject[org.roda.core.data.v2.jobs.IndexedReport]:informe +oneOfAObject[org.roda.core.data.v2.notifications.Notification]:notificación +oneOfAObject[org.roda.core.data.v2.log.LogEntry]:Registro de auditoría +oneOfAObject[org.roda.core.data.v2.user.RODAMember]:usuario o grupo +oneOfAObject[org.roda.core.data.v2.ip.metadata.DescriptiveMetadata]:metadatos descriptivos +oneOfAObject[org.roda.core.data.v2.ip.metadata.PreservationMetadata]:metadatos de preservación +oneOfAObject[org.roda.core.data.v2.formats.Format]:formato +oneOfAObject[org.roda.core.data.v2.ip.metadata.IndexedPreservationEvent]:evento de preservación +oneOfAObject[org.roda.core.data.v2.ip.metadata.IndexedPreservationAgent]:agente de preservación +oneOfAObject[org.roda.core.data.v2.disposal.schedule.DisposalSchedule]:calendario de eliminación +oneOfAObject[org.roda.core.data.v2.disposal.hold.DisposalHold]:bloqueo de eliminación +oneOfAObject[org.roda.core.data.v2.disposal.confirmation.DisposalConfirmation]:confirmación de eliminación +oneOfAObject[org.roda.core.data.v2.disposal.rule.DisposalRule]:regla de eliminación +selected[\=1]:{0,number} {1} seleccionado(s) +selected[one]:{0,number} {1} seleccionado(s) +selected:{0,number} {1} seleccionado(s) inspectTransferredResource:Inspeccionar recursos transferidos identifierNotFound:Identificador (no encontrado) originalRepresentation:original @@ -271,7 +272,7 @@ alternativeRepresentation:alternativo representationStatus:Estado executingTaskMessage:Estamos ejecutando su tarea solicitada, por favor espere... noItemsToDisplay:No hay {0} para desplegar -noItemsToDisplayPreFilters:Could not find any {0} in this context. +noItemsToDisplayPreFilters:No se encontró ningún {0} en este contexto. noItemsToDisplayButFacetsActive:No hay {0} para desplegar mas existen filtros ativos. Para deshabilitarlos, haga resetFacetsLink:clic aquí browserOfflineError:Su navegador esta fuera de linea, por favor revise su conectividad @@ -299,25 +300,25 @@ createJobWorkflow: Flujo de trabajo createJobCategorySelect: Categoría createJobCategoryWorkflow: Categoría: {0,list} createJobCurlCommand: Comando cURL para crear proceso -createJobHighPriorityDescription: High priority processes will start as soon as there is an available slot -createJobMediumPriorityDescription: Medium priority processes will start if there is an available slot and no high priority is on the queue -createJobLowPriorityDescription: Low priority processes will run if there is a slot available and if no other processes are waiting to be started -createJobNormalParallelismDescription: Normal parallelism will be running many processes at the same time -createJobLimitedParallelismDescription: Limited parallelism will limit the amount of processes that are run at the same time -createJobOrchestrationPrioritySeparator: Priority -createJobOrchestrationParallelismSeparator: Parallelism +createJobHighPriorityDescription: Los procesos de alta prioridad comenzarán en cuanto haya un slot disponible +createJobMediumPriorityDescription: Los procesos de prioridad media comenzarán si hay un slot disponible y no hay procesos de alta prioridad en la cola +createJobLowPriorityDescription: Los procesos de baja prioridad se ejecutarán si hay un slot disponible y no hay otros procesos esperando para iniciarse +createJobNormalParallelismDescription: El paralelismo normal ejecutará muchos procesos al mismo tiempo +createJobLimitedParallelismDescription: El paralelismo limitado restringirá el número de procesos que se ejecutan al mismo tiempo +createJobOrchestrationPrioritySeparator: Prioridad +createJobOrchestrationParallelismSeparator: Paralelismo createJobOrchestration: Orquestación copiedToClipboardTitle: Copiado copiedToClipboardMessage: El contenido se ha copiado al clipboard -jobCreatedRedirectTitle: A job was created -removeJobCreatedMessage: Do you want to follow the remove job? -identifyFormatsJobCreatedMessage: Do you want to follow the format identification job? -moveJobCreatedMessage: Do you want to follow the move job? -jobCreatedMessage: Do you want to follow the job? +jobCreatedRedirectTitle: Se ha creado un proceso +removeJobCreatedMessage: ¿Desea seguir el proceso de eliminación? +identifyFormatsJobCreatedMessage: ¿Desea seguir el proceso de identificación de formatos? +moveJobCreatedMessage: ¿Desea seguir el proceso de movimiento? +jobCreatedMessage: ¿Desea seguir el proceso? # Ingest transfer upload ingestTransferUploadTitle:Cargar ingesta transferida -fileUploadTitle:File upload +fileUploadTitle:Carga de archivo ingestTransferUploadDropHere:Borrar archivos aquí ingestTransferUploadBrowseFiles:Seleccionar archivos ingestTransferUploadFinishButton:Hecho @@ -335,13 +336,13 @@ dialogRefresh:Refrescar removeSuccessTitle:Items eliminados removeSuccessMessage:{0} items eliminados con éxito removeConfirmDialogTitle:Confirmar eliminación de items -removeAllConfirmDialogMessageSingle:Are you sure you want to remove the intellectual entity "{0}", including all its nested items? +removeAllConfirmDialogMessageSingle:¿Está seguro de que desea eliminar la entidad intelectual «{0}», incluyendo todos sus elementos anidados? removeSelectedConfirmDialogMessage:¿Seguro que quiere eliminar los items seleccionados {0}? removingSuccessTitle:Eliminando Items -removingSuccessMessage:Executing action to remove {0} items -moveConfirmDialogTitle:Confirm moving of intellectual entities -moveAllConfirmDialogMessageSingle:Are you sure you want to move the intellectual entity "{0}", including all its nested items? -moveSelectedConfirmDialogMessage:Are you sure you want to move the selected {0} items? +removingSuccessMessage:Ejecutando acción para eliminar {0} elementos +moveConfirmDialogTitle:Confirmar traslado de entidades intelectuales +moveAllConfirmDialogMessageSingle:¿Está seguro de que desea mover la entidad intelectual «{0}», incluyendo todos sus elementos anidados? +moveSelectedConfirmDialogMessage:¿Está seguro de que desea mover los {0} elementos seleccionados? # Generic Buttons backButton:Regresar cancelButton:Cancelar @@ -349,20 +350,20 @@ revertButton:Revertir removeButton:Eliminar refreshButton:Refrescar newButton:Nuevo -newRepresentationButton:Create representation +newRepresentationButton:Crear representación editButton:Editar -liftButton:Lift +liftButton:Levantar deactivateButton:DESACTIVAR saveButton:Guardar addButton:Agregar confirmButton:Validar applyAllButton:Aplicar a todas las de abajo -overrideManualAppliedSchedulesButton:Apply rules and override -applyDisposalRulesButton:Apply rules keeping manually associated +overrideManualAppliedSchedulesButton:Aplicar reglas y sobrescribir +applyDisposalRulesButton:Aplicar reglas conservando las asociadas manualmente stopButton:Detener -approveButton:Approve +approveButton:Aprobar rejectButton:Rechazar -listButton:Created packages +listButton:Paquetes creados downloadButton:Descargar renameButton:Rebautizar moveButton:Mover @@ -375,9 +376,9 @@ changeStatusButton:Cambiar Estado clearButton:Limpiar selectAllButton:Todos closeButton:Cerrar -copyAndCloseButton:Copy & Close +copyAndCloseButton:Copiar y cerrar selectButton:Seleccionar -printButton:Print report +printButton:Imprimir informe # Identify formats identifyFormatsButton:Identificar formatos identifyingFormatsTitle:Identificar formatos @@ -388,8 +389,8 @@ viewRepresentationInfoFileButton:Información del archivo viewRepresentationErrorPreview:Ha ocurrido un error mientras intentaba ver el archivo viewRepresentationTooLargeErrorPreview:Este archivo es demasiado grande para abrirlo en el navegador viewRepresentationNotSupportedPreview:previsualización de archivos no es compatible -viewRepresentationNotSupportedPreviewCentralInstance:Synchronized files from distributed instances cannot be accessed via the central instance -viewRepresentationNotSupportedPreviewShallowFile:Could not retrieve the file using the reference to the external storage +viewRepresentationNotSupportedPreviewCentralInstance:No se puede acceder a los archivos sincronizados desde instancias distribuidas a través de la instancia central +viewRepresentationNotSupportedPreviewShallowFile:No se pudo recuperar el archivo utilizando la referencia al almacenamiento externo viewRepresentationFileDisseminationTitle:Diseminación viewRepresentationInfoFilename:Nombre del archivo viewRepresentationInfoSize:Tamaño @@ -397,21 +398,21 @@ viewRepresentationInfoExtension:Extensión viewRepresentationInfoMimetype:Mimetype viewRepresentationInfoFormat:Formato viewRepresentationInfoPronom:PRONOM -viewTechnicalInformation:Technical information -showTechnicalMetadata:Show technical metadata -viewTechnicalMetadata: Technical metadata +viewTechnicalInformation:Información técnica +showTechnicalMetadata:Mostrar metadatos técnicos +viewTechnicalMetadata: Metadatos técnicos viewRepresentationInfoCreatingApplicationName:Creando nombre de la aplicación viewRepresentationInfoCreatingApplicationVersion:Creando versión de la aplicación viewRepresentationInfoDateCreatedByApplication:Fecha creación por la aplicación viewRepresentationInfoHash:Fijación viewRepresentationInfoStoragePath:Ruta almacenamiento -viewRepresentationRemoveFileTitle:Confirm file remove -viewRepresentationRemoveFileMessage:Are you sure you want to remove this file? +viewRepresentationRemoveFileTitle:Confirmar eliminación de archivo +viewRepresentationRemoveFileMessage:¿Está seguro de que desea eliminar este archivo? # New Process processNewDefaultName:Trabajo {0, LocalDateTime, PREDEF\: DATETIME BREVE} pluginLabel:{0} -mandatoryPlugin:Mandatory -optionalPlugin:Optional +mandatoryPlugin:Obligatorio +optionalPlugin:Opcional pluginLabelWithVersion:{0} ({1}) pluginAipIdButton:Seleccionar processNewMissingMandatoryInfoDialogTitle:Falta información obligatoria @@ -430,16 +431,16 @@ showPluginCategories[management]:administración showPluginCategories[dissemination]:diseminación showPluginCategories[reindex]:reindización showPluginCategories[misc]:misceláneos -showPluginCategories[digital_signature]:digital signature -showPluginCategories[risk_assessment]:risk assessment -showPluginCategories[maintenance]:maintenance +showPluginCategories[digital_signature]:firma digital +showPluginCategories[risk_assessment]:evaluación de riesgos +showPluginCategories[maintenance]:mantenimiento showPluginCategories[eArchiving]:eArchiving -showPluginCategories[database_preservation]:database preservation +showPluginCategories[database_preservation]:preservación de bases de datos showJobStatusCreated:esperando showJobStatusStarted:ejecutando showJobStatusCompleted:Hecho -showJobStatusPendingApproval:pending approval -showJobStatusScheduled:scheduled +showJobStatusPendingApproval:pendiente de aprobación +showJobStatusScheduled:programado showJobStatusApprovalRejected:rechazado showJobStatusFailedDuringCreation:Falló inicio showJobStatusFailedToComplete:Falló @@ -461,28 +462,28 @@ showRepresentationExtended:Representación showFileExtended:Archivo showTransferredResourceExtended:Recursos transferidos showJobSourceObjects:Objetos de origen -showAttachments:Attachments -jobStopConfirmDialogTitle:Confirm job stop -jobStopConfirmDialogMessage:Are you sure you want to stop the job? -jobApproveConfirmDialogTitle:Confirm job approval -jobApproveConfirmDialogMessage:Are you sure you want to approve the job? -jobRejectConfirmDialogTitle:Confirm job reject -jobRejectConfirmDialogMessage:Are you sure you want to reject the job? -jobSelectedApproveConfirmDialogMessage: Are you sure you want to approve the selected {0} item(s)? -jobSelectedRejectConfirmDialogMessage: Are you sure you want to delete the selected {0} item(s)? +showAttachments:Adjuntos +jobStopConfirmDialogTitle:Confirmar detención del proceso +jobStopConfirmDialogMessage:¿Está seguro de que desea detener el proceso? +jobApproveConfirmDialogTitle:Confirmar aprobación del proceso +jobApproveConfirmDialogMessage:¿Está seguro de que desea aprobar el proceso? +jobRejectConfirmDialogTitle:Confirmar rechazo del proceso +jobRejectConfirmDialogMessage:¿Está seguro de que desea rechazar el proceso? +jobSelectedApproveConfirmDialogMessage: ¿Está seguro de que desea aprobar los {0} elemento(s) seleccionado(s)? +jobSelectedRejectConfirmDialogMessage: ¿Está seguro de que desea eliminar los {0} elemento(s) seleccionado(s)? # Browse itemId:Identificador del AIP sipId:Identificador del SIP -processIdTitle:Ingest process identifier +processIdTitle:Identificador del proceso de ingesta updateProcessIdTitle:Procesos de Modificación Identificados -dateCreated:Created on {0} by {1} -dateUpdated:Updated on {0} by {1} +dateCreated:Creado el {0} por {1} +dateUpdated:Actualizado el {0} por {1} aipCreated:Creado aipUpdated:Actualizado -dateCreatedOrUpdated:by {1} on {0} -dateCreatedAndUpdated:Created by {1} on {0} and last updated by {3} on {2} -itemInstanceId:Instance identifier +dateCreatedOrUpdated:por {1} el {0} +dateCreatedAndUpdated:Creado por {1} el {0} y última actualización por {3} el {2} +itemInstanceId:Identificador de instancia aipType:Tipo # Search searchDropdownLabels:{0} @@ -490,20 +491,20 @@ searchDropdownLabels[org.roda.core.data.v2.ip.IndexedAIP]:Entidades intelectuale searchDropdownLabels[org.roda.core.data.v2.ip.IndexedRepresentation]:Representaciones searchDropdownLabels[org.roda.core.data.v2.ip.IndexedFile]:Archivos searchDropdownLabels[org.roda.core.data.v2.ip.TransferredResource]:Recursos transferidos -searchDropdownLabels[org.roda.core.data.v2.ip.IndexedPreservationEvent]:disseminations -searchDropdownLabels[org.roda.core.data.v2.ip.IndexedDIP]:disseminations -searchDropdownLabels[org.roda.core.data.v2.ip.DIPFile]:dissemination files +searchDropdownLabels[org.roda.core.data.v2.ip.IndexedPreservationEvent]:Diseminaciones +searchDropdownLabels[org.roda.core.data.v2.ip.IndexedDIP]:Diseminaciones +searchDropdownLabels[org.roda.core.data.v2.ip.DIPFile]:Archivos de diseminación searchDropdownLabels[org.roda.core.data.v2.risks.IndexedRisk]:Riesgos searchDropdownLabels[org.roda.core.data.v2.risks.RiskIncidence]:Incidencias -searchDropdownLabels[org.roda.core.data.v2.ri.RepresentationInformation]:representation information +searchDropdownLabels[org.roda.core.data.v2.ri.RepresentationInformation]:Información de representación searchDropdownLabels[org.roda.core.data.v2.jobs.IndexedJob]:Procesos searchDropdownLabels[org.roda.core.data.v2.jobs.IndexedReport]:Reportes -searchDropdownLabels[org.roda.core.data.v2.notifications.Notification]:notifications -searchDropdownLabels[org.roda.core.data.v2.log.LogEntry]:Audit logs -searchDropdownLabels[org.roda.core.data.v2.user.RODAMember]:users and groups -searchDropdownLabels[org.roda.core.data.v2.ip.metadata.DescriptiveMetadata]:descriptive metadata -searchDropdownLabels[org.roda.core.data.v2.ip.metadata.PreservationMetadata]:preservation metadata -searchDropdownLabels[org.roda.core.data.v2.formats.Format]:formats +searchDropdownLabels[org.roda.core.data.v2.notifications.Notification]:Notificaciones +searchDropdownLabels[org.roda.core.data.v2.log.LogEntry]:Registros de auditoría +searchDropdownLabels[org.roda.core.data.v2.user.RODAMember]:Usuarios y grupos +searchDropdownLabels[org.roda.core.data.v2.ip.metadata.DescriptiveMetadata]:Metadatos descriptivos +searchDropdownLabels[org.roda.core.data.v2.ip.metadata.PreservationMetadata]:Metadatos de preservación +searchDropdownLabels[org.roda.core.data.v2.formats.Format]:Formatos searchDropdownLabels[org.roda.core.data.v2.Void]:No hay objetos de entrada searchListBoxItems:Entidades intelectuales searchListBoxRepresentations:Representaciones @@ -521,9 +522,9 @@ searchButton:Buscar # AIP, Representations, File & Transferred Resources aipGenericTitle:Titulo aipDates:Fechas -aipRiskIncidences:{0} risk incidences -aipEvents:{0} preservation events -aipLogs:{0} log entries +aipRiskIncidences:{0} incidencias de riesgo +aipEvents:{0} eventos de preservación +aipLogs:{0} entradas de registro fileId:Id fileName:Nombre filePath:Ruta @@ -572,13 +573,13 @@ preservationAgentNote:Nota preservationAgentExtension:Extensión # Select dialog selectAipCancelButton:Cancelar -selectAipEmptyParentButton:Move a la raíz +selectAipEmptyParentButton:Mover a la raíz selectAipSelectButton:Seleccionar selectAipSearchResults:Resultado de búsqueda selectRepresentationSearchResults:Resultado de búsqueda selectFileSearchResults:Resultado de búsqueda selectTransferredResourcesSearchResults:Resultado de búsqueda -renameTransferredResourcesDialogTitle:Rename transferred resource +renameTransferredResourcesDialogTitle:Cambiar nombre del recurso transferido # Rename Item renameItemTitle:Cambiar el nombre de item renameSuccessful:Éxito renombrado item! @@ -621,24 +622,24 @@ aipState[CREATED]:Creado aipState[DELETED]:Eliminado aipState[INGEST_PROCESSING]:Ingestando aipState[UNDER_APPRAISAL]:En evaluación -aipState[DESTROYED]:Destroyed +aipState[DESTROYED]:Destruido # Search pre-filters searchPreFilterSimpleFilterParameter:{0}\: {1} searchPreFilterBasicSearchFilterParameter:{0}\: {1} searchPreFilterNotSimpleFilterParameter:NOT {0}\: {1} searchPreFilterEmptyKeyFilterParameter:NO {0} -searchPreFilterLongRangeFilterParameter:{0} is between {1} and {2} -searchPreFilterLongRangeFilterParameterGreaterThan:{0} is greater than {1} -searchPreFilterLongRangeFilterParameterSmallerThan:{0} is smaller than {1} -searchPreFilterOneOfManyFilterParameterWithSize:{0} is one of one of {1} possible values +searchPreFilterLongRangeFilterParameter:{0} está entre {1} y {2} +searchPreFilterLongRangeFilterParameterGreaterThan:{0} es mayor que {1} +searchPreFilterLongRangeFilterParameterSmallerThan:{0} es menor que {1} +searchPreFilterOneOfManyFilterParameterWithSize:{0} es uno de uno de {1} posibles valores searchPreFilterOneOfManyFilterParameterSingle:{0}\: {1} -searchPreFilterOneOfManyFilterParameterWithList:{0} is one of {1,list} -searchPreFilterDateIntervalFilterParameter:{0} is between {1} and {2} -searchPreFilterDateIntervalFilterParameterFrom:{0} is between {1} and now -searchPreFilterDateIntervalFilterParameterTo:{0} is until {1} +searchPreFilterOneOfManyFilterParameterWithList:{0} es uno de {1,list} +searchPreFilterDateIntervalFilterParameter:{0} está entre {1} y {2} +searchPreFilterDateIntervalFilterParameterFrom:{0} está entre {1} y ahora +searchPreFilterDateIntervalFilterParameterTo:{0} hasta {1} searchPreFilterOr: OR  searchPreFilterAnd: AND  -searchPreFilterWhere: where +searchPreFilterWhere: donde searchPreFilterName:{0} searchPreFilterName[state]:estado searchPreFilterName[ingestJobId]:trabajo @@ -648,16 +649,16 @@ searchPreFilterName[ingestSIPIds]:SIP IDs searchPreFilterValue:{0} searchPreFilterValue[UNDER_APPRAISAL]:En evaluación # Risk register -riskRegisterTitle:Risk register -riskIncidenceRegisterTitle:Risk incidence register -riskIncidenceRegisterSearchPlaceHolder:Search risk incidences... +riskRegisterTitle:Registro de riesgos +riskIncidenceRegisterTitle:Registro de incidencias de riesgo +riskIncidenceRegisterSearchPlaceHolder:Buscar incidencias de riesgo... editRiskNotFound:Riesgo no encontrado {0} riskRemoveConfirmDialogTitle:Confirmar eliminación del riesgo riskRemoveSelectedConfirmDialogMessage:Estas seguro de querer eliminar los riesgos {0} seleccionados? riskHistoryRemoveConfirmDialogTitle:Confirmar eliminación del riesgo -riskHistoryRemoveConfirmDialogMessage:Are you sure you want to remove the selected risk history? -riskHistoryRevertConfirmDialogTitle:Confirm revert risk -riskHistoryRevertConfirmDialogMessage:Are you sure you want to revert the risk to the selected history? +riskHistoryRemoveConfirmDialogMessage:¿Está seguro de que desea eliminar el historial de riesgos seleccionado? +riskHistoryRevertConfirmDialogTitle:Confirmar reversión del riesgo +riskHistoryRevertConfirmDialogMessage:¿Está seguro de que desea revertir el riesgo al historial seleccionado? riskRemoveConfirmDialogCancel:No riskRemoveConfirmDialogOk:Si riskRemoveSuccessTitle:Reisgo(s) eliminados @@ -669,16 +670,16 @@ severityLevel[MODERATE]:Moderado severityLevel[HIGH]:Alta getRisksDialogName:Riesgos riskHistoryButton:Historia -editIncidenceNotFound:Incidence {0} not found -editIncidenceFailure:Edit incidence {0} failed -riskIncidenceRemoveConfirmDialogTitle:Confirm remove risk incidence -riskIncidenceRemoveSelectedConfirmDialogMessage:Are you sure you want to remove the selected {0} risk incidence(s)? +editIncidenceNotFound:Incidencia {0} no encontrada +editIncidenceFailure:Error al editar la incidencia {0} +riskIncidenceRemoveConfirmDialogTitle:Confirmar eliminación de incidencia de riesgo +riskIncidenceRemoveSelectedConfirmDialogMessage:¿Está seguro de que desea eliminar las {0} incidencia(s) de riesgo seleccionada(s)? riskIncidenceRemoveConfirmDialogCancel:No riskIncidenceRemoveConfirmDialogOk:Si -riskCreatedTitle:Risk created -riskCreatedMessage: Risk was successfully created +riskCreatedTitle:Riesgo creado +riskCreatedMessage: El riesgo se ha creado correctamente # Representation information register -representationInformationRegisterTitle:Representation network +representationInformationRegisterTitle:Red de representación representationInformationRegisterSearchPlaceHolder:Buscar información de representación editRepresentationInformationNotFound:Información de representación no encontrado {0} representationInformationRemoveFolderConfirmDialogTitle:Confirmar elminación de información de representación @@ -688,14 +689,14 @@ representationInformationRemoveFolderConfirmDialogOk:Si representationInformationRemoveSuccessTitle:Eliminar información de representación representationInformationRemoveSuccessMessage:Información de representación eliminado(s) exitosamente {0} representationInformationListItems:{0} -representationInformationAdditionalInformation:Additional information -representationInformationMissingFieldsTitle:Missing fields -representationInformationMissingFields:There are some mandatory empty fields -noTitleMessage:No title -currentRelationResults:List of current results -createNewRepresentationInformation:Create new -addToExistingRepresentationInformation:Add to existing -atLeastOneOfAbove:At least one of the above +representationInformationAdditionalInformation:Información adicional +representationInformationMissingFieldsTitle:Campos obligatorios +representationInformationMissingFields:Hay campos obligatorios vacíos +noTitleMessage:Sin título +currentRelationResults:Lista de resultados actuales +createNewRepresentationInformation:Crear nuevo +addToExistingRepresentationInformation:Añadir a existente +atLeastOneOfAbove:Al menos uno de los anteriores # Common Messages logParameter:{0}\: {1} windowTitle:RODA - {0} @@ -710,15 +711,15 @@ editGroupFailure:No se pudo editar el grupo {0} debido a un error\: {1}. editUserNotFound:El usuario {0} ya no existe. editUserEmailAlreadyExists:La dirección de correo electrónico {0} ya se utiliza está en los registros. Por favor seleccione otro correo electrónico o recuperar su nombre de usuario y contraseña. editGroupNotFound:El grupo {0} ya no existe. -userRemoveConfirmDialogTitle:User and group remove process -userRemoveConfirmDialogMessage:Do you want to remove the selected users and groups? +userRemoveConfirmDialogTitle:Proceso de eliminación de usuarios y grupos +userRemoveConfirmDialogMessage:¿Desea eliminar los usuarios y grupos seleccionados? userGroups:Grupos addUserButton:Agregar usuario addGroupButton:Agregar grupo userIdentifier:Identificador userFullName:Nombre completo # Job and report -jobInstanceId:Instance identifier +jobInstanceId:Identificador de instancia jobName: Nombre jobCreator: Creador jobParallelismShortBadge: {0} @@ -740,15 +741,15 @@ jobStartDate: Fecha inicio jobEndDate: Fecha fin jobDuration: Duración jobStatus: Estado -jobStateDetails: State details +jobStateDetails: Detalles del estado jobProgress: Progreso jobPlugin: Plugin jobProcessed: Reportes jobProcessedSearchPlaceHolder: Buscar reportes... reportJob: Trabajo reportIngestType: Tipo -newIngestion: New ingestion -ingestionUpdate: Ingest update +newIngestion: Nueva ingesta +ingestionUpdate: Actualización de ingesta reportDateCreated: Feecha de creación reportDateUpdated: Fecha modificación reportDuration: Duración @@ -761,7 +762,7 @@ jobFailureCountMessage: Falla reportLastUpdatedAt: Última modificación en reportLastRunTask: Ejecutar última tarea reportStatus:Estado -reportScheduleInfo:Schedule Info +reportScheduleInfo:Información de calendario reportProgress:Progreso reportOutcome: Resultado reportSource: Fuente @@ -816,19 +817,19 @@ riskIncidenceStatusValue[UNMITIGATED]:No mitigado riskIncidenceStatusValue[MITIGATED]:mitigado riskIncidenceStatusValue[ACCEPT_RISK]:Acepta el riesgo riskIncidenceStatusValue[FALSE_POSITIVE]:Falso positivo -riskNotMitigatedIncidences:Not mitigated +riskNotMitigatedIncidences:No mitigado # Representation information representationInformationIdentifier:Identificador representationInformationName:Nombre representationInformationDescription:Descripción -representationInformationFamily:Family -representationInformationTags:Tags -representationInformationSupport:Support level +representationInformationFamily:Familia +representationInformationTags:Etiquetas +representationInformationSupport:Nivel de soporte representationInformationSupportValue:{0} -representationInformationSupportValue[KNOWN]:Known +representationInformationSupportValue[KNOWN]:Conocido representationInformationSupportValue[SUPPORTED]:Soportado -representationInformationSupportValue[UNSUPPORTED]:Unsupported -representationInformationRelationType:Relation type +representationInformationSupportValue[UNSUPPORTED]:No soportado +representationInformationRelationType:Tipo de relación representationInformationRelationObjectType:Tipo de Objeto representationInformationRelationObjectType[AIP]:Entidad intelectual representationInformationRelationObjectType[REPRESENTATION_INFORMATION]:Información de representación @@ -838,44 +839,47 @@ representationInformationRelationLink:Link representationInformationRelationTitle:Titulo representationInformationAddNewRelation:Add new relation representationInformationEditAssociations:Edit associations -representationInformationIntellectualEntities:There are {0,number} intellectual entities associated with this representation information -representationInformationIntellectualEntities[\=0]:There are no intellectual entities associated with this representation information -representationInformationIntellectualEntities[\=1]:There is one intellectual entity associated with this representation information -representationInformationRepresentations:There are {0,number} representations associated with this representation information -representationInformationRepresentations[\=0]:There are no representations associated with this representation information -representationInformationRepresentations[\=1]:There is one representation associated with this representation information -representationInformationFiles:There are {0,number} files associated with this representation information -representationInformationFiles[\=0]:There are no files associated with this representation information -representationInformationFiles[\=1]:There is one file associated with this representation information +representationInformationIntellectualEntities:Hay {0,number} entidades intelectuales asociadas a esta información de representación +representationInformationIntellectualEntities[\=0]:No hay entidades intelectuales asociadas a esta información de representación +representationInformationIntellectualEntities[\=1]:Hay una entidad intelectual asociada a esta información de representación +representationInformationIntellectualEntities[one]:Hay una entidad intelectual asociada a esta información de representación +representationInformationRepresentations:Hay {0,number} representaciones asociadas a esta información de representación +representationInformationRepresentations[\=0]:No hay representaciones asociadas a esta información de representación +representationInformationRepresentations[\=1]:Hay una representación asociada a esta información de representación +representationInformationRepresentations[one]:Hay una representación asociada a esta información de representación +representationInformationFiles:Hay {0,number} archivos asociados a esta información de representación +representationInformationFiles[\=0]:No hay archivos asociados a esta información de representación +representationInformationFiles[\=1]:Hay un archivo asociado a esta información de representación +representationInformationFiles[one]:Hay un archivo asociado a esta información de representación # Descriptive Metadata metadataType:Tipo metadataFilename:Nombre archivo #Other Metadata -otherMetadata:other metadata +otherMetadata:otros metadatos # Browse -appraisalTitle:Assessment +appraisalTitle:Evaluación appraisalAccept:Aceptar appraisalReject:Rechazar transferredResourcesTitle:Recursos transferidos newArchivalPackage:Nuevo -newSublevel:Create sublevel +newSublevel:Crear subnivel moveArchivalPackage:Mover archivalPackagePermissions:Permisos archivalPackagePermissionsTitle:Permiso paquete de archivos disseminationPermissions:Permisos removeArchivalPackage:Eliminar -preservationTitle:Preservation +preservationTitle:Preservación newProcessPreservation:Proceso preservationEvents:Eventos preservationRisks:Riesgos downloadDocumentation:Documentación -downloadNoDocumentationTitle:No documentation -downloadNoDocumentationDescription:There are no documentation on this intellectual entity -downloadSubmissions:Download submissions -downloadNoSubmissionsTitle:No submissions -downloadNoSubmissionsDescription:There are no submissions on this intellectual entity +downloadNoDocumentationTitle:Sin documentación +downloadNoDocumentationDescription:No hay documentación en esta entidad intelectual +downloadSubmissions:Descargar envíos +downloadNoSubmissionsTitle:Sin envíos +downloadNoSubmissionsDescription:No hay envíos en esta entidad intelectual addPermission:Agregar permiso permissionAssignedGroups:Asignar grupo permissionAssignedUsers:Asignar usuarios @@ -885,8 +889,8 @@ listOfAIPs:Lista de AIPs listOfRepresentations:Lista de representación listOfDisseminations:Lista de diseminadores unknownAncestorError:Antecesor desconocido -searchPrevious:Previous -searchNext:Next +searchPrevious:Anterior +searchNext:Siguiente searchContext:En este contexto searchAIP:En este paquete de archivo aipPermissionDetails:Permisos @@ -895,8 +899,8 @@ representation:Representación representationListOfFiles:Lista de archivos representationRemoveTitle:Eliminar representación representationRemoveMessage:¿Seguro que desea eliminar toda la representación? -entityTypeAddNew:Add new ... -entityTypeNewLabel:New type +entityTypeAddNew:Agregar nuevo... +entityTypeNewLabel:Nuevo tipo # File file:Archivo folder:Carpeta @@ -905,7 +909,7 @@ selectedFileRemoveMessage:¿Seguro que desea eliminar los archivos seleccionados # Dissemination dissemination:Diseminación # Dissemination File -disseminationFile:Dissemination File +disseminationFile:Archivo de diseminación # Job processes # Login loginUsername:Nombre de usuario @@ -913,29 +917,29 @@ loginPassword:Contraseña loginRecoverPassword:Recuperar clave loginRegister:Regístrate loginLogin:Usuario -loginResendEmail:Resend verification email -loginResendEmailSuccessDialogTitle:Email verification -loginResendEmailSuccessDialogMessage:Please check your inbox for the verification email and follow the link in the message. +loginResendEmail:Reenviar correo de verificación +loginResendEmailSuccessDialogTitle:Verificación de correo electrónico +loginResendEmailSuccessDialogMessage:Por favor, revise su bandeja de entrada para el correo de verificación y siga el enlace del mensaje. loginResendEmailSuccessDialogButton:De acuerdo -loginResendEmailFailureDialogTitle:Email verification -loginResendEmailFailureDialogMessage:It was not possible to send the verification email. Check the username is correct and try again. +loginResendEmailFailureDialogTitle:Verificación de correo electrónico +loginResendEmailFailureDialogMessage:No fue posible enviar el correo de verificación. Compruebe que el nombre de usuario es correcto e inténtelo de nuevo. loginResendEmailFailureDialogButton:De acuerdo -loginResendEmailVerificationFailure:It was not possible to send the verification email. Check the username is correct and try again. +loginResendEmailVerificationFailure:No fue posible enviar el correo de verificación. Compruebe que el nombre de usuario es correcto e inténtelo de nuevo. fillUsernameAndPasswordMessage:Por favor ingresar usuario y clave wrongUsernameAndPasswordMessage:Usuario o clave incorrecto -emailUnverifiedMessage:You must validate your email to login. Please check your inbox for the verification email and follow the link in the message. To receive a new email click the button "Resend verification email" bellow. If you do not receive any e-mail please contact the administrator. -inactiveUserMessage:Your user was deactivated, please contact the administrator. +emailUnverifiedMessage:Debe validar su correo electrónico para iniciar sesión. Por favor, revise su bandeja de entrada para el correo de verificación y siga el enlace del mensaje. Para recibir un nuevo correo, haga clic en el botón "Reenviar correo de verificación". Si no recibe ningún correo, contacte con el administrador. +inactiveUserMessage:Su usuario ha sido desactivado. Por favor, contacte con el administrador. systemCurrentlyUnavailableMessage:Sistema no disponible en este momento -learnMore:Learn More +learnMore:Más información # More Search -searchDuplicateWarningMessage:The {0} field is duplicated. An 'OR' operator will be used. +searchDuplicateWarningMessage:El campo {0} está duplicado. Se utilizará el operador 'OR'. # Activity log logEntryIdentifier:Identificador logEntryComponent:Componente logEntryMethod:Método logEntryAddress:Dirección logEntryDate:Fecha -logEntryDatetime:Datetime +logEntryDatetime:Fecha y hora logEntryDuration:Duración logEntryRelatedObject:Objeto relacionado logEntryUsername:Nombre de usuario @@ -946,8 +950,8 @@ logEntryStateValue:{0} logEntryStateValue[SUCCESS]:Éxito logEntryStateValue[FAILURE]:Fracaso logEntryStateValue[UNAUTHORIZED]:No autorizado -logEntryInstanceId:Instance -relatedAuditLogs: Related audit logs +logEntryInstanceId:Instancia +relatedAuditLogs: Registros de auditoría relacionados # Notifications notificationAck:Reconocido notificationIdentifier:Identificador @@ -980,47 +984,47 @@ title[browse]:Catalogo title[search]:Buscar title[help]:Ayuda title[administration]:Administración -title[administration_actions]:Preservation actions -title[administration_internal_actions]:Internal actions -title[administration_disposal]:Disposal -title[administration_user]:Users and groups +title[administration_actions]:Acciones de preservación +title[administration_internal_actions]:Acciones internas +title[administration_disposal]:Eliminación +title[administration_user]:Usuarios y grupos title[administration_user_users]:Lista de usuarios title[administration_user_groups]:Lista de grupos title[administration_event]:Programador title[administration_event_tasks]:Programador title[administration_event_taskInstances]:Lista title[administration_metadataEditor]:Edición de metadata -title[administration_statistics]:Reporting -title[administration_log]:Audit logs +title[administration_statistics]:Informes +title[administration_log]:Registros de auditoría title[administration_help]:Ayuda title[administration_preferences]:Preferencias -title[administration_notifications]:Notification logs -title[administration_distributed_instances]:Distributed Instances -title[administration_local_instance_configuration]:Local Instance -title[administration_access_keys]:Access Keys -title[administration_monitoring]:Monitoring -title[administration_market_place]:Marketplace -title[disposal]:Disposal -title[disposal_policies]:Disposal policies -title[disposal_confirmations]:Disposal confirmations -title[overdue_actions]:Overdue records -title[disposal_destroyed_records]:Destroyed records +title[administration_notifications]:Registros de notificaciones +title[administration_distributed_instances]:Instancias distribuidas +title[administration_local_instance_configuration]:Instancia local +title[administration_access_keys]:Tokens de acceso +title[administration_monitoring]:Monitorización +title[administration_market_place]:Mercado de aplicaciones +title[disposal]:Eliminación +title[disposal_policies]:Políticas de eliminación +title[disposal_confirmations]:Confirmaciones de eliminación +title[overdue_actions]:Registros vencidos +title[disposal_destroyed_records]:Registros destruidos title[planning]:Planificando title[planning_monitoring]:Monitoreo interno -title[planning_risk]:Risk register -title[planning_representation_information]:Representation network +title[planning_risk]:Registro de riesgos +title[planning_representation_information]:Red de representación title[planning_event]:Eventos de preservación title[planning_agent]:Agentes de preservación title[planning_format]:Formato de Registro title[ingest]:Ingesta title[ingest_preIngest]:Pre-ingesta -title[ingest_transfer]:Transfer +title[ingest_transfer]:Transferencia title[ingest_submit]:Enviar title[ingest_submit_upload]:Enviar paquete title[ingest_submit_create]:Crear paquete title[ingest_list]:Procesos title[ingest_help]:Ayuda -title[ingest_appraisal]:Assessment +title[ingest_appraisal]:Evaluación title[settings]:Configuración title[language]:Lenguaje # Login Panel @@ -1029,16 +1033,16 @@ loginProfile:Perfil loginDialogTitle:Autenticación loginDialogLogin:Usuario loginDialogCancel:Cancelar -loggedIn:You are already logged in as {0}, you need to log out before logging in again. -welcomePage:Welcome page -casInformationText:You can also integrate with various authentication protocols using RODA Enterprise Identity and Access Management. +loggedIn:Ya ha iniciado sesión como {0}. Debe cerrar sesión antes de volver a iniciar sesión. +welcomePage:Página de bienvenida +casInformationText:También puede integrarse con varios protocolos de autenticación mediante RODA Enterprise Identity and Access Management. casTitleText:RODA Enterprise Identity and Access Management # HOME homeTitle:Ir a inicio # Content Panel authorizationDeniedAlert:Autorización Denegada -authorizationDeniedAlertMessageMissingRoles:Do not have permission to do this operation because your user is missing the roles: {0,list} -authorizationDeniedAlertMessageExceptionSimple:You do not have permission to do this operation.
{0} +authorizationDeniedAlertMessageMissingRoles:No tiene permiso para realizar esta operación porque su usuario carece de los siguientes roles: {0,list} +authorizationDeniedAlertMessageExceptionSimple:No tiene permiso para realizar esta operación.
{0} casForwardWarning:Tienes que estar autenticado para acceder a esta página. ¿Se desea autenticar? # Cookies cookiesMessage:Este sitio web utiliza cookies para asegurarse de obtener la mejor experiencia. @@ -1060,10 +1064,10 @@ createUserCreate:GUARDAR # Show User showUserTitle:Usuario showUserStatusLabel:Estado -showUserActivated:Activated -showUserDeactivated:Deactivated -showUserEmptyGroupList:There is no group associated to this user -showUserEmptyPermissions:There is no permission associated to this user +showUserActivated:Activado +showUserDeactivated:Desactivado +showUserEmptyGroupList:No hay ningún grupo asociado a este usuario +showUserEmptyPermissions:No hay ningún permiso asociado a este usuario # Edit User editUserTitle:Editar usuario editUserCancel:Cancelar @@ -1073,7 +1077,7 @@ editUserRemove:Eliminar editUserApply:Guardar editUserAction:Editar # Pre ingest panel -dropFolderInformationText:Did you know you can integrate with production systems for automatic ingest using RODA Enterprise Drop Folders? +dropFolderInformationText:¿Sabía que puede integrar con sistemas de producción para la ingesta automática con RODA Enterprise Drop Folders? # User Data Panel username:Nombre usuario password:Contraseña @@ -1092,9 +1096,9 @@ createGroupTitle:Crear grupo createGroupCreate:GUARDAR createGroupCancel:CANCELAR # Show Group -showGroupTitle:Group -showGroupEmptyUserList:There is no user associated to this group -showGroupEmptyPermissions:There is no permission associated to this group +showGroupTitle:Grupo +showGroupEmptyUserList:No hay ningún usuario asociado a este grupo +showGroupEmptyPermissions:No hay ningún permiso asociado a este grupo # Edit Group editGroupTitle:Editar grupo editGroupCancel:CANCELAR @@ -1112,7 +1116,7 @@ preferencesSubmit:GUARDAR preferencesCancel:CANCELAR # Roles Description role:{0} (no traducido) -role[aip.view]:Retrieve intellectual entities (AIPs) +role[aip.view]:Recuperar entidades intelectuales (AIPs) role[aip.read]:Lista y obtención de entidades intelectuales (AIPs) role[aip.appraisal]:Aceptar o rechazar entidades intelectuales en la evaluación role[aip.create.top]:Crear entidades intelectuales superiores @@ -1120,7 +1124,7 @@ role[aip.create.below]:Crear entidades intelectuales role[aip.update]:Actualizar entidades intelectuales role[aip.delete]:Eliminar entidades intelectuales -role[representation.view]:Retrieve representations and computer files +role[representation.view]:Recuperar representaciones y archivos role[representation.read]:Listar y obtener representaciones y archivos de computadora role[representation.create]:Crear representaciones y archivos de computadora role[representation.update]:Actualizar representaciones y archivos de computadora @@ -1150,30 +1154,30 @@ role[log_entry.create]:Crear entradas de registro role[log_entry.delete]:Eliminar entradas de registro role[risk.read]:Listar y ver los riesgos de preservación role[risk.manage]:Gestionar los riesgos de preservación -role[ri.read]:List and view representation information -role[ri.manage]:Manage representation information +role[ri.read]:Listar y ver información de representación +role[ri.manage]:Gestionar información de representación role[format.read]:Listar y ver la información del formato de archivo role[format.manage]:Administrar la información del formato de archivo role[permission.read]:Leer y consultar sobre los permisos de otros usuarios -role[disposal_rule.read]:List and view disposal rule information -role[disposal_rule.manage]:Manage disposal rule information -role[disposal_schedule.read]:List and view disposal schedule information -role[disposal_schedule.manage]:Manage disposal schedule information -role[disposal_schedule.associate]:Associate or disassociate disposal schedule from intellectual entities (AIPs) -role[disposal_hold.read]:List and view disposal hold information -role[disposal_hold.manage]:Manage disposal hold information -role[disposal_hold.apply]:Apply or lift disposal hold from intellectual entities (AIPs) -role[disposal_confirmation.read]:List and view disposal confirmation information -role[disposal_confirmation.manage]:Manage disposal confirmation information -role[disposal_confirmation.destroy]:Destroy intellectual entities (AIPs) according to the disposal confirmation -role[disposal_confirmation.restore]:Restore destroyed intellectual entities (AIPs) according to the disposal confirmation -role[disposal_confirmation.delete_bin]:Permanently delete destroyed intellectual entities (AIPs) according to the disposal confirmation -role[distributed_instances.read]:List and view distributed instances -role[distributed_instances.manage]:Manage distributed instances -role[local_instance_configuration.read]:View local instance configuration -role[local_instance_configuration.manage]:Manage local instance configuration -role[access_key.read]:List and view access keys for users and distributed instances -role[access_key.manage]:Manage access keys for users and distributed instances +role[disposal_rule.read]:Listar y ver información de reglas de eliminación +role[disposal_rule.manage]:Gestionar información de reglas de eliminación +role[disposal_schedule.read]:Listar y ver información de calendarios de eliminación +role[disposal_schedule.manage]:Gestionar información de calendarios de eliminación +role[disposal_schedule.associate]:Asociar o desasociar calendarios de eliminación de entidades intelectuales (AIPs) +role[disposal_hold.read]:Listar y ver información de bloqueos de eliminación +role[disposal_hold.manage]:Gestionar información de bloqueos de eliminación +role[disposal_hold.apply]:Aplicar o levantar bloqueos de eliminación de entidades intelectuales (AIPs) +role[disposal_confirmation.read]:Listar y ver información de confirmaciones de eliminación +role[disposal_confirmation.manage]:Gestionar información de confirmaciones de eliminación +role[disposal_confirmation.destroy]:Destruir entidades intelectuales (AIPs) según la confirmación de eliminación +role[disposal_confirmation.restore]:Restaurar entidades intelectuales (AIPs) destruidas según la confirmación de eliminación +role[disposal_confirmation.delete_bin]:Eliminar permanentemente entidades intelectuales (AIPs) destruidas según la confirmación de eliminación +role[distributed_instances.read]:Listar y ver instancias distribuidas +role[distributed_instances.manage]:Gestionar instancias distribuidas +role[local_instance_configuration.read]:Ver configuración de instancia local +role[local_instance_configuration.manage]:Gestionar configuración de instancia local +role[access_key.read]:Listar y ver tokens de acceso de usuarios e instancias distribuidas +role[access_key.manage]:Gestionar tokens de acceso de usuarios e instancias distribuidas # Register registerUserDataTitle:Regístrate registerSubmit:REGISTRATE @@ -1200,22 +1204,22 @@ verifyEmailSuccessDialogMessage:La dirección se ha verificado correctamente. verifyEmailSuccessDialogButton:De acuerdo # Recover Login recoverLoginTitle:Recuperar usuario -recoverLoginEmail:E-mail address +recoverLoginEmail:Dirección de correo electrónico recoverLoginSubmit:RECUPERAR recoverLoginCancel:Cancelar recoverLoginCaptchaFailed:Fallado en la prueba de diferenciación entre seres humanos y computadoras, por favor, inténtelo de nuevo. recoverLoginSuccessDialogTitle:Recuperar registro -recoverLoginSuccessDialogMessage:If this username or email belongs to an existing user, an email will be sent to recover the password. +recoverLoginSuccessDialogMessage:Si este nombre de usuario o correo electrónico pertenece a un usuario existente, se enviará un correo para recuperar la contraseña. recoverLoginSuccessDialogButton:De acuerdo # Reset Password resetPasswordTitle:Borra clave -setPasswordTitle:Set password +setPasswordTitle:Establecer contraseña resetPasswordUsername:Nombre de usuario resetPasswordToken:Clave de verificación resetPasswordNewPassword:Nueva clave resetPasswordRepeatPassword:Repetir clave resetPasswordSubmit:CAMBIO -setPasswordSubmit:SET +setPasswordSubmit:ESTABLECER resetPasswordCancel:Cancelar resetPasswordInvalidToken:La contraseña de recuperación no es válida. Por favor, compruebe si ha introducido la contraseña correcta o pedir uno nuevo. resetPasswordNoSuchUser:El nombre de usuario no existe. Por favor, compruebe si ha introducido la correcta. @@ -1240,19 +1244,19 @@ pluginStateMessage[FAILURE]:Fracaso pluginStateMessage[RUNNING]:Corriendo pluginStateMessage[PARTIAL_SUCCESS]:Éxito parcial pluginStateMessage[SKIPPED]:Omitida -pluginNotInstalledLabel:Not installed -pluginLicenseLabel:Package specifications -pluginDocumentationLabel:Documentation +pluginNotInstalledLabel:No instalado +pluginLicenseLabel:Especificaciones del paquete +pluginDocumentationLabel:Documentación pluginHomepageLabel:Inicio pluginLicenseStatus:{0} -pluginLicenseStatus[INTERNAL]:Built-in -pluginLicenseStatus[VERIFIED]:Verified -pluginLicenseStatus[NOT_VERIFIED]:Not verified -pluginNotInstalledMessage:Please select the "Install" button for more information on how to install this action. -pluginInternalMessage:This action is part of RODA. -pluginTrustedMessage:Developed by {0} and licensed to {1} -pluginUntrustedMessage:Publisher is unknown or it cannot be verified. For security reasons this action cannot be run. -pluginVendorLabel:Vendor: +pluginLicenseStatus[INTERNAL]:Integrado +pluginLicenseStatus[VERIFIED]:Verificado +pluginLicenseStatus[NOT_VERIFIED]:No verificado +pluginNotInstalledMessage:Seleccione el botón «Instalar» para obtener más información sobre cómo instalar esta acción. +pluginInternalMessage:Esta acción forma parte de RODA. +pluginTrustedMessage:Desarrollado por {0} y con licencia para {1} +pluginUntrustedMessage:El editor es desconocido o no se puede verificar. Por razones de seguridad, esta acción no se puede ejecutar. +pluginVendorLabel:Proveedor: notificationStateValue:{0} notificationStateValue[CREATED]:Creado notificationStateValue[COMPLETED]:Éxito @@ -1288,30 +1292,30 @@ versionAction[metadata_type_forced]:Forzar tipo de metadatos versionAction[update_from_sip]:Actualización del SIP versionActionBy:{0} por {1} mandatoryField:Campo obligatorio -numberIsRequired:Number is required +numberIsRequired:Se requiere un número isAMandatoryField:{0} es uno campo obligatorio passwordIsTooSmall:La contraseña es demasiado pequeña passwordDoesNotMatchConfirmation:La contraseña y la confirmación no coinciden -emailNotValid:E-mail is not valid +emailNotValid:El correo electrónico no es válido wrongMailFormat:E-Mail con formato errado fileAlreadyExists:Archivo ya existe tableDownloadCSV:Exportar -tableUpdateOn:Updating every 10 seconds, click to pause. -tableUpdating:Updating... -tableUpdatePause:Paused, click to resume auto-update. -tableUpdateErrorConnection:Could not connect to server. Click to retry. +tableUpdateOn:Actualizando cada 10 segundos, haga clic para pausar. +tableUpdating:Actualizando... +tableUpdatePause:En pausa, haga clic para reanudar la actualización automática. +tableUpdateErrorConnection:No se pudo conectar al servidor. Haga clic para reintentar. actionableEmptyHelp:Por favor, seleccione los elementos mediante las casillas de verificación actionableEmptyHelp[NONE]:Por favor, seleccione los elementos mediante las casillas de verificación actionableEmptyHelp[SINGLE]:No hay acciones disponibles para el ítem seleccionado actionableEmptyHelp[MULTIPLE]:No hay acciones disponibles para los ítems seleccionados showMore:Ver más showLess:Ver menos -uriLinkingIdentifierTitle:External URI -browseFileDipEmpty:No entries -browseFileDipDelete:Delete dissemination -browseFileDipOpenedExternalURL:Opened dissemination in another page -browseFileDipRepresentationConfirmTitle:Confirm dissemination remove -browseFileDipRepresentationConfirmMessage:Are you sure you want to remove this dissemination? +uriLinkingIdentifierTitle:URI externo +browseFileDipEmpty:Sin entradas +browseFileDipDelete:Eliminar diseminación +browseFileDipOpenedExternalURL:Diseminación abierta en otra página +browseFileDipRepresentationConfirmTitle:Confirmar eliminación de diseminación +browseFileDipRepresentationConfirmMessage:¿Está seguro de que desea eliminar esta diseminación? jobReportSource:Fuente jobReportSource[org.roda.core.data.v2.ip.AIP]:Entidade intelectual fuente jobReportSource[org.roda.core.data.v2.ip.Representation]:Representacion fuente @@ -1325,7 +1329,7 @@ jobReportSource[org.roda.core.data.v2.ri.RepresentationInformation]:Información jobReportSource[org.roda.core.data.v2.jobs.Job]:Proceso fuente jobReportSource[org.roda.core.data.v2.jobs.Report]:Reporte fuente jobReportSource[org.roda.core.data.v2.notifications.Notification]:Notificacion fuente -jobReportSource[org.roda.core.data.v2.log.LogEntry]:Source audit log +jobReportSource[org.roda.core.data.v2.log.LogEntry]:Registro de auditoría fuente jobReportSource[org.roda.core.data.v2.user.RODAMember]:Miembro fuente jobReportSource[org.roda.core.data.v2.ip.metadata.DescriptiveMetadata]:Metadatos descriptivos fuente jobReportSource[org.roda.core.data.v2.ip.metadata.PreservationMetadata]:Metadatos de preservación fuente @@ -1343,382 +1347,388 @@ jobReportOutcome[org.roda.core.data.v2.ri.RepresentationInformation]:Informació jobReportOutcome[org.roda.core.data.v2.jobs.Job]:Proceso resultado jobReportOutcome[org.roda.core.data.v2.jobs.Report]:Reporte resultado jobReportOutcome[org.roda.core.data.v2.notifications.Notification]:Notificacion resultado -jobReportOutcome[org.roda.core.data.v2.log.LogEntry]:Outcome audit log +jobReportOutcome[org.roda.core.data.v2.log.LogEntry]:Registro de auditoría resultado jobReportOutcome[org.roda.core.data.v2.user.RODAMember]:Miembro resultado jobReportOutcome[org.roda.core.data.v2.ip.metadata.DescriptiveMetadata]:Metadatos descriptivos resultado jobReportOutcome[org.roda.core.data.v2.ip.metadata.PreservationMetadata]:Metadatos de preservación resultado jobReportOutcome[org.roda.core.data.v2.formats.Format]:Formato resultado -sourceObjectList:A manually selected list with {0} {1} +sourceObjectList:Una lista seleccionada manualmente con {0} {1} runningInBackgroundTitle:La acción se está ejecutando en último plano -runningInBackgroundDescription:The progress of the action can be monitored on the internal actions page -exportListTitle:Exporting list -exportListMessage:Exporting list with a maximum limit of {0} items +runningInBackgroundDescription:El progreso de la acción puede monitorizarse en la página de acciones internas +exportListTitle:Exportando lista +exportListMessage:Exportando lista con un límite máximo de {0} elementos representationInformationAssociatedWith: -representationInformationAssociatedWith[AIP]:Associated with intellectual entities where field {0} is {1} -representationInformationAssociatedWith[Representation]:Associated with representations where field {0} is {1} -representationInformationAssociatedWith[File]:Associated with files where field {0} is {1} -representationInformationAssociatedWithDescription:This page presents information that maps {2} where field {0} is {1} into more meaningful concepts, including structure information about how the information is organized, semantic information that further describes the meaning of encoded information, and other information useful for the understanding of the content. Each record of representation information can be connected to other representation information, intellectual entities and external resources (e.g. Web pages or books) creating a representation network that aims to fully describe the meaning of the digital object. -representationInformationAssociatedWithDescription[AIP]:This page presents information that maps intellectual entities where field {0} is {1} into more meaningful concepts, including structure information about how the information is organized, semantic information that further describes the meaning of encoded information, and other information useful for the understanding of the content. Each record of representation information can be connected to other representation information, intellectual entities and external resources (e.g. Web pages or books) creating a representation network that aims to fully describe the meaning of the digital object. -representationInformationAssociatedWithDescription[Representation]:This page presents information that maps representations where field {0} is {1} into more meaningful concepts, including structure information about how the information is organized, semantic information that further describes the meaning of encoded information, and other information useful for the understanding of the content. Each record of representation information can be connected to other representation information, intellectual entities and external resources (e.g. Web pages or books) creating a representation network that aims to fully describe the meaning of the digital object. -representationInformationAssociatedWithDescription[File]:This page presents information that maps files where field {0} is {1} into more meaningful concepts, including structure information about how the information is organized, semantic information that further describes the meaning of encoded information, and other information useful for the understanding of the content. Each record of representation information can be connected to other representation information, intellectual entities and external resources (e.g. Web pages or books) creating a representation network that aims to fully describe the meaning of the digital object. +representationInformationAssociatedWith[AIP]:Asociado con entidades intelectuales donde el campo {0} es {1} +representationInformationAssociatedWith[Representation]:Asociado con representaciones donde el campo {0} es {1} +representationInformationAssociatedWith[File]:Asociado con archivos donde el campo {0} es {1} +representationInformationAssociatedWithDescription:Esta página presenta información que mapea {2} donde el campo {0} es {1} en conceptos más significativos, incluyendo información de estructura sobre cómo está organizada la información, información semántica que describe el significado de la información codificada, y otra información útil para comprender el contenido. Cada registro de información de representación puede conectarse a otra información de representación, entidades intelectuales y recursos externos (p. ej. páginas web o libros) creando una red de representación que busca describir completamente el significado del objeto digital. +representationInformationAssociatedWithDescription[AIP]:Esta página presenta información que mapea entidades intelectuales donde el campo {0} es {1} en conceptos más significativos, incluyendo información de estructura sobre cómo está organizada la información, información semántica que describe el significado de la información codificada, y otra información útil para comprender el contenido. Cada registro de información de representación puede conectarse a otra información de representación, entidades intelectuales y recursos externos (p. ej. páginas web o libros) creando una red de representación que busca describir completamente el significado del objeto digital. +representationInformationAssociatedWithDescription[Representation]:Esta página presenta información que mapea representaciones donde el campo {0} es {1} en conceptos más significativos, incluyendo información de estructura sobre cómo está organizada la información, información semántica que describe el significado de la información codificada, y otra información útil para comprender el contenido. Cada registro de información de representación puede conectarse a otra información de representación, entidades intelectuales y recursos externos (p. ej. páginas web o libros) creando una red de representación que busca describir completamente el significado del objeto digital. +representationInformationAssociatedWithDescription[File]:Esta página presenta información que mapea archivos donde el campo {0} es {1} en conceptos más significativos, incluyendo información de estructura sobre cómo está organizada la información, información semántica que describe el significado de la información codificada, y otra información útil para comprender el contenido. Cada registro de información de representación puede conectarse a otra información de representación, entidades intelectuales y recursos externos (p. ej. páginas web o libros) creando una red de representación que busca describir completamente el significado del objeto digital. representationInformationNameFromAssociation: -representationInformationNameFromAssociation[AIP]:Intellectual entities where field {0} is {1} -representationInformationNameFromAssociation[Representation]:Representations where field {0} is {1} -representationInformationNameFromAssociation[File]:Files where field {0} is {1} -insertImageUrl:Insert a image URL -insertLinkUrl:Insert a URL -editHTMLContent:Edit content via HTML -searchButtonAdvancedSearch:advanced +representationInformationNameFromAssociation[AIP]:Entidades intelectuales donde el campo {0} es {1} +representationInformationNameFromAssociation[Representation]:Representaciones donde el campo {0} es {1} +representationInformationNameFromAssociation[File]:Archivos donde el campo {0} es {1} +insertImageUrl:Insertar una URL de imagen +insertLinkUrl:Insertar una URL +editHTMLContent:Editar contenido mediante HTML +searchButtonAdvancedSearch:avanzado details:Detalles -selectAllPages:Select all pages -selectThisPage:Select this page -dateRangeFieldFrom:from -dateRangeFieldTo:to -inputStorageSizeList:Units -removableTextBox:Removable text box +selectAllPages:Seleccionar todas las páginas +selectThisPage:Seleccionar esta página +dateRangeFieldFrom:desde +dateRangeFieldTo:hasta +inputStorageSizeList:Unidades +removableTextBox:Campo de texto eliminable defaultColumnHeader:{0} -defaultColumnHeader[default_IndexedAIP_level]: Level -defaultColumnHeader[default_IndexedAIP_hasrepresentations]: +defaultColumnHeader[default_IndexedAIP_level]: Nivel +defaultColumnHeader[default_IndexedAIP_hasrepresentations]: defaultColumnHeader[default_IndexedFile_icon]: #Disposal -disposalPolicyTitle:Disposal policies -disposalRulesTitle:Disposal rules -disposalSchedulesTitle:Disposal schedules -disposalHoldsTitle:Disposal holds -disposalDestroyedRecordsTitle:Destroyed records -disposalConfirmationsTitle:Disposal confirmations -createDisposalConfirmationTitle:Create disposal confirmation -createDisposalConfirmationExtraInformationTitle:Disposal confirmation metadata information +disposalPolicyTitle:Políticas de eliminación +disposalRulesTitle:Reglas de eliminación +disposalSchedulesTitle:Calendarios de eliminación +disposalHoldsTitle:Bloqueos de eliminación +disposalDestroyedRecordsTitle:Registros destruidos +disposalConfirmationsTitle:Confirmaciones de eliminación +createDisposalConfirmationTitle:Crear confirmación de eliminación +createDisposalConfirmationExtraInformationTitle:Información de metadatos de la confirmación de eliminación disposalScheduleTitle:Titulo disposalScheduleIdentifier:Identificador disposalScheduleDescription:Descripción -disposalScheduleMandate:Mandate -disposalScheduleNotes:Scope notes -disposalSchedulePeriod:Period +disposalScheduleMandate:Mandato +disposalScheduleNotes:Notas de alcance +disposalSchedulePeriod:Período disposalScheduleActionCol:Acción disposalScheduleAction:{0} -disposalScheduleAction[DESTROY]:Destroy -disposalScheduleAction[REVIEW]:Review -disposalScheduleAction[RETAIN_PERMANENTLY]:Retain permanently -disposalScheduleRetentionTriggerElementId:Retention trigger element identifier -disposalScheduleRetentionPeriodInterval:Retention period interval +disposalScheduleAction[DESTROY]:Destruir +disposalScheduleAction[REVIEW]:Revisión +disposalScheduleAction[RETAIN_PERMANENTLY]:Conservar permanentemente +disposalScheduleRetentionTriggerElementId:Identificador del elemento de activación de retención +disposalScheduleRetentionPeriodInterval:Intervalo del período de retención disposalScheduleRetentionPeriodIntervalValue:{0} -disposalScheduleRetentionPeriodIntervalValue[NO_RETENTION_PERIOD]:No retention period -disposalScheduleRetentionPeriodIntervalValue[DAYS]:Days -disposalScheduleRetentionPeriodIntervalValue[WEEKS]:Weeks -disposalScheduleRetentionPeriodIntervalValue[MONTHS]:Months -disposalScheduleRetentionPeriodIntervalValue[YEARS]:Years -disposalScheduleRetentionPeriodDuration:Retention period -disposalScheduleStateCol:State +disposalScheduleRetentionPeriodIntervalValue[NO_RETENTION_PERIOD]:Sin período de retención +disposalScheduleRetentionPeriodIntervalValue[DAYS]:Días +disposalScheduleRetentionPeriodIntervalValue[WEEKS]:Semanas +disposalScheduleRetentionPeriodIntervalValue[MONTHS]:Meses +disposalScheduleRetentionPeriodIntervalValue[YEARS]:Años +disposalScheduleRetentionPeriodDuration:Período de retención +disposalScheduleStateCol:Estado disposalScheduleState:{0} disposalScheduleState[ACTIVE]:Activo -disposalScheduleState[INACTIVE]:Inactive -disposalScheduleUsedInRule:Is being used in a disposal rule +disposalScheduleState[INACTIVE]:Inactivo +disposalScheduleUsedInRule:Está siendo usado en una regla de eliminación disposalHoldTitle:Titulo disposalHoldIdentifier:Identificador disposalHoldDescription:Descripción -disposalHoldMandate:Mandate -disposalHoldNotes:Scope notes -disposalHoldStateCol:State +disposalHoldMandate:Mandato +disposalHoldNotes:Notas de alcance +disposalHoldStateCol:Estado disposalHoldState:{0} disposalHoldState[ACTIVE]:Activo -disposalHoldState[LIFTED]:Lifted -newDisposalRuleTitle:Create disposal rule -newDisposalScheduleTitle:Create disposal schedule -newDisposalHoldTitle:Create disposal hold -editDisposalRuleTitle:Edit disposal rule -editDisposalScheduleTitle:Edit disposal schedule -editDisposalHoldTitle:Edit disposal hold -editRules:Prioritize rules -applyRules:Apply rules +disposalHoldState[LIFTED]:Levantado +newDisposalRuleTitle:Crear regla de eliminación +newDisposalScheduleTitle:Crear calendario de eliminación +newDisposalHoldTitle:Crear bloqueo de eliminación +editDisposalRuleTitle:Editar regla de eliminación +editDisposalScheduleTitle:Editar calendario de eliminación +editDisposalHoldTitle:Editar bloqueo de eliminación +editRules:Priorizar reglas +applyRules:Aplicar reglas disposalConfirmationTitle:Titulo disposalConfirmationCreationDate:Fecha de creación disposalConfirmationCreationBy:Creador disposalConfirmationStatus:Estado disposalConfirmationAIPs:# AIP -disposalConfirmationSize:Storage size +disposalConfirmationSize:Tamaño de almacenamiento disposalConfirmationState:{0} -disposalConfirmationState[APPROVED]:Approved -disposalConfirmationState[PENDING]:Pending -disposalConfirmationState[RESTORED]:Restored +disposalConfirmationState[APPROVED]:Aprobado +disposalConfirmationState[PENDING]:Pendiente +disposalConfirmationState[RESTORED]:Restaurado disposalConfirmationState[PERMANENTLY_DELETED]:Eliminado -disposalConfirmationState[EXECUTION_FAILED]:Execution Failed -createDisposalRuleFailure:Could not create disposal rule due to an error: {0}. -createDisposalHoldAlreadyExists:There is already a disposal hold with the title {0}, please choose another title. -createDisposalHoldFailure:Could not create disposal hold due to an error: {0}. -showDisposalRuleTitle:Disposal rule -showDisposalHoldTitle:Disposal hold -showDisposalScheduleTitle:Disposal Schedule -applyDisposalScheduleButton:Destroy +disposalConfirmationState[EXECUTION_FAILED]:Ejecución fallida +createDisposalRuleFailure:No se pudo crear la regla de eliminación debido a un error: {0}. +createDisposalHoldAlreadyExists:Ya existe un bloqueo de eliminación con el título {0}. Por favor, elija otro título. +createDisposalHoldFailure:No se pudo crear el bloqueo de eliminación debido a un error: {0}. +showDisposalRuleTitle:Regla de eliminación +showDisposalHoldTitle:Bloqueo de eliminación +showDisposalScheduleTitle:Calendario de eliminación +applyDisposalScheduleButton:Destruir deleteDisposalConfirmationReport:Eliminar -permanentlyDeleteFromBinButton:Permanently delete -reExecuteDisposalDestroyActionButton:Re-execute destruction -recoverDisposalConfirmationExecutionFailedButton:Recover AIPs -restoreFromBinButton:Restore -newDisposalConfirmationButton:New confirmation -disassociateDisposalScheduleButton:Disassociate schedule -disassociateDisposalHoldButton:Disassociate hold -associateDisposalScheduleButton:Associate disposal schedule -createDisposalScheduleButton:Create schedule -disposalScheduleSelectionDialogTitle:Change disposal schedule -changeDisposalScheduleActionTitle:Change disposal schedule -createDisposalConfirmationActionTitle:Create disposal confirmation -dissociateDisposalScheduleDialogTitle:Confirm schedule disassociation of intellectual entities -dissociateDisposalScheduleDialogMessage:Are you sure you want to disassociate the schedule for the selected {0} items? -createDisposalConfirmationReportDialogTitle:Confirming intellectual entities to be destroyed -createDisposalConfirmationReportDialogMessage:Are you sure you want to create a disposal confirmation for the selected {0} items? -associateDisposalScheduleDialogTitle:Confirm schedule association of intellectual entities -associateDisposalScheduleDialogMessage:Are you sure you want to associate the schedule for the selected {0} items? -disposalRetentionStartDateLabel:Retention start date -disposalRetentionDueDateLabel:Retention due date -disposalRetentionPeriodLabel:Retention period -disposalActionLabel:Disposal action -holdStatusLabel:Hold status -disposalOnHoldStatusLabel:On hold -disposalClearStatusLabel:Not on hold -disposalScheduleListAips:Records with this schedule -disposalHoldListAips:Records with this hold -deleteConfirmationReportDialogTitle:Confirm intellectual entities deletion -deleteConfirmationReportDialogMessage:Are you sure you want to withdraw the intellectual entities from this disposal confirmation? -deleteConfirmationReportSuccessTitle:Deleting disposal confirmation -deleteConfirmationReportSuccessMessage:Execute action to delete disposal confirmation +permanentlyDeleteFromBinButton:Eliminar permanentemente +reExecuteDisposalDestroyActionButton:Reejecutar destrucción +recoverDisposalConfirmationExecutionFailedButton:Recuperar AIPs +restoreFromBinButton:Restaurar +newDisposalConfirmationButton:Nueva confirmación +disassociateDisposalScheduleButton:Desasociar calendario +disassociateDisposalHoldButton:Desasociar bloqueo +associateDisposalScheduleButton:Asociar calendario de eliminación +createDisposalScheduleButton:Crear calendario +disposalScheduleSelectionDialogTitle:Cambiar calendario de eliminación +changeDisposalScheduleActionTitle:Cambiar calendario de eliminación +createDisposalConfirmationActionTitle:Crear confirmación de eliminación +dissociateDisposalScheduleDialogTitle:Confirmar disociación de calendario de entidades intelectuales +dissociateDisposalScheduleDialogMessage:¿Está seguro de que desea disociar el calendario para los {0} elementos seleccionados? +createDisposalConfirmationReportDialogTitle:Confirmando entidades intelectuales a destruir +createDisposalConfirmationReportDialogMessage:¿Está seguro de que desea crear una confirmación de eliminación para los {0} elementos seleccionados? +associateDisposalScheduleDialogTitle:Confirmar asociación de calendario de entidades intelectuales +associateDisposalScheduleDialogMessage:¿Está seguro de que desea asociar el calendario para los {0} elementos seleccionados? +disposalRetentionStartDateLabel:Fecha de inicio de retención +disposalRetentionDueDateLabel:Fecha de vencimiento de retención +disposalRetentionPeriodLabel:Período de retención +disposalActionLabel:Acción de eliminación +holdStatusLabel:Estado de bloqueo +disposalOnHoldStatusLabel:En retención +disposalClearStatusLabel:Sin retención +disposalScheduleListAips:Registros con este calendario +disposalHoldListAips:Registros con este bloqueo +deleteConfirmationReportDialogTitle:Confirmar eliminación de entidades intelectuales +deleteConfirmationReportDialogMessage:¿Está seguro de que desea retirar las entidades intelectuales de esta confirmación de eliminación? +deleteConfirmationReportSuccessTitle:Eliminando confirmación de eliminación +deleteConfirmationReportSuccessMessage:Ejecutar acción para eliminar confirmación de eliminación disposalConfirmationDataPanelTitle:Titulo -disposalConfirmationDataNote:(*) Required fields +disposalConfirmationDataNote:(*) Campos obligatorios disposalRuleTitle:Titulo disposalRuleIdentifier:Identificador disposalRuleDescription:Descripción -disposalRuleScheduleName:Schedule -disposalRuleType:Selection method +disposalRuleScheduleName:Calendario +disposalRuleType:Método de selección disposalRuleOrder:# -disposalRuleCondition:Condition -disposalRuleConditionOperator:is +disposalRuleCondition:Condición +disposalRuleConditionOperator:es disposalRuleTypeValue:{0} -disposalRuleTypeValue[IS_CHILD_OF]:Child of -disposalRuleTypeValue[METADATA_FIELD]:Metadata field -disposalRulePreviewAIPListTitle:Preview records that match the selection method criteria -disposalRulePreviewHelpText:Select a selection method and add the criteria. Click Preview to check which intellectual entities will be affected by this disposal rule. -disposalRulePreviewButtonText:Preview -disposalTitle:Disposal -conditionActualParent:Actual parent -editRulesOrder:Edit rules order -confirmChangeRulesOrder:Are you sure you want to change the order of the disposal rules? -deleteDisposalRuleDialogTitle:Remove disposal rule -deleteDisposalRuleDialogMessage:Are you sure you want to remove the disposal rule {0}? -associateDisposalHoldButton:Associate disposal hold -disposalHoldSelectionDialogTitle:Associate disposal hold -applyDisposalHoldDialogTitle:Confirm disposal hold association to intellectual entity -applyDisposalHoldDialogMessage[one]:Are you sure you want to apply the disposal hold to the selected item? -applyDisposalHoldDialogMessage:Are you sure you want to apply the disposal hold to the selected {0, number} items? -applyDisposalHoldButton:Associate disposal hold -createDisposalHoldButton:Create disposal hold -clearDisposalHoldButton:Clear disposal holds -overrideDisposalHoldButton:Override disposal hold -clearDisposalHoldDialogTitle:Clear disposal holds -clearDisposalHoldDialogMessage[one]:Are you sure you want to disassociate all disposal holds from the selected item? -clearDisposalHoldDialogMessage:Are you sure you want to disassociate all disposal holds from the selected {0, number} items? -liftDisposalHoldDialogTitle:Lift disposal hold -liftDisposalHoldDialogMessage[\=1]:Are you sure you want to lift the disposal hold? -liftDisposalHoldDialogMessage:Are you sure you want to lift the {0, number} selected disposal holds? -disassociateDisposalHoldDialogTitle:Disassociate disposal hold -disassociateDisposalHoldDialogMessage[one]:Are you sure you want to disassociate the disposal hold from the selected item? -disassociateDisposalHoldDialogMessage:Are you sure you want to disassociate the disposal hold from the selected {0, number} items? -disassociateDisposalScheduleDialogTitle:Disassociate disposal schedule -disassociateDisposalScheduleDialogMessage[one]:Are you sure you want to disassociate the disposal schedule from the selected item? -disassociateDisposalScheduleDialogMessage:Are you sure you want to disassociate the disposal schedule from the selected {0, number} items? -disposalHoldAssociatedOn:Associated on -disposalHoldAssociatedBy:Associated by -disposalHoldAssociatedFrom:Associated from +disposalRuleTypeValue[IS_CHILD_OF]:Elemento subordinado de +disposalRuleTypeValue[METADATA_FIELD]:Campo de metadatos +disposalRulePreviewAIPListTitle:Vista previa de registros que coinciden con los criterios del método de selección +disposalRulePreviewHelpText:Seleccione un método de selección y añada los criterios. Haga clic en Vista previa para comprobar qué entidades intelectuales se verán afectadas por esta regla de eliminación. +disposalRulePreviewButtonText:Vista previa +disposalTitle:Eliminación +conditionActualParent:Elemento padre actual +editRulesOrder:Editar orden de reglas +confirmChangeRulesOrder:¿Está seguro de que desea cambiar el orden de las reglas de eliminación? +deleteDisposalRuleDialogTitle:Eliminar regla de eliminación +deleteDisposalRuleDialogMessage:¿Está seguro de que desea eliminar la regla de eliminación {0}? +associateDisposalHoldButton:Asociar bloqueo de eliminación +disposalHoldSelectionDialogTitle:Asociar bloqueo de eliminación +applyDisposalHoldDialogTitle:Confirmar asociación de bloqueo de eliminación a entidad intelectual +applyDisposalHoldDialogMessage[one]:¿Está seguro de que desea aplicar el bloqueo de eliminación al elemento seleccionado? +applyDisposalHoldDialogMessage:¿Está seguro de que desea aplicar el bloqueo de eliminación a los {0, number} elementos seleccionados? +applyDisposalHoldButton:Asociar bloqueo de eliminación +createDisposalHoldButton:Crear bloqueo de eliminación +clearDisposalHoldButton:Eliminar bloqueos de eliminación +overrideDisposalHoldButton:Anular bloqueo de eliminación +clearDisposalHoldDialogTitle:Eliminar bloqueos de eliminación +clearDisposalHoldDialogMessage[one]:¿Está seguro de que desea desasociar todos los bloqueos de eliminación del elemento seleccionado? +clearDisposalHoldDialogMessage:¿Está seguro de que desea desasociar todos los bloqueos de eliminación de los {0, number} elementos seleccionados? +liftDisposalHoldDialogTitle:Levantar bloqueo de eliminación +liftDisposalHoldDialogMessage[\=1]:¿Está seguro de que desea levantar el bloqueo de eliminación? +liftDisposalHoldDialogMessage[one]:¿Está seguro de que desea levantar el bloqueo de eliminación? +liftDisposalHoldDialogMessage:¿Está seguro de que desea levantar los {0, number} bloqueos de eliminación seleccionados? +disassociateDisposalHoldDialogTitle:Desasociar bloqueo de eliminación +disassociateDisposalHoldDialogMessage[one]:¿Está seguro de que desea desasociar el bloqueo de eliminación del elemento seleccionado? +disassociateDisposalHoldDialogMessage:¿Está seguro de que desea desasociar el bloqueo de eliminación de los {0, number} elementos seleccionados? +disassociateDisposalScheduleDialogTitle:Desasociar calendario de eliminación +disassociateDisposalScheduleDialogMessage[one]:¿Está seguro de que desea desasociar el calendario de eliminación del elemento seleccionado? +disassociateDisposalScheduleDialogMessage:¿Está seguro de que desea desasociar el calendario de eliminación de los {0, number} elementos seleccionados? +disposalHoldAssociatedOn:Asociado el +disposalHoldAssociatedBy:Asociado por +disposalHoldAssociatedFrom:Asociado desde disposalHoldAssociatedFromValue[\=1]:{0} AIP +disposalHoldAssociatedFromValue[one]:{0} AIP disposalHoldAssociatedFromValue:{0} AIPs -disposalScheduleAssociationInformationTitle:Retention period -disposalScheduleAssociationTitle:Disposal schedule -disposalConfirmationAssociationInformationTitle:Disposal confirmation -disposalConfirmationAssociationTitle:Disposal confirmation -disposalHoldsAssociationInformationTitle:Disposal holds -transitiveDisposalHoldsAssociationInformationTitle:Transitive disposal holds assigned through other intellectual entity +disposalScheduleAssociationInformationTitle:Período de retención +disposalScheduleAssociationTitle:Calendario de eliminación +disposalConfirmationAssociationInformationTitle:Confirmación de eliminación +disposalConfirmationAssociationTitle:Confirmación de eliminación +disposalHoldsAssociationInformationTitle:Bloqueos de eliminación +transitiveDisposalHoldsAssociationInformationTitle:Bloqueos de eliminación transitivos asignados a través de otra entidad intelectual disposalScheduleActionCode:{0} -disposalScheduleActionCode[RETAIN_PERMANENTLY]:Retain permanently -disposalScheduleActionCode[REVIEW]:Review -disposalScheduleActionCode[DESTROY]:Destroy -disposalPolicyScheduleSummary:Due for {0} {1} -disposalPolicyHoldSummary:On hold -disposalPolicyConfirmationSummary:Assigned to a disposal confirmation +disposalScheduleActionCode[RETAIN_PERMANENTLY]:Conservar permanentemente +disposalScheduleActionCode[REVIEW]:Revisión +disposalScheduleActionCode[DESTROY]:Destruir +disposalPolicyScheduleSummary:Vence para {0} {1} +disposalPolicyHoldSummary:En retención +disposalPolicyConfirmationSummary:Asignado a una confirmación de eliminación disposalPolicyActionSummary:{0} -disposalPolicyActionSummary[REVIEW]:revision -disposalPolicyActionSummary[DESTROY]:destruction -disposalPolicyScheduleMonthSummary[one]:in 1 month -disposalPolicyScheduleMonthSummary:in {0,number} months -disposalPolicyScheduleYearSummary[one]:in 1 year -disposalPolicyScheduleYearSummary:in {0,number} years -disposalPolicyScheduleDaySummary[\=0]:today -disposalPolicyScheduleDaySummary[one]:tomorrow -disposalPolicyScheduleDaySummary:in {0,number} days -disposalPolicySummaryReady:Overdue for {0} +disposalPolicyActionSummary[REVIEW]:revisión +disposalPolicyActionSummary[DESTROY]:destrucción +disposalPolicyScheduleMonthSummary[one]:en 1 mes +disposalPolicyScheduleMonthSummary:en {0,number} meses +disposalPolicyScheduleYearSummary[one]:en 1 año +disposalPolicyScheduleYearSummary:en {0,number} años +disposalPolicyScheduleDaySummary[\=0]:hoy +disposalPolicyScheduleDaySummary[one]:mañana +disposalPolicyScheduleDaySummary:en {0,number} días +disposalPolicySummaryReady:Vencido para {0} permanentlyRetained:Nunca -disposalPolicyRetainPermanently:Permanently retained -disposalPolicyDestroyedAIPSummary:Destroyed on {0} +disposalPolicyRetainPermanently:Conservado permanentemente +disposalPolicyDestroyedAIPSummary:Destruido el {0} retentionPeriod:{0} retentionPeriod[\=1|DAYS]:1 día -retentionPeriod[other|DAYS]:{0,number} days -retentionPeriod[\=1|WEEKS]:1 week -retentionPeriod[other|WEEKS]:{0,number} weeks -retentionPeriod[\=1|MONTHS]:1 month -retentionPeriod[other|MONTHS]:{0,number} months -retentionPeriod[\=1|YEARS]:1 year -retentionPeriod[other|YEARS]:{0,number} years -retentionPeriod[other|NO_RETENTION_PERIOD]:No retention period -permanentlyDeleteConfirmDialogTitle:Permanently delete records from disposal bin -permanentlyDeleteConfirmDialogMessage:Are you sure you want to permanently delete the records from disposal bin? This action can not be undone once executed. -restoreDestroyedRecordsConfirmDialogTitle:Restore destroyed records from disposal bin -restoreDestroyedRecordsConfirmDialogMessage:Are you sure you want to restore the records from disposal bin? -restoreDestroyedRecordsSuccessTitle:Restoring records from disposal bin -restoreDestroyedRecordsSuccessMessage:Execute action to restore records -recoverDestroyedRecordsConfirmDialogTitle:Recover destroyed records from a failed execution -recoverDestroyedRecordsConfirmDialogMessage:Are you sure you want to recover the records from this disposal confirmation? -recoverDestroyedRecordsSuccessTitle:Recovering records from a failed execution -recoverDestroyedRecordsSuccessMessage:Execute action to recover records -permanentlyDeleteRecordsSuccessTitle:Permanently delete records from disposal bin -permanentlyDeleteRecordsSuccessMessage:Execute action to permanently delete records -disposalScheduleAssociationTypeLabel:Association type +retentionPeriod[one|DAYS]:1 día +retentionPeriod[other|DAYS]:{0,number} días +retentionPeriod[\=1|WEEKS]:1 semana +retentionPeriod[one|WEEKS]:1 semana +retentionPeriod[other|WEEKS]:{0,number} semanas +retentionPeriod[\=1|MONTHS]:1 mes +retentionPeriod[one|MONTHS]:1 mes +retentionPeriod[other|MONTHS]:{0,number} meses +retentionPeriod[\=1|YEARS]:1 año +retentionPeriod[one|YEARS]:1 año +retentionPeriod[other|YEARS]:{0,number} años +retentionPeriod[other|NO_RETENTION_PERIOD]:Sin período de retención +permanentlyDeleteConfirmDialogTitle:Eliminar permanentemente registros de la papelera de eliminación +permanentlyDeleteConfirmDialogMessage:¿Está seguro de que desea eliminar permanentemente los registros de la papelera de eliminación? Esta acción no se puede deshacer una vez ejecutada. +restoreDestroyedRecordsConfirmDialogTitle:Restaurar registros destruidos de la papelera de eliminación +restoreDestroyedRecordsConfirmDialogMessage:¿Está seguro de que desea restaurar los registros de la papelera de eliminación? +restoreDestroyedRecordsSuccessTitle:Restaurando registros de la papelera de eliminación +restoreDestroyedRecordsSuccessMessage:Ejecutar acción para restaurar registros +recoverDestroyedRecordsConfirmDialogTitle:Recuperar registros destruidos de una ejecución fallida +recoverDestroyedRecordsConfirmDialogMessage:¿Está seguro de que desea recuperar los registros de esta confirmación de eliminación? +recoverDestroyedRecordsSuccessTitle:Recuperando registros de una ejecución fallida +recoverDestroyedRecordsSuccessMessage:Ejecutar acción para recuperar registros +permanentlyDeleteRecordsSuccessTitle:Eliminar permanentemente registros de la papelera de eliminación +permanentlyDeleteRecordsSuccessMessage:Ejecutar acción para eliminar permanentemente los registros +disposalScheduleAssociationTypeLabel:Tipo de asociación disposalScheduleAssociationType:{0} -disposalScheduleAssociationType[MANUAL]:Manually -disposalScheduleAssociationType[RULES]:Via disposal rules -applyDisposalRulesDialogTitle:Apply disposal rules to repository -applyDisposalRulesDialogMessage:Are you sure you want to apply the disposal rules? This may affect all the intellectual entities and their schedules. -applyDisposalRulesDialogExplanation:This process will go over all intellectual entities in the repository and apply a disposal schedule according the disposal rules defined. On apply rules and override, disposal schedules that were manually associated to an intellectual entity may be associated to a different disposal schedule. On apply rules, disposal schedules manually associated will be skipped during the process. -deleteDisposalRuleSuccessTitle:Disposal rule removed -deleteDisposalRuleSuccessMessage:Disposal rule {0} successfully removed -updateDisposalRulesOrderSuccessTitle:Update disposal rules order -updateDisposalRulesOrderSuccessMessage:Disposal rules order successfully updated -confirmEditRuleMessage:The current changes may affect the disposal rules. Do you want to proceed? -disposalPolicyRetentionPeriodCalculationError:Retention period failed to be calculated -disposalConfirmationShowRecordsToDestroy:Show records to destroy -disposalConfirmationShowRecordsToReview:Show records to review -disposalConfirmationShowRecordsRetentionPeriodCalculationError:Retention period errors -updateDisposalHoldMessage:Lifting the disposal hold -deleteDisposalSchedule: Disposal schedule {0} was successfully removed -searchPrefilterDescendantsOf: Descendants of {0} -searchPreFilterInThisPackage: In the package {0} -searchPrefilterTransitiveHolds: Transitive holds -searchPrefilterCreatedByJob: Created by ingest process {0} -genericSearchWithPrefilterTitle: Search with prefilter -saveSearchTitle: Save search -saveSearchDescription: Please provide a title for this search. This will help you better identify what is the search context. -promptDialogErrorMessageForSavedSearchTitle: The symbol / is not allowed -promptDialogEmptyInputError: Please provide a value +disposalScheduleAssociationType[MANUAL]:Manualmente +disposalScheduleAssociationType[RULES]:Mediante reglas de eliminación +applyDisposalRulesDialogTitle:Aplicar reglas de eliminación al repositorio +applyDisposalRulesDialogMessage:¿Está seguro de que desea aplicar las reglas de eliminación? Esto puede afectar a todas las entidades intelectuales y sus calendarios. +applyDisposalRulesDialogExplanation:Este proceso recorrerá todas las entidades intelectuales del repositorio y aplicará un calendario de eliminación según las reglas definidas. Con aplicar reglas y anular, los calendarios asociados manualmente pueden asignarse a un calendario diferente. Con aplicar reglas, los calendarios asociados manualmente se omitirán durante el proceso. +deleteDisposalRuleSuccessTitle:Regla de eliminación eliminada +deleteDisposalRuleSuccessMessage:Regla de eliminación {0} eliminada correctamente +updateDisposalRulesOrderSuccessTitle:Actualizar orden de reglas de eliminación +updateDisposalRulesOrderSuccessMessage:Orden de reglas de eliminación actualizado correctamente +confirmEditRuleMessage:Los cambios actuales pueden afectar a las reglas de eliminación. ¿Desea continuar? +disposalPolicyRetentionPeriodCalculationError:Error al calcular el período de retención +disposalConfirmationShowRecordsToDestroy:Mostrar registros a destruir +disposalConfirmationShowRecordsToReview:Mostrar registros a revisar +disposalConfirmationShowRecordsRetentionPeriodCalculationError:Errores en el período de retención +updateDisposalHoldMessage:Levantando el bloqueo de eliminación +deleteDisposalSchedule: El calendario de eliminación {0} se ha eliminado correctamente +searchPrefilterDescendantsOf: Descendientes de {0} +searchPreFilterInThisPackage: En el paquete {0} +searchPrefilterTransitiveHolds: Bloqueos transitivos +searchPrefilterCreatedByJob: Creado por el proceso de ingesta {0} +genericSearchWithPrefilterTitle: Búsqueda con prefiltro +saveSearchTitle: Guardar búsqueda +saveSearchDescription: Por favor, proporcione un título para esta búsqueda. Esto le ayudará a identificar mejor el contexto de la búsqueda. +promptDialogErrorMessageForSavedSearchTitle: El símbolo / no está permitido +promptDialogEmptyInputError: Por favor, proporcione un valor #Distributed Instances -manageDistributedInstanceTitle:Manage Distributed Instances -createDistributedInstanceTitle:Create Distributed Instances -showDistributedInstanceTitle:Distributed Instance details -editDistributedInstanceTitle:Edit Distributed Instances -removeDistributedInstanceTitle:Remove Distributed Instance -removeDistributedInstanceLabel: Are you sure you want to remove the distributed instance? -distributedInstanceLabel:Instance -distributedInstancesLabel:Instances +manageDistributedInstanceTitle:Gestionar instancias distribuidas +createDistributedInstanceTitle:Crear instancias distribuidas +showDistributedInstanceTitle:Detalles de instancia distribuida +editDistributedInstanceTitle:Editar instancias distribuidas +removeDistributedInstanceTitle:Eliminar instancia distribuida +removeDistributedInstanceLabel: ¿Está seguro de que desea eliminar la instancia distribuida? +distributedInstanceLabel:Instancia +distributedInstancesLabel:Instancias distributedInstanceNameLabel:Nombre distributedInstanceUUIDLabel:UUID distributedInstanceDescriptionLabel:Descripción distributedInstanceIDLabel:Identificador -distributedInstanceLastSyncDateLabel:Last Synchronization date -distributedInstanceLastSyncLabel: Last Syncronization +distributedInstanceLastSyncDateLabel:Fecha de última sincronización +distributedInstanceLastSyncLabel: Última sincronización distributedInstanceStatusLabel:Estado distributedInstanceStatusValue:{0} distributedInstanceStatusValue[CREATED]:Creado distributedInstanceStatusValue[ACTIVE]:Activo -distributedInstanceStatusValue[INACTIVE]:Inactive +distributedInstanceStatusValue[INACTIVE]:Inactivo distributedInstanceStatusButtonActivateLabel:ACTIVAR distributedInstanceStatusButtonDeactivateLabel:DESACTIVAR distributedInstanceStatistics:Estadísticas -distributedInstanceSyncErrorsLabel:Issues -distributedInstanceRemovedEntitiesLabel: Removed -distributedInstanceUpdatedEntitiesLabel: Added/Updated +distributedInstanceSyncErrorsLabel:Problemas +distributedInstanceRemovedEntitiesLabel: Eliminados +distributedInstanceUpdatedEntitiesLabel: Añadidos/Actualizados #Local Instances Configuration -localInstanceIsSubscribedLabel:Subscribed -localInstanceUnsubscribeButton:Unsubscribe -localInstanceLastSyncDateLabel:Last synchronization -subscribeLocalInstanceConfigurationButton:Subscribe -runPluginLocalInstanceConfigurationButton:Run Plugin -synchronizeLocalInstanceConfigurationButton:Synchronize -createLocalInstanceConfigurationTitle:Create Local Instance Configuration -showLocalInstanceConfigurationTitle:Local Instance Configuration -editLocalInstanceConfigurationTitle:Edit Local Instance Configuration -testLocalInstanceConfigurationButton:Test Configuration -testLocalInstanceConfigurationDialogTitle:Test configuration -testLocalInstanceConfigurationDialogMessage:Connection successful.
{0}
-testLocalInstanceConfigurationDialogMessageError:Connection failed.
{0}
+localInstanceIsSubscribedLabel:Suscrito +localInstanceUnsubscribeButton:Cancelar suscripción +localInstanceLastSyncDateLabel:Última sincronización +subscribeLocalInstanceConfigurationButton:Suscribirse +runPluginLocalInstanceConfigurationButton:Ejecutar complemento +synchronizeLocalInstanceConfigurationButton:Sincronizar +createLocalInstanceConfigurationTitle:Crear configuración de instancia local +showLocalInstanceConfigurationTitle:Configuración de instancia local +editLocalInstanceConfigurationTitle:Editar configuración de instancia local +testLocalInstanceConfigurationButton:Probar configuración +testLocalInstanceConfigurationDialogTitle:Probar configuración +testLocalInstanceConfigurationDialogMessage:Conexión establecida correctamente.
{0}
+testLocalInstanceConfigurationDialogMessageError:Error de conexión.
{0}
localInstanceConfigurationIDLabel:Identificador -localInstanceConfigurationSecretLabel:Access Token -localInstanceConfigurationCentralInstanceURLLabel:Central Instance URL -localInstanceConfigurationCentralInstanceURLPlaceholder:e.g. http://localhost:8080 -localInstanceConfigurationInvalidURL:The URL must follow the following format: ://
: (e.g. http://localhost:8080) -synchronizationStatusLabel:Synchronization State -applyInstanceIdToRepository:Apply instance identifier to all repository -applyInstanceIdToRepositoryMessage:You will apply the instance identifier to the all repository. From this moment the system will start to create the entities with the instance identifier as well. -removeLocalConfiguration:Remove Local Instance configuration. -removeLocalConfigurationMessage:You will remove the local configuration. From this moment the you can not be able to synchronize with the Central Repository. -successfullyUnsubscribedTitle:Unsubscribed -successfullyUnsubscribedMessage:Successfully unsubscribed -removeInstanceIdFromRepository:Remove instance identifier from all repository. -removeInstanceIdFromRepositoryMessage:You will remove the instance identifier from all repository. From this moment the system will start to create the entities without the instance identifier. This action may take some time, are you sure you want to remove all identifiers ? +localInstanceConfigurationSecretLabel:Token de acceso +localInstanceConfigurationCentralInstanceURLLabel:URL de instancia central +localInstanceConfigurationCentralInstanceURLPlaceholder:p. ej. http://localhost:8080 +localInstanceConfigurationInvalidURL:La URL debe seguir el siguiente formato: ://
: (p. ej. http://localhost:8080) +synchronizationStatusLabel:Estado de sincronización +applyInstanceIdToRepository:Aplicar identificador de instancia a todo el repositorio +applyInstanceIdToRepositoryMessage:Aplicará el identificador de instancia a todo el repositorio. A partir de este momento, el sistema comenzará a crear las entidades también con el identificador de instancia. +removeLocalConfiguration:Eliminar configuración de instancia local. +removeLocalConfigurationMessage:Eliminará la configuración local. A partir de este momento no podrá sincronizarse con el repositorio central. +successfullyUnsubscribedTitle:Suscripción cancelada +successfullyUnsubscribedMessage:Suscripción cancelada correctamente +removeInstanceIdFromRepository:Eliminar identificador de instancia de todo el repositorio. +removeInstanceIdFromRepositoryMessage:Eliminará el identificador de instancia de todo el repositorio. A partir de este momento el sistema creará las entidades sin el identificador de instancia. Esta acción puede tardar algún tiempo. ¿Está seguro de que desea eliminar todos los identificadores? synchronizingStatus:{0} synchronizingStatus[ACTIVE]:Activo -synchronizingStatus[INACTIVE]:Inactive -synchronizingStatus[APPLYINGIDENTIFIER]:Applying identifier -synchronizingStatus[SYNCHRONIZING]:Synchronizing +synchronizingStatus[INACTIVE]:Inactivo +synchronizingStatus[APPLYINGIDENTIFIER]:Aplicando identificador +synchronizingStatus[SYNCHRONIZING]:Sincronizando #Access Token -addAccessKeyButton:New access Token -manageAccessKeyTitle:Manage Access Tokens -createAccessKeyTitle:Create Access Token -showAccessKeyTitle:Access Token -editAccessKeyTitle:Edit Access Token -accessKeyLabel:Access Token +addAccessKeyButton:Nuevo token de acceso +manageAccessKeyTitle:Gestionar tokens de acceso +createAccessKeyTitle:Crear token de acceso +showAccessKeyTitle:Token de acceso +editAccessKeyTitle:Editar token de acceso +accessKeyLabel:Token de acceso accessKeyNameLabel:Nombre accessKeyIDLabel:ID -accessKeyLastUsageDateLabel:Last Usage -accessKeyExpirationDateLabel:Expiration date +accessKeyLastUsageDateLabel:Último uso +accessKeyExpirationDateLabel:Fecha de expiración accessKeyStatusLabel:Estado accessKeyStatusValue:{0} accessKeyStatusValue[CREATED]:Creado accessKeyStatusValue[ACTIVE]:Activo -accessKeyStatusValue[INACTIVE]:Inactive -accessKeyWarningLabel:To keep your access token secure, we`ll permanently hide it after you close this window. So please be sure to save it somewhere secure. In case you lose your access token, you can regenerate a new one at any time. -accessKeyInfo:This token and the instance identifier allow the registration of the local instance. In the local instance go to Administration -> Local instance and fill in the fields with the respective values. -accessKeyEditButton:Edit access Token -accessKeyUpdateButton:Update access Token -accessKeyDeleteButton:Delete access Token -accessKeyRegenerateButton:Regenerate access Token -accessKeyRevokeButton:Revoke access Token -accessKeyNeverUsedLabel:Never used +accessKeyStatusValue[INACTIVE]:Inactivo +accessKeyWarningLabel:Para mantener su token de acceso seguro, lo ocultaremos permanentemente al cerrar esta ventana. Por favor, guárdelo en un lugar seguro. Si pierde su token de acceso, puede regenerar uno nuevo en cualquier momento. +accessKeyInfo:Este token y el identificador de instancia permiten el registro de la instancia local. En la instancia local, vaya a Administración -> Instancia local y rellene los campos con los valores correspondientes. +accessKeyEditButton:Editar token de acceso +accessKeyUpdateButton:Actualizar token de acceso +accessKeyDeleteButton:Eliminar token de acceso +accessKeyRegenerateButton:Regenerar token de acceso +accessKeyRevokeButton:Revocar token de acceso +accessKeyNeverUsedLabel:Nunca utilizado accessKeyNotFoundLabel:No encontrado -accessKeySuccessfullyRegenerated:Access Token was successfully regenerated -accessKeySuccessfullyRevoked:Access Token was successfully revoked -accessKeyDeleteConfirmationMessage:Are you sure you want to permanently delete this access Token? This action can not be undone once executed. -accessKeyRevokeConfirmationMessage:Are you sure you want to revoke this access Token? -accessKeyRegenerateConfirmationMessage:Are you sure you want to regenerate this access Token? +accessKeySuccessfullyRegenerated:El token de acceso se ha regenerado correctamente +accessKeySuccessfullyRevoked:El token de acceso se ha revocado correctamente +accessKeyDeleteConfirmationMessage:¿Está seguro de que desea eliminar permanentemente este token de acceso? Esta acción no se puede deshacer una vez ejecutada. +accessKeyRevokeConfirmationMessage:¿Está seguro de que desea revocar este token de acceso? +accessKeyRegenerateConfirmationMessage:¿Está seguro de que desea regenerar este token de acceso? #Market marketPluginsActionsTabLabel:Acciones -marketVersionLabel:Version {0} available in the store -marketTabLabel:Marketplace -marketStoreInstallLabel:Install +marketVersionLabel:Versión {0} disponible en la tienda +marketTabLabel:Mercado de aplicaciones +marketStoreInstallLabel:Instalar # Descriptive metatada lock to edit -editDescMetadataLockedTitle: Unable to edit descriptive metadata -editDescMetadataLockedText: Intellectual entity is currently being edited by another user -descriptiveHistoryRemoveConfirmDialogTitle: Confirm remove descriptive metadata history -descriptiveHistoryRemoveConfirmDialogMessage: Are you sure you want to remove the selected descriptive metadata history? -descriptiveHistoryRevertConfirmDialogTitle: Confirm revert descriptive metadata -descriptiveHistoryRevertConfirmDialogMessage: Are you sure you want to revert the descriptive metadata to the selected history? +editDescMetadataLockedTitle: No se pueden editar los metadatos descriptivos +editDescMetadataLockedText: Otra persona está editando actualmente esta entidad intelectual +descriptiveHistoryRemoveConfirmDialogTitle: Confirmar eliminación del historial de metadatos descriptivos +descriptiveHistoryRemoveConfirmDialogMessage: ¿Está seguro de que desea eliminar el historial de metadatos descriptivos seleccionado? +descriptiveHistoryRevertConfirmDialogTitle: Confirmar reversión de metadatos descriptivos +descriptiveHistoryRevertConfirmDialogMessage: ¿Está seguro de que desea revertir los metadatos descriptivos al historial seleccionado? # Conversion plugin -representationTypeTitle: Representation type -representationTypeDescription: Assign a type when creating a new representation -disseminationTitle: Dissemination title -disseminationTitleDescription: This will be the respective dissemination title. -disseminationDescriptionTitle: Dissemination description -disseminationDescriptionDescription: This will be the respective dissemination description. -disseminationTitleDefaultValue: Dissemination title -disseminationDescriptionDefaultValue: Dissemination description -changeRepresentationStatusToPreservationTitle: Change the representation status to Preservation? +representationTypeTitle: Tipo de representación +representationTypeDescription: Asigne un tipo al crear una nueva representación +disseminationTitle: Título de diseminación +disseminationTitleDescription: Este será el título de la diseminación correspondiente. +disseminationDescriptionTitle: Descripción de la diseminación +disseminationDescriptionDescription: Esta será la descripción de la diseminación correspondiente. +disseminationTitleDefaultValue: Título de diseminación +disseminationDescriptionDefaultValue: Descripción de diseminación +changeRepresentationStatusToPreservationTitle: ¿Cambiar el estado de la representación a Preservación? changeRepresentationStatusToPreservationDescription: -conversionProfileTitle: Conversion Profile -conversionProfileDescription: Conversion profile options +conversionProfileTitle: Perfil de conversión +conversionProfileDescription: Opciones del perfil de conversión diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_hr.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_hr.properties index 42a764e1ad..670bac7a9c 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_hr.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_hr.properties @@ -200,6 +200,8 @@ oneOfAObject[org.roda.core.data.v2.ip.disposal.DisposalHold]:izlučivanje postav oneOfAObject[org.roda.core.data.v2.ip.disposal.DisposalConfirmation]:potvrda izlučivanja oneOfAObject[org.roda.core.data.v2.ip.disposal.DisposalRule]:pravilo izlučivanja selected[\=1]:{0,number} {1} odabrano +selected[one]:{0,number} {1} odabrano +selected[few]:{0,number} {1} odabrano selected:{0,number} {1} odabrano inspectTransferredResource:Pregledajte preneseni resurs identifierNotFound:Identifikator (nije pronađen) @@ -713,12 +715,18 @@ representationInformationEditAssociations:Uredite udruživanja representationInformationIntellectualEntities:{0, number} intelektualnih entiteta je povezano s ovim pojavnim oblikom representationInformationIntellectualEntities[\=0]:Nema intelektualnih entiteta povezanih s ovim pojavnim oblikom representationInformationIntellectualEntities[\=1]:Jedan intelektualni entitet je povezan s ovim pojavnim oblikom +representationInformationIntellectualEntities[one]:{0, number} intelektualni entitet je povezan s ovim pojavnim oblikom +representationInformationIntellectualEntities[few]:{0, number} intelektualna entiteta su povezana s ovim pojavnim oblikom representationInformationRepresentations:{0, number} prikaza je povezano s ovim pojavnim oblikom representationInformationRepresentations[\=0]:Nema prikaza povezanih s ovim pojavnim oblikom representationInformationRepresentations[\=1]:Jedan prikaz je povezan s ovim pojavnim oblikom +representationInformationRepresentations[one]:{0, number} prikaz je povezan s ovim pojavnim oblikom +representationInformationRepresentations[few]:{0, number} prikaza su povezana s ovim pojavnim oblikom representationInformationFiles:{0, number} datoteka je povezano s ovim pojavnim oblikom representationInformationFiles[\=0]:Nema datoteka povezanih s ovim pojavnim oblikom representationInformationFiles[\=1]:Jedna datoteka je povezana s ovim pojavnim oblikom +representationInformationFiles[one]:{0, number} datoteka je povezana s ovim pojavnim oblikom +representationInformationFiles[few]:{0, number} datoteke su povezane s ovim pojavnim oblikom # Descriptive Metadata metadataType:Vrsta metadataFilename:Naziv datoteke @@ -1327,6 +1335,8 @@ associateDisposalHoldButton:Pridruži izlučivanje postavljeno na čekanje disposalHoldSelectionDialogTitle:Pridruži izlučivanje postavljeno na čekanje applyDisposalHoldDialogTitle:Potvrdite povezanost izlučivanja koje je postavljeno na čekanje s intelektualnim entitetom applyDisposalHoldDialogMessage[\=1]:Jeste li sigurni da želite primijeniti izlučivanje postavljeno na čekanje na odabranu stavku? +applyDisposalHoldDialogMessage[one]:Jeste li sigurni da želite primijeniti izlučivanje postavljeno na čekanje na odabranu stavku? +applyDisposalHoldDialogMessage[few]:Jeste li sigurni da želite primijeniti izlučivanje postavljeno na čekanje na odabranih {0, number} predmeta? applyDisposalHoldDialogMessage:Jeste li sigurni da želite primijeniti izlučivanje postavljeno na čekanje na odabranih {0, number} predmeta? applyDisposalHoldButton:Pridruži izlučivanje postavljeno na čekanje createDisposalHoldButton:Kreiraj izlučivanje koje je postavljeno na čekanje @@ -1334,17 +1344,30 @@ clearDisposalHoldButton:Očisti izlučivanja postavljena na čekanje overrideDisposalHoldButton:Nadjačaj izlučivanje postavljeno na čekanje clearDisposalHoldDialogTitle:Očisti izlučivanja postavljena na čekanje clearDisposalHoldDialogMessage[\=1]:Jeste li sigurni da želite razdvojiti sva izlučivanja postavljena na čekanje od odabrane stavke? +clearDisposalHoldDialogMessage[one]:Jeste li sigurni da želite razdvojiti sva izlučivanja postavljena na čekanje od odabrane stavke? +clearDisposalHoldDialogMessage[few]:Jeste li sigurni da želite razdvojiti sva izlučivanja postavljena na čekanje od odabranih {0, number} stavaka? clearDisposalHoldDialogMessage:Jeste li sigurni da želite razdvojiti sva izlučivanja postavljena na čekanje od odabranih {0, number} stavaka? +liftDisposalHoldDialogTitle:Ukini izlučivanje postavljeno na čekanje +liftDisposalHoldDialogMessage[\=1]:Jeste li sigurni da želite ukinuti izlučivanje postavljeno na čekanje? +liftDisposalHoldDialogMessage[one]:Jeste li sigurni da želite ukinuti izlučivanje postavljeno na čekanje? +liftDisposalHoldDialogMessage[few]:Jeste li sigurni da želite ukinuti {0, number} odabranih izlučivanja postavljenih na čekanje? +liftDisposalHoldDialogMessage:Jeste li sigurni da želite ukinuti {0, number} odabranih izlučivanja postavljenih na čekanje? disassociateDisposalHoldDialogTitle:Razdvoji izlučivanje postavljeno na čekanje disassociateDisposalHoldDialogMessage[\=1]:Jeste li sigurni da želite razdvojiti izlučivanje koje je postavljeno na čekanje od odabrane stavke? +disassociateDisposalHoldDialogMessage[one]:Jeste li sigurni da želite razdvojiti izlučivanje koje je postavljeno na čekanje od odabrane stavke? +disassociateDisposalHoldDialogMessage[few]:Jeste li sigurni da želite razdvojiti izlučivanje koje je postavljeno na čekanje od odabranih {0, number} stavaka? disassociateDisposalHoldDialogMessage:Jeste li sigurni da želite razdvojiti izlučivanje koje je postavljeno na čekanje od odabranih {0, number} stavaka? disassociateDisposalScheduleDialogTitle:Razdvoji raspored izlučivanja disassociateDisposalScheduleDialogMessage[\=1]:Jeste li sigurni da želite razdvojiti raspored izlučivanja od odabrane stavke? +disassociateDisposalScheduleDialogMessage[one]:Jeste li sigurni da želite razdvojiti raspored izlučivanja od odabrane stavke? +disassociateDisposalScheduleDialogMessage[few]:Jeste li sigurni da želite razdvojiti raspored izlučivanja od odabranih {0, number} stavaka? disassociateDisposalScheduleDialogMessage:Jeste li sigurni da želite razdvojiti raspored izlučivanja od odabranih {0, number} stavaka? disposalHoldAssociatedOn:Pridruženo disposalHoldAssociatedBy:Pridružio disposalHoldAssociatedFrom:Pridružen od disposalHoldAssociatedFromValue[\=1]:{0} AIP +disposalHoldAssociatedFromValue[one]:{0} AIP +disposalHoldAssociatedFromValue[few]:{0} AIP-a disposalHoldAssociatedFromValue:{0} AIP-ova disposalScheduleAssociationInformationTitle:Razdoblje čuvanja disposalScheduleAssociationTitle:Raspored izlučivanja @@ -1363,11 +1386,17 @@ disposalPolicyActionSummary:{0} disposalPolicyActionSummary[REVIEW]:revizija disposalPolicyActionSummary[DESTROY]:uništavanje disposalPolicyScheduleMonthSummary[\=1]:za 1 mjesec +disposalPolicyScheduleMonthSummary[one]:za {0,number} mjesec +disposalPolicyScheduleMonthSummary[few]:za {0,number} mjeseca disposalPolicyScheduleMonthSummary:za {0,number} mjeseci disposalPolicyScheduleYearSummary[\=1]:za 1 godinu +disposalPolicyScheduleYearSummary[one]:za {0,number} godinu +disposalPolicyScheduleYearSummary[few]:za {0,number} godine disposalPolicyScheduleYearSummary:za {0,number} godina disposalPolicyScheduleDaySummary[\=0]:danas disposalPolicyScheduleDaySummary[\=1]:sutra +disposalPolicyScheduleDaySummary[one]:za {0, number} dan +disposalPolicyScheduleDaySummary[few]:za {0, number} dana disposalPolicyScheduleDaySummary:za {0, number} dana disposalPolicySummaryReady:Prekoračen rok za {0} permanentlyRetained:Nikada @@ -1375,12 +1404,20 @@ disposalPolicyRetainPermanently:Trajno zadržana disposalPolicyDestroyedAIPSummary:Uništetno {0} retentionPeriod:{0} retentionPeriod[\=1|DAYS]:1 dan +retentionPeriod[one|DAYS]:{0,number} dan +retentionPeriod[few|DAYS]:{0,number} dana retentionPeriod[other|DAYS]:{0,number} dana retentionPeriod[\=1|WEEKS]:1 tjedan +retentionPeriod[one|WEEKS]:{0,number} tjedan +retentionPeriod[few|WEEKS]:{0,number} tjedna retentionPeriod[other|WEEKS]:{0,number} tjedana retentionPeriod[\=1|MONTHS]:1 mjesec +retentionPeriod[one|MONTHS]:{0,number} mjesec +retentionPeriod[few|MONTHS]:{0,number} mjeseca retentionPeriod[other|MONTHS]:{0,number} mjeseci retentionPeriod[\=1|YEARS]:1 godina +retentionPeriod[one|YEARS]:{0,number} godina +retentionPeriod[few|YEARS]:{0,number} godine retentionPeriod[other|YEARS]:{0,number} godina retentionPeriod[other|NO_RETENTION_PERIOD]:Nema razdoblja čuvanja permanentlyDeleteConfirmDialogTitle:Trajno izbrišite zapise iz pretinca obrisanih informacijskih paketa diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_hu.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_hu.properties index 2d1ab0af82..e1ac146b87 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_hu.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_hu.properties @@ -1496,20 +1496,20 @@ deleteDisposalRuleDialogMessage:Are you sure you want to remove the disposal rul associateDisposalHoldButton:Associate disposal hold disposalHoldSelectionDialogTitle:Associate disposal hold applyDisposalHoldDialogTitle:Confirm disposal hold association to intellectual entity -applyDisposalHoldDialogMessage[one]:Are you sure you want to apply the disposal hold to the selected item? +applyDisposalHoldDialogMessage[\=1]:Are you sure you want to apply the disposal hold to the selected item? applyDisposalHoldDialogMessage:Are you sure you want to apply the disposal hold to the selected {0, number} items? applyDisposalHoldButton:Associate disposal hold createDisposalHoldButton:Create disposal hold clearDisposalHoldButton:Clear disposal holds overrideDisposalHoldButton:Override disposal hold clearDisposalHoldDialogTitle:Clear disposal holds -clearDisposalHoldDialogMessage[one]:Are you sure you want to disassociate all disposal holds from the selected item? +clearDisposalHoldDialogMessage[\=1]:Are you sure you want to disassociate all disposal holds from the selected item? clearDisposalHoldDialogMessage:Are you sure you want to disassociate all disposal holds from the selected {0, number} items? disassociateDisposalHoldDialogTitle:Disassociate disposal hold -disassociateDisposalHoldDialogMessage[one]:Are you sure you want to disassociate the disposal hold from the selected item? +disassociateDisposalHoldDialogMessage[\=1]:Are you sure you want to disassociate the disposal hold from the selected item? disassociateDisposalHoldDialogMessage:Are you sure you want to disassociate the disposal hold from the selected {0, number} items? disassociateDisposalScheduleDialogTitle:Disassociate disposal schedule -disassociateDisposalScheduleDialogMessage[one]:Are you sure you want to disassociate the disposal schedule from the selected item? +disassociateDisposalScheduleDialogMessage[\=1]:Are you sure you want to disassociate the disposal schedule from the selected item? disassociateDisposalScheduleDialogMessage:Are you sure you want to disassociate the disposal schedule from the selected {0, number} items? disposalHoldAssociatedOn:Társítva disposalHoldAssociatedBy:Associated by @@ -1532,12 +1532,12 @@ disposalPolicyConfirmationSummary:Assigned to a disposal confirmation disposalPolicyActionSummary:{0} disposalPolicyActionSummary[REVIEW]:felülvizsgálat disposalPolicyActionSummary[DESTROY]:megsemmisítés -disposalPolicyScheduleMonthSummary[one]:1 hónap alatt +disposalPolicyScheduleMonthSummary[\=1]:1 hónap alatt disposalPolicyScheduleMonthSummary:{0,number} hónap alatt -disposalPolicyScheduleYearSummary[one]:1 év alatt +disposalPolicyScheduleYearSummary[\=1]:1 év alatt disposalPolicyScheduleYearSummary:{0,number} év alatt disposalPolicyScheduleDaySummary[\=0]:ma -disposalPolicyScheduleDaySummary[one]:holnap +disposalPolicyScheduleDaySummary[\=1]:holnap disposalPolicyScheduleDaySummary:{0,number} nap alatt disposalPolicySummaryReady:Overdue for {0} permanentlyRetained:Soha diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_pt_PT.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_pt_PT.properties index d6e7f00ffa..500d9f5209 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_pt_PT.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_pt_PT.properties @@ -268,6 +268,7 @@ oneOfAObject[org.roda.core.data.v2.disposal.hold.DisposalHold]:suspensão de eli oneOfAObject[org.roda.core.data.v2.disposal.confirmation.DisposalConfirmation]:autos de eliminação oneOfAObject[org.roda.core.data.v2.disposal.rule.DisposalRule]:condição de eliminação selected[\=1]:{0,number} {1} selecionados +selected[one]:{0,number} {1} selecionados selected:{0,number} {1} selecionados inspectTransferredResource:Inspecionar recurso transferido identifierNotFound:Identificador (não encontrado) @@ -871,12 +872,15 @@ representationInformationEditAssociations:Editar associações representationInformationIntellectualEntities:Existem {0,number} entidades intelectuais relacionadas com esta informação de representação representationInformationIntellectualEntities[\=0]:Não existem entidades intelectuais relacionadas com esta informação de representação representationInformationIntellectualEntities[\=1]:Existe uma entidade intelectual relacionada com esta informação de representação +representationInformationIntellectualEntities[one]:Existe uma entidade intelectual relacionada com esta informação de representação representationInformationRepresentations:Existem {0,number} representações relacionadas com esta informação de representação representationInformationRepresentations[\=0]:Não existem representações relacionadas com esta informação de representação representationInformationRepresentations[\=1]:Existe uma representação relacionada com esta informação de representação +representationInformationRepresentations[one]:Existe uma representação relacionada com esta informação de representação representationInformationFiles:Existem {0,number} ficheiros relacionados com esta informação de representação representationInformationFiles[\=0]:Não existem ficheiros relacionados com esta informação de representação representationInformationFiles[\=1]:Existe um ficheiro relacionado com esta informação de representação +representationInformationFiles[one]:Existe um ficheiro relacionado com esta informação de representação # Descriptive Metadata metadataType:Tipo @@ -1566,6 +1570,7 @@ clearDisposalHoldDialogMessage[one]:Tem a certeza que pretende desassociar todas clearDisposalHoldDialogMessage:Tem a certeza que pretende desassociar todas as suspensões de eliminação dos {0, number} items selecionados? liftDisposalHoldDialogTitle:Levantar suspensão de eliminação liftDisposalHoldDialogMessage[\=1]:Tem a certeza que quer levantar a suspensão de eliminação? +liftDisposalHoldDialogMessage[one]:Tem a certeza que quer levantar a suspensão de eliminação? liftDisposalHoldDialogMessage:Tem a certeza que quer levantar as {0, number} suspensões de eliminação selecionadas? disassociateDisposalHoldDialogTitle:Desassociar suspensão de eliminação disassociateDisposalHoldDialogMessage[one]:Tem a certeza que prentende desassociar a suspensão de eliminação do item selecionado? @@ -1577,6 +1582,7 @@ disposalHoldAssociatedOn:Associado em disposalHoldAssociatedBy:Associado por disposalHoldAssociatedFrom:Associado desde disposalHoldAssociatedFromValue[\=1]:{0} AIP +disposalHoldAssociatedFromValue[one]:{0} AIP disposalHoldAssociatedFromValue:{0} AIPs disposalScheduleAssociationInformationTitle:Prazo de conservação disposalScheduleAssociationTitle:Tabela de seleção @@ -1608,12 +1614,16 @@ disposalPolicyRetainPermanently:Conservado permanentemente disposalPolicyDestroyedAIPSummary:Eliminado em {0} retentionPeriod:{0} retentionPeriod[\=1|DAYS]:1 dia +retentionPeriod[one|DAYS]:1 dia retentionPeriod[other|DAYS]:{0,number} dias retentionPeriod[\=1|WEEKS]:1 semana +retentionPeriod[one|WEEKS]:1 semana retentionPeriod[other|WEEKS]:{0,number} semanas retentionPeriod[\=1|MONTHS]:1 mês +retentionPeriod[one|MONTHS]:1 mês retentionPeriod[other|MONTHS]:{0,number} meses retentionPeriod[\=1|YEARS]:1 ano +retentionPeriod[one|YEARS]:1 ano retentionPeriod[other|YEARS]:{0,number} anos retentionPeriod[other|NO_RETENTION_PERIOD]:Sem prazo de conservação permanentlyDeleteConfirmDialogTitle:Eliminar permanentemente entidades da caixa de eliminação diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_sv_SE.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_sv_SE.properties index 4c7a7a23f6..e1bbeb24e8 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_sv_SE.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_sv_SE.properties @@ -261,6 +261,7 @@ oneOfAObject[org.roda.core.data.v2.ip.disposal.DisposalHold]:gallringsstopp oneOfAObject[org.roda.core.data.v2.ip.disposal.DisposalConfirmation]:gallringsbekräftelse oneOfAObject[org.roda.core.data.v2.ip.disposal.DisposalRule]:gallringsregler selected[\=1]:{0,number} {1} vald +selected[one]:{0,number} {1} vald selected:{0,number} {1} vald inspectTransferredResource:Inspektera överförd resurs identifierNotFound:Identifierare (hittades inte) @@ -833,12 +834,15 @@ representationInformationEditAssociations:Redigera association representationInformationIntellectualEntities:Det finns {0,number} logiska enheter associerade med denna representationsinformation representationInformationIntellectualEntities[\=0]:Det finns inga logiska enheter associerade med denna representationsinformation representationInformationIntellectualEntities[\=1]:Det finns en logisk enhet associerad med denna representationsinformation +representationInformationIntellectualEntities[one]:Det finns en logisk enhet associerad med denna representationsinformation representationInformationRepresentations:Det finns {0,number} representationer associerade till denna representationsinformation representationInformationRepresentations[\=0]:Det finns inga representationer kopplade till denna representationsinformation representationInformationRepresentations[\=1]:Det finns en representation associerad med denna representationsinformation +representationInformationRepresentations[one]:Det finns en representation associerad med denna representationsinformation representationInformationFiles:Det finns {0, number} filer associerade med denna representationsinformation representationInformationFiles[\=0]:Det finns inga filer associerade med denna representationsinformation representationInformationFiles[\=1]:Det finns en fil associerad med denna representationsinformation +representationInformationFiles[one]:Det finns en fil associerad med denna representationsinformation # Descriptive Metadata metadataType:Typ @@ -1505,6 +1509,10 @@ overrideDisposalHoldButton:Åsidosätt gallringsstopp clearDisposalHoldDialogTitle:Rensa bort gallringsstopp clearDisposalHoldDialogMessage[one]:Är du säker på att du vill koppla bort alla gallringsstopp från det valda objektet? clearDisposalHoldDialogMessage:Är du säker på att du vill koppla bort alla gallringsstopp från de valda {0, number} objekten? +liftDisposalHoldDialogTitle:Häv gallringsstopp +liftDisposalHoldDialogMessage[\=1]:Är du säker på att du vill häva gallringsstoppet? +liftDisposalHoldDialogMessage[one]:Är du säker på att du vill häva gallringsstoppet? +liftDisposalHoldDialogMessage:Är du säker på att du vill häva de {0, number} valda gallringsstoppen? disassociateDisposalHoldDialogTitle:Koppla loss gallringsstopp disassociateDisposalHoldDialogMessage[one]:Är du säker på att du vill koppla bort gallringsstoppet från det valda objektet? disassociateDisposalHoldDialogMessage:Är du säker på att du vill koppla bort gallringsstoppet från de valda {0, number} objekten? @@ -1515,6 +1523,7 @@ disposalHoldAssociatedOn:Associerad med disposalHoldAssociatedBy:Associerad av disposalHoldAssociatedFrom:Associerad från disposalHoldAssociatedFromValue[\=1]:{0} AIP +disposalHoldAssociatedFromValue[one]:{0} AIP disposalHoldAssociatedFromValue:{0} AIP:er disposalScheduleAssociationInformationTitle:Gallringsfrist disposalScheduleAssociationTitle:Gallringsschema @@ -1545,12 +1554,16 @@ disposalPolicyRetainPermanently:Behålls permanent disposalPolicyDestroyedAIPSummary:Gallrades {0} retentionPeriod:{0} retentionPeriod[\=1|DAYS]:1 dag +retentionPeriod[one|DAYS]:1 dag retentionPeriod[other|DAYS]:{0,number} dagar retentionPeriod[\=1|WEEKS]:1 vecka +retentionPeriod[one|WEEKS]:1 vecka retentionPeriod[other|WEEKS]:{0,number} veckor retentionPeriod[\=1|MONTHS]:1 månad +retentionPeriod[one|MONTHS]:1 månad retentionPeriod[other|MONTHS]:{0,number} månader retentionPeriod[\=1|YEARS]:1 år +retentionPeriod[one|YEARS]:1 år retentionPeriod[other|YEARS]:{0,number} år retentionPeriod[other|NO_RETENTION_PERIOD]:Ingen gallringsfrist permanentlyDeleteConfirmDialogTitle:Ta permanent bort objekt från papperskorgen diff --git a/roda-ui/roda-wui/src/main/resources/config/roda-wui.properties b/roda-ui/roda-wui/src/main/resources/config/roda-wui.properties index 92f3a6e920..a600fece42 100644 --- a/roda-ui/roda-wui/src/main/resources/config/roda-wui.properties +++ b/roda-ui/roda-wui/src/main/resources/config/roda-wui.properties @@ -75,8 +75,10 @@ ui.sharedProperties.whitelist.configuration.prefix = ui.icons ui.sharedProperties.whitelist.configuration.prefix = ui.lists ui.sharedProperties.whitelist.configuration.prefix = ui.search.fields ui.sharedProperties.whitelist.configuration.property = ui.lists +ui.sharedProperties.whitelist.configuration.prefix = ui.catalogue ui.sharedProperties.whitelist.configuration.prefix = ui.css ui.sharedProperties.whitelist.messages.prefix = ui.facets +ui.sharedProperties.whitelist.messages.prefix = ui.catalogue.virtual ui.sharedProperties.whitelist.messages.prefix = lists.label ui.sharedProperties.whitelist.messages.prefix = ui.search.fields ui.sharedProperties.whitelist.messages.prefix = level @@ -325,6 +327,7 @@ ui.role: access_key.manage ui.browser.metadata.descriptive.types = ead_2002 ui.browser.metadata.descriptive.types = dc_SimpleDC20021212 ui.browser.metadata.descriptive.types = key-value +ui.browser.metadata.descriptive.types = emailarchive #ui.browser.metadata.descriptive.types = ead_3 ########################################################################## @@ -372,6 +375,9 @@ ui.search.fields.IndexedAIP = origination ui.search.fields.IndexedAIP = ingestSIPIds ui.search.fields.IndexedAIP = dates ui.search.fields.IndexedAIP = level +ui.search.fields.IndexedAIP = emailSubject +ui.search.fields.IndexedAIP = emailSender +ui.search.fields.IndexedAIP = emailSentDate ui.search.fields.IndexedAIP.identifier.fields = id ui.search.fields.IndexedAIP.identifier.i18n = ui.search.fields.IndexedAIP.identifier @@ -441,6 +447,24 @@ ui.search.fields.IndexedAIP.type.i18n = ui.search.fields.IndexedAIP.type ui.search.fields.IndexedAIP.type.type = text ui.search.fields.IndexedAIP.type.fixed = true +ui.search.fields.IndexedAIP.emailSubject.fields = subject_txt +ui.search.fields.IndexedAIP.emailSubject.i18n = ui.search.fields.IndexedAIP.emailSubject +ui.search.fields.IndexedAIP.emailSubject.type = text +ui.search.fields.IndexedAIP.emailSubject.nestedType = email +ui.search.fields.IndexedAIP.emailSubject.nestedParentType = emailarchive + +ui.search.fields.IndexedAIP.emailSender.fields = sender_s +ui.search.fields.IndexedAIP.emailSender.i18n = ui.search.fields.IndexedAIP.emailSender +ui.search.fields.IndexedAIP.emailSender.type = text +ui.search.fields.IndexedAIP.emailSender.nestedType = email +ui.search.fields.IndexedAIP.emailSender.nestedParentType = emailarchive + +ui.search.fields.IndexedAIP.emailSentDate.fields = sentDate_dt +ui.search.fields.IndexedAIP.emailSentDate.i18n = ui.search.fields.IndexedAIP.emailSentDate +ui.search.fields.IndexedAIP.emailSentDate.type = date_interval +ui.search.fields.IndexedAIP.emailSentDate.nestedType = email +ui.search.fields.IndexedAIP.emailSentDate.nestedParentType = emailarchive + ui.search.fields.IndexedRepresentation = identifier ui.search.fields.IndexedRepresentation = type ui.search.fields.IndexedRepresentation = original @@ -1095,6 +1119,114 @@ ui.lists.Search_AIPs.columns[].default_IndexedAIP_hasrepresentations.width = 3.0 ui.lists.Search_AIPs.defaultSortList.columnName = default_IndexedAIP_dates ui.lists.Search_AIPs.defaultSortList.ascending = false +########################################################################## +# Virtual catalogue configuration +# +# ui.catalogue.virtual +# Array of virtual catalogue list IDs to append to the search/catalogue tabs. +# Each entry corresponds to a ui.lists.{listId} block that must define +# either catalogue.filter (type 1: filtered AIP view) or +# catalogue.childOf.filter (type 2: nested child documents). +# +# ui.lists.{listId}.catalogue.label.i18n +# i18n key whose resolved translation is used as the dropdown label. +# +# ui.lists.{listId}.catalogue.icon +# FontAwesome CSS class for the dropdown icon. +# +# ui.lists.{listId}.catalogue.filter = field:value +# Type 1: filters parent AIP documents by a Solr field:value. +# Standard AIP browse (bindOpener) is used on row click. +# +# ui.lists.{listId}.catalogue.childOf.filter = field:value +# Type 2: returns nested child documents whose parent matches field:value. +# Row click navigates to the parent AIP. +########################################################################## +ui.catalogue.virtual = Search_emailarchive +ui.catalogue.virtual = Search_emails + +## Search_emailarchive — Virtual catalogue: Email Archive AIPs (type 1, filtered) +ui.lists.Search_emailarchive.catalogue.label.i18n = ui.catalogue.virtual.Search_emailarchive.label +ui.lists.Search_emailarchive.catalogue.filter = content_type:emailarchive +ui.lists.Search_emailarchive.search.advanced.enabled = true + +ui.lists.Search_emailarchive.columns[] = title +ui.lists.Search_emailarchive.columns[].title.field = title +ui.lists.Search_emailarchive.columns[].title.header = ui.search.fields.IndexedAIP.title +ui.lists.Search_emailarchive.columns[].title.sortBy = title_sort + +ui.lists.Search_emailarchive.columns[] = default_IndexedAIP_dates +ui.lists.Search_emailarchive.columns[].default_IndexedAIP_dates.header = ui.search.fields.IndexedAIP.dates +ui.lists.Search_emailarchive.columns[].default_IndexedAIP_dates.sortBy = dateInitial +ui.lists.Search_emailarchive.columns[].default_IndexedAIP_dates.sortBy = dateFinal +ui.lists.Search_emailarchive.columns[].default_IndexedAIP_dates.width = 14.0 + +ui.lists.Search_emailarchive.facets.parameters = level +ui.lists.Search_emailarchive.facets.parameters = hasRepresentations +ui.lists.Search_emailarchive.facets.parameters.level.type = SimpleFacetParameter +ui.lists.Search_emailarchive.facets.parameters.hasRepresentations.type = SimpleFacetParameter + +ui.search.fields.Search_emailarchive = title +ui.search.fields.Search_emailarchive = description +ui.search.fields.Search_emailarchive = dates + +ui.search.fields.Search_emailarchive.title.fields = title +ui.search.fields.Search_emailarchive.title.i18n = ui.search.fields.IndexedAIP.title +ui.search.fields.Search_emailarchive.title.type = text +ui.search.fields.Search_emailarchive.title.fixed = true + +ui.search.fields.Search_emailarchive.description.fields = description +ui.search.fields.Search_emailarchive.description.i18n = ui.search.fields.IndexedAIP.description +ui.search.fields.Search_emailarchive.description.type = text +ui.search.fields.Search_emailarchive.description.fixed = false + +ui.search.fields.Search_emailarchive.dates.fields = dateInitial,dateFinal +ui.search.fields.Search_emailarchive.dates.i18n = ui.search.fields.IndexedAIP.dates +ui.search.fields.Search_emailarchive.dates.type = date_interval +ui.search.fields.Search_emailarchive.dates.fixed = false + +## Search_emails — Virtual catalogue: Individual Emails (type 2, nested child documents) +ui.lists.Search_emails.catalogue.label.i18n = ui.catalogue.virtual.Search_emails.label +ui.lists.Search_emails.catalogue.childOf.filter = content_type:emailarchive +ui.lists.Search_emails.search.advanced.enabled = true + +ui.lists.Search_emails.columns[] = sender_s +ui.lists.Search_emails.columns[].sender_s.field = sender_s +ui.lists.Search_emails.columns[].sender_s.header = ui.search.fields.IndexedAIP.emailSender +ui.lists.Search_emails.columns[].sender_s.sortBy = sender_s + +ui.lists.Search_emails.columns[] = subject_txt +ui.lists.Search_emails.columns[].subject_txt.field = subject_txt +ui.lists.Search_emails.columns[].subject_txt.header = ui.search.fields.IndexedAIP.emailSubject +ui.lists.Search_emails.columns[].subject_txt.sortBy = subject_txt +ui.lists.Search_emails.columns[].subject_txt.renderingHint = LIST + +ui.lists.Search_emails.columns[] = sentDate_dt +ui.lists.Search_emails.columns[].sentDate_dt.field = sentDate_dt +ui.lists.Search_emails.columns[].sentDate_dt.header = ui.search.fields.IndexedAIP.emailSentDate +ui.lists.Search_emails.columns[].sentDate_dt.sortBy = sentDate_dt +ui.lists.Search_emails.columns[].sentDate_dt.width = 14.0 +ui.lists.Search_emails.columns[].sentDate_dt.renderingHint = DATETIME_FORMAT_SIMPLE + +ui.lists.Search_emails.facets.parameters = sender_s +ui.lists.Search_emails.facets.parameters.sender_s.type = SimpleFacetParameter + +ui.search.fields.Search_emails = emailSender +ui.search.fields.Search_emails = emailSubject +ui.search.fields.Search_emails = emailSentDate + +ui.search.fields.Search_emails.emailSender.fields = sender_s +ui.search.fields.Search_emails.emailSender.i18n = ui.search.fields.IndexedAIP.emailSender +ui.search.fields.Search_emails.emailSender.type = text + +ui.search.fields.Search_emails.emailSubject.fields = subject_txt +ui.search.fields.Search_emails.emailSubject.i18n = ui.search.fields.IndexedAIP.emailSubject +ui.search.fields.Search_emails.emailSubject.type = text + +ui.search.fields.Search_emails.emailSentDate.fields = sentDate_dt +ui.search.fields.Search_emails.emailSentDate.i18n = ui.search.fields.IndexedAIP.emailSentDate +ui.search.fields.Search_emails.emailSentDate.type = date_interval + ## BrowseTop_aip ui.lists.BrowseTop_aip.columns[] = default_IndexedAIP_level ui.lists.BrowseTop_aip.columns[].default_IndexedAIP_level.sortBy = level