diff --git a/.gitignore b/.gitignore
index 2fd112e3..7347fbeb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,8 +3,11 @@ logs
*.log
npm-debug.log*
.DS_Store
-
+cache
+.nyc_output/
coverage
+cypress/videos
+cypress/reports
node_modules
build
.env.local
@@ -16,4 +19,4 @@ data
omelette
src/addons
-src/develop
\ No newline at end of file
+src/develop
diff --git a/Jenkinsfile b/Jenkinsfile
index 15d36767..a31b05e4 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -14,70 +14,70 @@ pipeline {
stages {
- // stage('Integration tests') {
- // parallel {
- // stage('Integration with Cypress') {
- // when {
- // environment name: 'CHANGE_ID', value: ''
- // }
- // steps {
- // node(label: 'docker') {
- // script {
- // try {
- // sh '''docker pull plone; docker run -d --name="$BUILD_TAG-plone" -e SITE="Plone" -e PROFILES="profile-plone.restapi:blocks" plone fg'''
- // sh '''docker pull eeacms/volto-project-ci; docker run -i --name="$BUILD_TAG-cypress" --link $BUILD_TAG-plone:plone -e GIT_NAME=$GIT_NAME -e GIT_BRANCH="$BRANCH_NAME" -e GIT_CHANGE_ID="$CHANGE_ID" eeacms/volto-project-ci cypress'''
- // } finally {
- // try {
- // sh '''rm -rf cypress-reports cypress-results'''
- // sh '''mkdir -p cypress-reports cypress-results'''
- // sh '''docker cp $BUILD_TAG-cypress:/opt/frontend/my-volto-project/cypress/videos cypress-reports/'''
- // sh '''docker cp $BUILD_TAG-cypress:/opt/frontend/my-volto-project/cypress/reports cypress-results/'''
- // archiveArtifacts artifacts: 'cypress-reports/videos/*.mp4', fingerprint: true
- // }
- // finally {
- // catchError(buildResult: 'SUCCESS', stageResult: 'SUCCESS') {
- // junit testResults: 'cypress-results/**/*.xml', allowEmptyResults: true
- // }
- // sh script: "docker stop $BUILD_TAG-plone", returnStatus: true
- // sh script: "docker rm -v $BUILD_TAG-plone", returnStatus: true
- // sh script: "docker rm -v $BUILD_TAG-cypress", returnStatus: true
- // }
- // }
- // }
- // }
- // }
- // }
-
- // stage("Docker test build") {
- // when {
- // not {
- // environment name: 'CHANGE_ID', value: ''
- // }
- // not {
- // buildingTag()
- // }
- // environment name: 'CHANGE_TARGET', value: 'master'
- // }
- // environment {
- // IMAGE_NAME = BUILD_TAG.toLowerCase()
- // }
- // steps {
- // node(label: 'docker-host') {
- // script {
- // checkout scm
- // try {
- // dockerImage = docker.build("${IMAGE_NAME}", "--no-cache .")
- // } finally {
- // sh script: "docker rmi ${IMAGE_NAME}", returnStatus: true
- // }
- // }
- // }
- // }
- // }
-
-
- // }
- // }
+ stage('Integration tests') {
+ parallel {
+ stage('Integration with Cypress') {
+ when {
+ environment name: 'CHANGE_ID', value: ''
+ }
+ steps {
+ node(label: 'docker') {
+ script {
+ try {
+ sh '''docker pull eeacms/plone-backend; docker run --rm -d --name="$BUILD_TAG-plone" -e SITE="Plone" -e PROFILES="eea.kitkat:testing" eeacms/plone-backend'''
+ sh '''docker pull eeacms/volto-project-ci; docker run -i --name="$BUILD_TAG-cypress" --link $BUILD_TAG-plone:plone -e GIT_NAME=$GIT_NAME -e GIT_BRANCH="$BRANCH_NAME" -e GIT_CHANGE_ID="$CHANGE_ID" eeacms/volto-project-ci cypress'''
+ } finally {
+ try {
+ sh '''rm -rf cypress-reports cypress-results'''
+ sh '''mkdir -p cypress-reports cypress-results'''
+ sh '''docker cp $BUILD_TAG-cypress:/opt/frontend/my-volto-project/cypress/videos cypress-reports/'''
+ sh '''docker cp $BUILD_TAG-cypress:/opt/frontend/my-volto-project/cypress/reports cypress-results/'''
+ archiveArtifacts artifacts: 'cypress-reports/videos/*.mp4', fingerprint: true
+ }
+ finally {
+ catchError(buildResult: 'SUCCESS', stageResult: 'SUCCESS') {
+ junit testResults: 'cypress-results/**/*.xml', allowEmptyResults: true
+ }
+ sh script: "docker stop $BUILD_TAG-plone", returnStatus: true
+ sh script: "docker rm -v $BUILD_TAG-plone", returnStatus: true
+ sh script: "docker rm -v $BUILD_TAG-cypress", returnStatus: true
+ }
+ }
+ }
+ }
+ }
+ }
+
+ stage("Docker test build") {
+ when {
+ not {
+ environment name: 'CHANGE_ID', value: ''
+ }
+ not {
+ buildingTag()
+ }
+ environment name: 'CHANGE_TARGET', value: 'master'
+ }
+ environment {
+ IMAGE_NAME = BUILD_TAG.toLowerCase()
+ }
+ steps {
+ node(label: 'docker-host') {
+ script {
+ checkout scm
+ try {
+ dockerImage = docker.build("${IMAGE_NAME}", "--no-cache .")
+ } finally {
+ sh script: "docker rmi ${IMAGE_NAME}", returnStatus: true
+ }
+ }
+ }
+ }
+ }
+
+
+ }
+ }
stage('Pull Request') {
@@ -174,24 +174,24 @@ pipeline {
}
}
- // stage('Update SonarQube Tags') {
- // when {
- // not {
- // environment name: 'SONARQUBE_TAG', value: ''
- // }
- // buildingTag()
- // }
- // steps{
- // node(label: 'docker') {
- // withSonarQubeEnv('Sonarqube') {
- // withCredentials([string(credentialsId: 'eea-jenkins-token', variable: 'GIT_TOKEN')]) {
- // sh '''docker pull eeacms/gitflow'''
- // sh '''docker run -i --rm --name="${BUILD_TAG}-sonar" -e GIT_NAME=${GIT_NAME} -e GIT_TOKEN="${GIT_TOKEN}" -e SONARQUBE_TAG=${SONARQUBE_TAG} -e SONARQUBE_TOKEN=${SONAR_AUTH_TOKEN} -e SONAR_HOST_URL=${SONAR_HOST_URL} eeacms/gitflow /update_sonarqube_tags.sh'''
- // }
- // }
- // }
- // }
- // }
+ stage('Update SonarQube Tags') {
+ when {
+ not {
+ environment name: 'SONARQUBE_TAG', value: ''
+ }
+ buildingTag()
+ }
+ steps{
+ node(label: 'docker') {
+ withSonarQubeEnv('Sonarqube') {
+ withCredentials([string(credentialsId: 'eea-jenkins-token', variable: 'GIT_TOKEN')]) {
+ sh '''docker pull eeacms/gitflow'''
+ sh '''docker run -i --rm --name="${BUILD_TAG}-sonar" -e GIT_NAME=${GIT_NAME} -e GIT_TOKEN="${GIT_TOKEN}" -e SONARQUBE_TAG=${SONARQUBE_TAG} -e SONARQUBE_TOKEN=${SONAR_AUTH_TOKEN} -e SONAR_HOST_URL=${SONAR_HOST_URL} eeacms/gitflow /update_sonarqube_tags.sh'''
+ }
+ }
+ }
+ }
+ }
}
diff --git a/cypress.config.js b/cypress.config.js
new file mode 100644
index 00000000..da8e7baf
--- /dev/null
+++ b/cypress.config.js
@@ -0,0 +1,27 @@
+const { defineConfig } = require('cypress');
+
+module.exports = defineConfig({
+ viewportWidth: 1280,
+ defaultCommandTimeout: 8888,
+ chromeWebSecurity: false,
+ reporter: 'junit',
+ video: true,
+ retries: {
+ runMode: 8,
+ openMode: 0,
+ },
+ reporterOptions: {
+ mochaFile: 'cypress/reports/cypress-[hash].xml',
+ jenkinsMode: true,
+ toConsole: true,
+ },
+ e2e: {
+ setupNodeEvents(on, config) {
+ // e2e testing node events setup code
+ require('@cypress/code-coverage/task')(on, config);
+ require('cypress-fail-fast/plugin')(on, config);
+ return config;
+ },
+ baseUrl: 'http://localhost:3000',
+ },
+});
diff --git a/cypress.json b/cypress.json
deleted file mode 100644
index aef675e8..00000000
--- a/cypress.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "baseUrl": "http://localhost:3000",
- "viewportWidth": 1280,
- "defaultCommandTimeout": 15000,
- "reporter": "junit",
- "video": true,
- "reporterOptions": {
- "mochaFile": "cypress/reports/cypress-[hash].xml",
- "jenkinsMode": true,
- "toConsole": true
- }
-}
diff --git a/cypress/integration/block-basics.js b/cypress/e2e/01-block-basics.cy.js
similarity index 57%
rename from cypress/integration/block-basics.js
rename to cypress/e2e/01-block-basics.cy.js
index 454084ce..1e726ef6 100644
--- a/cypress/integration/block-basics.js
+++ b/cypress/e2e/01-block-basics.cy.js
@@ -1,20 +1,20 @@
-import { setupBeforeEach, tearDownAfterEach } from '../support';
+import { slateBeforeEach, slateAfterEach } from '../support/e2e';
+
+import 'cypress-fail-fast';
describe('Blocks Tests', () => {
- beforeEach(setupBeforeEach);
- afterEach(tearDownAfterEach);
+ beforeEach(slateBeforeEach);
+ afterEach(slateAfterEach);
it('Add Block: Empty', () => {
// Change page title
- cy.get('.documentFirstHeading > .public-DraftStyleDefault-block')
- .clear()
- .type('My Add-on Page')
- .get('.documentFirstHeading span[data-text]')
- .contains('My Add-on Page');
-
- cy.get('.documentFirstHeading > .public-DraftStyleDefault-block').type(
- '{enter}',
- );
+ cy.get('[contenteditable=true]').first().clear();
+
+ cy.get('[contenteditable=true]').first().type('My Add-on Page');
+
+ cy.get('.documentFirstHeading').contains('My Add-on Page');
+
+ cy.get('[contenteditable=true]').first().type('{enter}');
// Add block
cy.get('.ui.basic.icon.button.block-add-button').first().click();
diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js
deleted file mode 100644
index 27a31a54..00000000
--- a/cypress/plugins/index.js
+++ /dev/null
@@ -1,26 +0,0 @@
-///
Add some HTML here
":"HTML hier einfügen
","Accessibility":"Barrierefreiheit","Account Registration Completed":"Die Registrierung Ihres Zugangs wurde erfolgreich abgeschlossen.","Account activation completed":"Passwort gesetzt.","Action":"Aktion","Action changed":"","Action: ":"","Actions":"Aktionen","Activate and deactivate":"Aktiviern und Deaktivieren","Active":"","Active content rules in this Page":"","Add":"Hinzufügen","Add (object list)":"","Add Addons":"Add-on hinzufügen","Add Content":"Inhalte hinzufügen","Add Content Rule":"","Add Rule":"","Add Translation…":"Übersetzung hinzufügen…","Add User":"Benutzer hinzufügen","Add a description…":"Beschreibung hinzufügen…","Add a new alternative url":"","Add action":"","Add block":"Block hinzufügen","Add block…":"Block hinzufügen","Add condition":"","Add content rule":"","Add criteria":"Kriterien hinzufügen","Add date":"Datum hinzufügen","Add field":"Feld hinzufügen","Add fieldset":"Fieldset hinzufügen","Add group":"Gruppe hinzufügen","Add new content type":"Neuen Inhaltstypen hinzufügen","Add new group":"Neue Gruppe hinzufügen","Add new user":"Neuen Benutzer hinzufügen","Add to Groups":"Zu Gruppe hinzufügen","Add users to group":"Füge Benutzer zu Gruppe hinzu","Add vocabulary term":"Füge neuen Term hinzu","Add {type}":"{type} hinzufügen","Add-Ons":"","Add-on Configuration":"Konfiguration von Erweiterungen","Add-ons":"","Add-ons Settings":"Einstellungen Add-ons","Added":"","Additional date":"Zusätzliches Datum","Addon could not be installed":"","Addon could not be uninstalled":"","Addon could not be upgraded":"","Addon installed succesfuly":"","Addon uninstalled succesfuly":"","Addon upgraded succesfuly":"","Album view":"Album","Alias":"","Alias has been added":"","Alignment":"Ausrichtung","All":"Alle","All content":"Alle Inhalte","All existing alternative urls for this site":"","Alphabetically":"alphabetisch","Alt text":"Alternative Text","Alt text hint":"","Alt text hint link text":"","Alternative url path (Required)":"","Alternative url path must start with a slash.":"","Alternative url path → target url path (date and time of creation, manually created yes/no)":"","Applied to subfolders":"","Applies to subfolders?":"","Apply to subfolders":"","Apply working copy":"Arbeitskopie anwenden","Are you sure you want to delete this field?":"Sind Sie sicher, dass Sie dieses Feld löschen möchten?","Are you sure you want to delete this fieldset including all fields?":"Sind Sie sicher, dass Sie dieses Fieldset löschen möchten?","Ascending":"Aufsteigend","Assignments":"","Available":"Verfügbar","Available content rules:":"","Back":"Zurück","Background color":"Hintergrundfarbe","Base":"Basis","Base search query":"Basis Suchfilter","Block":"Block","Both email address and password are case sensitive, check that caps lock is not enabled.":"Sowohl E-Mail Adresse als auch Passwort unterscheiden zwischen Groß- und Kleinschreibung, stellen Sie sicher dass die Hochstelltaste nicht aktiviert ist.","Breadcrumbs":"Brotkrumen","Browse":"Durchsuchen","Browse the site, drop an image, or type an URL":"Seite durchsuchen, Bild ablegen oder URL eingeben","By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator.":"Standardmäßig werden die Berechtigungen von einem Ordner auf die in ihm befindlichen Artikel vererbt. Wenn Sie dies deaktivieren, sind nur die explizit definierten Zugriffsberechtigungen gültig. In der Übersicht zeigt das Symbol ${image_confirm_icon} einen ererbten Wert an. Das Symbol ${image_link_icon} zeigt eine globale Funktion an, die vom Administrator verwaltet wird.","By deleting this item, you will break links that exist in the items listed below. If this is indeed what you want to do, we recommend that remove these references first.":"","Cache Name":"Cache Name","Can not edit Layout for {type} content-type as it doesn't have support for Volto Blocks enabled":"Layout für {type} kann nicht verändert werden, da das Volto Blocks-Behavior nicht für diesen Inhaltstyp aktiviert ist","Can not edit Layout for {type} content-type as the Blocks behavior is enabled and read-only":"Layout für {type} kann nicht verändert werden, da das Volto Blocks-Behavior auf nur-lesend gesetzt ist","Cancel":"Abbrechen","Cell":"Zelle","Center":"","Change Note":"Änderungsnotiz","Change Password":"Passwort ändern","Change State":"Arbeitsablauf-Status ändern","Change workflow state recursively":"Arbeitsablauf-Status für alle Unterobjekte ebenfalls ändern","Changes applied.":"Änderungen durchgeführt.","Changes saved":"Änderungen gespeichert","Changes saved.":"Änderungen gespeichert.","Checkbox":"Checkbox","Choices":"Auswahlfeld","Choose Image":"Bild auswählen","Choose Target":"Ziel auswählen","Choose a file":"Datei auswählen","Clear":"Löschen","Clear filters":"Filter entfernen","Click to download full sized image":"Klicken um das Bild in der vollen Größe runterzuladen","Close":"Schließen","Close menu":"Menu schließen","Code":"Code","Collapse item":"Element einklappen","Collection":"Kollektion","Color":"","Comment":"Kommentar","Commenter":"Kommentarautor","Comments":"Kommentare","Compare":"Vergleichen","Condition changed":"","Condition: ":"","Configure Content Rule":"","Configure Content Rule: {title}":"","Configure content rule":"","Confirm password":"Passwort bestätigen","Connection refused":"Verbindung abgelehnt","Contact":"Kontakt","Contact form":"Kontaktformular","Contained items":"Enthaltene Elemente","Content":"Inhalt","Content Rule":"","Content Rules":"","Content rules for {title}":"","Content rules from parent folders":"","Content type created":"Inhaltstyp erstellt","Content type deleted":"Inhaltstyp gelöscht","Contents":"Inhalte","Controls":"Einstellungen","Copy":"Kopieren","Copy blocks":"Blöcke kopieren","Copyright":"Urheberrecht","Copyright statement or other rights information on this item.":"Informationen über die Urheber- und Nutzungsrechte an diesem Artikel.","Create working copy":"Arbeitskopie erstellen","Created by {creator} on {date}":"Erstellt von {creator} am {date}","Created on":"Erstellt am","Creator":"Ersteller","Creators":"Ersteller","Criteria":"Kriterium","Current filters applied":"Ausgewählte Filter","Current password":"Aktuelles Passwort","Cut":"Ausschneiden","Cut blocks":"Blöcke ausschneiden","Daily":"Täglich","Database":"","Database Information":"Datenbankinformationen","Database Location":"Speicheort Datenbank","Database Size":"Größe Datenbank","Database main":"Datenbank","Date":"Datum","Date (newest first)":"Datum (neustes zuerst)","Default":"Standard","Default view":"Standard","Delete":"Löschen","Delete Group":"Gruppe löschen","Delete Type":"Inhaltstype löschen","Delete User":"Benutzer löschen","Delete action":"","Delete blocks":"Blöcke löschen","Delete col":"Spalte löschen","Delete condition":"","Delete row":"Zeile löschen","Deleted":"","Depth":"Tiefe","Descending":"Absteigend","Description":"Beschreibung","Diff":"Unterschied","Difference between revision {one} and {two} of {title}":"Unterschied zwischen Version {one} and {two} von {title}","Disable":"","Disable apply to subfolders":"","Disabled":"","Disabled apply to subfolders":"","Distributed under the {license}.":"Lizensiert unter der {license}.","Divide each row into separate cells":"Jede Zeile in einzelne Zellen teilen","Do you really want to delete the following items?":"Möchten Sie den Artikel wirklich löschen?","Do you really want to delete the group {groupname}?":"Möchten Sie die Gruppe {groupname} wirklich löschen?","Do you really want to delete the type {typename}?":"Möchten Sie den Inhaltstyp {typename} wirklich löschen?","Do you really want to delete the user {username}?":"Möchten Sie den Nutzer {username} wirklich löschen?","Do you really want to delete this item?":"Möchten Sie den Artikel wirklich löschen?","Document":"Seite","Document view":"Seite","Download Event":"","Drag and drop files from your computer onto this area or click the “Browse” button.":"Ziehen Sie Dateien von Ihrem Computer auf diesen Bereich oder drücken Sie den “Durchsuchen”-Knopf.","Drop file here to replace the existing file":"Datei hier ablegen um die bestehende Datei zu ersetzen","Drop file here to upload a new file":"Datei hier ablegen um eine neue Datei hochzuladen","Drop files here ...":"Datei hier ablegen um die bestehende Datei zu ersetzen","E-mail":"E-Mail","E-mail addresses do not match.":"E-Mail-Adressen stimmen nicht überein.","Edit":"Bearbeiten","Edit Rule":"","Edit comment":"Kommentar bearbeiten","Edit field":"Feld bearbeiten","Edit fieldset":"Fieldset bearbeiten","Edit recurrence":"Wiederkehrende Einstellungen bearbeiten","Edit values":"Werte bearbeiten","Edit {title}":"{title} bearbeiten","Email":"E-Mail","Email sent":"E-Mail versendet","Embed code error, please follow the instructions and try again.":"Fehler beim Einbinden des Google Maps Codes. Bitte lesen Sie die Anweisungen und stellen Sie sicher dass Sie den korrekten Code verwenden.","Empty object list":"Leere Liste von Elementen","Enable":"","Enable editable Blocks":"Aktiviere bearbeitbare Blocks","Enabled":"","Enabled here?":"","Enabled?":"","End Date":"Enddatum","Enter URL or select an item":"URL eingeben oder Objekt auswählen","Enter a username above to search or click 'Show All'":"Benutzername oben eingeben oder auf 'Alle anzeigen' klicken","Enter an email address. This will be your login name. We respect your privacy, and will not give the address away to any third parties or expose it anywhere.":"Tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich künftig anmelden müssen. Wir respektieren den Datenschutz und werden die E-Mail-Adresse nicht an Dritte weitergeben und auch nirgends anzeigen.","Enter full name, e.g. John Smith.":"Tragen Sie bitte Ihren vollen Namen ein.","Enter map Embed Code":"Karten-Einbettungscode eingeben","Enter the absolute path of the target. The path must start with '/'. Target must exist or be an existing alternative url path to the target.":"","Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring.":"","Enter your current password.":"Geben Sie Ihr aktuelles Passwort ein.","Enter your email for verification.":"","Enter your new password. Minimum 5 characters.":"Geben Sie ihr neues Passwort ein. Mindestens 5 Zeichen.","Enter your username for verification.":"","Error":"Fehler","ErrorHeader":"","Event":"","Event listing":"Termine","Event view":"Termin","Exclude from navigation":"Von der Navigation ausschließen","Exclude this occurence":"Dieses Datum ausschließen","Excluded from navigation":"Von Navigation ausgeschlossen","Existing alternative urls for this item":"","Expand sidebar":"Sidebar vergrößern","Expiration Date":"Ablaufdatum","Expiration date":"Ablaufdatum","Expired":"Abgelaufen","External URL":"Externe URL","Facet":"Facette","Facet widget":"Facetten-Widget","Facets":"Facetten","Facets on left side":"Facetten links","Facets on right side":"Facetten rechts","Facets on top":"Facetten oben","Failed To Undo Transactions":"","Field":"Feld","File":"Datei","File size":"Dateigröße","File view":"Datei","Filename":"Dateiname","Filter Rules:":"","Filter by prefix":"","Filter users by groups":"Filtere Benutzer via Gruppenmitgliedschaft","Filter…":"Filter…","First":"Erster Tag des Monats","Fixed width table cells":"Zellen mit fester Breite","Fold":"Einklappen","Folder":"Ordner","Folder listing":"Ordner","Forbidden":"Verboten","Fourth":"Vierter","From":"E-Mail","Full":"Volle Breite","Full Name":"Vor- und Nachname","Fullname":"Name","GNU GPL license":"GNU-GPL-Lizenz","General":"Allgemein","Global role":"Globale Rolle","Google Maps Embedded Block":"Google Maps Block","Group":"Gruppe","Group created":"Gruppe erstellt","Group roles updated":"Gruppenrollen aktualisiert","Groupname":"Gruppenname","Groups":"Gruppen","Groups are logical collections of users, such as departments and business units. Groups are not directly related to permissions on a global level, you normally use Roles for that - and let certain Groups have a particular role. The symbol{plone_svg}indicates a role inherited from membership in another group.":"Gruppen sind Kollektionen von Nutzern, wie z.B. Abteilungen oder Organisationseinheiten. Berechtigungen werden normalerweise nicht global an Gruppen vergeben, sondern eher an Rollen, und dann haben Gruppen eine bestimmte Rolle. Das Symbol {plone_svg} zeigt an, dass eine Rolle von einer anderen Gruppe geerbt wird.","Header cell":"Kopfzeile","Headline":"Überschrift","Headline level":"","Hidden facets will still filter the results if proper parameters are passed in URLs":"Verteckte Facetten können die Ergebnisse weiterhin filtern, wenn die entsprechenden Parameter in der URL angehängt werden","Hide Replies":"Antworten ausblenden","Hide facet?":"Facette verstecken","History":"Historie","History Version Number":"Historie Versionsnummer","History of {title}":"Historie von {title}","Home":"Startseite","ID":"ID","If all of the following conditions are met:":"","If selected, this item will not appear in the navigation tree":"Bestimmt, ob der Artikel nicht in der Navigation auftauchen soll.","If this date is in the future, the content will not show up in listings and searches until this date.":"Falls das Datum in der Zukunft liegt wird der Inhalt in Auflistungen und bei der Suche nicht auftauchen, bis zu dem Datum.","If you are certain this user has abandoned the object, you may unlock the object. You will then be able to edit it.":"Wenn Sie sicher sind dass das Objekt nicht mehr aktiv von einem anderen Nutzer verwendet wird, können Sie die Sperrung aufheben. Danach können Sie das Objekt bearbeiten.","If you are certain you have the correct web address but are encountering an error, please contact the {site_admin}.":"Wenn Sie sicher sind, dass Sie die richtige Adresse eingegeben haben, kontaktieren Sie bitte den {site_admin}.","Image":"Bild","Image gallery":"Bildergalerie","Image size":"","Image view":"Bild","Include this occurence":"Datum einbeziehen","Info":"Information","InfoUserGroupSettings":"Sie haben die Option 'viele Benutzer' oder 'viele Gruppen' gewählt. Deshalb erwartet das Panel die Eingabe eines Suchwerts und die Auswahl eines Gruppen-Filters um Benutzer und Gruppen zu zeigen. Wenn Sie im Panel umgehend alle Benutzer und Gruppen sehen möchten, dann wechseln Sie bitte zu den Benutzer- und Gruppeneinstellungen und ändern die Einstellungen. Links finden Sie einen Link.","Inherit permissions from higher levels":"Berechtigungen von übergeordneten Ordnern übernehmen","Inherited value":"Geerbter Wert","Insert col after":"Spalte dahinter einfügen","Insert col before":"Spalte davor einfügen","Insert row after":"Zeile dahinter einfügen","Insert row before":"Zeile davor einfügen","Install":"Installieren","Installed":"Installiert","Installed version":"Installierte Version","Installing a third party add-on":"","Interval Daily":"Täglich","Interval Monthly":"Monatlich","Interval Weekly":"Wöchentlich","Interval Yearly":"Jährliches Intervall","Item batch size":"Batch-Anzahl","Item succesfully moved.":"Objekt wurde erfolgreich verschoben.","Item(s) copied.":"Objekt(e) kopiert.","Item(s) cut.":"Objekt(e) ausgeschnitten.","Item(s) has been updated.":"Objekt(e) wurde(n) aktualisiert","Item(s) pasted.":"Artikel eingefügt.","Item(s) state has been updated.":"Der Status der Objekte wurde aktualisiert.","Items":"Elemente","Items must be unique.":"Auswahl muss eindeutig sein.","Items to be deleted:":"","Label":"Label","Language":"Sprache","Language independent field.":"","Large":"","Last":"Letzter","Last comment date":"Letztes Kommentierdatum","Last modified":"Letzte Änderung","Latest version":"Letzte Version","Layout":"Layout","Lead Image":"Lead-Bild","Left":"","Link":"Link","Link more":"'Mehr' Link","Link redirect view":"Link","Link title":"Linktitel","Link to":"Link auf","Link translation for":"Übersetzung verbinden","Listing":"Auflistung","Listing view":"Auflistung","Load more":"Mehr laden","Loading":"lädt","Log In":"Anmelden","Log in":"Anmelden","Logged out":"Abgemeldet","Login":"Einloggen","Login Failed":"Login fehlgeschlagen","Login Name":"Benutzername","Logout":"Ausloggen","Made by {creator} on {date}. This is not a working copy anymore, but the main content.":"Erstellt von {creator} am {date}. Diese Seite ist keine Arbeitskopie mehr sondern die Live-Seite.","Make the table compact":"Tabelle komprimieren","Manage Translations":"Übersetzungen verwalten","Manage content…":"","Manage translations for {title}":"Übersetzungen für {} verwalten","Manual":"","Manually or automatically added?":"","Maps":"","Maps URL":"Karten URL","Maximum length is {len}.":"Maximale Länge ist {len}.","Maximum value is {len}.":"Maximaler Wert ist {len}","Medium":"","Message":"Nachricht","Minimum length is {len}.":"Minimale Länge ist {len}","Minimum value is {len}.":"Minimaler Wert ist {len}","Moderate Comments":"Kommentare moderieren","Moderate comments":"Kommentare moderieren","Monday and Friday":"Montag und Freitag","Month day":"Tag des Monats","Monthly":"Monatlich","More":"Mehr","Mosaic layout":"Mosaic","Move down":"","Move to bottom of folder":"Ans Ende verschieben","Move to top of folder":"An den Anfang verschieben","Move up":"","Multiple choices?":"Mehrfachauswahl","My email is":"","My username is":"Mein Benutzername ist","Name":"Name","Navigate back":"Zurück navigieren","Navigation":"Navigation","New password":"Neues Passwort","News Item":"Nachricht","News item view":"Nachricht","No":"Nein","No Transactions Found":"","No Transactions Selected":"","No Transactions Selected To Do Undo":"","No Video selected":"","No addons found":"Keine Add-ons installiert.","No connection to the server":"","No image selected":"","No image set in Lead Image content field":"Im Feld 'Lead-Bild' wurde kein Bild gesetzt.","No image set in image content field":"Im Feld 'Bild' wurde kein Bild gesetzt","No items found in this container.":"Keine Elemente gefunden","No items selected":"Kein Element ausgewählt","No map selected":"Keine Karte ausgewählt","No occurences set":"Kein Datum gesetzt","No options":"Keine Option","No results found":"Keine Ergebnisse gefunden","No results found.":"Keine Ergebnisse gefunden.","No selection":"Keine Auswahl","No uninstall profile":"Kein Deinstallationsprofil","No user found":"Kein Benutzer gefunden","No value":"Kein Wert","No workflow":"Kein Workflow","None":"Nicht vorhanden","Note":"","Note that roles set here apply directly to a user. The symbol{plone_svg}indicates a role inherited from membership in a group.":"Rollen gelten für diesen Nutzer. Das Zeichen {plone_svg} zeigt an dass eine Rolle von einer Gruppenzugehörigkeit geerbt wird.","Number of active objects":"Anzahl aktive Objekte","Object Size":"Grösse","Occurences":"Vorkommen","Ok":"OK","Only lowercase letters (a-z) without accents, numbers (0-9), and the characters \"-\", \"_\", and \".\" are allowed.":"Nur Kleinbuchstaben (a-z) ohne Umlaute oder Sonderzeichen, Zahlen (0-9) und die beiden Zeichen \"-\" und \"_\", und \".\" sind erlaubt.","Open in a new tab":"In neuem Browser-Tab öffnen","Open menu":"Menü öffnen","Open object browser":"Objekt-Browser öffnen","Origin":"Quelle","Page":"Seite","Parent fieldset":"Eltern-Fieldset","Password":"Passwort","Password reset":"Passwort zurücksetzen","Passwords do not match.":"Die Passwörter stimmen nicht überein.","Paste":"Einfügen","Paste blocks":"Blöcke einfügen","Perform the following actions:":"","Permissions have been updated successfully":"Berechtigungen wurden erfolgreich aktualisiert","Permissions updated":"Berechtigungen aktualisiert","Personal Information":"Persönliche Informationen","Personal Preferences":"Meine Einstellungen","Personal tools":"Persönliche Einstellungen","Persons responsible for creating the content of this item. Please enter a list of user names, one per line. The principal creator should come first.":"Eine Liste von Personen, die an der Erstellung dieses Artikels beteiligt waren. Bitte geben Sie einen Benutzernamen pro Zeile ein. Der Hauptverantwortliche sollte zuerst genannt werden.","Please enter a valid URL by deleting the block and adding a new video block.":"Geben Sie eine gültige URL ","Please enter the Embed Code provided by Google Maps -> Share -> Embed map. It should contain the