diff --git a/docs/source/configuration/settings-reference.md b/docs/source/configuration/settings-reference.md
index 3dbc111b0e..63290c20c6 100644
--- a/docs/source/configuration/settings-reference.md
+++ b/docs/source/configuration/settings-reference.md
@@ -425,6 +425,22 @@ okRoute
```jsx
config.settings.okRoute = '/site-is-ok'
```
+
+siteTitleFormat
+ Volto lets you modify how the site title is built.
+ By default the site title only includes the title of the current page.
+
+ By modifying this configuration setting, you can decide whether to use the title of the navigation root (either the site root or the language root folder) as the second part of the title.
+
+ You can also decide the separator character between the current page title and the site title.
+
+ ```jsx
+ siteTitleFormat: {
+ includeSiteTitle: true,
+ titleAndSiteTitleSeparator: '-',
+ }
+ ```
+
```
## Views settings
diff --git a/locales/ca/LC_MESSAGES/volto.po b/locales/ca/LC_MESSAGES/volto.po
index d197af6a01..3538b2a89d 100644
--- a/locales/ca/LC_MESSAGES/volto.po
+++ b/locales/ca/LC_MESSAGES/volto.po
@@ -617,6 +617,7 @@ msgid "Choose Target"
msgstr "Trieu Destí"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Choose a file
msgid "Choose a file"
msgstr "Trieu un fitxer"
@@ -1118,16 +1119,19 @@ msgid "Drag and drop files from your computer onto this area or click the “Bro
msgstr "Arrossegueu i deixeu anar fitxers des del vostre ordinador a aquesta àrea o feu clic al botó 'Examinar'."
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to replace the existing file
msgid "Drop file here to replace the existing file"
msgstr "Deixeu anar el fitxer aquí per substituir el fitxer existent"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to upload a new file
msgid "Drop file here to upload a new file"
msgstr "Deixeu anar el fitxer aquí per pujar un fitxer nou"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop files here ...
msgid "Drop files here ..."
msgstr "Deixeu fitxers aquí..."
@@ -2591,11 +2595,6 @@ msgstr ""
msgid "Plone Foundation"
msgstr "Fundació Plone"
-#: components/theme/Logo/Logo
-# defaultMessage: Plone Site
-msgid "Plone Site"
-msgstr "Lloc de Plone"
-
#: components/theme/Footer/Footer
# defaultMessage: Plone{reg} Open Source CMS/WCM
msgid "Plone{reg} Open Source CMS/WCM"
@@ -2837,6 +2836,7 @@ msgid "Repeat on"
msgstr "Repetiu"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Replace existing file
msgid "Replace existing file"
msgstr "Substitueix el fitxer existent"
@@ -3279,11 +3279,6 @@ msgstr "Redueix la barra d'eines"
msgid "Sign in to start session"
msgstr "Inicieu la sessió per iniciar la sessió"
-#: components/theme/Logo/Logo
-# defaultMessage: Site
-msgid "Site"
-msgstr "Lloc"
-
#: components/theme/NotFound/NotFound
#: components/theme/Unauthorized/Unauthorized
# defaultMessage: Site Administration
diff --git a/locales/de/LC_MESSAGES/volto.po b/locales/de/LC_MESSAGES/volto.po
index f4db91efd4..977225a343 100644
--- a/locales/de/LC_MESSAGES/volto.po
+++ b/locales/de/LC_MESSAGES/volto.po
@@ -614,6 +614,7 @@ msgid "Choose Target"
msgstr "Ziel auswählen"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Choose a file
msgid "Choose a file"
msgstr "Datei auswählen"
@@ -1115,16 +1116,19 @@ msgid "Drag and drop files from your computer onto this area or click the “Bro
msgstr "Ziehen Sie Dateien von Ihrem Computer auf diesen Bereich oder drücken Sie den “Durchsuchen”-Knopf."
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to replace the existing file
msgid "Drop file here to replace the existing file"
msgstr "Datei hier ablegen um die bestehende Datei zu ersetzen"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to upload a new file
msgid "Drop file here to upload a new file"
msgstr "Datei hier ablegen um eine neue Datei hochzuladen"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop files here ...
msgid "Drop files here ..."
msgstr "Datei hier ablegen um die bestehende Datei zu ersetzen"
@@ -2588,11 +2592,6 @@ msgstr "Bitte upgraden Sie auf plone.restapi >= 8.39.0."
msgid "Plone Foundation"
msgstr "Plone Foundation"
-#: components/theme/Logo/Logo
-# defaultMessage: Plone Site
-msgid "Plone Site"
-msgstr "Website"
-
#: components/theme/Footer/Footer
# defaultMessage: Plone{reg} Open Source CMS/WCM
msgid "Plone{reg} Open Source CMS/WCM"
@@ -2834,6 +2833,7 @@ msgid "Repeat on"
msgstr "Wiederhole am"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Replace existing file
msgid "Replace existing file"
msgstr "Bestehende Datei ersetzen"
@@ -3276,11 +3276,6 @@ msgstr "Toolbar verkleinern"
msgid "Sign in to start session"
msgstr "Loggen Sie sich ein"
-#: components/theme/Logo/Logo
-# defaultMessage: Site
-msgid "Site"
-msgstr "Website"
-
#: components/theme/NotFound/NotFound
#: components/theme/Unauthorized/Unauthorized
# defaultMessage: Site Administration
diff --git a/locales/en/LC_MESSAGES/volto.po b/locales/en/LC_MESSAGES/volto.po
index 8171152488..54f0a3f7c6 100644
--- a/locales/en/LC_MESSAGES/volto.po
+++ b/locales/en/LC_MESSAGES/volto.po
@@ -608,6 +608,7 @@ msgid "Choose Target"
msgstr ""
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Choose a file
msgid "Choose a file"
msgstr ""
@@ -1109,16 +1110,19 @@ msgid "Drag and drop files from your computer onto this area or click the “Bro
msgstr ""
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to replace the existing file
msgid "Drop file here to replace the existing file"
msgstr ""
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to upload a new file
msgid "Drop file here to upload a new file"
msgstr ""
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop files here ...
msgid "Drop files here ..."
msgstr ""
@@ -2582,11 +2586,6 @@ msgstr ""
msgid "Plone Foundation"
msgstr ""
-#: components/theme/Logo/Logo
-# defaultMessage: Plone Site
-msgid "Plone Site"
-msgstr ""
-
#: components/theme/Footer/Footer
# defaultMessage: Plone{reg} Open Source CMS/WCM
msgid "Plone{reg} Open Source CMS/WCM"
@@ -2828,6 +2827,7 @@ msgid "Repeat on"
msgstr ""
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Replace existing file
msgid "Replace existing file"
msgstr ""
@@ -3270,11 +3270,6 @@ msgstr ""
msgid "Sign in to start session"
msgstr ""
-#: components/theme/Logo/Logo
-# defaultMessage: Site
-msgid "Site"
-msgstr ""
-
#: components/theme/NotFound/NotFound
#: components/theme/Unauthorized/Unauthorized
# defaultMessage: Site Administration
diff --git a/locales/es/LC_MESSAGES/volto.po b/locales/es/LC_MESSAGES/volto.po
index b937a85540..5f8187240d 100644
--- a/locales/es/LC_MESSAGES/volto.po
+++ b/locales/es/LC_MESSAGES/volto.po
@@ -619,6 +619,7 @@ msgid "Choose Target"
msgstr "Seleccione destino"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Choose a file
msgid "Choose a file"
msgstr "Seleccionar Archivo"
@@ -1120,16 +1121,19 @@ msgid "Drag and drop files from your computer onto this area or click the “Bro
msgstr "Arrastre y suelte los archivos desde su computador en esta área o haga clic al botón “Seleccionar”."
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to replace the existing file
msgid "Drop file here to replace the existing file"
msgstr "Arrastre aquí el archivo para reemplazar el actual"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to upload a new file
msgid "Drop file here to upload a new file"
msgstr "Arrastre aquí el archivo para añadir un nuevo"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop files here ...
msgid "Drop files here ..."
msgstr "Arrastrar archivos aquí..."
@@ -2593,11 +2597,6 @@ msgstr "Por favor, actualice a plone.restapi >= 8.39.0."
msgid "Plone Foundation"
msgstr "Fundación Plone"
-#: components/theme/Logo/Logo
-# defaultMessage: Plone Site
-msgid "Plone Site"
-msgstr "Sitio Plone"
-
#: components/theme/Footer/Footer
# defaultMessage: Plone{reg} Open Source CMS/WCM
msgid "Plone{reg} Open Source CMS/WCM"
@@ -2839,6 +2838,7 @@ msgid "Repeat on"
msgstr "Repetir el"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Replace existing file
msgid "Replace existing file"
msgstr "Sustituir el archivo actual"
@@ -3281,11 +3281,6 @@ msgstr "Contraer barra de herramientas"
msgid "Sign in to start session"
msgstr "Acceda para iniciar sesión"
-#: components/theme/Logo/Logo
-# defaultMessage: Site
-msgid "Site"
-msgstr "Sitio"
-
#: components/theme/NotFound/NotFound
#: components/theme/Unauthorized/Unauthorized
# defaultMessage: Site Administration
diff --git a/locales/eu/LC_MESSAGES/volto.po b/locales/eu/LC_MESSAGES/volto.po
index 02d807f7e0..9db7472952 100644
--- a/locales/eu/LC_MESSAGES/volto.po
+++ b/locales/eu/LC_MESSAGES/volto.po
@@ -615,6 +615,7 @@ msgid "Choose Target"
msgstr "Aukeratu helburua"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Choose a file
msgid "Choose a file"
msgstr "Aukeratu fitxategia"
@@ -1116,16 +1117,19 @@ msgid "Drag and drop files from your computer onto this area or click the “Bro
msgstr "Arrastatu fitxategiak hona edo erabili Arakatu botoia."
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to replace the existing file
msgid "Drop file here to replace the existing file"
msgstr "Arrastatu fitxategia hona orain dagoena ordezkatzeko"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to upload a new file
msgid "Drop file here to upload a new file"
msgstr "Arrastatu fitxategia hona fitxategi berria kargatzeko"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop files here ...
msgid "Drop files here ..."
msgstr "Arrastatu fitxategiak hona..."
@@ -2589,11 +2593,6 @@ msgstr ""
msgid "Plone Foundation"
msgstr "Plone Fundazioa"
-#: components/theme/Logo/Logo
-# defaultMessage: Plone Site
-msgid "Plone Site"
-msgstr "Plone Ataria"
-
#: components/theme/Footer/Footer
# defaultMessage: Plone{reg} Open Source CMS/WCM
msgid "Plone{reg} Open Source CMS/WCM"
@@ -2835,6 +2834,7 @@ msgid "Repeat on"
msgstr "Egun honetan errepikatu"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Replace existing file
msgid "Replace existing file"
msgstr "Ordezkatu fitxategia"
@@ -3277,11 +3277,6 @@ msgstr "Txikitu tresna-barra"
msgid "Sign in to start session"
msgstr "Sartu saioa hasteko"
-#: components/theme/Logo/Logo
-# defaultMessage: Site
-msgid "Site"
-msgstr "Ataria"
-
#: components/theme/NotFound/NotFound
#: components/theme/Unauthorized/Unauthorized
# defaultMessage: Site Administration
diff --git a/locales/fi/LC_MESSAGES/volto.po b/locales/fi/LC_MESSAGES/volto.po
index afb67c9006..75fd878ad1 100644
--- a/locales/fi/LC_MESSAGES/volto.po
+++ b/locales/fi/LC_MESSAGES/volto.po
@@ -619,6 +619,7 @@ msgid "Choose Target"
msgstr "Valitse sisältö"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Choose a file
msgid "Choose a file"
msgstr "Valitse tiedosto"
@@ -1120,16 +1121,19 @@ msgid "Drag and drop files from your computer onto this area or click the “Bro
msgstr "Raahaa ja pudota tiedostoja tietokoneeltasi tähän tai paina “Selaa”."
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to replace the existing file
msgid "Drop file here to replace the existing file"
msgstr "Pudota tiedosto tähän korvataksesi olemassaolevan tiedoston"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to upload a new file
msgid "Drop file here to upload a new file"
msgstr "Pudota tiedosto tähän ladataksesi uuden tiedoston"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop files here ...
msgid "Drop files here ..."
msgstr "Pudota tiedosto tänne... "
@@ -2593,11 +2597,6 @@ msgstr ""
msgid "Plone Foundation"
msgstr "Plone-säätiön"
-#: components/theme/Logo/Logo
-# defaultMessage: Plone Site
-msgid "Plone Site"
-msgstr "Plone-sivusto"
-
#: components/theme/Footer/Footer
# defaultMessage: Plone{reg} Open Source CMS/WCM
msgid "Plone{reg} Open Source CMS/WCM"
@@ -2839,6 +2838,7 @@ msgid "Repeat on"
msgstr "Toista"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Replace existing file
msgid "Replace existing file"
msgstr "Korvaa olemassaoleva tiedosto"
@@ -3281,11 +3281,6 @@ msgstr "Kutista työkalupalkki"
msgid "Sign in to start session"
msgstr "Kirjaudu sisään"
-#: components/theme/Logo/Logo
-# defaultMessage: Site
-msgid "Site"
-msgstr "Sivusto"
-
#: components/theme/NotFound/NotFound
#: components/theme/Unauthorized/Unauthorized
# defaultMessage: Site Administration
diff --git a/locales/fr/LC_MESSAGES/volto.po b/locales/fr/LC_MESSAGES/volto.po
index dc469ad9ae..3ae148bbf9 100644
--- a/locales/fr/LC_MESSAGES/volto.po
+++ b/locales/fr/LC_MESSAGES/volto.po
@@ -625,6 +625,7 @@ msgid "Choose Target"
msgstr "Choisir une cible"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Choose a file
msgid "Choose a file"
msgstr "Choisissez un fichier"
@@ -1126,16 +1127,19 @@ msgid "Drag and drop files from your computer onto this area or click the “Bro
msgstr "Glisser et déposer les fichiers depuis votre ordinateur dans la zone ou cliquer sur le bouton “Explore“"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to replace the existing file
msgid "Drop file here to replace the existing file"
msgstr "Déposez le fichier ici pour remplacer le fichier existant"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to upload a new file
msgid "Drop file here to upload a new file"
msgstr "Déposez le fichier ici pour télécharger un nouveau fichier"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop files here ...
msgid "Drop files here ..."
msgstr "Déposez les fichiers ici ..."
@@ -2599,11 +2603,6 @@ msgstr ""
msgid "Plone Foundation"
msgstr "Fondation Plone"
-#: components/theme/Logo/Logo
-# defaultMessage: Plone Site
-msgid "Plone Site"
-msgstr "Site Plone"
-
#: components/theme/Footer/Footer
# defaultMessage: Plone{reg} Open Source CMS/WCM
msgid "Plone{reg} Open Source CMS/WCM"
@@ -2845,6 +2844,7 @@ msgid "Repeat on"
msgstr "Répétition le"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Replace existing file
msgid "Replace existing file"
msgstr "Remplacer le fichier existant"
@@ -3287,11 +3287,6 @@ msgstr "Réduire la barre d'outils"
msgid "Sign in to start session"
msgstr "Connectez-vous pour démarrer la session"
-#: components/theme/Logo/Logo
-# defaultMessage: Site
-msgid "Site"
-msgstr "Site"
-
#: components/theme/NotFound/NotFound
#: components/theme/Unauthorized/Unauthorized
# defaultMessage: Site Administration
diff --git a/locales/it/LC_MESSAGES/volto.po b/locales/it/LC_MESSAGES/volto.po
index bbeafaf016..6e4a15f1a7 100644
--- a/locales/it/LC_MESSAGES/volto.po
+++ b/locales/it/LC_MESSAGES/volto.po
@@ -608,6 +608,7 @@ msgid "Choose Target"
msgstr "Seleziona la destinazione"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Choose a file
msgid "Choose a file"
msgstr "Scegli un file"
@@ -1109,16 +1110,19 @@ msgid "Drag and drop files from your computer onto this area or click the “Bro
msgstr "Trascina in quest'area i file dal tuo computer o clicca su “Sfoglia”."
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to replace the existing file
msgid "Drop file here to replace the existing file"
msgstr "Rilascia un file qui per sostituire quello esistente"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to upload a new file
msgid "Drop file here to upload a new file"
msgstr "Rilascia un file qui per caricare un nuovo file"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop files here ...
msgid "Drop files here ..."
msgstr "Rilascia file qui..."
@@ -2582,11 +2586,6 @@ msgstr "Effettua l'aggiornamento a plone.restapi >= 8.39.0"
msgid "Plone Foundation"
msgstr "Plone Foundation"
-#: components/theme/Logo/Logo
-# defaultMessage: Plone Site
-msgid "Plone Site"
-msgstr "Sito Plone"
-
#: components/theme/Footer/Footer
# defaultMessage: Plone{reg} Open Source CMS/WCM
msgid "Plone{reg} Open Source CMS/WCM"
@@ -2828,6 +2827,7 @@ msgid "Repeat on"
msgstr "Ripeti ogni"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Replace existing file
msgid "Replace existing file"
msgstr "Sostituisci file esistente"
@@ -3270,11 +3270,6 @@ msgstr "Riduci la toolbar"
msgid "Sign in to start session"
msgstr "Accedi per iniziare la sessione"
-#: components/theme/Logo/Logo
-# defaultMessage: Site
-msgid "Site"
-msgstr "Sito"
-
#: components/theme/NotFound/NotFound
#: components/theme/Unauthorized/Unauthorized
# defaultMessage: Site Administration
diff --git a/locales/ja/LC_MESSAGES/volto.po b/locales/ja/LC_MESSAGES/volto.po
index 32198dfc3f..a7c0665a8b 100644
--- a/locales/ja/LC_MESSAGES/volto.po
+++ b/locales/ja/LC_MESSAGES/volto.po
@@ -616,6 +616,7 @@ msgid "Choose Target"
msgstr "ターゲットを選択"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Choose a file
msgid "Choose a file"
msgstr "ファイルを選択"
@@ -1117,16 +1118,19 @@ msgid "Drag and drop files from your computer onto this area or click the “Bro
msgstr "ここにファイルをドラッグ、または「参照」ボタンをクリック"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to replace the existing file
msgid "Drop file here to replace the existing file"
msgstr "ファイルをここにドロップして、既存のファイルを置き換え"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to upload a new file
msgid "Drop file here to upload a new file"
msgstr "ファイルをここにドロップして、新しいファイルをアップロード"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop files here ...
msgid "Drop files here ..."
msgstr "ファイルをここにドロップ"
@@ -2590,11 +2594,6 @@ msgstr ""
msgid "Plone Foundation"
msgstr "Plone Foundation"
-#: components/theme/Logo/Logo
-# defaultMessage: Plone Site
-msgid "Plone Site"
-msgstr "Ploneサイト"
-
#: components/theme/Footer/Footer
# defaultMessage: Plone{reg} Open Source CMS/WCM
msgid "Plone{reg} Open Source CMS/WCM"
@@ -2836,6 +2835,7 @@ msgid "Repeat on"
msgstr "日または曜日"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Replace existing file
msgid "Replace existing file"
msgstr "ファイルの置き換え"
@@ -3278,11 +3278,6 @@ msgstr "ツールバーを閉じる"
msgid "Sign in to start session"
msgstr "ログインしてセッションを開始"
-#: components/theme/Logo/Logo
-# defaultMessage: Site
-msgid "Site"
-msgstr "サイト"
-
#: components/theme/NotFound/NotFound
#: components/theme/Unauthorized/Unauthorized
# defaultMessage: Site Administration
diff --git a/locales/nl/LC_MESSAGES/volto.po b/locales/nl/LC_MESSAGES/volto.po
index 6d031b47a7..d8c1028fb9 100644
--- a/locales/nl/LC_MESSAGES/volto.po
+++ b/locales/nl/LC_MESSAGES/volto.po
@@ -627,6 +627,7 @@ msgid "Choose Target"
msgstr ""
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Choose a file
msgid "Choose a file"
msgstr ""
@@ -1128,16 +1129,19 @@ msgid "Drag and drop files from your computer onto this area or click the “Bro
msgstr "Drag en drop bestanden van uw computer naar dit gebied of klik op de “Bladeren” knop."
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to replace the existing file
msgid "Drop file here to replace the existing file"
msgstr ""
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to upload a new file
msgid "Drop file here to upload a new file"
msgstr ""
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop files here ...
msgid "Drop files here ..."
msgstr ""
@@ -2601,11 +2605,6 @@ msgstr ""
msgid "Plone Foundation"
msgstr "Plone Foundation"
-#: components/theme/Logo/Logo
-# defaultMessage: Plone Site
-msgid "Plone Site"
-msgstr "Plone website"
-
#: components/theme/Footer/Footer
# defaultMessage: Plone{reg} Open Source CMS/WCM
msgid "Plone{reg} Open Source CMS/WCM"
@@ -2847,6 +2846,7 @@ msgid "Repeat on"
msgstr ""
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Replace existing file
msgid "Replace existing file"
msgstr ""
@@ -3289,11 +3289,6 @@ msgstr ""
msgid "Sign in to start session"
msgstr ""
-#: components/theme/Logo/Logo
-# defaultMessage: Site
-msgid "Site"
-msgstr "Website"
-
#: components/theme/NotFound/NotFound
#: components/theme/Unauthorized/Unauthorized
# defaultMessage: Site Administration
diff --git a/locales/pt/LC_MESSAGES/volto.po b/locales/pt/LC_MESSAGES/volto.po
index 743fe4ecef..3c9373c837 100644
--- a/locales/pt/LC_MESSAGES/volto.po
+++ b/locales/pt/LC_MESSAGES/volto.po
@@ -616,6 +616,7 @@ msgid "Choose Target"
msgstr "Escolha Alvo"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Choose a file
msgid "Choose a file"
msgstr ""
@@ -1117,16 +1118,19 @@ msgid "Drag and drop files from your computer onto this area or click the “Bro
msgstr "Arraste e largue ficheiros do seu computador para esta área ou clique no botão “Procurar”."
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to replace the existing file
msgid "Drop file here to replace the existing file"
msgstr ""
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to upload a new file
msgid "Drop file here to upload a new file"
msgstr ""
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop files here ...
msgid "Drop files here ..."
msgstr ""
@@ -2590,11 +2594,6 @@ msgstr ""
msgid "Plone Foundation"
msgstr "Fundação Plone"
-#: components/theme/Logo/Logo
-# defaultMessage: Plone Site
-msgid "Plone Site"
-msgstr "Sítio Plone"
-
#: components/theme/Footer/Footer
# defaultMessage: Plone{reg} Open Source CMS/WCM
msgid "Plone{reg} Open Source CMS/WCM"
@@ -2836,6 +2835,7 @@ msgid "Repeat on"
msgstr ""
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Replace existing file
msgid "Replace existing file"
msgstr ""
@@ -3278,11 +3278,6 @@ msgstr ""
msgid "Sign in to start session"
msgstr "Inicie a sessão"
-#: components/theme/Logo/Logo
-# defaultMessage: Site
-msgid "Site"
-msgstr "Sítio"
-
#: components/theme/NotFound/NotFound
#: components/theme/Unauthorized/Unauthorized
# defaultMessage: Site Administration
diff --git a/locales/pt_BR/LC_MESSAGES/volto.po b/locales/pt_BR/LC_MESSAGES/volto.po
index 4e5bb61eb0..7c988bf514 100644
--- a/locales/pt_BR/LC_MESSAGES/volto.po
+++ b/locales/pt_BR/LC_MESSAGES/volto.po
@@ -618,6 +618,7 @@ msgid "Choose Target"
msgstr "Escolha Alvo"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Choose a file
msgid "Choose a file"
msgstr "Escolha um arquivo"
@@ -1119,16 +1120,19 @@ msgid "Drag and drop files from your computer onto this area or click the “Bro
msgstr "Arraste e solte arquivos do seu computador para esta área, ou clique no botão ‘Procurar’."
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to replace the existing file
msgid "Drop file here to replace the existing file"
msgstr "Solte um arquivo aqui para substituir o arquivo existente"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to upload a new file
msgid "Drop file here to upload a new file"
msgstr "Solte um arquivo aqui para enviar um novo arquivo"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop files here ...
msgid "Drop files here ..."
msgstr "Soltar aquivos aqui…"
@@ -2592,11 +2596,6 @@ msgstr "Por favor atualize a plone.restapi para versão 8.39.0 ou superior."
msgid "Plone Foundation"
msgstr "Fundação Plone"
-#: components/theme/Logo/Logo
-# defaultMessage: Plone Site
-msgid "Plone Site"
-msgstr "Site Plone"
-
#: components/theme/Footer/Footer
# defaultMessage: Plone{reg} Open Source CMS/WCM
msgid "Plone{reg} Open Source CMS/WCM"
@@ -2838,6 +2837,7 @@ msgid "Repeat on"
msgstr "Repete em"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Replace existing file
msgid "Replace existing file"
msgstr "Substituir arquivo existente"
@@ -3280,11 +3280,6 @@ msgstr "Recolher barra de ferramentas"
msgid "Sign in to start session"
msgstr "Faça login para iniciar a sessão"
-#: components/theme/Logo/Logo
-# defaultMessage: Site
-msgid "Site"
-msgstr "Site"
-
#: components/theme/NotFound/NotFound
#: components/theme/Unauthorized/Unauthorized
# defaultMessage: Site Administration
diff --git a/locales/ro/LC_MESSAGES/volto.po b/locales/ro/LC_MESSAGES/volto.po
index cbf003e233..d5812dc14a 100644
--- a/locales/ro/LC_MESSAGES/volto.po
+++ b/locales/ro/LC_MESSAGES/volto.po
@@ -608,6 +608,7 @@ msgid "Choose Target"
msgstr "Alegeți ținta"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Choose a file
msgid "Choose a file"
msgstr "Alegeți un fișier"
@@ -1109,16 +1110,19 @@ msgid "Drag and drop files from your computer onto this area or click the “Bro
msgstr "Trageți și fixați fișierele de pe computer în această zonă sau faceți clic pe butonul Răsfoiește."
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to replace the existing file
msgid "Drop file here to replace the existing file"
msgstr "Trageți fișierul aici pentru a înlocui fișierul existent"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to upload a new file
msgid "Drop file here to upload a new file"
msgstr "Trageți fișierul aici pentru a încărca un fișier nou"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop files here ...
msgid "Drop files here ..."
msgstr "Trageți fișierele aici..."
@@ -2582,11 +2586,6 @@ msgstr ""
msgid "Plone Foundation"
msgstr "Fundația Plone"
-#: components/theme/Logo/Logo
-# defaultMessage: Plone Site
-msgid "Plone Site"
-msgstr "Site Plone"
-
#: components/theme/Footer/Footer
# defaultMessage: Plone{reg} Open Source CMS/WCM
msgid "Plone{reg} Open Source CMS/WCM"
@@ -2828,6 +2827,7 @@ msgid "Repeat on"
msgstr "Repetați pe"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Replace existing file
msgid "Replace existing file"
msgstr "Înlocuiește fișierul existent"
@@ -3270,11 +3270,6 @@ msgstr "Reduceti bara de instrumente"
msgid "Sign in to start session"
msgstr "Conectați-vă pentru a începe sesiunea"
-#: components/theme/Logo/Logo
-# defaultMessage: Site
-msgid "Site"
-msgstr "Site"
-
#: components/theme/NotFound/NotFound
#: components/theme/Unauthorized/Unauthorized
# defaultMessage: Site Administration
diff --git a/locales/volto.pot b/locales/volto.pot
index 90c27b7603..bfd6b55b0d 100644
--- a/locales/volto.pot
+++ b/locales/volto.pot
@@ -610,6 +610,7 @@ msgid "Choose Target"
msgstr ""
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Choose a file
msgid "Choose a file"
msgstr ""
@@ -1111,16 +1112,19 @@ msgid "Drag and drop files from your computer onto this area or click the “Bro
msgstr ""
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to replace the existing file
msgid "Drop file here to replace the existing file"
msgstr ""
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to upload a new file
msgid "Drop file here to upload a new file"
msgstr ""
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop files here ...
msgid "Drop files here ..."
msgstr ""
@@ -2584,11 +2588,6 @@ msgstr ""
msgid "Plone Foundation"
msgstr ""
-#: components/theme/Logo/Logo
-# defaultMessage: Plone Site
-msgid "Plone Site"
-msgstr ""
-
#: components/theme/Footer/Footer
# defaultMessage: Plone{reg} Open Source CMS/WCM
msgid "Plone{reg} Open Source CMS/WCM"
@@ -2830,6 +2829,7 @@ msgid "Repeat on"
msgstr ""
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Replace existing file
msgid "Replace existing file"
msgstr ""
@@ -3272,11 +3272,6 @@ msgstr ""
msgid "Sign in to start session"
msgstr ""
-#: components/theme/Logo/Logo
-# defaultMessage: Site
-msgid "Site"
-msgstr ""
-
#: components/theme/NotFound/NotFound
#: components/theme/Unauthorized/Unauthorized
# defaultMessage: Site Administration
diff --git a/locales/zh_CN/LC_MESSAGES/volto.po b/locales/zh_CN/LC_MESSAGES/volto.po
index ed63fbdba1..2be1957f98 100644
--- a/locales/zh_CN/LC_MESSAGES/volto.po
+++ b/locales/zh_CN/LC_MESSAGES/volto.po
@@ -614,6 +614,7 @@ msgid "Choose Target"
msgstr "选择目标"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Choose a file
msgid "Choose a file"
msgstr "选择一个文件"
@@ -1115,16 +1116,19 @@ msgid "Drag and drop files from your computer onto this area or click the “Bro
msgstr "从你的电脑中拖放文件到此区域或单击 “浏览” 按钮"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to replace the existing file
msgid "Drop file here to replace the existing file"
msgstr "在此处放置文件以替换现有文件"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop file here to upload a new file
msgid "Drop file here to upload a new file"
msgstr "在此处放置文件来上传新文件"
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Drop files here ...
msgid "Drop files here ..."
msgstr "在此处放置文件 ..."
@@ -2588,11 +2592,6 @@ msgstr ""
msgid "Plone Foundation"
msgstr ""
-#: components/theme/Logo/Logo
-# defaultMessage: Plone Site
-msgid "Plone Site"
-msgstr "Plone站点"
-
#: components/theme/Footer/Footer
# defaultMessage: Plone{reg} Open Source CMS/WCM
msgid "Plone{reg} Open Source CMS/WCM"
@@ -2834,6 +2833,7 @@ msgid "Repeat on"
msgstr ""
#: components/manage/Widgets/FileWidget
+#: components/manage/Widgets/RegistryImageWidget
# defaultMessage: Replace existing file
msgid "Replace existing file"
msgstr "替换现有文件"
@@ -3276,11 +3276,6 @@ msgstr "缩小工具栏"
msgid "Sign in to start session"
msgstr "登录以开始session会话"
-#: components/theme/Logo/Logo
-# defaultMessage: Site
-msgid "Site"
-msgstr "网站"
-
#: components/theme/NotFound/NotFound
#: components/theme/Unauthorized/Unauthorized
# defaultMessage: Site Administration
diff --git a/news/3537.feature b/news/3537.feature
new file mode 100644
index 0000000000..30adb55219
--- /dev/null
+++ b/news/3537.feature
@@ -0,0 +1,5 @@
+Use the `@navroot` endpoint to build the `title` tag. @erral
+
+Use the `@site` endpoint to render the logo. @erral
+
+Register a widget to set the logo in the site control panel. @erral
diff --git a/src/actions/index.js b/src/actions/index.js
index 289ffd34b9..037fffa346 100644
--- a/src/actions/index.js
+++ b/src/actions/index.js
@@ -172,3 +172,5 @@ export {
} from './workingcopy/workingcopy';
export { getUserSchema } from './userschema/userschema';
export { getUpgradeInformation, runUpgrade } from './upgrade/upgrade';
+export { getSite } from './site/site';
+export { getNavroot } from './navroot/navroot';
diff --git a/src/actions/navroot/navroot.js b/src/actions/navroot/navroot.js
new file mode 100644
index 0000000000..c9d50c2e6d
--- /dev/null
+++ b/src/actions/navroot/navroot.js
@@ -0,0 +1,16 @@
+import { GET_NAVROOT } from '@plone/volto/constants/ActionTypes';
+
+/**
+ * Get the navigation root information.
+ * @function getNavroot
+ * @returns {Object} navroot
+ */
+export function getNavroot(url) {
+ return {
+ type: GET_NAVROOT,
+ request: {
+ op: 'get',
+ path: `${url}/@navroot`,
+ },
+ };
+}
diff --git a/src/actions/navroot/navroot.test.js b/src/actions/navroot/navroot.test.js
new file mode 100644
index 0000000000..7d9cb606e4
--- /dev/null
+++ b/src/actions/navroot/navroot.test.js
@@ -0,0 +1,15 @@
+import { getNavroot } from './navroot';
+import { GET_NAVROOT } from '@plone/volto/constants/ActionTypes';
+
+describe('Breadcrumbs action', () => {
+ describe('getBreadcrumbs', () => {
+ it('should create an action to get the breadcrumbs', () => {
+ const url = 'http://localhost';
+ const action = getNavroot(url);
+
+ expect(action.type).toEqual(GET_NAVROOT);
+ expect(action.request.op).toEqual('get');
+ expect(action.request.path).toEqual(`${url}/@navroot`);
+ });
+ });
+});
diff --git a/src/actions/site/site.js b/src/actions/site/site.js
new file mode 100644
index 0000000000..eb4d4f6032
--- /dev/null
+++ b/src/actions/site/site.js
@@ -0,0 +1,16 @@
+import { GET_SITE } from '@plone/volto/constants/ActionTypes';
+
+/**
+ * Get the Site information.
+ * @function getSite
+ * @returns {Object} site info
+ */
+export function getSite() {
+ return {
+ type: GET_SITE,
+ request: {
+ op: 'get',
+ path: '/@site',
+ },
+ };
+}
diff --git a/src/actions/site/site.test.js b/src/actions/site/site.test.js
new file mode 100644
index 0000000000..4c53cc65bc
--- /dev/null
+++ b/src/actions/site/site.test.js
@@ -0,0 +1,15 @@
+import { getSite } from './site';
+import { GET_SITE } from '@plone/volto/constants/ActionTypes';
+
+describe('Site action', () => {
+ describe('getSite', () => {
+ it('should create an action to get the site config', () => {
+ const url = 'http://localhost';
+ const action = getSite(url);
+
+ expect(action.type).toEqual(GET_SITE);
+ expect(action.request.op).toEqual('get');
+ expect(action.request.path).toEqual(`/@site`);
+ });
+ });
+});
diff --git a/src/components/manage/Widgets/RegistryImageWidget.jsx b/src/components/manage/Widgets/RegistryImageWidget.jsx
new file mode 100644
index 0000000000..4045d66ab3
--- /dev/null
+++ b/src/components/manage/Widgets/RegistryImageWidget.jsx
@@ -0,0 +1,210 @@
+/**
+ * RegistryImageWidget component.
+ * @module components/manage/Widgets/RegistryImageWidget
+ */
+
+import React from 'react';
+import PropTypes from 'prop-types';
+import { Button, Image, Dimmer } from 'semantic-ui-react';
+import { readAsDataURL } from 'promise-file-reader';
+import { injectIntl } from 'react-intl';
+import deleteSVG from '@plone/volto/icons/delete.svg';
+import { Icon, FormFieldWrapper } from '@plone/volto/components';
+import loadable from '@loadable/component';
+import { defineMessages, useIntl } from 'react-intl';
+import { toPublicURL, validateFileUploadSize } from '@plone/volto/helpers';
+
+const imageMimetypes = [
+ 'image/png',
+ 'image/jpeg',
+ 'image/webp',
+ 'image/jpg',
+ 'image/gif',
+ 'image/svg+xml',
+];
+const Dropzone = loadable(() => import('react-dropzone'));
+
+const messages = defineMessages({
+ releaseDrag: {
+ id: 'Drop files here ...',
+ defaultMessage: 'Drop files here ...',
+ },
+ editFile: {
+ id: 'Drop file here to replace the existing file',
+ defaultMessage: 'Drop file here to replace the existing file',
+ },
+ fileDrag: {
+ id: 'Drop file here to upload a new file',
+ defaultMessage: 'Drop file here to upload a new file',
+ },
+ replaceFile: {
+ id: 'Replace existing file',
+ defaultMessage: 'Replace existing file',
+ },
+ addNewFile: {
+ id: 'Choose a file',
+ defaultMessage: 'Choose a file',
+ },
+});
+
+/**
+ * RegistryImageWidget component class.
+ * @function RegistryImageWidget
+ * @returns {string} Markup of the component.
+ *
+ * To use it, in schema properties, declare a field like:
+ *
+ * ```jsx
+ * {
+ * title: "File",
+ * widget: 'file',
+ * }
+ * ```
+ * or:
+ *
+ * ```jsx
+ * {
+ * title: "File",
+ * type: 'object',
+ * }
+ * ```
+ *
+ */
+const RegistryImageWidget = (props) => {
+ const { id, value, onChange, isDisabled } = props;
+ const intl = useIntl();
+
+ const fileName = value?.split(';')[0];
+ const imgsrc = fileName
+ ? `${toPublicURL('/')}@@site-logo/${atob(
+ fileName.replace('filenameb64:', ''),
+ )}`
+ : '';
+
+ /**
+ * Drop handler
+ * @method onDrop
+ * @param {array} files File objects
+ * @returns {undefined}
+ */
+ const onDrop = (files) => {
+ const file = files[0];
+ if (!validateFileUploadSize(file, intl.formatMessage)) return;
+
+ readAsDataURL(file).then((data) => {
+ const fields = data.match(/^data:(.*);(.*),(.*)$/);
+ onChange(id, `filenameb64:${btoa(file.name)};datab64:${fields[3]}}`);
+ });
+
+ let reader = new FileReader();
+ reader.onload = function () {
+ const fields = reader.result.match(/^data:(.*);(.*),(.*)$/);
+ if (imageMimetypes.includes(fields[1])) {
+ let imagePreview = document.getElementById(`field-${id}-image`);
+ imagePreview.src = reader.result;
+ }
+ };
+ reader.readAsDataURL(files[0]);
+ };
+
+ return (
+
+ {intl.formatMessage(messages.releaseDrag)}
+
+ {intl.formatMessage(messages.editFile)}
+
+ {intl.formatMessage(messages.fileDrag)}
+