@plone/volto 16.0.0-alpha.20 → 16.0.0-alpha.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -243,7 +243,7 @@ jobs:
243
243
  group: Core Basic - Plone 6
244
244
  spec: cypress/tests/core/basic/**/*.js
245
245
  start: |
246
- make start-test-acceptance-server DOCKER_IMAGE=plone/plone-backend:6.0.0a4
246
+ make start-test-acceptance-server DOCKER_IMAGE=plone/plone-backend:6.0.0b1 KGS=
247
247
  make start-test-acceptance-frontend
248
248
  wait-on: 'npx wait-on --httpTimeout 20000 http-get://localhost:55001/plone http://localhost:3000'
249
249
 
@@ -12,21 +12,10 @@ jobs:
12
12
 
13
13
  # node setup
14
14
  - name: Use Node.js ${{ matrix.node-version }}
15
- uses: actions/setup-node@v1
15
+ uses: actions/setup-node@v3
16
16
  with:
17
17
  node-version: ${{ matrix.node-version }}
18
-
19
- # node cache
20
- - name: Get yarn cache directory path
21
- id: yarn-cache-dir-path
22
- run: echo "::set-output name=dir::$(yarn cache dir)"
23
- - uses: actions/cache@v1
24
- id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
25
- with:
26
- path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
27
- key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
28
- restore-keys: |
29
- ${{ runner.os }}-yarn-
18
+ cache: yarn
30
19
 
31
20
  # node install
32
21
  - run: yarn --frozen-lockfile
package/CHANGELOG.md CHANGED
@@ -1,19 +1,72 @@
1
1
  # Change Log
2
2
 
3
+ ## 16.0.0-alpha.23 (2022-08-18)
4
+
5
+ ### Breaking
6
+
7
+ - change password-reset url to be consistent with Plone configuration @erral
8
+ - Simplify over the existing Component Registry API. The `component` key has been flattened for simplification and now it's mapped directly to the `component` argument of `registerComponent`. @sneridagh
9
+
10
+ See https://6.dev-docs.plone.org/volto/upgrade-guide/index.html for more information.
11
+
12
+ ### Feature
13
+
14
+ - Show the content type of the content object you are adding/editing in the sidebar @robgietema
15
+ - Remove soft hyphens from the title tag @davisagli
16
+
17
+ ### Bugfix
18
+
19
+ - Fix login form redirect when it was loaded with a trailing slash @davisagli
20
+ - Better de translation for Site Setup @davisagli
21
+
22
+ ### Internal
23
+
24
+ - Test against Plone 5.2.9 and 6.0.0b1 @davisagli
25
+ - Use latest 1.6.0 `@plone/scripts` @sneridagh
26
+ - Add classname of variation in edit mode @iFlameing
27
+
28
+ ## 16.0.0-alpha.22 (2022-08-05)
29
+
30
+ ### Breaking
31
+
32
+ - The complete configuration registry is passed to the add-ons and the project configuration pipeline
33
+ See https://docs.voltocms.com/upgrade-guide/ for more information. @sneridagh
34
+ - Refactor the component registry API in the configuration registry @sneridagh @tiberiuichim
35
+
36
+ ### Bugfix
37
+
38
+ - Fix content loading in `DefaultView` infinite loop if a listing block with no query is present. @sneridagh
39
+
40
+ ### Documentation
41
+
42
+ - Documentation of the new component registry API @sneridagh
43
+
44
+ ## 16.0.0-alpha.21 (2022-08-03)
45
+
46
+ ### Bugfix
47
+
48
+ - Fix ArrayWidget choices when editing a recently created content item. @davisagli
49
+
50
+ ### Internal
51
+
52
+ - Fix propTypes for Pagination component @davisagli
53
+
3
54
  ## 16.0.0-alpha.20 (2022-08-01)
4
55
 
5
56
  ### Breaking
6
57
 
7
- - Use `Cypress` 10.3.0 (migrate from 9.x.x). Cypress 10 has some interesting goodies, being the native support of Apple Silicon Computers the main of it. See https://docs.voltocms.com/upgrade-guide/ for more information.
58
+ - Use `Cypress` 10.3.0 (migrate from 9.x.x). Cypress 10 has some interesting goodies, being the native support of Apple Silicon Computers the main of it. See https://docs.voltocms.com/upgrade-guide/ for more information. @sneridagh
8
59
 
9
60
  ### Bugfix
10
61
 
11
62
  - Make Search page title translatable @erral
63
+ - Changed storeProtectLoadUtils location from src/storeProtectLoadUtils to src/middleware/storeProtectLoadUtils @MdSahil-oss
12
64
 
13
65
  ### Documentation
14
66
 
15
67
  - Minor clean up of volto-slate upgrade guide. @stevepiercy
16
68
 
69
+ - Rework documentation on how to write a Slate plugin @ksuess
17
70
 
18
71
  ## 16.0.0-alpha.19 (2022-07-28)
19
72
 
@@ -36,6 +89,7 @@
36
89
 
37
90
  - Allow passing `allowedChildren` option to the BlockButton, to strip elements in headlines @tiberiuichim
38
91
  - Upgrade to latest `@plone/scripts` @sneridagh
92
+ - Update browserlist definitions @sneridagh
39
93
 
40
94
  ### Documentation
41
95
 
@@ -71,7 +125,7 @@ Use next release instead: https://github.com/plone/volto/releases/tag/16.0.0-alp
71
125
 
72
126
  ### Breaking
73
127
 
74
- - Staticize Poppins font to be compliant with EU privacy. Import from GoogleFont is disabled in site.variables. @giuliaghisini
128
+ - Staticize Poppins font to be compliant with EU privacy. Import from GoogleFont is disabled in site.variables. @giuliaghisini
75
129
 
76
130
  ### Bugfix
77
131
 
package/README.md CHANGED
@@ -92,24 +92,19 @@ make build-backend
92
92
 
93
93
  #### Recommended Plone version
94
94
 
95
- Volto is Plone 6 default UI, so it will work for all Plone 6 released versions.
95
+ Volto is the default UI for Plone 6, so it will work for all Plone 6 released versions.
96
96
 
97
- For the Plone 5 series latest released version (with Python 3) and above is recommended (at the time of writing 5.2.6).
98
-
99
- The following KGS (or above) are also recommended, for any Plone version used.
97
+ For the Plone 5 series, the latest released version of Plone 5 (with Python 3) is recommended (at the time of writing 5.2.9).
100
98
 
101
99
  #### KGS (known good set of versions) for backend packages
102
100
 
103
- Volto always works best with latest versions of the "Frontend stack" or at least the recommended ones (in parenthesis) which are:
104
-
105
- - plone.restapi (8.22.0)
106
- - plone.rest (2.0.0a5)
107
- - plone.volto (4.0.0a4)
101
+ On Plone 6, we recommend using the known good set (KGS) of package versions that are specified in the Plone release.
108
102
 
109
- and the following core packages since some features require up to date versions:
103
+ On Plone 5, Volto is currently tested with the following packages pinned to specific versions, and we recommend using the same versions, which are:
110
104
 
111
- - plone.app.iterate (4.0.2)
112
- - plone.app.vocabularies (4.3.0)
105
+ - plone.restapi 8.24.1
106
+ - plone.rest 2.0.0a5
107
+ - plone.volto 4.0.0a9
113
108
 
114
109
  ### Start Volto
115
110
 
package/babel.js CHANGED
@@ -12,6 +12,7 @@ module.exports = function (api) {
12
12
  '@babel/plugin-proposal-export-default-from', // Stage 1
13
13
  '@babel/plugin-syntax-export-namespace-from', // Stage 4
14
14
  '@babel/plugin-proposal-throw-expressions', // Stage 2
15
+ '@babel/plugin-proposal-nullish-coalescing-operator', // Stage 4
15
16
  [
16
17
  'babel-plugin-root-import', // Required for the ~ imports to work
17
18
  {
@@ -639,18 +639,16 @@ Cypress.Commands.add('clearSlate', (selector) => {
639
639
 
640
640
  Cypress.Commands.add('getSlate', (createNewSlate = false) => {
641
641
  let slate;
642
+ if (createNewSlate) {
643
+ cy.get('.block.inner').last().type('{moveToEnd}{enter}');
644
+ }
642
645
  cy.getIfExists(
643
646
  SLATE_SELECTOR,
644
647
  () => {
645
648
  slate = cy.get(SLATE_SELECTOR).last();
646
649
  },
647
650
  () => {
648
- if (createNewSlate) {
649
- cy.get('.block.inner').last().type('{enter}');
650
- slate = cy.get(SLATE_SELECTOR, { timeout: 10000 }).last();
651
- } else {
652
- slate = cy.get(SLATE_SELECTOR, { timeout: 10000 }).last();
653
- }
651
+ slate = cy.get(SLATE_SELECTOR, { timeout: 10000 }).last();
654
652
  },
655
653
  );
656
654
  return slate;
@@ -2496,7 +2496,7 @@ msgstr "Übersicht"
2496
2496
  #: components/manage/Toolbar/PersonalTools
2497
2497
  # defaultMessage: Site Setup
2498
2498
  msgid "Site Setup"
2499
- msgstr "Seiteneinstellungen"
2499
+ msgstr "Systemeinstellungen"
2500
2500
 
2501
2501
  #: components/theme/Sitemap/Sitemap
2502
2502
  # defaultMessage: Sitemap
package/locales/de.json CHANGED
@@ -1 +1 @@
1
- {"<p>Add some HTML here</p>":"<p>HTML hier einfügen</p>","Accessibility":"Barrierefreiheit","Account Registration Completed":"Die Registrierung Ihres Zugangs wurde erfolgreich abgeschlossen.","Account activation completed":"Passwort gesetzt.","Action":"Aktion","Actions":"Aktionen","Activate and deactivate":"Aktiviern und Deaktivieren","Add":"Hinzufügen","Add (object list)":"","Add Addons":"Add-on hinzufügen","Add Content":"Inhalte hinzufügen","Add Translation…":"Übersetzung hinzufügen…","Add User":"Benutzer hinzufügen","Add a description…":"Beschreibung hinzufügen…","Add block":"Block hinzufügen","Add block…":"Block hinzufügen","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","Additional date":"Zusätzliches Datum","Alignment":"Ausrichtung","All":"Alle","Alphabetically":"alphabetisch","Alt text":"Alternative Text","Alt text hint":"","Alt text hint link text":"","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","Available":"Verfügbar","Back":"Zurück","Background color":"","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.","Cache Name":"Cache Name","Can not edit Layout for <strong>{type}</strong> content-type as it doesn't have support for <strong>Volto Blocks</strong> enabled":"Layout für <strong>{type}</strong> kann nicht verändert werden, da das <strong>Volto Blocks</strong>-Behavior nicht für diesen Inhaltstyp aktiviert ist","Can not edit Layout for <strong>{type}</strong> content-type as the <strong>Blocks behavior</strong> is enabled and <strong>read-only</strong>":"Layout für <strong>{type}</strong> kann nicht verändert werden, da das <strong>Volto Blocks</strong>-Behavior auf nur-lesend gesetzt ist","Cancel":"Abbrechen","Cell":"Zelle","Center":"Mittig","Change Note":"Änderungsnotiz","Change Password":"Passwort ändern","Change State":"Arbeitsablauf-Status ändern","Change workflow state recursively":"Arbeitlauf-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","Confirm password":"Passwort bestätigen","Connection refused":"Verbindung abgelehnt","Contact":"Kontakt","Contact form":"Kontaktformular","Contained items":"Enthaltene Elemente","Content":"Inhalt","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","Delete":"Löschen","Delete Group":"Gruppe löschen","Delete Type":"Inhaltstype löschen","Delete User":"Benutzer löschen","Delete blocks":"Blöcke löschen","Delete col":"Spalte löschen","Delete row":"Zeile löschen","Depth":"Tiefe","Descending":"Absteigend","Description":"Beschreibung","Diff":"Unterschied","Difference between revision {one} and {two} of {title}":"Unterschied zwischen Version {one} and {two} von {title}","Distributed under the {license}.":"Lizensiert unter der {license}.","Divide each row into separate cells":"Zeile in zwei separate Zellen aufteilen","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","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 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 editable Blocks":"Aktiviere bearbeitbare Blocks","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 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","Exclude from navigation":"Von der Navigation ausschließen","Exclude this occurence":"Dieses Datum ausschließen","Excluded from navigation":"Von Navigation ausgeschlossen","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","Field":"Feld","File":"Datei","File size":"Dateigröße","Filename":"Dateiname","Filter users by groups":"Filtere Benutzer via Gruppenmitgliedschaft","Filter…":"Filter…","First":"Erster Tag des Monats","Fixed width table cells":"Tabellen-Zellen mit fester Breite","Fold":"Einklappen","Folder":"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","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","Home page":"Homepage","ID":"ID","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":"","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 danach einfügen","Insert col before":"Spalte davor einfügen","Insert row after":"Zeile danach 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.","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":"Links","Link":"Link","Link more":"'Mehr' Link","Link title":"Linktitel","Link to":"Link auf","Link translation for":"Übersetzung verbinden","Listing":"Auflistung","Load more":"Mehr laden","Loading":"lädt","Location":"Ort","Log In":"Anmelden","Log in":"Anmelden","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 kompakt darstellen","Manage Translations":"Übersetzungen verwalten","Manage translations for {title}":"Übersetzungen für {} verwalten","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","Move to bottom of folder":"Ans Ende verschieben","Move to top of folder":"An den Anfang verschieben","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","No":"Nein","No Video selected":"","No addons found":"Keine Add-ons installiert.","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 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 two characters \"-\" and \"_\" are allowed.":"Nur Kleinbuchstaben (a-z) ohne Umlaute oder Sonderzeichen, Zahlen (0-9) und die beiden Zeichen \"-\" 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","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 <iframe> code on it.":"Bitte geben sie den Einbettungscode von Google Maps ein. Klicken Sie auf 'Teilen' und dann 'Karte einbetten'. Der Code sollte ein '<iframe>'-Element enthalten.","Please fill out the form below to set your password.":"Bitte füllen Sie das unten stehende Formular aus, um Ihr Passwort neu zu setzen.","Please search for users or use the filters on the side.":"Bitte verwenden Sie das Suchfeld oder die Filter um Benutzer anzuzeigen.","Please upgrade to plone.restapi >= 8.24.0.":"Bitte upgraden auf plone.restapi >= 8.24.0.","Plone Foundation":"Plone Foundation","Plone Site":"Website","Plone{reg} Open Source CMS/WCM":"Plone{reg} Open Source Content Management System","Portrait":"Portrait","Possible values":"Mögliche Werte","Powered by Plone & Python":"Powered by Plone & Python","Preferences":"Einstellungen","Prettify your code":"Quellcode aufräumen","Preview":"Vorschau","Preview Image URL":"URL Vorschaubild","Profile":"Profil","Properties":"Eigenschaften","Publication date":"Freigabedatum","Publishing Date":"Freigabedatum","Query":"Anfrage","Re-enter the password. Make sure the passwords are identical.":"Geben Sie das gleiche Passwort erneut ein.","Read More…":"Mehr…","Rearrange items by…":"Elemente sortieren nach…","Recurrence ends":"Ende des wiederkehrenden Vorkommens","Recurrence ends after":"Wiederkehrendes Vorkommen endet nach","Recurrence ends on":"Wiederkehrendes Vorkommen endet am","Redo":"","Reduce complexity":"Komplexität reduzieren","Register":"Registrieren","Registration form":"Registrierungsformular","Relevance":"relevanz","Remove item":"Element entfernen","Remove recurrence":"Wiederkehrende Einstellung entfernen","Remove term":"Entferne Term","Remove users from group":"Trage Benutzer aus Gruppe aus","Remove working copy":"Arbeitskopie löschen","Rename":"Umbenennen","Rename Items Loading Message":"Umbenennen-Modal lädt","Rename items":"Artikel umbenennen","Repeat":"Wiederholen","Repeat every":"Wiederhole jeden","Repeat on":"Wiederhole am","Replace existing file":"Bestehende Datei ersetzen","Reply":"Antworten","Required":"Notwendig","Required input is missing.":"Notwendige Eingabe fehlt.","Reset term title":"Setze Titel zurück","Results limit":"Anzahl der Ergebnisse einschränken","Results preview":"Ergebnisvorschau","Results template":"Template Suchergebnisliste","Reversed order":"Sortierreihenfolge umkehren","Revert to this revision":"Die aktuelle Version durch diese ersetzen","Review state":"Arbeitsablauf","Richtext":"Richtext","Right":"Rechte","Rights":"Rechte","Roles":"Rollen","Root":"Wurzel","Save":"Speichern","Save recurrence":"Wiederkehrende Einstellung speichern","Schema":"Schema","Schema updates":"Aktualisierungen Schema","Search":"Suche","Search SVG":"Suchen","Search Site":"Website durchsuchen","Search block":"Such-Block","Search button label":"Label Such-Button","Search content":"Inhalte suchen","Search for user or group":"Nach Benutzer oder Gruppe suchen","Search group…":"Nach Gruppe suchen…","Search input label":"Label Suchfeld","Search results":"Suchergebnisse","Search results for {term}":"Suchergebnisse für {term}","Search users…":"Nach Nutzern suchen…","Searched for":"Suche nach","Second":"Zweiter","Section title":"Abschnittstitel","Select":"Auswählen","Select a date to add to recurrence":"Wählen Sie ein Datum um ein wiederkehrendes Datum einzustellen","Select columns to show":"Anzuzeigende Spalten wählen","Select the transition to be used for modifying the items state.":"Arbeitsablauf-Status für Seite wählen.","Selected dates":"Ausgewählte Daten","Selected items":"Ausgewählte Objekte","Selected items - x of y":"Ausgewählte Objekte - x von y","Selection":"Auswahl","Select…":"Wähle…","Send":"Absenden","Set my password":"Passwort neu setzen","Set your password":"Setzen Sie Ihr Passwort","Settings":"Einstellungen","Sharing":"Freigabe","Sharing for {title}":"Freigabe für","Short Name":"Kurzname","Short name":"Kurzname","Show":"Zeige","Show All":"Alle anzeigen","Show Replies":"Antworten anzeigen","Show groups of users below":"Zeige die Gruppenmitgliedschaften der unten gezeigten Benutzer","Show item":"Elemente anzeigen","Show search button?":"Such-Button anzeigen?","Show search input?":"Such-Eingabe anzeigen?","Show sorting?":"Sortieroption anzeigen?","Shrink sidebar":"Sidebar verkleinern","Shrink toolbar":"Toolbar verkleinern","Sign in to start session":"Loggen Sie sich ein","Site":"Website","Site Administration":"Website-Administrator","Site Map":"Übersicht","Site Setup":"Seiteneinstellungen","Sitemap":"Sitemap","Size: {size}":"Grösse: {size}","Small":"","Sorry, something went wrong with your request":"Entschuldigung, ein Fehler ist beim Ausführen Ihrer Anfrage aufgetreten ","Sort By:":"Sortieren nach:","Sort on":"Sortieren nach","Sort on label":"Label für Sortieren","Sort on options":"Sortieroptionen","Source":"Quelle","Specify a youtube video or playlist url":"Geben Sie ein YouTube-Video oder eine YouTube-Playlist URL ein","Split":"Aufsplitten","Start Date":"Anfangsdatum","Start of the recurrence":"Anfangsdatum des wiederkehrenden Termins","Start password reset":"E-Mail anfordern","State":"Status","Stop compare":"Vergleichsansicht verlassen","String":"Text","Stripe alternate rows with color":"Zeilen abwechselnd einfärben","Styling":"","Subject":"Betreff","Success":"Erfolgreich","Summary":"Zusammenfassung","Switch to":"Wechseln zu","Table":"Tabelle","Table of Contents":"Inhaltsverzeichnis","Tags":"Tags","Tags to add":"Hinzuzufügende Tags","Tags to remove":"Zu entfernende Tags","Target memory size per cache in bytes":"Ziel-Speichergröße pro Cache in Bytes","Target number of objects in memory per cache":"Ziel-Anzahl von Objekten im Speicher pro Cache","Text":"Text","Thank you.":"Vielen Dank.","The Database Manager allow you to view database status information":"Der Datenbank-Manager zeigt Ihnen Status-Informationen zu der Datenbank","The URL for your external home page, if you have one.":"Die URL Ihrer externen Homepage, sollten Sie eine besitzen.","The backend is not responding, please check if you have started Plone, check your project's configuration object apiPath (or if you are using the internal proxy, devProxyToApiPath) or the RAZZLE_API_PATH Volto's environment variable.":"Das Backend beantwortet die Anfrage nicht, prüfen Sie bitte ob Sie Plone gestartet haben. Prüfen Sie den apiPath Parameter Ihrer Projekt-Konfiguration oder die RAZZLE_API_PATH Umgebungsvariable.","The backend is responding, but the CORS headers are not configured properly and the browser has denied the access to the backend resources.":"Das Backend antwortet, allerdings sind ihre CORS HTTP Header nicht korrekt konfiguriert.","The backend server of your website is not answering, we apologize for the inconvenience. Please try to re-load the page and try again. If the problem persists please contact the site administrators.":"Der Server antwortet nicht, wir entschuldigen uns für die Unannehmlichkeiten. Bitte versuchen Sie die Seite neu zu laden. Falls das Problem weiterhin besteht kontaktieren Sie bitte den Seitenbetreiber.","The button presence disables the live search, the query is issued when you press ENTER":"Der Button deaktiviert die Live-Suche, die Suchanfrage wird abgeschickt wenn die ENTER-Taste gedrückt wird","The item could not be deleted.":"Das Objekt kann nicht gelöscht werden.","The link address is:":"","The registration process has been successful. Please check your e-mail inbox for information on how activate your account.":"Bitte prüfen Sie Ihr E-Mail Postfach. Sie sollten eine E-Mail erhalten haben mit Anweisungen, wie Sie Ihren Zugang aktivieren können.","The user portrait/avatar":"Benutzer Portrait/Avatar","The working copy was discarded":"Die Arbeitskopie wurde verworfen","The {plonecms} is {copyright} 2000-{current_year} by the {plonefoundation} and friends.":"{plonecms} {copyright} 2000-{current_year} {plonefoundation} und Freunde.","There is a configuration problem on the backend":"Konfigurationsproblem im Backend","There were some errors":"Es sind Fehler","There were some errors.":"Es sind Fehler aufgetreten.","Third":"Dritter","This has an ongoing working copy in {title}":"Diese Seite hat eine Arbeitskopie unter {title}","This is a reserved name and can't be used":"Dies ist ein reservierter Name und kann nicht verwendet werden","This is a working copy of {title}":"Das ist eine Arbeitskopie von {title}","This item was locked by {creator} on {date}":"Dieses Objekt wurde gesperrt von {creator}, am {date}.","This name will be displayed in the URL.":"Dieser Name wird in der Adressleiste des Browsers angezeigt.","This page does not seem to exist…":"Die Seite existiert leider nicht…","Time":"Zeit","Title":"Titel","Total active and non-active objects":"Anzahl aktive und nicht-aktive Objekte","Total comments":"Anzahl Komentare","Total number of objects in each cache":"Anzahl aller Objekte im Cache","Total number of objects in memory from all caches":"Anzahl aller Objekte im Speicher von allen Caches","Total number of objects in the database":"Anzahl aller Objekte in der Datenbank","Translate to {lang}":"Auf {lang} übersetzen","Translation linked":"Übersetzung verbunden","Translation linking removed":"Verbindung zu Übersetzung gelöst","Type":"Typ","Type a Video (YouTube, Vimeo or mp4) URL":"Geben Sie eine Video-URL (YouTube, Video oder MP4) ein","Type text...":"","Type text…":"Text eingeben…","Type the title…":"Titel eingeben…","UID":"UID","Unauthorized":"Nicht autorisiert","Undo":"","Unfold":"Ausklappen","Unified":"Vereinigt","Uninstall":"Deinstallieren","Unknown Block":"Unbekannter Block","Unlink translation for":"Verknüpfung der Übersetzung aufheben","Unlock":"Entsprerren","Update":"Update","Update installed addons":"Installierte Erweiterungen aktualisieren","Update installed addons:":"Installierte Erweiterungen:","Updates available":"Verfügbare Erweiterungen","Upload":"Hochladen","Upload a lead image in the 'Lead Image' content field.":"Laden Sie ein Lead-Bild im Feld 'Lead-Bild' hoch.","Upload a new image":"Neues Bild hochladen","Upload files":"Datei hochladen","Uploading files":"Dateien hochladen","Uploading image":"Bild hochladen","Used for programmatic access to the fieldset.":"Wir für den programmierten Zugriff auf das Fieldset verwendet.","User":"Benutzer","User Group Membership":"Gruppenmitgliedschaften","User Group Settings":"Benutzer- und Gruppeneinstellungen","User created":"Benutzer erstellt","User name":"Benutzername","User roles updated":"Nutzerrollen aktualisiert","Username":"Benutzername","Users":"Nutzer","Users and Groups":"Nutzer und Gruppen","Variation":"Variante","Version Overview":"Versionsübersicht","Video":"Video","Video URL":"Video URL","View":"Anzeigen","View changes":"Änderungen anzeigen","View this revision":"Diese revision ansehen","View working copy":"Arbeitskopie ansehen","Viewmode":"Ansicht","Vocabulary term":"Term","Vocabulary term title":"Termtitel","Vocabulary terms":"Terme","Warning Regarding debug mode":"Debug-Modus Warnung","We apologize for the inconvenience, but the backend of the site you are accessing is not available right now. Please, try again later.":"Entschuldigen Sie die Unannehmlichkeiten aber das Backend der Seite antwortet zur Zeit nicht.","We apologize for the inconvenience, but the page you were trying to access is not at this address. You can use the links below to help you find what you are looking for.":"Entschuldigung, aber die Webseite die Sie versucht haben zu erreichen ist hier nicht verfügbar. Bitte benutzen Sie die aufgeführten Verweise um zu finden was Sie gesucht haben.","We apologize for the inconvenience, but you don't have permissions on this resource.":"Entschuldigen Sie die Unannehmlichkeiten, aber Sie besitzen nicht die erforderlichen Rechte um diese Seite anzuzeigen.","We will use this address if you need to recover your password":"Wir verwenden diese E-Mail Adresse wenn wir Ihr Passwort wiederherstellen müssen","Weeek day of month":"Wochentag im Monat","Weekday":"Wochentag","Weekly":"wöchentlich","What":"Was","When":"Wann","When this date is reached, the content will nolonger be visible in listings and searches.":"Wenn dieses Datum erreicht wird, wird der Inhalt nicht länger in Auflistungen und in der Suche auftauchen.","Who":"Wer","Wide":"","Workflow Change Loading Message":"Statuswechsel wird geladen","Workflow updated.":"Arbeitsablauf aktualisiert.","Yearly":"jährlich","Yes":"Ja","You are trying to access a protected resource, please {login} first.":"Sie versuchen eine geschützte Seite aufzurufen, bitte zuerst {login}.","You are using an outdated browser":"Sie verwenden einen veralteten Browser","You can add a comment by filling out the form below. Plain text formatting.":"Sie können einen Kommentar abgeben wenn Sie das untenstehende Formular ausfüllen. Plain-Text-Formatierung.","You can control who can view and edit your item using the list below.":"Sie können mit der folgenden Liste bestimmen, wer Ihren Artikel sehen und bearbeiten kann.","You can view the difference of the revisions below.":"Sie können die Unterschiede der verschiedenen Versionen unten sehen.","You can view the history of your item below.":"Sie können die Historie des Inhalts unten einsehen.","You can't paste this content here":"Sie können diese(s) Objekt(e) hier nicht einfügen","Your email is required for reset your password.":"","Your location - either city and country - or in a company setting, where your office is located.":"Ihr Standort - entweder eine Stadt und ein Land - oder im Rahmen einer Firma, wo Ihr Büro ist.","Your password has been set successfully. You may now {link} with your new password.":"Ihr Passwort wurde erfolgreich vergeben. Sie können sich jetzt mit Ihrem neuen Passwort {link}.","Your preferred language":"Ihre bevorzugte Sprache","Your usernaame is required for reset your password.":"","box_forgot_password_option":"Passwort vergessen?","common":"Allgemein","compare_to":"Vergleichen mit","delete":"Löschen","deprecated_browser_notice_message":"Sie verwenden einen veralteten Browser. Wir empfehlen den Einsatz eines modernen Browsers wie Firefox, Chrome, Safari oder Windows Edge Chromium.","description":"Beschreibung","description_lost_password":"Aus Sicherheitsgründen speichern wir Ihr Passwort verschlüsselt und können es Ihnen daher nicht per E-Mail schicken. Um ein neues Passwort zu erhalten, tragen Sie unten bitte Ihren Benutzernamen ein. Wir werden Ihnen daraufhin eine E-Mail schicken, in der das weitere Vorgehen beschrieben ist.","description_sent_password":"Der Link, um das Passwort neu zu setzen, wurde Ihnen zugesendet. Die E-Mail sollte in Kürze in Ihrem Postfach ankommen. Wenn Sie die Nachricht erhalten haben, klicken Sie auf den Link in der E-Mail, um zu der Webseite zu gelangen, wo Sie das Passwort neu setzen können.","draft":"Entwurf","email":"E-Mail","event_alldates":"Alle Termine","event_attendees":"Teilnehmer","event_contactname":"Kontaktname","event_contactphone":"Kontakttelefon","event_website":"Webseite","event_what":"Was","event_when":"Datum","event_where":"Ort","heading_sent_password":"Bestätigung für das Zurücksetzen des Passwortes wurde gesendet!","hero":"Hero","html":"HTML","image":"Bild","integer":"Ganzzahl","intranet":"Intranet","label_my_email_is":"","label_my_username_is":"El meu nom d'usuari és","leadimage":"Lead-Bild","listing":"Listing","loading":"laden","log in":"Einloggen","maps":"Karten","maxLength":"Maximale Länge","maximum":"Maximum","media":"Medien","minLength":"Minimale Länge","minimum":"Minimum","mostUsed":"Häufig genutzt","no":"","no workflow state":"Kein Status gesetzt","number":"Zahl","of the month":"im Monat","or try a different page.":"versuchen Sie eine andere Seite.","others":"andere","private":"Privat","published":"Veröffentlicht","querystring-widget-select":"Select Auswahlfeld","results found":"Ergebnisse gefunden","return to the site root":"Zur Startseite zurückkehren","rrule_and":"Regel UND","rrule_approximate":"REGEL Annäherung","rrule_at":"Regel AT","rrule_dateFormat":"Regel Datumsformat","rrule_day":"Regel Tag","rrule_days":"Regel Tage","rrule_every":"Regel Jeden","rrule_for":"Regel für","rrule_hour":"Regel Stunde","rrule_hours":"Regel Stunden","rrule_in":"Regel in","rrule_last":"Regel letztes","rrule_minutes":"Regel Minuten","rrule_month":"Regel Monat","rrule_months":"Regel Monate","rrule_nd":"Regel ND","rrule_on":"Regel on","rrule_on the":"Regel on the","rrule_or":"Regel oder","rrule_rd":"Regel rd","rrule_st":"Regel st","rrule_th":"Regel th","rrule_the":"Regel the","rrule_time":"Regel Zeit","rrule_times":"Regel Zeiten","rrule_until":"Regel bis","rrule_week":"Regel Woche","rrule_weekday":"Regel Wochentag","rrule_weekdays":"Regel Wochentage","rrule_weeks":"Regel Wochen","rrule_year":"Regel Jahr","rrule_years":"Regel Jahre","skiplink-footer":"Footer überspringen","skiplink-main-content":"Hauptinhalt überspringen","skiplink-navigation":"Navigation überspringen","sort":"sortieren","table":"Tabelle","text":"Text","title":"Titel","toc":"Inhaltsverzeichnis","url":"URL","user avatar":"Nutzer Avatar","video":"Video","visit_external_website":"Externe Webseite besuchen","yes":"","{count, plural, one {Upload {count} file} other {Upload {count} files}}":"Lade {count, plural, one {# Datei} other {# Dateien}} hoch","{count} selected":"{count} ausgewählt","{id} Content Type":"{id} Inhaltstyp","{id} Schema":"{id} Schema","{title} copied.":"{title} kopiert.","{title} cut.":"{title} ausgeschnitten.","{title} has been deleted.":"{title} wurde gelöscht."}
1
+ {"<p>Add some HTML here</p>":"<p>HTML hier einfügen</p>","Accessibility":"Barrierefreiheit","Account Registration Completed":"Die Registrierung Ihres Zugangs wurde erfolgreich abgeschlossen.","Account activation completed":"Passwort gesetzt.","Action":"Aktion","Actions":"Aktionen","Activate and deactivate":"Aktiviern und Deaktivieren","Add":"Hinzufügen","Add (object list)":"","Add Addons":"Add-on hinzufügen","Add Content":"Inhalte hinzufügen","Add Translation…":"Übersetzung hinzufügen…","Add User":"Benutzer hinzufügen","Add a description…":"Beschreibung hinzufügen…","Add block":"Block hinzufügen","Add block…":"Block hinzufügen","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","Additional date":"Zusätzliches Datum","Alignment":"Ausrichtung","All":"Alle","Alphabetically":"alphabetisch","Alt text":"Alternative Text","Alt text hint":"","Alt text hint link text":"","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","Available":"Verfügbar","Back":"Zurück","Background color":"","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.","Cache Name":"Cache Name","Can not edit Layout for <strong>{type}</strong> content-type as it doesn't have support for <strong>Volto Blocks</strong> enabled":"Layout für <strong>{type}</strong> kann nicht verändert werden, da das <strong>Volto Blocks</strong>-Behavior nicht für diesen Inhaltstyp aktiviert ist","Can not edit Layout for <strong>{type}</strong> content-type as the <strong>Blocks behavior</strong> is enabled and <strong>read-only</strong>":"Layout für <strong>{type}</strong> kann nicht verändert werden, da das <strong>Volto Blocks</strong>-Behavior auf nur-lesend gesetzt ist","Cancel":"Abbrechen","Cell":"Zelle","Center":"Mittig","Change Note":"Änderungsnotiz","Change Password":"Passwort ändern","Change State":"Arbeitsablauf-Status ändern","Change workflow state recursively":"Arbeitlauf-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","Confirm password":"Passwort bestätigen","Connection refused":"Verbindung abgelehnt","Contact":"Kontakt","Contact form":"Kontaktformular","Contained items":"Enthaltene Elemente","Content":"Inhalt","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","Delete":"Löschen","Delete Group":"Gruppe löschen","Delete Type":"Inhaltstype löschen","Delete User":"Benutzer löschen","Delete blocks":"Blöcke löschen","Delete col":"Spalte löschen","Delete row":"Zeile löschen","Depth":"Tiefe","Descending":"Absteigend","Description":"Beschreibung","Diff":"Unterschied","Difference between revision {one} and {two} of {title}":"Unterschied zwischen Version {one} and {two} von {title}","Distributed under the {license}.":"Lizensiert unter der {license}.","Divide each row into separate cells":"Zeile in zwei separate Zellen aufteilen","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","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 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 editable Blocks":"Aktiviere bearbeitbare Blocks","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 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","Exclude from navigation":"Von der Navigation ausschließen","Exclude this occurence":"Dieses Datum ausschließen","Excluded from navigation":"Von Navigation ausgeschlossen","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","Field":"Feld","File":"Datei","File size":"Dateigröße","Filename":"Dateiname","Filter users by groups":"Filtere Benutzer via Gruppenmitgliedschaft","Filter…":"Filter…","First":"Erster Tag des Monats","Fixed width table cells":"Tabellen-Zellen mit fester Breite","Fold":"Einklappen","Folder":"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","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","Home page":"Homepage","ID":"ID","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":"","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 danach einfügen","Insert col before":"Spalte davor einfügen","Insert row after":"Zeile danach 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.","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":"Links","Link":"Link","Link more":"'Mehr' Link","Link title":"Linktitel","Link to":"Link auf","Link translation for":"Übersetzung verbinden","Listing":"Auflistung","Load more":"Mehr laden","Loading":"lädt","Location":"Ort","Log In":"Anmelden","Log in":"Anmelden","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 kompakt darstellen","Manage Translations":"Übersetzungen verwalten","Manage translations for {title}":"Übersetzungen für {} verwalten","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","Move to bottom of folder":"Ans Ende verschieben","Move to top of folder":"An den Anfang verschieben","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","No":"Nein","No Video selected":"","No addons found":"Keine Add-ons installiert.","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 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 two characters \"-\" and \"_\" are allowed.":"Nur Kleinbuchstaben (a-z) ohne Umlaute oder Sonderzeichen, Zahlen (0-9) und die beiden Zeichen \"-\" 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","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 <iframe> code on it.":"Bitte geben sie den Einbettungscode von Google Maps ein. Klicken Sie auf 'Teilen' und dann 'Karte einbetten'. Der Code sollte ein '<iframe>'-Element enthalten.","Please fill out the form below to set your password.":"Bitte füllen Sie das unten stehende Formular aus, um Ihr Passwort neu zu setzen.","Please search for users or use the filters on the side.":"Bitte verwenden Sie das Suchfeld oder die Filter um Benutzer anzuzeigen.","Please upgrade to plone.restapi >= 8.24.0.":"Bitte upgraden auf plone.restapi >= 8.24.0.","Plone Foundation":"Plone Foundation","Plone Site":"Website","Plone{reg} Open Source CMS/WCM":"Plone{reg} Open Source Content Management System","Portrait":"Portrait","Possible values":"Mögliche Werte","Powered by Plone & Python":"Powered by Plone & Python","Preferences":"Einstellungen","Prettify your code":"Quellcode aufräumen","Preview":"Vorschau","Preview Image URL":"URL Vorschaubild","Profile":"Profil","Properties":"Eigenschaften","Publication date":"Freigabedatum","Publishing Date":"Freigabedatum","Query":"Anfrage","Re-enter the password. Make sure the passwords are identical.":"Geben Sie das gleiche Passwort erneut ein.","Read More…":"Mehr…","Rearrange items by…":"Elemente sortieren nach…","Recurrence ends":"Ende des wiederkehrenden Vorkommens","Recurrence ends after":"Wiederkehrendes Vorkommen endet nach","Recurrence ends on":"Wiederkehrendes Vorkommen endet am","Redo":"","Reduce complexity":"Komplexität reduzieren","Register":"Registrieren","Registration form":"Registrierungsformular","Relevance":"relevanz","Remove item":"Element entfernen","Remove recurrence":"Wiederkehrende Einstellung entfernen","Remove term":"Entferne Term","Remove users from group":"Trage Benutzer aus Gruppe aus","Remove working copy":"Arbeitskopie löschen","Rename":"Umbenennen","Rename Items Loading Message":"Umbenennen-Modal lädt","Rename items":"Artikel umbenennen","Repeat":"Wiederholen","Repeat every":"Wiederhole jeden","Repeat on":"Wiederhole am","Replace existing file":"Bestehende Datei ersetzen","Reply":"Antworten","Required":"Notwendig","Required input is missing.":"Notwendige Eingabe fehlt.","Reset term title":"Setze Titel zurück","Results limit":"Anzahl der Ergebnisse einschränken","Results preview":"Ergebnisvorschau","Results template":"Template Suchergebnisliste","Reversed order":"Sortierreihenfolge umkehren","Revert to this revision":"Die aktuelle Version durch diese ersetzen","Review state":"Arbeitsablauf","Richtext":"Richtext","Right":"Rechte","Rights":"Rechte","Roles":"Rollen","Root":"Wurzel","Save":"Speichern","Save recurrence":"Wiederkehrende Einstellung speichern","Schema":"Schema","Schema updates":"Aktualisierungen Schema","Search":"Suche","Search SVG":"Suchen","Search Site":"Website durchsuchen","Search block":"Such-Block","Search button label":"Label Such-Button","Search content":"Inhalte suchen","Search for user or group":"Nach Benutzer oder Gruppe suchen","Search group…":"Nach Gruppe suchen…","Search input label":"Label Suchfeld","Search results":"Suchergebnisse","Search results for {term}":"Suchergebnisse für {term}","Search users…":"Nach Nutzern suchen…","Searched for":"Suche nach","Second":"Zweiter","Section title":"Abschnittstitel","Select":"Auswählen","Select a date to add to recurrence":"Wählen Sie ein Datum um ein wiederkehrendes Datum einzustellen","Select columns to show":"Anzuzeigende Spalten wählen","Select the transition to be used for modifying the items state.":"Arbeitsablauf-Status für Seite wählen.","Selected dates":"Ausgewählte Daten","Selected items":"Ausgewählte Objekte","Selected items - x of y":"Ausgewählte Objekte - x von y","Selection":"Auswahl","Select…":"Wähle…","Send":"Absenden","Set my password":"Passwort neu setzen","Set your password":"Setzen Sie Ihr Passwort","Settings":"Einstellungen","Sharing":"Freigabe","Sharing for {title}":"Freigabe für","Short Name":"Kurzname","Short name":"Kurzname","Show":"Zeige","Show All":"Alle anzeigen","Show Replies":"Antworten anzeigen","Show groups of users below":"Zeige die Gruppenmitgliedschaften der unten gezeigten Benutzer","Show item":"Elemente anzeigen","Show search button?":"Such-Button anzeigen?","Show search input?":"Such-Eingabe anzeigen?","Show sorting?":"Sortieroption anzeigen?","Shrink sidebar":"Sidebar verkleinern","Shrink toolbar":"Toolbar verkleinern","Sign in to start session":"Loggen Sie sich ein","Site":"Website","Site Administration":"Website-Administrator","Site Map":"Übersicht","Site Setup":"Systemeinstellungen","Sitemap":"Sitemap","Size: {size}":"Grösse: {size}","Small":"","Sorry, something went wrong with your request":"Entschuldigung, ein Fehler ist beim Ausführen Ihrer Anfrage aufgetreten ","Sort By:":"Sortieren nach:","Sort on":"Sortieren nach","Sort on label":"Label für Sortieren","Sort on options":"Sortieroptionen","Source":"Quelle","Specify a youtube video or playlist url":"Geben Sie ein YouTube-Video oder eine YouTube-Playlist URL ein","Split":"Aufsplitten","Start Date":"Anfangsdatum","Start of the recurrence":"Anfangsdatum des wiederkehrenden Termins","Start password reset":"E-Mail anfordern","State":"Status","Stop compare":"Vergleichsansicht verlassen","String":"Text","Stripe alternate rows with color":"Zeilen abwechselnd einfärben","Styling":"","Subject":"Betreff","Success":"Erfolgreich","Summary":"Zusammenfassung","Switch to":"Wechseln zu","Table":"Tabelle","Table of Contents":"Inhaltsverzeichnis","Tags":"Tags","Tags to add":"Hinzuzufügende Tags","Tags to remove":"Zu entfernende Tags","Target memory size per cache in bytes":"Ziel-Speichergröße pro Cache in Bytes","Target number of objects in memory per cache":"Ziel-Anzahl von Objekten im Speicher pro Cache","Text":"Text","Thank you.":"Vielen Dank.","The Database Manager allow you to view database status information":"Der Datenbank-Manager zeigt Ihnen Status-Informationen zu der Datenbank","The URL for your external home page, if you have one.":"Die URL Ihrer externen Homepage, sollten Sie eine besitzen.","The backend is not responding, please check if you have started Plone, check your project's configuration object apiPath (or if you are using the internal proxy, devProxyToApiPath) or the RAZZLE_API_PATH Volto's environment variable.":"Das Backend beantwortet die Anfrage nicht, prüfen Sie bitte ob Sie Plone gestartet haben. Prüfen Sie den apiPath Parameter Ihrer Projekt-Konfiguration oder die RAZZLE_API_PATH Umgebungsvariable.","The backend is responding, but the CORS headers are not configured properly and the browser has denied the access to the backend resources.":"Das Backend antwortet, allerdings sind ihre CORS HTTP Header nicht korrekt konfiguriert.","The backend server of your website is not answering, we apologize for the inconvenience. Please try to re-load the page and try again. If the problem persists please contact the site administrators.":"Der Server antwortet nicht, wir entschuldigen uns für die Unannehmlichkeiten. Bitte versuchen Sie die Seite neu zu laden. Falls das Problem weiterhin besteht kontaktieren Sie bitte den Seitenbetreiber.","The button presence disables the live search, the query is issued when you press ENTER":"Der Button deaktiviert die Live-Suche, die Suchanfrage wird abgeschickt wenn die ENTER-Taste gedrückt wird","The item could not be deleted.":"Das Objekt kann nicht gelöscht werden.","The link address is:":"","The registration process has been successful. Please check your e-mail inbox for information on how activate your account.":"Bitte prüfen Sie Ihr E-Mail Postfach. Sie sollten eine E-Mail erhalten haben mit Anweisungen, wie Sie Ihren Zugang aktivieren können.","The user portrait/avatar":"Benutzer Portrait/Avatar","The working copy was discarded":"Die Arbeitskopie wurde verworfen","The {plonecms} is {copyright} 2000-{current_year} by the {plonefoundation} and friends.":"{plonecms} {copyright} 2000-{current_year} {plonefoundation} und Freunde.","There is a configuration problem on the backend":"Konfigurationsproblem im Backend","There were some errors":"Es sind Fehler","There were some errors.":"Es sind Fehler aufgetreten.","Third":"Dritter","This has an ongoing working copy in {title}":"Diese Seite hat eine Arbeitskopie unter {title}","This is a reserved name and can't be used":"Dies ist ein reservierter Name und kann nicht verwendet werden","This is a working copy of {title}":"Das ist eine Arbeitskopie von {title}","This item was locked by {creator} on {date}":"Dieses Objekt wurde gesperrt von {creator}, am {date}.","This name will be displayed in the URL.":"Dieser Name wird in der Adressleiste des Browsers angezeigt.","This page does not seem to exist…":"Die Seite existiert leider nicht…","Time":"Zeit","Title":"Titel","Total active and non-active objects":"Anzahl aktive und nicht-aktive Objekte","Total comments":"Anzahl Komentare","Total number of objects in each cache":"Anzahl aller Objekte im Cache","Total number of objects in memory from all caches":"Anzahl aller Objekte im Speicher von allen Caches","Total number of objects in the database":"Anzahl aller Objekte in der Datenbank","Translate to {lang}":"Auf {lang} übersetzen","Translation linked":"Übersetzung verbunden","Translation linking removed":"Verbindung zu Übersetzung gelöst","Type":"Typ","Type a Video (YouTube, Vimeo or mp4) URL":"Geben Sie eine Video-URL (YouTube, Video oder MP4) ein","Type text...":"","Type text…":"Text eingeben…","Type the title…":"Titel eingeben…","UID":"UID","Unauthorized":"Nicht autorisiert","Undo":"","Unfold":"Ausklappen","Unified":"Vereinigt","Uninstall":"Deinstallieren","Unknown Block":"Unbekannter Block","Unlink translation for":"Verknüpfung der Übersetzung aufheben","Unlock":"Entsprerren","Update":"Update","Update installed addons":"Installierte Erweiterungen aktualisieren","Update installed addons:":"Installierte Erweiterungen:","Updates available":"Verfügbare Erweiterungen","Upload":"Hochladen","Upload a lead image in the 'Lead Image' content field.":"Laden Sie ein Lead-Bild im Feld 'Lead-Bild' hoch.","Upload a new image":"Neues Bild hochladen","Upload files":"Datei hochladen","Uploading files":"Dateien hochladen","Uploading image":"Bild hochladen","Used for programmatic access to the fieldset.":"Wir für den programmierten Zugriff auf das Fieldset verwendet.","User":"Benutzer","User Group Membership":"Gruppenmitgliedschaften","User Group Settings":"Benutzer- und Gruppeneinstellungen","User created":"Benutzer erstellt","User name":"Benutzername","User roles updated":"Nutzerrollen aktualisiert","Username":"Benutzername","Users":"Nutzer","Users and Groups":"Nutzer und Gruppen","Variation":"Variante","Version Overview":"Versionsübersicht","Video":"Video","Video URL":"Video URL","View":"Anzeigen","View changes":"Änderungen anzeigen","View this revision":"Diese revision ansehen","View working copy":"Arbeitskopie ansehen","Viewmode":"Ansicht","Vocabulary term":"Term","Vocabulary term title":"Termtitel","Vocabulary terms":"Terme","Warning Regarding debug mode":"Debug-Modus Warnung","We apologize for the inconvenience, but the backend of the site you are accessing is not available right now. Please, try again later.":"Entschuldigen Sie die Unannehmlichkeiten aber das Backend der Seite antwortet zur Zeit nicht.","We apologize for the inconvenience, but the page you were trying to access is not at this address. You can use the links below to help you find what you are looking for.":"Entschuldigung, aber die Webseite die Sie versucht haben zu erreichen ist hier nicht verfügbar. Bitte benutzen Sie die aufgeführten Verweise um zu finden was Sie gesucht haben.","We apologize for the inconvenience, but you don't have permissions on this resource.":"Entschuldigen Sie die Unannehmlichkeiten, aber Sie besitzen nicht die erforderlichen Rechte um diese Seite anzuzeigen.","We will use this address if you need to recover your password":"Wir verwenden diese E-Mail Adresse wenn wir Ihr Passwort wiederherstellen müssen","Weeek day of month":"Wochentag im Monat","Weekday":"Wochentag","Weekly":"wöchentlich","What":"Was","When":"Wann","When this date is reached, the content will nolonger be visible in listings and searches.":"Wenn dieses Datum erreicht wird, wird der Inhalt nicht länger in Auflistungen und in der Suche auftauchen.","Who":"Wer","Wide":"","Workflow Change Loading Message":"Statuswechsel wird geladen","Workflow updated.":"Arbeitsablauf aktualisiert.","Yearly":"jährlich","Yes":"Ja","You are trying to access a protected resource, please {login} first.":"Sie versuchen eine geschützte Seite aufzurufen, bitte zuerst {login}.","You are using an outdated browser":"Sie verwenden einen veralteten Browser","You can add a comment by filling out the form below. Plain text formatting.":"Sie können einen Kommentar abgeben wenn Sie das untenstehende Formular ausfüllen. Plain-Text-Formatierung.","You can control who can view and edit your item using the list below.":"Sie können mit der folgenden Liste bestimmen, wer Ihren Artikel sehen und bearbeiten kann.","You can view the difference of the revisions below.":"Sie können die Unterschiede der verschiedenen Versionen unten sehen.","You can view the history of your item below.":"Sie können die Historie des Inhalts unten einsehen.","You can't paste this content here":"Sie können diese(s) Objekt(e) hier nicht einfügen","Your email is required for reset your password.":"","Your location - either city and country - or in a company setting, where your office is located.":"Ihr Standort - entweder eine Stadt und ein Land - oder im Rahmen einer Firma, wo Ihr Büro ist.","Your password has been set successfully. You may now {link} with your new password.":"Ihr Passwort wurde erfolgreich vergeben. Sie können sich jetzt mit Ihrem neuen Passwort {link}.","Your preferred language":"Ihre bevorzugte Sprache","Your usernaame is required for reset your password.":"","box_forgot_password_option":"Passwort vergessen?","common":"Allgemein","compare_to":"Vergleichen mit","delete":"Löschen","deprecated_browser_notice_message":"Sie verwenden einen veralteten Browser. Wir empfehlen den Einsatz eines modernen Browsers wie Firefox, Chrome, Safari oder Windows Edge Chromium.","description":"Beschreibung","description_lost_password":"Aus Sicherheitsgründen speichern wir Ihr Passwort verschlüsselt und können es Ihnen daher nicht per E-Mail schicken. Um ein neues Passwort zu erhalten, tragen Sie unten bitte Ihren Benutzernamen ein. Wir werden Ihnen daraufhin eine E-Mail schicken, in der das weitere Vorgehen beschrieben ist.","description_sent_password":"Der Link, um das Passwort neu zu setzen, wurde Ihnen zugesendet. Die E-Mail sollte in Kürze in Ihrem Postfach ankommen. Wenn Sie die Nachricht erhalten haben, klicken Sie auf den Link in der E-Mail, um zu der Webseite zu gelangen, wo Sie das Passwort neu setzen können.","draft":"Entwurf","email":"E-Mail","event_alldates":"Alle Termine","event_attendees":"Teilnehmer","event_contactname":"Kontaktname","event_contactphone":"Kontakttelefon","event_website":"Webseite","event_what":"Was","event_when":"Datum","event_where":"Ort","heading_sent_password":"Bestätigung für das Zurücksetzen des Passwortes wurde gesendet!","hero":"Hero","html":"HTML","image":"Bild","integer":"Ganzzahl","intranet":"Intranet","label_my_email_is":"","label_my_username_is":"El meu nom d'usuari és","leadimage":"Lead-Bild","listing":"Listing","loading":"laden","log in":"Einloggen","maps":"Karten","maxLength":"Maximale Länge","maximum":"Maximum","media":"Medien","minLength":"Minimale Länge","minimum":"Minimum","mostUsed":"Häufig genutzt","no":"","no workflow state":"Kein Status gesetzt","number":"Zahl","of the month":"im Monat","or try a different page.":"versuchen Sie eine andere Seite.","others":"andere","private":"Privat","published":"Veröffentlicht","querystring-widget-select":"Select Auswahlfeld","results found":"Ergebnisse gefunden","return to the site root":"Zur Startseite zurückkehren","rrule_and":"Regel UND","rrule_approximate":"REGEL Annäherung","rrule_at":"Regel AT","rrule_dateFormat":"Regel Datumsformat","rrule_day":"Regel Tag","rrule_days":"Regel Tage","rrule_every":"Regel Jeden","rrule_for":"Regel für","rrule_hour":"Regel Stunde","rrule_hours":"Regel Stunden","rrule_in":"Regel in","rrule_last":"Regel letztes","rrule_minutes":"Regel Minuten","rrule_month":"Regel Monat","rrule_months":"Regel Monate","rrule_nd":"Regel ND","rrule_on":"Regel on","rrule_on the":"Regel on the","rrule_or":"Regel oder","rrule_rd":"Regel rd","rrule_st":"Regel st","rrule_th":"Regel th","rrule_the":"Regel the","rrule_time":"Regel Zeit","rrule_times":"Regel Zeiten","rrule_until":"Regel bis","rrule_week":"Regel Woche","rrule_weekday":"Regel Wochentag","rrule_weekdays":"Regel Wochentage","rrule_weeks":"Regel Wochen","rrule_year":"Regel Jahr","rrule_years":"Regel Jahre","skiplink-footer":"Footer überspringen","skiplink-main-content":"Hauptinhalt überspringen","skiplink-navigation":"Navigation überspringen","sort":"sortieren","table":"Tabelle","text":"Text","title":"Titel","toc":"Inhaltsverzeichnis","url":"URL","user avatar":"Nutzer Avatar","video":"Video","visit_external_website":"Externe Webseite besuchen","yes":"","{count, plural, one {Upload {count} file} other {Upload {count} files}}":"Lade {count, plural, one {# Datei} other {# Dateien}} hoch","{count} selected":"{count} ausgewählt","{id} Content Type":"{id} Inhaltstyp","{id} Schema":"{id} Schema","{title} copied.":"{title} kopiert.","{title} cut.":"{title} ausgeschnitten.","{title} has been deleted.":"{title} wurde gelöscht."}
package/package.json CHANGED
@@ -9,7 +9,7 @@
9
9
  }
10
10
  ],
11
11
  "license": "MIT",
12
- "version": "16.0.0-alpha.20",
12
+ "version": "16.0.0-alpha.23",
13
13
  "repository": {
14
14
  "type": "git",
15
15
  "url": "git@github.com:plone/volto.git"
@@ -227,12 +227,13 @@
227
227
  "@babel/plugin-proposal-export-default-from": "7.10.4",
228
228
  "@babel/plugin-proposal-export-namespace-from": "7.10.4",
229
229
  "@babel/plugin-proposal-json-strings": "7.10.4",
230
+ "@babel/plugin-proposal-nullish-coalescing-operator": "7.18.6",
230
231
  "@babel/plugin-proposal-throw-expressions": "7.10.4",
231
232
  "@loadable/babel-plugin": "5.13.2",
232
233
  "@loadable/component": "5.14.1",
233
234
  "@loadable/server": "5.14.0",
234
235
  "@loadable/webpack-plugin": "5.14.0",
235
- "@plone/scripts": "1.5.0",
236
+ "@plone/scripts": "1.6.0",
236
237
  "@sentry/browser": "6.19.7",
237
238
  "@sentry/integrations": "6.19.7",
238
239
  "@sentry/node": "6.19.7",
@@ -156,7 +156,7 @@ export class Edit extends Component {
156
156
  )
157
157
  : null
158
158
  }
159
- className={cx(`block ${type}`, {
159
+ className={cx(`block ${type} ${this.props.data.variation ?? ''}`, {
160
160
  selected: this.props.selected || this.props.multiSelected,
161
161
  multiSelected: this.props.multiSelected,
162
162
  })}
@@ -216,7 +216,9 @@ class Sidebar extends Component {
216
216
  onTabChange={this.onTabChange}
217
217
  panes={[
218
218
  !!this.props.documentTab && {
219
- menuItem: this.props.intl.formatMessage(messages.document),
219
+ menuItem:
220
+ this.props.type ||
221
+ this.props.intl.formatMessage(messages.document),
220
222
  pane: (
221
223
  <Tab.Pane
222
224
  key="metadata"
@@ -273,6 +275,7 @@ export default compose(
273
275
  (state) => ({
274
276
  tab: state.sidebar.tab,
275
277
  toolbarExpanded: state.toolbar.expanded,
278
+ type: state.schema?.schema?.title,
276
279
  }),
277
280
  { setSidebarTab },
278
281
  ),
@@ -162,6 +162,8 @@ class ArrayWidget extends Component {
162
162
  choices: PropTypes.arrayOf(
163
163
  PropTypes.oneOfType([PropTypes.object, PropTypes.array]),
164
164
  ),
165
+ vocabLoading: PropTypes.bool,
166
+ vocabLoaded: PropTypes.bool,
165
167
  items: PropTypes.shape({
166
168
  vocabulary: PropTypes.object,
167
169
  }),
@@ -227,6 +229,21 @@ class ArrayWidget extends Component {
227
229
  }
228
230
  }
229
231
 
232
+ componentDidUpdate() {
233
+ if (
234
+ !this.props.items?.choices?.length &&
235
+ !this.props.choices?.length &&
236
+ this.props.vocabLoading === undefined &&
237
+ !this.props.vocabLoaded
238
+ ) {
239
+ this.props.getVocabulary({
240
+ vocabNameOrURL: this.props.vocabBaseUrl,
241
+ size: -1,
242
+ subrequest: this.props.lang,
243
+ });
244
+ }
245
+ }
246
+
230
247
  /**
231
248
  * Handle the field change, store it in the local state and back to simple
232
249
  * array of tokens for correct serialization
@@ -384,6 +401,8 @@ export default compose(
384
401
  return {
385
402
  choices: vocabState.items,
386
403
  vocabBaseUrl,
404
+ vocabLoading: vocabState.loading,
405
+ vocabLoaded: vocabState.loaded,
387
406
  lang: state.intl.locale,
388
407
  };
389
408
  }
@@ -4,8 +4,10 @@ import registry from '@plone/volto/registry';
4
4
  * A component that can autommatically look up its implementation from the
5
5
  * registry based on the provided component `componentName`
6
6
  */
7
- const Component = ({ componentName, ...rest }) => {
8
- const Component = registry.resolve(componentName)?.component;
7
+ const Component = ({ componentName, dependencies, ...rest }) => {
8
+ const Component = dependencies?.length
9
+ ? registry.getComponent({ name: componentName, dependencies })?.component
10
+ : registry.getComponent(componentName)?.component;
9
11
 
10
12
  if (!Component) {
11
13
  // eslint-disable-next-line no-console
@@ -18,6 +18,17 @@ describe('Component component :P', () => {
18
18
  const { container } = render(<Component componentName="Toolbar" />);
19
19
  expect(container).toMatchSnapshot();
20
20
  });
21
+ it('Render a Component in the registry using dependencies array', () => {
22
+ config.registerComponent({
23
+ name: 'Teaser',
24
+ component: (props) => <div>this is the Teaser component</div>,
25
+ dependencies: 'News Item',
26
+ });
27
+ const { container } = render(
28
+ <Component componentName="Teaser" dependencies={['News Item']} />,
29
+ );
30
+ expect(container).toMatchSnapshot();
31
+ });
21
32
  it('Renders a Fallback Component that does not exists in the registry', () => {
22
33
  const { container } = render(<Component componentName="Toolbar.Foo" />);
23
34
  expect(container).toMatchSnapshot();
@@ -48,7 +48,7 @@ const ContentMetadataTags = (props) => {
48
48
  return (
49
49
  <>
50
50
  <Helmet>
51
- <title>{seo_title || title}</title>
51
+ <title>{(seo_title || title)?.replace(/\u00AD/g, '')}</title>
52
52
  <meta name="description" content={seo_description || description} />
53
53
  <meta
54
54
  property="og:title"
@@ -257,7 +257,7 @@ class Login extends Component {
257
257
  )}
258
258
  <Grid.Column stretched width="12">
259
259
  <p className="help">
260
- <Link to="/password-reset">
260
+ <Link to="/passwordreset">
261
261
  {this.props.intl.formatMessage(
262
262
  messages.forgotPassword,
263
263
  )}
@@ -316,8 +316,8 @@ export default compose(
316
316
  returnUrl:
317
317
  qs.parse(props.location.search).return_url ||
318
318
  props.location.pathname
319
- .replace(/\/login$/, '')
320
- .replace(/\/logout$/, '') ||
319
+ .replace(/\/login\/?$/, '')
320
+ .replace(/\/logout\/?$/, '') ||
321
321
  '/',
322
322
  }),
323
323
  { login },
@@ -128,7 +128,9 @@ Pagination.propTypes = {
128
128
  /**
129
129
  * Page sizes to choose from
130
130
  */
131
- pageSizes: PropTypes.arrayOf(PropTypes.number),
131
+ pageSizes: PropTypes.arrayOf(
132
+ PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
133
+ ),
132
134
  /**
133
135
  * Handler called when changing the page
134
136
  */
@@ -16,6 +16,8 @@ import RenderBlocks from './RenderBlocks';
16
16
  import { hasBlocksData, getBaseUrl } from '@plone/volto/helpers';
17
17
  import { useDispatch, useSelector } from 'react-redux';
18
18
 
19
+ import { isEqual } from 'lodash';
20
+
19
21
  /**
20
22
  * Component to display the default view.
21
23
  * @function DefaultView
@@ -27,7 +29,6 @@ const DefaultView = (props) => {
27
29
  const path = getBaseUrl(location?.pathname || '');
28
30
  const dispatch = useDispatch();
29
31
  const { views } = config.widgets;
30
- const contentLoaded = useSelector((state) => state.content.get.loaded);
31
32
  const contentSchema = useSelector((state) => state.schema?.schema);
32
33
  const fieldsetsToExclude = [
33
34
  'categorization',
@@ -39,6 +40,16 @@ const DefaultView = (props) => {
39
40
  (fs) => !fieldsetsToExclude.includes(fs.id),
40
41
  );
41
42
 
43
+ // TL;DR: There is a flash of the non block-based view because of the reset
44
+ // of the content on route change. Subscribing to the content change at this
45
+ // level has nasty implications, so we can't watch the Redux state for loaded
46
+ // content flag here (because it forces an additional component update)
47
+ // Instead, we can watch if the content is "empty", but this has a drawback
48
+ // since the locking mechanism inserts a `lock` key before the content is there.
49
+ // So "empty" means `content` is present, but only with a `lock` key, thus the next
50
+ // ugly condition comes to life
51
+ const contentLoaded = content && !isEqual(Object.keys(content), ['lock']);
52
+
42
53
  React.useEffect(() => {
43
54
  content?.['@type'] &&
44
55
  !hasBlocksData(content) &&
@@ -25,8 +25,8 @@ export const nonContentRoutes = [
25
25
  '/personal-information',
26
26
  '/personal-preferences',
27
27
  '/register',
28
- /\/password-reset\/.*$/,
29
- '/password-reset',
28
+ /\/passwordreset\/.*$/,
29
+ '/passwordreset',
30
30
  '/create-translation',
31
31
  '/manage-translations',
32
32
  ...(config.settings?.externalRoutes?.map((route) => route.match.path) || []),
@@ -186,9 +186,6 @@ let config = {
186
186
  components,
187
187
  };
188
188
 
189
- config = applySlateConfiguration(config);
190
- config = applyAddonConfiguration(config);
191
-
192
189
  ConfigRegistry.settings = config.settings;
193
190
  ConfigRegistry.blocks = config.blocks;
194
191
  ConfigRegistry.views = config.views;
@@ -197,3 +194,5 @@ ConfigRegistry.addonRoutes = config.addonRoutes;
197
194
  ConfigRegistry.addonReducers = config.addonReducers;
198
195
  ConfigRegistry.appExtras = config.appExtras;
199
196
  ConfigRegistry.components = config.components;
197
+
198
+ applyAddonConfiguration(applySlateConfiguration(ConfigRegistry));
@@ -37,10 +37,10 @@ describe('Url', () => {
37
37
  expect(getBaseUrl('/register')).toBe('');
38
38
  });
39
39
  it('can remove a view name from a relative url', () => {
40
- expect(getBaseUrl('/password-reset')).toBe('');
40
+ expect(getBaseUrl('/passwordreset')).toBe('');
41
41
  });
42
42
  it('can remove a view name from a relative url', () => {
43
- expect(getBaseUrl('/password-reset/token')).toBe('');
43
+ expect(getBaseUrl('/passwordreset/token')).toBe('');
44
44
  });
45
45
  it('can remove a view name from a controlpanel url', () => {
46
46
  expect(getBaseUrl('/controlpanel/date-time')).toBe('');
@@ -7,3 +7,8 @@
7
7
  export api from '@plone/volto/middleware/api';
8
8
  export crashReporter from '@plone/volto/middleware/crashReporter';
9
9
  export blacklistRoutes from './blacklistRoutes';
10
+ export {
11
+ protectLoadStart,
12
+ protectLoadEnd,
13
+ loadProtector,
14
+ } from '@plone/volto/middleware/storeProtectLoadUtils';
@@ -3,7 +3,7 @@ import {
3
3
  protectLoadEnd,
4
4
  loadProtector,
5
5
  } from './storeProtectLoadUtils';
6
- import * as helpers from './helpers';
6
+ import * as helpers from '../helpers';
7
7
 
8
8
  const tick = async () => new Promise((resolve) => setTimeout(resolve, 0));
9
9
 
package/src/registry.js CHANGED
@@ -1,3 +1,5 @@
1
+ import { isArray } from 'lodash';
2
+
1
3
  class Config {
2
4
  constructor() {
3
5
  if (!Config.instance) {
@@ -88,12 +90,37 @@ class Config {
88
90
  this._data.components = components;
89
91
  }
90
92
 
91
- resolve(component) {
92
- return this._data.components[component] || {};
93
+ getComponent({ name, dependencies = '' }) {
94
+ if (typeof arguments[0] === 'object') {
95
+ let depsString;
96
+ if (dependencies && isArray(dependencies)) {
97
+ depsString = dependencies.join('+');
98
+ } else {
99
+ depsString = dependencies;
100
+ }
101
+ const componentName = `${name}${depsString ? `|${depsString}` : ''}`;
102
+
103
+ return this._data.components[componentName] || {};
104
+ } else {
105
+ // Shortcut notation, accepting a lonely string as argument
106
+ return this._data.components[arguments[0]] || {};
107
+ }
93
108
  }
94
109
 
95
- register(name, component) {
96
- this._data.components[name] = component;
110
+ registerComponent({ name, component, dependencies = '' }) {
111
+ let depsString;
112
+ if (!component) {
113
+ throw new Error('No component provided');
114
+ } else {
115
+ if (dependencies && isArray(dependencies)) {
116
+ depsString = dependencies.join('+');
117
+ } else {
118
+ depsString = dependencies;
119
+ }
120
+ const componentName = `${name}${depsString ? `|${depsString}` : ''}`;
121
+
122
+ this._data.components[componentName] = { component };
123
+ }
97
124
  }
98
125
  }
99
126
 
@@ -3,26 +3,75 @@ import config from './registry';
3
3
  config.set('components', {
4
4
  Toolbar: { component: 'this is the Toolbar component' },
5
5
  'Toolbar.Types': { component: 'this is the Types component' },
6
+ 'Teaser|News Item': { component: 'This is the News Item Teaser component' },
6
7
  });
7
8
 
8
9
  describe('registry', () => {
9
- it('resolve components', () => {
10
- expect(config.resolve('Toolbar').component).toEqual(
10
+ it('get components', () => {
11
+ expect(config.getComponent('Toolbar').component).toEqual(
11
12
  'this is the Toolbar component',
12
13
  );
13
14
  });
14
- it('resolve components with dots', () => {
15
- expect(config.resolve('Toolbar.Types').component).toEqual(
15
+ it('get components with context', () => {
16
+ expect(
17
+ config.getComponent({ name: 'Teaser', dependencies: 'News Item' })
18
+ .component,
19
+ ).toEqual('This is the News Item Teaser component');
20
+ });
21
+ it('get components with dots (as an object)', () => {
22
+ expect(config.getComponent({ name: 'Toolbar.Types' }).component).toEqual(
16
23
  'this is the Types component',
17
24
  );
18
25
  });
19
- it('resolve unexistent component', () => {
20
- expect(config.resolve('Toolbar.Doh').component).toEqual(undefined);
26
+ it('get components with | and spaces (as a string)', () => {
27
+ expect(config.getComponent('Teaser|News Item').component).toEqual(
28
+ 'This is the News Item Teaser component',
29
+ );
30
+ });
31
+ it('resolves unexistent component (as a string)', () => {
32
+ expect(config.getComponent('Toolbar.Doh').component).toEqual(undefined);
33
+ expect(config.getComponent('Toolbar.Doh')).toEqual({});
34
+ });
35
+ it('registers and gets a component by name (as string)', () => {
36
+ config.registerComponent({
37
+ name: 'Toolbar.Bar',
38
+ component: 'this is a Bar component',
39
+ });
40
+ expect(config.getComponent('Toolbar.Bar').component).toEqual(
41
+ 'this is a Bar component',
42
+ );
21
43
  });
22
- it('register component by name', () => {
23
- config.register('Toolbar.Bar', { component: 'this is a Bar component' });
24
- expect(config.resolve('Toolbar.Bar').component).toEqual(
44
+ it('registers and gets a component by name (as an object)', () => {
45
+ config.registerComponent({
46
+ name: 'Toolbar.Bar',
47
+ component: 'this is a Bar component',
48
+ });
49
+ expect(config.getComponent({ name: 'Toolbar.Bar' }).component).toEqual(
25
50
  'this is a Bar component',
26
51
  );
27
52
  });
53
+ it('registers a component by name with dependencies', () => {
54
+ config.registerComponent({
55
+ name: 'Toolbar.Bar',
56
+ component: 'this is a Bar component',
57
+ dependencies: 'News Item',
58
+ });
59
+ expect(
60
+ config.getComponent({ name: 'Toolbar.Bar', dependencies: 'News Item' })
61
+ .component,
62
+ ).toEqual('this is a Bar component');
63
+ });
64
+ it('registers a component by name with dependencies array', () => {
65
+ config.registerComponent({
66
+ name: 'Toolbar.Bar',
67
+ component: 'this is a Bar component',
68
+ dependencies: ['News Item', 'StringFieldWidget'],
69
+ });
70
+ expect(
71
+ config.getComponent({
72
+ name: 'Toolbar.Bar',
73
+ dependencies: ['News Item', 'StringFieldWidget'],
74
+ }).component,
75
+ ).toEqual('this is a Bar component');
76
+ });
28
77
  });
package/src/routes.js CHANGED
@@ -70,14 +70,14 @@ export const multilingualRoutes = [
70
70
  component: Register,
71
71
  },
72
72
  {
73
- path: `/(${config.settings?.supportedLanguages.join('|')})/password-reset`,
73
+ path: `/(${config.settings?.supportedLanguages.join('|')})/passwordreset`,
74
74
  component: RequestPasswordReset,
75
75
  exact: true,
76
76
  },
77
77
  {
78
78
  path: `/(${config.settings?.supportedLanguages.join(
79
79
  '|',
80
- )})/password-reset/:token`,
80
+ )})/passwordreset/:token`,
81
81
  component: PasswordReset,
82
82
  exact: true,
83
83
  },
@@ -227,12 +227,12 @@ export const defaultRoutes = [
227
227
  component: Register,
228
228
  },
229
229
  {
230
- path: '/password-reset',
230
+ path: '/passwordreset',
231
231
  component: RequestPasswordReset,
232
232
  exact: true,
233
233
  },
234
234
  {
235
- path: '/password-reset/:token',
235
+ path: '/passwordreset/:token',
236
236
  component: PasswordReset,
237
237
  exact: true,
238
238
  },
package/src/store.js CHANGED
@@ -7,12 +7,14 @@ import { save, load } from 'redux-localstorage-simple';
7
7
  import config from '@plone/volto/registry';
8
8
  import reducers from '@root/reducers';
9
9
 
10
- import { api, crashReporter, blacklistRoutes } from '@plone/volto/middleware';
11
10
  import {
11
+ api,
12
+ crashReporter,
13
+ blacklistRoutes,
12
14
  protectLoadStart,
13
15
  protectLoadEnd,
14
16
  loadProtector,
15
- } from './storeProtectLoadUtils';
17
+ } from '@plone/volto/middleware';
16
18
 
17
19
  const configureStore = (initialState, history, apiHelper) => {
18
20
  let stack = [