diff --git a/apps/nextjs/README.md b/apps/nextjs/README.md
index c04dca61ad..4660a9939a 100644
--- a/apps/nextjs/README.md
+++ b/apps/nextjs/README.md
@@ -1,6 +1,7 @@
# Plone on Next.js
-This is a proof of concept of a [Next.js](https://nextjs.org) app, using the app router and the `@plone/client` and `@plone/components` library. This is intended to serve as both a playground for the development of both packages and as demo of Plone using Next.js.
+This is a proof of concept of a [Next.js](https://nextjs.org) app, using the app router and the `@plone/client` and `@plone/components` library.
+This is intended to serve as both a playground for the development of both packages and as a demo of Plone using Next.js.
> [!WARNING]
> This package or app is experimental.
@@ -9,7 +10,7 @@ This is a proof of concept of a [Next.js](https://nextjs.org) app, using the app
## Development
-To start, from the root of the monorepo:
+To start, from the root of the monorepo, issue the following commands in a shell session.
```shell
pnpm install
@@ -25,65 +26,93 @@ make backend-docker-start
## Deployment at Vercel
-
-We introduce an environment variable `API_SERVER_URL`.
-You need to create this environment variable in the Vercel deployment's control panel, specifying the URL where your backend API server is deployed, and the route where the API is located, as shown.
+For deploying your app at Vercel, you need to create the environment variable `API_SERVER_URL` in Vercel's deployment control panel, specifying the URL where your backend API server is deployed, and the route where the API is located, as shown.
```shell
API_SERVER_URL=https://my-server-DNS-name.tld/api
```
+For production deployments, you will need to force the deployment URL, otherwise you will have issues with CORS.
+To do so, set another environment variable for the production URL, `NEXT_PRODUCTION_URL`.
+This URL needs to be scheme-less, without `http` or `https`, and consist only of the domain name:
+
+```shell
+NEXT_PRODUCTION_URL=my-nextjs-production-DNS-name.tld
+```
+
### Application rewrite configuragtion
-To avoid issues with CORS and maintain the server counterpart private, our Next.js app should have a rewrite, configured as follows:
+To avoid issues with CORS and maintain the server counterpart private, your Next.js app should have a rewrite, configured as follows:
```jsx
const nextConfig = {
// Rewrite to the backend to avoid CORS
async rewrites() {
- const apiServerURL =
- process.env.API_SERVER_URL ||
- 'http://localhost:8080/Plone/%2B%2Bapi%2B%2B';
+ let apiServerURL, vhmRewriteRule;
+ if (
+ process.env.API_SERVER_URL &&
+ (process.env.NEXT_PRODUCTION_URL || process.env.NEXT_PUBLIC_VERCEL_URL)
+ ) {
+ // We are in Vercel
+ apiServerURL = process.env.API_SERVER_URL;
+ vhmRewriteRule = `/VirtualHostBase/https/${
+ process.env.NEXT_PRODUCTION_URL
+ ? // We are in the production deployment
+ process.env.NEXT_PRODUCTION_URL
+ : // We are in the preview deployment
+ process.env.NEXT_PUBLIC_VERCEL_URL
+ }%3A443/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot`;
+ } else if (process.env.API_SERVER_URL) {
+ // We are in development
+ apiServerURL = process.env.API_SERVER_URL;
+ vhmRewriteRule =
+ '/VirtualHostBase/http/localhost%3A3000/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot';
+ } else {
+ // We are in development and the API_SERVER_URL is not set, so we use a local backend
+ apiServerURL = 'http://localhost:8080';
+ vhmRewriteRule =
+ '/VirtualHostBase/http/localhost%3A3000/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot';
+ }
return [
{
source: '/\\+\\+api\\+\\+/:slug*',
destination:
- `${apiServerURL}/VirtualHostBase/https/${process.env.NEXT_PUBLIC_VERCEL_URL}%3A443/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot/:slug*`,
+ `${apiServerURL}${vhmRewriteRule}/:slug*`,
},
];
},
};
```
-Plone Client uses the `++api++` prefix as default, so we should create a redirect in our app pointing to the API server, but using Plone's traditional virtual host management configuration.
+Plone Client uses the `++api++` prefix as default, so you should create a redirect in your app pointing to the API server, but using Plone's traditional virtual host management configuration.
-Next.js rewrites are picky on the `destination` field, because its rewrite library does not support URLs with regular expression operators.
-Therefore, we can't use the usual `++api++` route for the rewrite.
-This will allow us to infer the current server URL—even in deployed branches and pull requests—without touching the rewrite rules.
-We will fallback to configure a `api` route in our reverse proxy of choice.
+Next.js rewrites are picky with the `destination` field, because its rewrite library does not support URLs with regular expression operators.
+Therefore, you can't use the usual `++api++` route for the rewrite.
+This will allow you to infer the current server URL—even in deployed branches and pull requests—without touching the rewrite rules.
+You will fallback to configure a `api` route in your reverse proxy of choice.
### Plone backend
You have to deploy the Plone backend elsewhere, since Vercel is serverless oriented.
-We need to set up the rewrite rule in Next.js's `rewrite` feature as shown in the previous section.
+You need to set up the rewrite rule in Next.js's `rewrite` feature as shown in the previous section.
-We will fallback to configure an `api` route in our reverse proxy of choice.
+You will fallback to configure an `api` route in your reverse proxy of choice.
-For example, if we use `traefik`:
+For example, if you use `traefik`:
```yaml
- ## VHM rewrite /api/ (Plone Next.js)
- - "traefik.http.middlewares.mw-backend-vhm-api.replacepathregex.regex=^/api($$|/.*)"
- ## We remove the incoming /api and just use the path
- - "traefik.http.middlewares.mw-backend-vhm-api.replacepathregex.replacement=$$1"
-
- ## /api router
- - traefik.http.routers.rt-backend-api.rule=Host(`my_server_DNS_name`) && PathPrefix(`/api`)
- - traefik.http.routers.rt-backend-api.entrypoints=https
- - traefik.http.routers.rt-backend-api.tls=true
- - traefik.http.routers.rt-backend-api.service=svc-backend
- - traefik.http.routers.rt-backend-api.middlewares=gzip,mw-backend-vhm-api
+## VHM rewrite /api/ (Plone Next.js)
+- "traefik.http.middlewares.mw-backend-vhm-api.replacepathregex.regex=^/api($$|/.*)"
+## We remove the incoming /api and just use the path
+- "traefik.http.middlewares.mw-backend-vhm-api.replacepathregex.replacement=$$1"
+
+## /api router
+- traefik.http.routers.rt-backend-api.rule=Host(`my_server_DNS_name`) && PathPrefix(`/api`)
+- traefik.http.routers.rt-backend-api.entrypoints=https
+- traefik.http.routers.rt-backend-api.tls=true
+- traefik.http.routers.rt-backend-api.service=svc-backend
+- traefik.http.routers.rt-backend-api.middlewares=gzip,mw-backend-vhm-api
```
## About this app
@@ -100,16 +129,18 @@ pnpm dev
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
-You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
+You can start editing the page by modifying `app/page.tsx`.
+The page auto-updates as you edit the file.
## Learn More
To learn more about Next.js, take a look at the following resources:
-- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
+- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and its API.
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
-You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
+You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/).
+Your feedback and contributions are welcome!
## Deploy on Vercel
diff --git a/apps/nextjs/next.config.mjs b/apps/nextjs/next.config.mjs
index f214d4f86b..2bc72a90f0 100644
--- a/apps/nextjs/next.config.mjs
+++ b/apps/nextjs/next.config.mjs
@@ -1,4 +1,4 @@
-import path from 'path';
+// import path from 'path';
/** @type {import('next').NextConfig} */
const nextConfig = {
@@ -21,17 +21,26 @@ const nextConfig = {
// Rewrite to the backend to avoid CORS
async rewrites() {
let apiServerURL, vhmRewriteRule;
- if (process.env.API_SERVER_URL) {
- apiServerURL = process.env.API_SERVER_URL;
- vhmRewriteRule = `/VirtualHostBase/https/${process.env.NEXT_PUBLIC_VERCEL_URL}%3A443/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot`;
- } else if (
+ if (
process.env.API_SERVER_URL &&
- !process.env.NEXT_PUBLIC_VERCEL_URL
+ (process.env.NEXT_PRODUCTION_URL || process.env.NEXT_PUBLIC_VERCEL_URL)
) {
- throw new Error(
- 'API_SERVER_URL set and NEXT_PUBLIC_VERCEL_URL not present.',
- );
+ // We are in Vercel
+ apiServerURL = process.env.API_SERVER_URL;
+ vhmRewriteRule = `/VirtualHostBase/https/${
+ process.env.NEXT_PRODUCTION_URL
+ ? // We are in the production deployment
+ process.env.NEXT_PRODUCTION_URL
+ : // We are in the preview deployment
+ process.env.NEXT_PUBLIC_VERCEL_URL
+ }%3A443/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot`;
+ } else if (process.env.API_SERVER_URL) {
+ // We are in development
+ apiServerURL = process.env.API_SERVER_URL;
+ vhmRewriteRule =
+ '/VirtualHostBase/http/localhost%3A3000/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot';
} else {
+ // We are in development and the API_SERVER_URL is not set, so we use a local backend
apiServerURL = 'http://localhost:8080';
vhmRewriteRule =
'/VirtualHostBase/http/localhost%3A3000/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot';
diff --git a/apps/nextjs/src/app/config.ts b/apps/nextjs/src/app/config.ts
index 2bbdde6a9a..8d0b440630 100644
--- a/apps/nextjs/src/app/config.ts
+++ b/apps/nextjs/src/app/config.ts
@@ -1,15 +1,26 @@
import config from '@plone/registry';
+import type { ConfigType } from '@plone/registry';
import { slate } from '@plone/blocks';
import { blocksConfig } from '@plone/blocks';
-const settings = {
- apiPath: process.env.NEXT_PUBLIC_VERCEL_URL
- ? // Vercel does not prepend the schema to the NEXT_PUBLIC_VERCEL_URL automatic env var
- `https://${process.env.NEXT_PUBLIC_VERCEL_URL}`
- : 'http://localhost:3000',
+const settings: Partial = {
slate,
};
+if (process.env.NEXT_PUBLIC_VERCEL_URL) {
+ // This app is at Vercel
+ if (process.env.NEXT_PRODUCTION_URL) {
+ // This app is in a production deployment, so set the apiPath to the production URL
+ settings.apiPath = process.env.NEXT_PRODUCTION_URL;
+ } else {
+ // This app is in a preview deployment, so set the apiPath to the Vercel URL
+ settings.apiPath = `https://${process.env.NEXT_PUBLIC_VERCEL_URL}`;
+ }
+} else {
+ // This app is in development, so set the apiPath to localhost
+ settings.apiPath = 'http://localhost:3000/';
+}
+
// @ts-expect-error Improve typings
config.set('settings', settings);
diff --git a/docs/source/addons/i18n.md b/docs/source/addons/i18n.md
index 4ae542e544..9df832da70 100644
--- a/docs/source/addons/i18n.md
+++ b/docs/source/addons/i18n.md
@@ -23,10 +23,10 @@ Your add-on has a `locales` folder with a `.pot` file.
└── volto.po
```
-1. Run `yarn i18n` in the context of your add-on.
+1. Run `pnpm i18n` in the context of your add-on.
1. Go to each `.po` file in your `locales` folder, and write the translations for each translation literal.
-In the context of your project, run `yarn i18n` to merge the add-on translations with the ones of your project.
+In the context of your project, run `pnpm i18n` to merge the add-on translations with the ones of your project.
## Override translations
@@ -34,4 +34,4 @@ In the context of your project, run `yarn i18n` to merge the add-on translations
If you have multiple add-ons installed in your project, the translations are loaded in the order your add-ons are listed in `package.json`.
If two add-ons provide different translations for the same message, then the last defined add-on wins.
-When running `yarn i18n` in the context of your project, the project's own locales are processed last and can override translations from any add-on.
+When running `pnpm i18n` in the context of your project, the project's own locales are processed last and can override translations from any add-on.
diff --git a/docs/source/addons/theme.md b/docs/source/addons/theme.md
index d14d559140..99251fd370 100644
--- a/docs/source/addons/theme.md
+++ b/docs/source/addons/theme.md
@@ -33,7 +33,7 @@ or add a key in your `package.json` project:
or via a `THEME` variable:
```shell
-THEME='volto-my-theme' yarn start
+THEME='volto-my-theme' pnpm start
```
2. Create a directory `src/theme` in your add-on, then add this file `theme.config`, replacing `` with your add-on name:
diff --git a/docs/source/backend/index.md b/docs/source/backend/index.md
index 4292411c35..614be62855 100644
--- a/docs/source/backend/index.md
+++ b/docs/source/backend/index.md
@@ -34,9 +34,9 @@ Block transformers
Search and indexing integration
: By providing the right adapters, you can extract searchable text from blocks.
-Client Reducer Content Transforms
+Client reducer content transforms
: These transforms run in the client when the response from the backend is received.
- These are useful when you need to modify on the fly the response from the backend, in case you need to make an amendment of the backend data, like a data migration of any kind.
+ These are useful when you need to modify the response from the backend on-the-fly for amending the backend data, such as a data migration of any kind.
You can register a utility that mutates the response at your convenience.
```ts
@@ -50,7 +50,7 @@ Client Reducer Content Transforms
});
```
- The `type` of the utility needs to be `transform` and the dependencies set to `{reducer: 'content'}`.
+ The `type` of the utility needs to be `transform`, and the `dependencies` set to `{reducer: 'content'}`.
## Proxied backend routes
diff --git a/docs/source/client/quick-start.md b/docs/source/client/quick-start.md
index dd3174a9b7..ad62cd181f 100644
--- a/docs/source/client/quick-start.md
+++ b/docs/source/client/quick-start.md
@@ -21,9 +21,11 @@ These functions can be used in other use cases like command line helpers, script
To install the Javascript Plone client run the following command:
```shell
-yarn add @plone/client
+pnpm add @plone/client
```
+or use your package manager of choice.
+
## `ploneClient` entry point
The main artifact that the client provides is the `ploneClient` entry point.
diff --git a/docs/source/configuration/environmentvariables.md b/docs/source/configuration/environmentvariables.md
index a63c6144f1..701ce5c7c2 100644
--- a/docs/source/configuration/environmentvariables.md
+++ b/docs/source/configuration/environmentvariables.md
@@ -21,7 +21,7 @@ All configurable environment variables work at runtime, not only at build time.
You could, for example, build your Volto application, then start it in production with the `RAZZLE_API_PATH` environment variable.
```shell
-yarn build && RAZZLE_API_PATH=https://plone.org yarn start:prod
+pnpm build && RAZZLE_API_PATH=https://plone.org pnpm start:prod
```
This brings you a lot of power since you don't have to rebuild on every configuration change.
@@ -40,7 +40,7 @@ You can also generate builds on your continuous integration, then deploy them an
However, if you are not able to upgrade the packages `plone.restapi` (8.12.1 or greater) and `plone.rest` (2.0.0a1 or greater) in the backend, you can adjust your web server configuration and use the `RAZZLE_LEGACY_TRAVERSE` flag.
```shell
- RAZZLE_LEGACY_TRAVERSE=true yarn start:prod
+ RAZZLE_LEGACY_TRAVERSE=true pnpm start:prod
```
`VOLTO_ROBOTSTXT`
@@ -50,7 +50,7 @@ You can also generate builds on your continuous integration, then deploy them an
```shell
VOLTO_ROBOTSTXT="User-agent: *
- Disallow: /" yarn start
+ Disallow: /" pnpm start
```
```{note}
@@ -67,19 +67,19 @@ You can also generate builds on your continuous integration, then deploy them an
It helps you identify problems with a customization that does not work as you expect.
```shell
- DEBUG=volto:shadowing yarn start
+ DEBUG=volto:shadowing pnpm start
```
`i18n` enables the log of missing internationalization messages in the console.
```shell
- DEBUG=volto:i18n yarn start
+ DEBUG=volto:i18n pnpm start
```
`*` enables logging everywhere it exists in Volto.
```shell
- DEBUG=volto:* yarn start
+ DEBUG=volto:* pnpm start
```
`DEBUG_ADDONS_LOADER`
@@ -107,34 +107,34 @@ You can also generate builds on your continuous integration, then deploy them an
`ADDONS` can be used to temporarily add an add-on to your build for testing purposes.
```shell
- yarn add volto-slate
- ADDONS=volto-slate:asDefault yarn start
+ pnpm add @kitconcept/volto-light-theme
+ ADDONS=@kitconcept/volto-light-theme pnpm start
```
`ADDONS` can also be used to temporarily enable a feature or a set of customizations.
```shell
# given a folder './packages/coresandbox', like in vanilla Volto
- ADDONS=coresandbox:multilingualFixture yarn start
+ ADDONS=coresandbox:multilingualFixture pnpm start
```
If you need to specify several add-ons, separate them with a semicolon (`;`):
```shell
- ADDONS="test-addon;test-addon2" yarn start
+ ADDONS="test-addon;test-addon2" pnpm start
```
-
+
You can specify profiles for installation:
-
+
```shell
- ADDONS="test-addon:profile1;test-addon2:profile2" yarn start
+ ADDONS="test-addon:profile1;test-addon2:profile2" pnpm start
```
The following code snippets demonstrate how to configure add-ons.
First in `package.json`:
-
+
```json
"addons": [
"@kitconcept/volto-blocks-grid"
@@ -152,8 +152,8 @@ You can also generate builds on your continuous integration, then deploy them an
And finally using `ADDONS`:
```shell
- yarn add volto-slate
- ADDONS=volto-slate:asDefault yarn start
+ pnpm add volto-slate
+ ADDONS=volto-slate:asDefault pnpm start
```
As a result, your app will load the add-ons in the following order:
@@ -165,14 +165,14 @@ You can also generate builds on your continuous integration, then deploy them an
```{important}
The `ADDONS` key is a Volto specific configuration.
Simply setting `ADDONS` doesn't download the JavaScript package.
- This has to be covered another way, by either installing the add-on package (with `yarn add`), or loading it as a development package with `mrs-developer`.
+ This has to be covered another way, by either installing the add-on package (with `pnpm add`), or loading it as a development package with `mrs-developer`.
```
`BUILD_DIR`
This is a runtime-only environment variable that directs the build to run Volto from a specific location, other than the default folder `build`.
```shell
- yarn
+ pnpm install
BUILD_DIR=dist node dist/server.js
```
@@ -182,7 +182,7 @@ You can also generate builds on your continuous integration, then deploy them an
It can be relative to the current project or absolute.
```shell
- VOLTOCONFIG=../../volto.config.js yarn start
+ VOLTOCONFIG=../../volto.config.js pnpm start
```
````
diff --git a/docs/source/configuration/internalproxy.md b/docs/source/configuration/internalproxy.md
index ec8612fe65..dde6c9b369 100644
--- a/docs/source/configuration/internalproxy.md
+++ b/docs/source/configuration/internalproxy.md
@@ -61,7 +61,7 @@ export const settings = {
or use the environment variable:
```bash
-RAZZLE_DEV_PROXY_API_PATH=http://localhost:8081/mysite yarn start
+RAZZLE_DEV_PROXY_API_PATH=http://localhost:8081/mysite pnpm start
```
This redefines the request path from the internal proxy of the server side Node.js process to the Plone content backend API, but leaves the frontend Volto process making all content requests to `http://localhost:3000/++api++/`.
diff --git a/docs/source/configuration/volto-config-js.md b/docs/source/configuration/volto-config-js.md
index a8e4c4faa7..8bb16ce951 100644
--- a/docs/source/configuration/volto-config-js.md
+++ b/docs/source/configuration/volto-config-js.md
@@ -70,11 +70,11 @@ This environment variable allows you to specify a custom location for {file}`vol
It can be relative to the current project or absolute.
```shell
-VOLTOCONFIG=../../volto.config.js yarn start
+VOLTOCONFIG=../../volto.config.js pnpm start
```
```shell
-VOLTOCONFIG=$(pwd)/volto.config.js yarn start
+VOLTOCONFIG=$(pwd)/volto.config.js pnpm start
```
You can also set it from the root of the monorepo:
diff --git a/docs/source/configuration/zero-config-builds.md b/docs/source/configuration/zero-config-builds.md
index 7b4c396075..5ac09d7d87 100644
--- a/docs/source/configuration/zero-config-builds.md
+++ b/docs/source/configuration/zero-config-builds.md
@@ -17,7 +17,7 @@ In the past (before Volto 13), Volto was configured in build time using several
environment variables, commonly supplied via the command line, such as the following:
```shell
-PORT=11001 RAZZLE_API_PATH=https://plone.org/api yarn build`
+PORT=11001 RAZZLE_API_PATH=https://plone.org/api pnpm build`
```
and since Razzle is an isomorphic application, some of these values passed on build time, were
diff --git a/docs/source/contributing/acceptance-tests.md b/docs/source/contributing/acceptance-tests.md
index ea9b66ec1f..c74bd9d4cb 100644
--- a/docs/source/contributing/acceptance-tests.md
+++ b/docs/source/contributing/acceptance-tests.md
@@ -72,7 +72,7 @@ There is a directory per spec.
This directory is hot reloaded with your changes as you write the tests.
```{seealso}
-[Cypress documentation](https://docs.cypress.io/guides/overview/why-cypress)
+[Cypress documentation](https://docs.cypress.io/app/get-started/why-cypress)
```
diff --git a/docs/source/contributing/linting.md b/docs/source/contributing/linting.md
index cd291fd556..feea6f0307 100644
--- a/docs/source/contributing/linting.md
+++ b/docs/source/contributing/linting.md
@@ -76,7 +76,7 @@ From here we will have access to the commands to check for errors and to fix the
You can run the pnpm `eslint`, `prettier`, and `stylelint` commands from the Volto package folder:
```shell
-pnpm lint
+pnpm lint
pnpm prettier
pnpm stylelint
```
@@ -89,8 +89,13 @@ pnpm prettier:fix
pnpm stylelint:fix
```
-````{note}
-The same commands can be found in your Volto add-on projects, as seen in the [`package.json.tpl`](https://github.com/plone/volto/blob/main/packages/generator-volto/generators/app/templates/package.json.tpl#L10) file.
+```{versionadded} Volto 18.0.0-alpha.43
+[Cookieplone](https://github.com/plone/cookieplone) is now the recommended way to develop Volto projects, using it as a boilerplate generator.
+Cookieplone uses the frontend code installed using `pnpm` instead of `yarn`.
+```
+
+````{deprecated} Volto 18.0.0
+The same commands can be found in your Volto legacy add-ons and projects created with `@plone/generator-volto`, as seen in the [`package.json.tpl`](https://github.com/plone/volto/blob/main/packages/generator-volto/generators/app/templates/package.json.tpl#L10) file.
You will use similar commands to run the linting commands, but with `yarn` instead of `pnpm`:
diff --git a/docs/source/contributing/testing.md b/docs/source/contributing/testing.md
index a1244c9496..37f241151d 100644
--- a/docs/source/contributing/testing.md
+++ b/docs/source/contributing/testing.md
@@ -66,10 +66,9 @@ This makes it faster and easier to test code changes.
In GitHub workflows or for testing add-ons, it's useful to use an alternate Jest configuration.
Volto provides a way to do so using a file {file}`jest.config.js`, or pointing the test runner to a file of your choice, using the `RAZZLE_JEST_CONFIG` environment variable.
-Because the Volto add-ons and Volto add-ons projects still use `yarn`, you must run the test command using `yarn` instead of `pnpm`.
```shell
-RAZZLE_JEST_CONFIG=my-custom-jest-config.js yarn test
+RAZZLE_JEST_CONFIG=my-custom-jest-config.js pnpm test
```
```{note}
@@ -85,7 +84,7 @@ Sometimes you need to enable different configurations and enable optional compon
You can use the `ADDONS` environment variable to define them.
```bash
-ADDONS=test-addon,test-addon2 yarn start
+ADDONS=test-addon,test-addon2 pnpm start
```
See {doc}`../configuration/environmentvariables` for more information.
diff --git a/docs/source/deploying/seamless-mode.md b/docs/source/deploying/seamless-mode.md
index a678728a73..0173bdbaf3 100644
--- a/docs/source/deploying/seamless-mode.md
+++ b/docs/source/deploying/seamless-mode.md
@@ -48,13 +48,13 @@ All the environment variables that are configurable now work at runtime, not at
Before Volto 13, you'd do:
```bash
-RAZZLE_API_PATH=https://plone.org yarn build && yarn start:prod
+RAZZLE_API_PATH=https://plone.org pnpm build && pnpm start:prod
```
From Volto 13 onwards, you can now do:
```bash
-yarn build && RAZZLE_API_PATH=https://plone.org yarn start:prod
+pnpm build && RAZZLE_API_PATH=https://plone.org pnpm start:prod
```
````
@@ -130,7 +130,7 @@ server {
error_log /dev/stdout;
# [seamless mode] Recommended as default configuration, using seamless mode new plone.rest traversal
- # yarn build && yarn start:prod
+ # pnpm build && pnpm start:prod
location ~ /\+\+api\+\+($|/.*) {
rewrite ^/\+\+api\+\+($|/.*) /VirtualHostBase/http/myservername.org/Plone/++api++/VirtualHostRoot/$1 break;
proxy_pass http://backend;
@@ -138,7 +138,7 @@ server {
# Legacy deployment example, using RAZZLE_LEGACY_TRAVERSE Volto won't append ++api++ automatically
# Recommended only if you can't upgrade to latest `plone.restapi` and `plone.rest`
- # yarn build && RAZZLE_API_PATH=http://myservername.org/api RAZZLE_LEGACY_TRAVERSE=true yarn start:prod
+ # pnpm build && RAZZLE_API_PATH=http://myservername.org/api RAZZLE_LEGACY_TRAVERSE=true pnpm start:prod
# location ~ /api($|/.*) {
# rewrite ^/api($|/.*) /VirtualHostBase/http/myservername.org/Plone/VirtualHostRoot/_vh_api$1 break;
# proxy_pass http://backend;
diff --git a/docs/source/deploying/sentry.md b/docs/source/deploying/sentry.md
index f92ba34ecc..4266ffd4b8 100644
--- a/docs/source/deploying/sentry.md
+++ b/docs/source/deploying/sentry.md
@@ -82,7 +82,7 @@ SENTRY_AUTH_TOKEN=foo \
SENTRY_ORG=my_organization \
SENTRY_PROJECT=new_project \
SENTRY_RELEASE=2.0.0 \
-SENTRY_DSN=https://boo@sentry.com/1 yarn build
+SENTRY_DSN=https://boo@sentry.com/1 pnpm build
node build/server.js
```
@@ -265,7 +265,7 @@ SENTRY_PROJECT=new_project
SENTRY_RELEASE=2.0.0
SENTRY_DSN=https://boo@sentry.com/1
SENTRY_FRONTEND_CONFIG='{"tags":{"site":"www.test.com","app":"test_app"},"extras":{"logger":"javascript-frontend", "release":"1.4.1"}}'
-SENTRY_BACKEND_CONFIG='{"tags":{"site":"www.test.com","app":"test_app"} yarn build
+SENTRY_BACKEND_CONFIG='{"tags":{"site":"www.test.com","app":"test_app"} pnpm build
node build/server.js
```
diff --git a/docs/source/deploying/simple.md b/docs/source/deploying/simple.md
index 1215cb3cd5..31b3894a3e 100644
--- a/docs/source/deploying/simple.md
+++ b/docs/source/deploying/simple.md
@@ -12,7 +12,7 @@ myst:
Volto is a Node.js application that runs on your machine/server and listens to a port. Once you are ready to deploy it, you should build it running:
```bash
-$ yarn build
+$ pnpm build
```
The Volto configuration determines the external URL Volto will be served, so if you just issue this command, the build will get that values and build an static bundle with that values (PORT=3000, API_PATH=http://localhost:8080/Plone).
@@ -20,13 +20,13 @@ The Volto configuration determines the external URL Volto will be served, so if
In order to make Volto work on a server under an specific DNS name, you must parametrize the build like:
```bash
-$ PORT=volto_node_process_port RAZZLE_API_PATH=https://mywebsite.com/api yarn build
+$ PORT=volto_node_process_port RAZZLE_API_PATH=https://mywebsite.com/api pnpm build
```
After the build, the bundle is created in `/build` folder, then in order to launch your application you can run:
```bash
-$ yarn start:prod
+$ pnpm start:prod
```
or
```bash
diff --git a/docs/source/development/creating-project.md b/docs/source/development/creating-project.md
index 5052533f81..f5ef93fefc 100644
--- a/docs/source/development/creating-project.md
+++ b/docs/source/development/creating-project.md
@@ -9,60 +9,15 @@ myst:
# Create a Volto project without a backend
-This document shows how to create a Volto project with the frontend only when you have your own existing backend, such as Plone {term}`Classic UI`, {term}`Nick`, or {term}`Guillotina`.
+```{versionadded} Volto 18.0.0-alpha.43
+```
+
+[Cookieplone](https://github.com/plone/cookieplone) is now the recommended way to develop Volto projects, using it as a boilerplate generator.
+Even if you don't need the backend, you can create a Plone project, then use only the {file}`frontend` folder for your purposes.
+As a bonus, it will contain the means for deploying your project.
```{seealso}
To create a full Plone project with both frontend and backend, see {doc}`plone:install/create-project` instead.
To contribute to Volto, see {doc}`../contributing/developing-core`.
```
-
-For using Volto for a project—in other words, use Volto as a library—you should use Volto's project generator `@plone/generator-volto`.
-It's a boilerplate project generator based on Yeoman that will provide you with the basic files and folder structure to bootstrap a Volto site.
-In addition to bootstrapping stand-alone Volto projects, it can also bootstrap Volto add-ons.
-
-1. Open a terminal and execute:
-
- ```shell
- npm install -g yo @plone/generator-volto
- # Install the latest and stable release of Volto with the following command
- yo @plone/volto
- # or you can install the "canary" release, including any alpha release
- yo @plone/volto --canary
- # or you can install any specific released version
- yo @plone/volto --volto=15.0.0
- # you can even pass a GitHub repo and specific branch
- yo @plone/volto --volto=plone/volto#16.0.0
- # you can bootstrap with add-ons
- yo @plone/volto --addon=volto-form-block
- ```
-
-2. Answer the questions when prompted, and provide the name of the new app (folder) to be created.
- For the sake of this documentation, use `myvoltoproject` as the project name.
-
- ````{note}
- You can run the generator with parameters to tailor your requirements.
-
- ```shell
- yo @plone/volto --help
- ```
-
- ```{seealso}
- [`@plone/generator-volto` `README.md`](https://github.com/plone/volto/blob/main/packages/generator-volto/README.md).
- ```
- ````
-
-3. Change your working directory to the newly created folder `myvoltoproject` (or whatever name you entered).
-
- ```shell
- cd myvoltoproject
- ```
-
-4. `@plone/generator-volto` installed the dependencies for you.
- Start the project.
-
- ```shell
- yarn start
- ```
-
- This starts the development server, which compiles the project code, and when done, it serves the app at http://localhost:3000.
diff --git a/docs/source/development/environment-variables.md b/docs/source/development/environment-variables.md
index 6b8b79efc3..78dc734177 100644
--- a/docs/source/development/environment-variables.md
+++ b/docs/source/development/environment-variables.md
@@ -33,7 +33,7 @@ docker run -it --rm -p 55001:8080 -e SITE=Plone -e ADDONS='plone.restapi==8.20.0
```
```shell
-RAZZLE_DEV_PROXY_API_PATH='http://localhost:55001/Plone' yarn start
+RAZZLE_DEV_PROXY_API_PATH='http://localhost:55001/Plone' pnpm start
```
Let's say that you do have it in a customized site id: http://localhost:55001/myplonesite
@@ -43,7 +43,7 @@ docker run -it --rm -p 55001:8080 -e SITE=myplonesite -e ADDONS='plone.restapi==
```
```shell
-RAZZLE_DEV_PROXY_API_PATH='http://localhost:55001/myplonesite' yarn start
+RAZZLE_DEV_PROXY_API_PATH='http://localhost:55001/myplonesite' pnpm start
```
### Debug an external site (provided you have access to it)
@@ -55,7 +55,7 @@ This is an advanced feature, and needs understanding of what you are doing and w
Let's say you want to debug a deployed site in production, but the build does not allow you to look deeper into the tracebacks. You could bootstrap a frontend in your machine, and point it to the production server, combining environment variables like:
```
-RAZZLE_DEV_PROXY_API_PATH=https://2021.ploneconf.org RAZZLE_PROXY_REWRITE_TARGET=https://2021.ploneconf.org/++api++ yarn start
+RAZZLE_DEV_PROXY_API_PATH=https://2021.ploneconf.org RAZZLE_PROXY_REWRITE_TARGET=https://2021.ploneconf.org/++api++ pnpm start
```
This has the drawback that could be that the proxy does not work well with the proxied SSL connection.
@@ -63,7 +63,7 @@ This has the drawback that could be that the proxy does not work well with the p
If you have access (via tunnel) to the port of the deployed backend is even more easier:
```
-RAZZLE_DEV_PROXY_API_PATH=http://2021.ploneconf.org:8080/Plone yarn start
+RAZZLE_DEV_PROXY_API_PATH=http://2021.ploneconf.org:8080/Plone pnpm start
```
This will use the internal proxy to access the backend, bypassing CORS.
diff --git a/docs/source/development/i18n.md b/docs/source/development/i18n.md
index 01072108de..f9f2f4dd03 100644
--- a/docs/source/development/i18n.md
+++ b/docs/source/development/i18n.md
@@ -17,7 +17,7 @@ This chapter describes the most common use cases for internationalization when d
## Process and file structure overview
Volto uses the library [react-intl](https://www.npmjs.com/package/react-intl) to provide translations for any potential language.
-Anything in the [official documentation of react-intl](https://formatjs.io/docs/react-intl/) also applies to Volto.
+Anything in the [official documentation of react-intl](https://formatjs.github.io/docs/react-intl/) also applies to Volto.
The workflow for creating *new* translatable text strings is as follows:
@@ -79,13 +79,13 @@ function HelloWorld(props) {
The identifier `hello_world` is then commonly used across all the translations.
There are more features available, such as using placeholders.
-See the documentation for all features in the [`FormattedMessage` component](https://formatjs.io/docs/react-intl/components#formattedmessage).
+See the documentation for all features in the [`FormattedMessage` component](https://formatjs.github.io/docs/react-intl/components#formattedmessage).
### Translate attributes
As `FormatMessage` is only suitable for creating text within HTML elements, it cannot be used for translating individual attributes.
-But with the method [`formatMessage`](https://formatjs.io/docs/react-intl/api/#formatmessage), there is another way to translate primitive strings.
+But with the method [`formatMessage`](https://formatjs.github.io/docs/react-intl/api/#formatmessage), there is another way to translate primitive strings.
This approach can be best explained with an example.
Assume you have a component called `TeaserImage` which contains an image that has, for accessibility reasons, the `alt` attribute.
@@ -97,7 +97,7 @@ To translate the `alt` attribute, you have to do the following steps:
import { defineMessages, injectIntl, intlShape } from 'react-intl';
```
-2. Define a message (or more) via [`defineMessages`](https://formatjs.io/docs/react-intl/api/#definemessagesdefinemessage):
+2. Define a message (or more) via [`defineMessages`](https://formatjs.github.io/docs/react-intl/api/#definemessagesdefinemessage):
```js
const messages = defineMessages({
@@ -145,7 +145,7 @@ Volto provides an i18n extraction script to get all translatable strings from yo
You can invoke this script with the following command.
```sh
-yarn i18n
+pnpm i18n
```
This will generate the following output:
@@ -181,7 +181,7 @@ defineMessages({
});
```
-Then run `yarn i18n`.
+Then run `pnpm i18n`.
You will find the translation ready to override in your `locales` directory, such as `locales/de/LC_MESSAGES/volto.po`.
```text
@@ -190,7 +190,7 @@ msgid "Back"
msgstr "My overridden translation"
```
-After you set the override, then run `yarn i18n` again to create the `de.json` translation files.
+After you set the override, then run `pnpm i18n` again to create the `de.json` translation files.
Restart Volto to see the changes applied.
diff --git a/docs/source/development/ie11compat.md b/docs/source/development/ie11compat.md
deleted file mode 100644
index 16735ed7ae..0000000000
--- a/docs/source/development/ie11compat.md
+++ /dev/null
@@ -1,64 +0,0 @@
----
-myst:
- html_meta:
- "description": "Legacy browser support with polyfills, babel-env, and pre- and post-transpiling"
- "property=og:description": "Legacy browser support with polyfills, babel-env, and pre- and post-transpiling"
- "property=og:title": "Legacy Browser Support (IE11 compatibility)"
- "keywords": "Volto, Plone, frontend, React, IE11 compatibility, polyfills, legacy browser support"
----
-
-# Legacy Browser Support (IE11 compatibility)
-
-There are some caveats if we still want to target IE11 as supported browser.
-
-```{important}
-This documentation is orientative. Volto does NOT support legacy or vendor deprecated browsers (as in IE11).
-```
-
-## Version pinning
-
-These package versions should be pinned to this especific versions, unless
-their code or dependencies have some es6 only compatible, because their
-maintainers mainly target the Node.js world.
-
-* "query-string": "4.1.0"
-* "superagent": "3.8.2"
-
-## Polyfills
-
-Then in the project that should target it, these changes are required:
-
-add as a dependency `@babel/polyfill`.
-
- yarn add @babel/polyfill
-
-and in `src/client.jsx`:
-
-```js
-import '@babel/polyfill';
-```
-
-```{seealso}
-See https://babeljs.io/docs/babel-polyfill for more updated information
-```
-
-## babel-env
-
-Razzle supports `@babel/preset-env`, that supports including `browserlist` in
-`package.json`. So you can add this to `package.json`:
-
-```json
- "browserslist": [
- "last 2 version",
- "IE 11"
- ],
-```
-
-This supports the query specific DSL for `browserlist` targeting the browsers
-that you need to add.
-
-## Pre-transpiling
-
-Some packages in `node_modules` are ES6 only, for some older browsers, you might want to add a pre (or post) transpiling. There's a script `pre-build-transpiling.js` (Volto root folder) that might help you with it. Also this command line might help:
-
- ./node_modules/.bin/babel --presets="@babel/env" XXX --out-dir XXX
diff --git a/docs/source/development/index.md b/docs/source/development/index.md
index 90c28191f8..a1e5952999 100644
--- a/docs/source/development/index.md
+++ b/docs/source/development/index.md
@@ -36,5 +36,4 @@ pluggables
widget
how-to-restrict-blocks
color-picker-widget
-ie11compat
```
diff --git a/docs/source/development/lazyload.md b/docs/source/development/lazyload.md
index 668a7190b8..7a04d373cf 100644
--- a/docs/source/development/lazyload.md
+++ b/docs/source/development/lazyload.md
@@ -36,7 +36,7 @@ You can find the complete `@loadable/component` documentation here: https://load
You can check the code splitting state by using the included bundle analyzer:
```shell
-yarn analyze
+pnpm --filter=volto analyze
```
A browser will open with the bundle inspector.
diff --git a/docs/source/index.md b/docs/source/index.md
index ef65b2294f..2b47ebce16 100644
--- a/docs/source/index.md
+++ b/docs/source/index.md
@@ -1,18 +1,18 @@
---
myst:
html_meta:
- "description": "Volto is the React-based frontend for the Plone CMS. It is the default UI for the Plone 6 release."
- "property=og:description": "Volto is the React-based frontend for the Plone CMS. It is the default UI for the Plone 6 release."
- "property=og:title": "Frontend"
- "keywords": "Volto, Plone, frontend, React"
+ "description": "The Volto user interface (UI) is a React-based frontend for the Plone CMS. It is the default user interface starting with the release of Plone 6."
+ "property=og:description": "The Volto user interface (UI) is a React-based frontend for the Plone CMS. It is the default user interface starting with the release of Plone 6."
+ "property=og:title": "Volto UI"
+ "keywords": "Volto, Plone, frontend, user interface, React"
---
(volto-index-label)=
-# Frontend
+# Volto UI
-Volto is a React-based frontend for the [Plone CMS](https://plone.org).
-It is the default frontend starting with the Plone 6 release.
+The Volto user interface (UI) is a React-based frontend for the [Plone content management system](https://plone.org).
+It is the default user interface starting with the release of Plone 6.
Volto provides an attractive proposition: integration with the modern frontend development world, access to the huge ecosystem of React libraries and add-ons, combined with the ability to use the mature Plone CMS backend as a development platform.
@@ -38,7 +38,7 @@ An integrator is someone who uses Volto to build a project.
### Users
-A user of Volto is someone who edits content in a Plone content management system with Volto as the frontend.
+A user of Volto is someone who edits content in a Plone content management system with Volto as the user interface.
- {doc}`user-manual/index` provides information about how to manage content in a Plone site.
diff --git a/docs/source/upgrade-guide/index.md b/docs/source/upgrade-guide/index.md
index 321510c672..60de994f58 100644
--- a/docs/source/upgrade-guide/index.md
+++ b/docs/source/upgrade-guide/index.md
@@ -522,6 +522,142 @@ The `react/jsx-key` rule has been enabled in ESlint for catching missing `key` i
You might catch some violations in your project or add-on code after running ESlint.
Adding the missing `key` property whenever the violation is reported will fix it.
+### Deprecation notices for Volto 18
+
+#### `@plone/generator-volto`
+
+```{deprecated} Volto 18.0.0
+```
+
+The Node.js-based Volto project boilerplate generator is deprecated from Volto 18 onwards.
+After the release of Volto 18, it will be marked as deprecated, archived, and it won't receive any further updates.
+Although you can still migrate your project to Volto 18 using this boilerplate, you should migrate to using [Cookieplone](https://github.com/plone/cookieplone).
+
+##### Alternative
+
+Migrate your project to use a [Cookieplone](https://github.com/plone/cookieplone) boilerplate.
+
+#### Volto project configurations
+
+```{deprecated} Volto 18.0.0
+```
+
+Configuring Volto using {file}`src/config.js` at the project level is deprecated in Volto 18, and will be removed in Volto 19.
+
+```{seealso}
+See https://github.com/plone/volto/issues/6396 for details.
+```
+
+##### Alternative
+
+You should configure your projects in a policy add-on.
+You can move your project to use [Cookieplone](https://github.com/plone/cookieplone) which provides the necessary boilerplate for it.
+
+#### Semantic UI
+
+```{deprecated} Volto 18.0.0
+```
+
+The Semantic UI library is not maintained anymore, and will be removed in Plone 7.
+You should no longer use Semantic UI in add-ons and projects.
+
+```{seealso}
+Related PLIPs:
+
+- https://github.com/plone/volto/issues/6321
+- https://github.com/plone/volto/issues/6323
+```
+
+##### Alternatives
+
+You can use any supported component framework of your choice for implementing new components, especially in the public theme side.
+If you create new widgets or components for the CMSUI—in other words, the non-public side—you should use the [`@plone/components`](https://github.com/plone/volto/tree/main/packages/components) library as an alternative.
+Even though it's still in the development phase, it will be completed in the next few months, and will be supported in the future.
+
+#### `lodash` library
+
+```{deprecated} Volto 18.0.0
+```
+
+`lodash` is deprecated in Volto 18, and will be removed in Plone 7.
+
+`lodash` has not received any updates since 2021.
+It has performance issues from bloated bundles and it's not prepared for ESM.
+Lots of `lodash` utility helpers can be replaced with vanilla ES.
+These issues cause concern about its future maintainability.
+
+In place of `lodash`, Plone 7 will use both the `lodash-es` library, which is ESM ready, and modern vanilla ES alternatives whenever possible.
+
+##### Alternatives
+
+```{seealso}
+The following links suggest alternatives to `lodash`.
+
+- https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore
+- https://javascript.plainenglish.io/you-dont-need-lodash-how-i-gave-up-lodash-693c8b96a07c
+
+If you still need some of the utilities in `lodash` and cannot use vanilla ES, you can use `lodash-es` instead.
+```
+
+#### `@loadable/component` and Volto `Loadables` framework
+
+```{deprecated} Volto 18.0.0
+```
+
+`@loadable/component` and the Volto `Loadables` framework is deprecated in Volto 18, and will be removed from Plone 7.
+It's a Webpack-only library, and it does not have Vite plugin support.
+Since React 18, this library is no longer necessary, as it has the initial implementation of the "concurrent mode".
+React 19 will further improve it and add more features around it.
+
+##### Alternatives
+
+Use plain React 18 lazy load features and its idioms for lazy load components.
+
+```jsx
+const myLazyComponent = lazy(()=> import('@plone/volto/components/theme/MyLazyComponent/MyLazyComponent'))
+
+const RandomComponent = (props) => (
+
+
+
+)
+```
+
+There's no support for pre-loading or lazy loading entire libraries as in `@loadable/component`.
+With the removal of barrel imports files, as described in the next deprecation notice, it is now unnecessary.
+
+#### Removal of barrel import files
+
+```{deprecated} Volto 18.0.0
+```
+
+Volto previously used barrel imports, which are centralized files where other imports are re-exported, to improve the developer user experience.
+With barrel imports, a developer only needs to remember to import from the re-exported place, not the full path.
+
+Since the barrel imports directly import all the code, a lot of imports ended up in the same main chunk of code.
+It became a bad practice.
+Modern bundlers, such as Vite, rely upon the import path to determine whether to bundle code together or not, reducing the bundle size.
+
+The barrel imports must be removed to increase the natural number of chunks that Volto divides on—especially on routes—resulting in code splitting done the right and natural way.
+This forces us to rewrite all the imports everywhere—including core, projects, and add-ons—once we implement it.
+The barrel imports files include the following.
+
+- {file}`src/components/index.js`
+- {file}`src/helpers/index.js`
+- {file}`src/actions/index.js`
+
+##### Alternative
+
+Implement only direct imports in code, preparing now for the upcoming change.
+
+```diff
+-import { BodyClass } from '@plone/volto/helpers';
++import BodyClass from '@plone/volto/helpers/BodyClass/BodyClass';
+```
+
+Once this is implemented, a code modification will be provided for a smooth migration.
+
+
(volto-upgrade-guide-17.x.x)=
## Upgrading to Volto 17.x.x
@@ -743,7 +879,7 @@ This is because the overrides that `@testing-library/cypress` introduce can be r
Since there are some commands that can call exports in {file}`cypress/support/commands.js`, this import may be run more than once, and then it errors.
So you have to make sure that import is run only once while the tests are run.
-Check the official [Cypress Migration Guide](https://docs.cypress.io/guides/references/migration-guide) for more information.
+Check the official [Cypress Migration Guide](https://docs.cypress.io/app/references/migration-guide) for more information.
### New Image component
@@ -1135,7 +1271,7 @@ If you have already updated your configuration to use Cypress 10 or later in a p
It is possible that forcing your project to use older versions might still work with old configurations.
```{seealso}
-See https://docs.cypress.io/guides/references/migration-guide#Migrating-to-Cypress-version-10-0 for more information.
+See https://docs.cypress.io/app/references/migration-guide#Migrating-to-Cypress-100 for more information.
```
### The complete configuration registry is passed to the add-ons and the project configuration pipeline
diff --git a/packages/volto/locales/ca/LC_MESSAGES/volto.po b/packages/volto/locales/ca/LC_MESSAGES/volto.po
index 9c127313f2..9ad9f86d79 100644
--- a/packages/volto/locales/ca/LC_MESSAGES/volto.po
+++ b/packages/volto/locales/ca/LC_MESSAGES/volto.po
@@ -432,6 +432,11 @@ msgstr ""
msgid "Assignments"
msgstr ""
+#. Default: "Automatically"
+#: components/manage/Controlpanels/Aliases
+msgid "Automatically"
+msgstr ""
+
#. Default: "Available"
#: components/manage/Controlpanels/AddonsControlpanel
msgid "Available"
@@ -491,6 +496,11 @@ msgstr "Base de cerca"
msgid "Block"
msgstr "Bloc"
+#. Default: "Both"
+#: components/manage/Controlpanels/Aliases
+msgid "Both"
+msgstr ""
+
#. Default: "Both email address and password are case sensitive, check that caps lock is not enabled."
#: components/theme/Login/Login
msgid "Both email address and password are case sensitive, check that caps lock is not enabled."
@@ -1414,6 +1424,11 @@ msgstr ""
msgid "Event view"
msgstr "Esdeveniment"
+#. Default: "Example"
+#: components/manage/Controlpanels/Aliases
+msgid "Example"
+msgstr ""
+
#. Default: "Exclude from navigation"
#: components/manage/Contents/ContentsPropertiesModal
msgid "Exclude from navigation"
@@ -1525,6 +1540,7 @@ msgid "Files uploaded: {uploadedFiles}"
msgstr "Fitxers pujats: {uploadedFiles}"
#. Default: "Filter"
+#: components/manage/Controlpanels/Aliases
#: helpers/MessageLabels/MessageLabels
msgid "Filter"
msgstr ""
@@ -2185,6 +2201,11 @@ msgstr "Gestiona les traduccions per a {title}"
msgid "Manual"
msgstr ""
+#. Default: "Manually"
+#: components/manage/Controlpanels/Aliases
+msgid "Manually"
+msgstr ""
+
#. Default: "Manually or automatically added?"
#: components/manage/Controlpanels/Aliases
msgid "Manually or automatically added?"
@@ -4584,6 +4605,11 @@ msgstr "quan"
msgid "event_where"
msgstr "On?"
+#. Default: "/example"
+#: components/manage/Controlpanels/Aliases
+msgid "examplePath"
+msgstr ""
+
#. Default: "This website does not accept files larger than {limit}"
#: helpers/MessageLabels/MessageLabels
msgid "fileTooLarge"
diff --git a/packages/volto/locales/de/LC_MESSAGES/volto.po b/packages/volto/locales/de/LC_MESSAGES/volto.po
index accbee32db..e8627e28be 100644
--- a/packages/volto/locales/de/LC_MESSAGES/volto.po
+++ b/packages/volto/locales/de/LC_MESSAGES/volto.po
@@ -431,6 +431,11 @@ msgstr "Rolle {role} zum {entry} zugewiesen."
msgid "Assignments"
msgstr "Zuweisungen"
+#. Default: "Automatically"
+#: components/manage/Controlpanels/Aliases
+msgid "Automatically"
+msgstr "automatisch"
+
#. Default: "Available"
#: components/manage/Controlpanels/AddonsControlpanel
msgid "Available"
@@ -490,6 +495,11 @@ msgstr "Basis Suchfilter"
msgid "Block"
msgstr "Block"
+#. Default: "Both"
+#: components/manage/Controlpanels/Aliases
+msgid "Both"
+msgstr "beide"
+
#. Default: "Both email address and password are case sensitive, check that caps lock is not enabled."
#: components/theme/Login/Login
msgid "Both email address and password are case sensitive, check that caps lock is not enabled."
@@ -862,12 +872,12 @@ msgstr "Arbeitskopie erstellen"
#. Default: "Created after"
#: components/manage/Controlpanels/Aliases
msgid "Created after"
-msgstr ""
+msgstr "Erstellt nach"
#. Default: "Created before"
#: components/manage/Controlpanels/Aliases
msgid "Created before"
-msgstr ""
+msgstr "Erstellt vor"
#. Default: "Created by {creator} on {date}"
#: components/manage/WorkingCopyToastsFactory/WorkingCopyToastsFactory
@@ -1413,6 +1423,11 @@ msgstr ""
msgid "Event view"
msgstr "Termin"
+#. Default: "Example"
+#: components/manage/Controlpanels/Aliases
+msgid "Example"
+msgstr "Beispiel"
+
#. Default: "Exclude from navigation"
#: components/manage/Contents/ContentsPropertiesModal
msgid "Exclude from navigation"
@@ -1524,9 +1539,10 @@ msgid "Files uploaded: {uploadedFiles}"
msgstr "Hochgeladene Dateien: {uploadedFiles}"
#. Default: "Filter"
+#: components/manage/Controlpanels/Aliases
#: helpers/MessageLabels/MessageLabels
msgid "Filter"
-msgstr ""
+msgstr "Filtern"
#. Default: "Filter Rules:"
#: components/manage/Controlpanels/Rules/Rules
@@ -1536,7 +1552,7 @@ msgstr "Filterregeln:"
#. Default: "Filter by path"
#: components/manage/Controlpanels/Aliases
msgid "Filter by prefix"
-msgstr "Nach Präfix filtern"
+msgstr "Nach Pfad filtern"
#. Default: "Filter users by groups"
#: helpers/MessageLabels/MessageLabels
@@ -2184,6 +2200,11 @@ msgstr "Übersetzungen für {} verwalten"
msgid "Manual"
msgstr "Manuell"
+#. Default: "Manually"
+#: components/manage/Controlpanels/Aliases
+msgid "Manually"
+msgstr "manuell"
+
#. Default: "Manually or automatically added?"
#: components/manage/Controlpanels/Aliases
msgid "Manually or automatically added?"
@@ -4471,7 +4492,7 @@ msgstr "Passwort vergessen?"
#. Default: "Add many alternative URLs at once by uploading a CSV file. The first column should be the path to redirect from; the second, the path to redirect to. Both paths must be Plone-site-relative, starting with a slash (/). An optional third column can contain a date and time. An optional fourth column can contain a boolean to mark as a manual redirect (default true)."
#: components/manage/Controlpanels/Aliases
msgid "bulkUploadUrlsHelp"
-msgstr ""
+msgstr "Fügen Sie mehrere alternative URLs auf einmal hinzu, indem Sie eine CSV-Datei hochladen. Die erste Spalte sollte den Pfad enthalten, von dem die Weiterleitung erfolgen soll; die zweite den Pfad, zu dem die Weiterleitung erfolgen soll. Beide Pfade müssen relativ zur Plone-Site sein und mit einem Schrägstrich (/) beginnen. Eine optionale dritte Spalte kann ein Datum und eine Uhrzeit enthalten. Eine optionale vierte Spalte kann einen Booleschen Wert enthalten, um eine manuelle Weiterleitung zu kennzeichnen (Standard: „true“)."
#. Default: "Checkbox"
#: config/Blocks
@@ -4583,6 +4604,11 @@ msgstr "Datum"
msgid "event_where"
msgstr "Ort"
+#. Default: "/example"
+#: components/manage/Controlpanels/Aliases
+msgid "examplePath"
+msgstr "/beispiel"
+
#. Default: "This website does not accept files larger than {limit}"
#: helpers/MessageLabels/MessageLabels
msgid "fileTooLarge"
diff --git a/packages/volto/locales/en/LC_MESSAGES/volto.po b/packages/volto/locales/en/LC_MESSAGES/volto.po
index 77d49db13f..1dba741cab 100644
--- a/packages/volto/locales/en/LC_MESSAGES/volto.po
+++ b/packages/volto/locales/en/LC_MESSAGES/volto.po
@@ -426,6 +426,11 @@ msgstr ""
msgid "Assignments"
msgstr ""
+#. Default: "Automatically"
+#: components/manage/Controlpanels/Aliases
+msgid "Automatically"
+msgstr ""
+
#. Default: "Available"
#: components/manage/Controlpanels/AddonsControlpanel
msgid "Available"
@@ -485,6 +490,11 @@ msgstr ""
msgid "Block"
msgstr ""
+#. Default: "Both"
+#: components/manage/Controlpanels/Aliases
+msgid "Both"
+msgstr ""
+
#. Default: "Both email address and password are case sensitive, check that caps lock is not enabled."
#: components/theme/Login/Login
msgid "Both email address and password are case sensitive, check that caps lock is not enabled."
@@ -1408,6 +1418,11 @@ msgstr ""
msgid "Event view"
msgstr ""
+#. Default: "Example"
+#: components/manage/Controlpanels/Aliases
+msgid "Example"
+msgstr ""
+
#. Default: "Exclude from navigation"
#: components/manage/Contents/ContentsPropertiesModal
msgid "Exclude from navigation"
@@ -1519,6 +1534,7 @@ msgid "Files uploaded: {uploadedFiles}"
msgstr ""
#. Default: "Filter"
+#: components/manage/Controlpanels/Aliases
#: helpers/MessageLabels/MessageLabels
msgid "Filter"
msgstr ""
@@ -2179,6 +2195,11 @@ msgstr ""
msgid "Manual"
msgstr ""
+#. Default: "Manually"
+#: components/manage/Controlpanels/Aliases
+msgid "Manually"
+msgstr ""
+
#. Default: "Manually or automatically added?"
#: components/manage/Controlpanels/Aliases
msgid "Manually or automatically added?"
@@ -4578,6 +4599,11 @@ msgstr ""
msgid "event_where"
msgstr ""
+#. Default: "/example"
+#: components/manage/Controlpanels/Aliases
+msgid "examplePath"
+msgstr ""
+
#. Default: "This website does not accept files larger than {limit}"
#: helpers/MessageLabels/MessageLabels
msgid "fileTooLarge"
diff --git a/packages/volto/locales/es/LC_MESSAGES/volto.po b/packages/volto/locales/es/LC_MESSAGES/volto.po
index 4cc52bdb15..23630b90a1 100644
--- a/packages/volto/locales/es/LC_MESSAGES/volto.po
+++ b/packages/volto/locales/es/LC_MESSAGES/volto.po
@@ -433,6 +433,11 @@ msgstr ""
msgid "Assignments"
msgstr "Tareas"
+#. Default: "Automatically"
+#: components/manage/Controlpanels/Aliases
+msgid "Automatically"
+msgstr ""
+
#. Default: "Available"
#: components/manage/Controlpanels/AddonsControlpanel
msgid "Available"
@@ -492,6 +497,11 @@ msgstr "Consulta base de la búsqueda"
msgid "Block"
msgstr "Bloque"
+#. Default: "Both"
+#: components/manage/Controlpanels/Aliases
+msgid "Both"
+msgstr ""
+
#. Default: "Both email address and password are case sensitive, check that caps lock is not enabled."
#: components/theme/Login/Login
msgid "Both email address and password are case sensitive, check that caps lock is not enabled."
@@ -1415,6 +1425,11 @@ msgstr ""
msgid "Event view"
msgstr "Vista de evento"
+#. Default: "Example"
+#: components/manage/Controlpanels/Aliases
+msgid "Example"
+msgstr ""
+
#. Default: "Exclude from navigation"
#: components/manage/Contents/ContentsPropertiesModal
msgid "Exclude from navigation"
@@ -1526,6 +1541,7 @@ msgid "Files uploaded: {uploadedFiles}"
msgstr "Archivos subidos: {uploadedFiles}"
#. Default: "Filter"
+#: components/manage/Controlpanels/Aliases
#: helpers/MessageLabels/MessageLabels
msgid "Filter"
msgstr "Filtrar"
@@ -2186,6 +2202,11 @@ msgstr "Administrar traducciones de {title}"
msgid "Manual"
msgstr "Manual"
+#. Default: "Manually"
+#: components/manage/Controlpanels/Aliases
+msgid "Manually"
+msgstr ""
+
#. Default: "Manually or automatically added?"
#: components/manage/Controlpanels/Aliases
msgid "Manually or automatically added?"
@@ -4585,6 +4606,11 @@ msgstr "Cuándo"
msgid "event_where"
msgstr "Dónde"
+#. Default: "/example"
+#: components/manage/Controlpanels/Aliases
+msgid "examplePath"
+msgstr ""
+
#. Default: "This website does not accept files larger than {limit}"
#: helpers/MessageLabels/MessageLabels
msgid "fileTooLarge"
diff --git a/packages/volto/locales/eu/LC_MESSAGES/volto.po b/packages/volto/locales/eu/LC_MESSAGES/volto.po
index e2fed09346..095444c38d 100644
--- a/packages/volto/locales/eu/LC_MESSAGES/volto.po
+++ b/packages/volto/locales/eu/LC_MESSAGES/volto.po
@@ -433,6 +433,11 @@ msgstr ""
msgid "Assignments"
msgstr "Esleipenak"
+#. Default: "Automatically"
+#: components/manage/Controlpanels/Aliases
+msgid "Automatically"
+msgstr ""
+
#. Default: "Available"
#: components/manage/Controlpanels/AddonsControlpanel
msgid "Available"
@@ -492,6 +497,11 @@ msgstr "Oinarrizko bilaketa kontsulta"
msgid "Block"
msgstr "Blokea"
+#. Default: "Both"
+#: components/manage/Controlpanels/Aliases
+msgid "Both"
+msgstr ""
+
#. Default: "Both email address and password are case sensitive, check that caps lock is not enabled."
#: components/theme/Login/Login
msgid "Both email address and password are case sensitive, check that caps lock is not enabled."
@@ -1415,6 +1425,11 @@ msgstr ""
msgid "Event view"
msgstr "Hitzorduaren bista"
+#. Default: "Example"
+#: components/manage/Controlpanels/Aliases
+msgid "Example"
+msgstr ""
+
#. Default: "Exclude from navigation"
#: components/manage/Contents/ContentsPropertiesModal
msgid "Exclude from navigation"
@@ -1526,6 +1541,7 @@ msgid "Files uploaded: {uploadedFiles}"
msgstr "Igotako fitxategiak: {uploadedFiles}"
#. Default: "Filter"
+#: components/manage/Controlpanels/Aliases
#: helpers/MessageLabels/MessageLabels
msgid "Filter"
msgstr ""
@@ -2186,6 +2202,11 @@ msgstr "Kudeatu honen itzulpenak {title}"
msgid "Manual"
msgstr "Eskuz"
+#. Default: "Manually"
+#: components/manage/Controlpanels/Aliases
+msgid "Manually"
+msgstr ""
+
#. Default: "Manually or automatically added?"
#: components/manage/Controlpanels/Aliases
msgid "Manually or automatically added?"
@@ -4585,6 +4606,11 @@ msgstr "Noiz"
msgid "event_where"
msgstr "Non"
+#. Default: "/example"
+#: components/manage/Controlpanels/Aliases
+msgid "examplePath"
+msgstr ""
+
#. Default: "This website does not accept files larger than {limit}"
#: helpers/MessageLabels/MessageLabels
msgid "fileTooLarge"
diff --git a/packages/volto/locales/fi/LC_MESSAGES/volto.po b/packages/volto/locales/fi/LC_MESSAGES/volto.po
index f851233f39..2be0080512 100644
--- a/packages/volto/locales/fi/LC_MESSAGES/volto.po
+++ b/packages/volto/locales/fi/LC_MESSAGES/volto.po
@@ -431,6 +431,11 @@ msgstr ""
msgid "Assignments"
msgstr "Tehtävät"
+#. Default: "Automatically"
+#: components/manage/Controlpanels/Aliases
+msgid "Automatically"
+msgstr ""
+
#. Default: "Available"
#: components/manage/Controlpanels/AddonsControlpanel
msgid "Available"
@@ -490,6 +495,11 @@ msgstr ""
msgid "Block"
msgstr "Palikka"
+#. Default: "Both"
+#: components/manage/Controlpanels/Aliases
+msgid "Both"
+msgstr ""
+
#. Default: "Both email address and password are case sensitive, check that caps lock is not enabled."
#: components/theme/Login/Login
msgid "Both email address and password are case sensitive, check that caps lock is not enabled."
@@ -1413,6 +1423,11 @@ msgstr ""
msgid "Event view"
msgstr "Tapahtuman näkymä"
+#. Default: "Example"
+#: components/manage/Controlpanels/Aliases
+msgid "Example"
+msgstr ""
+
#. Default: "Exclude from navigation"
#: components/manage/Contents/ContentsPropertiesModal
msgid "Exclude from navigation"
@@ -1524,6 +1539,7 @@ msgid "Files uploaded: {uploadedFiles}"
msgstr "Lähetetyt tiedostot: {uploadedFiles} "
#. Default: "Filter"
+#: components/manage/Controlpanels/Aliases
#: helpers/MessageLabels/MessageLabels
msgid "Filter"
msgstr ""
@@ -2184,6 +2200,11 @@ msgstr "Hallitse käännöksiä: {title}"
msgid "Manual"
msgstr "Manuaalinen"
+#. Default: "Manually"
+#: components/manage/Controlpanels/Aliases
+msgid "Manually"
+msgstr ""
+
#. Default: "Manually or automatically added?"
#: components/manage/Controlpanels/Aliases
msgid "Manually or automatically added?"
@@ -4583,6 +4604,11 @@ msgstr "Milloin"
msgid "event_where"
msgstr "Missä"
+#. Default: "/example"
+#: components/manage/Controlpanels/Aliases
+msgid "examplePath"
+msgstr ""
+
#. Default: "This website does not accept files larger than {limit}"
#: helpers/MessageLabels/MessageLabels
msgid "fileTooLarge"
diff --git a/packages/volto/locales/fr/LC_MESSAGES/volto.po b/packages/volto/locales/fr/LC_MESSAGES/volto.po
index 2f5d0b3005..be16dc03d7 100644
--- a/packages/volto/locales/fr/LC_MESSAGES/volto.po
+++ b/packages/volto/locales/fr/LC_MESSAGES/volto.po
@@ -433,6 +433,11 @@ msgstr ""
msgid "Assignments"
msgstr "Affectations"
+#. Default: "Automatically"
+#: components/manage/Controlpanels/Aliases
+msgid "Automatically"
+msgstr ""
+
#. Default: "Available"
#: components/manage/Controlpanels/AddonsControlpanel
msgid "Available"
@@ -492,6 +497,11 @@ msgstr "Requête de base de la recherche"
msgid "Block"
msgstr "Bloc"
+#. Default: "Both"
+#: components/manage/Controlpanels/Aliases
+msgid "Both"
+msgstr ""
+
#. Default: "Both email address and password are case sensitive, check that caps lock is not enabled."
#: components/theme/Login/Login
msgid "Both email address and password are case sensitive, check that caps lock is not enabled."
@@ -1415,6 +1425,11 @@ msgstr ""
msgid "Event view"
msgstr "Vue d'événement"
+#. Default: "Example"
+#: components/manage/Controlpanels/Aliases
+msgid "Example"
+msgstr ""
+
#. Default: "Exclude from navigation"
#: components/manage/Contents/ContentsPropertiesModal
msgid "Exclude from navigation"
@@ -1526,6 +1541,7 @@ msgid "Files uploaded: {uploadedFiles}"
msgstr "Fichiers téléchargés : {uploadedFiles}"
#. Default: "Filter"
+#: components/manage/Controlpanels/Aliases
#: helpers/MessageLabels/MessageLabels
msgid "Filter"
msgstr ""
@@ -2186,6 +2202,11 @@ msgstr "Gérer les traductions pour {title}"
msgid "Manual"
msgstr "Manuel"
+#. Default: "Manually"
+#: components/manage/Controlpanels/Aliases
+msgid "Manually"
+msgstr ""
+
#. Default: "Manually or automatically added?"
#: components/manage/Controlpanels/Aliases
msgid "Manually or automatically added?"
@@ -4585,6 +4606,11 @@ msgstr "Quand"
msgid "event_where"
msgstr "Où"
+#. Default: "/example"
+#: components/manage/Controlpanels/Aliases
+msgid "examplePath"
+msgstr ""
+
#. Default: "This website does not accept files larger than {limit}"
#: helpers/MessageLabels/MessageLabels
msgid "fileTooLarge"
diff --git a/packages/volto/locales/hi/LC_MESSAGES/volto.po b/packages/volto/locales/hi/LC_MESSAGES/volto.po
index 06006f6f10..11afb55efa 100644
--- a/packages/volto/locales/hi/LC_MESSAGES/volto.po
+++ b/packages/volto/locales/hi/LC_MESSAGES/volto.po
@@ -426,6 +426,11 @@ msgstr "{entry} को {role} भूमिका का काम दें"
msgid "Assignments"
msgstr "असाइनमेंट"
+#. Default: "Automatically"
+#: components/manage/Controlpanels/Aliases
+msgid "Automatically"
+msgstr ""
+
#. Default: "Available"
#: components/manage/Controlpanels/AddonsControlpanel
msgid "Available"
@@ -485,6 +490,11 @@ msgstr "मूल खोज क्वेरी"
msgid "Block"
msgstr "ब्लॉक"
+#. Default: "Both"
+#: components/manage/Controlpanels/Aliases
+msgid "Both"
+msgstr ""
+
#. Default: "Both email address and password are case sensitive, check that caps lock is not enabled."
#: components/theme/Login/Login
msgid "Both email address and password are case sensitive, check that caps lock is not enabled."
@@ -1408,6 +1418,11 @@ msgstr ""
msgid "Event view"
msgstr "आयोजन दृश्य"
+#. Default: "Example"
+#: components/manage/Controlpanels/Aliases
+msgid "Example"
+msgstr ""
+
#. Default: "Exclude from navigation"
#: components/manage/Contents/ContentsPropertiesModal
msgid "Exclude from navigation"
@@ -1519,6 +1534,7 @@ msgid "Files uploaded: {uploadedFiles}"
msgstr ""फ़ाइलें अपलोड की गईं: {uploadedFiles}"
#. Default: "Filter"
+#: components/manage/Controlpanels/Aliases
#: helpers/MessageLabels/MessageLabels
msgid "Filter"
msgstr "फ़िल्टर"
@@ -2179,6 +2195,11 @@ msgstr "{title} के लिए अनुवाद प्रबंधित क
msgid "Manual"
msgstr "मैनुअल"
+#. Default: "Manually"
+#: components/manage/Controlpanels/Aliases
+msgid "Manually"
+msgstr ""
+
#. Default: "Manually or automatically added?"
#: components/manage/Controlpanels/Aliases
msgid "Manually or automatically added?"
@@ -4578,6 +4599,11 @@ msgstr "कब"
msgid "event_where"
msgstr "कहाँ"
+#. Default: "/example"
+#: components/manage/Controlpanels/Aliases
+msgid "examplePath"
+msgstr ""
+
#. Default: "This website does not accept files larger than {limit}"
#: helpers/MessageLabels/MessageLabels
msgid "fileTooLarge"
diff --git a/packages/volto/locales/it/LC_MESSAGES/volto.po b/packages/volto/locales/it/LC_MESSAGES/volto.po
index 794ac7f9a6..13eb9c2280 100644
--- a/packages/volto/locales/it/LC_MESSAGES/volto.po
+++ b/packages/volto/locales/it/LC_MESSAGES/volto.po
@@ -426,6 +426,11 @@ msgstr "Assegnare il ruolo di {role} a {entry}"
msgid "Assignments"
msgstr "Assegnazione"
+#. Default: "Automatically"
+#: components/manage/Controlpanels/Aliases
+msgid "Automatically"
+msgstr ""
+
#. Default: "Available"
#: components/manage/Controlpanels/AddonsControlpanel
msgid "Available"
@@ -485,6 +490,11 @@ msgstr "Ricerca iniziale"
msgid "Block"
msgstr "Blocco"
+#. Default: "Both"
+#: components/manage/Controlpanels/Aliases
+msgid "Both"
+msgstr ""
+
#. Default: "Both email address and password are case sensitive, check that caps lock is not enabled."
#: components/theme/Login/Login
msgid "Both email address and password are case sensitive, check that caps lock is not enabled."
@@ -1408,6 +1418,11 @@ msgstr "La data di inizio evento essere uguale o precedente al {endDateValueOrEn
msgid "Event view"
msgstr "Vista evento"
+#. Default: "Example"
+#: components/manage/Controlpanels/Aliases
+msgid "Example"
+msgstr ""
+
#. Default: "Exclude from navigation"
#: components/manage/Contents/ContentsPropertiesModal
msgid "Exclude from navigation"
@@ -1519,6 +1534,7 @@ msgid "Files uploaded: {uploadedFiles}"
msgstr "File caricati: {uploadedFiles}"
#. Default: "Filter"
+#: components/manage/Controlpanels/Aliases
#: helpers/MessageLabels/MessageLabels
msgid "Filter"
msgstr "Filtra"
@@ -2179,6 +2195,11 @@ msgstr "Gestisci le traduzioni per {title}"
msgid "Manual"
msgstr "Manuale"
+#. Default: "Manually"
+#: components/manage/Controlpanels/Aliases
+msgid "Manually"
+msgstr ""
+
#. Default: "Manually or automatically added?"
#: components/manage/Controlpanels/Aliases
msgid "Manually or automatically added?"
@@ -4578,6 +4599,11 @@ msgstr "Quando"
msgid "event_where"
msgstr "Dove"
+#. Default: "/example"
+#: components/manage/Controlpanels/Aliases
+msgid "examplePath"
+msgstr ""
+
#. Default: "This website does not accept files larger than {limit}"
#: helpers/MessageLabels/MessageLabels
msgid "fileTooLarge"
diff --git a/packages/volto/locales/ja/LC_MESSAGES/volto.po b/packages/volto/locales/ja/LC_MESSAGES/volto.po
index 3d016b4985..8f69541e34 100644
--- a/packages/volto/locales/ja/LC_MESSAGES/volto.po
+++ b/packages/volto/locales/ja/LC_MESSAGES/volto.po
@@ -431,6 +431,11 @@ msgstr ""
msgid "Assignments"
msgstr ""
+#. Default: "Automatically"
+#: components/manage/Controlpanels/Aliases
+msgid "Automatically"
+msgstr ""
+
#. Default: "Available"
#: components/manage/Controlpanels/AddonsControlpanel
msgid "Available"
@@ -490,6 +495,11 @@ msgstr ""
msgid "Block"
msgstr "ブロック"
+#. Default: "Both"
+#: components/manage/Controlpanels/Aliases
+msgid "Both"
+msgstr ""
+
#. Default: "Both email address and password are case sensitive, check that caps lock is not enabled."
#: components/theme/Login/Login
msgid "Both email address and password are case sensitive, check that caps lock is not enabled."
@@ -1413,6 +1423,11 @@ msgstr ""
msgid "Event view"
msgstr ""
+#. Default: "Example"
+#: components/manage/Controlpanels/Aliases
+msgid "Example"
+msgstr ""
+
#. Default: "Exclude from navigation"
#: components/manage/Contents/ContentsPropertiesModal
msgid "Exclude from navigation"
@@ -1524,6 +1539,7 @@ msgid "Files uploaded: {uploadedFiles}"
msgstr "アップロードされたファイル: {uploadedFiles}"
#. Default: "Filter"
+#: components/manage/Controlpanels/Aliases
#: helpers/MessageLabels/MessageLabels
msgid "Filter"
msgstr ""
@@ -2184,6 +2200,11 @@ msgstr "{title}の翻訳を管理する"
msgid "Manual"
msgstr ""
+#. Default: "Manually"
+#: components/manage/Controlpanels/Aliases
+msgid "Manually"
+msgstr ""
+
#. Default: "Manually or automatically added?"
#: components/manage/Controlpanels/Aliases
msgid "Manually or automatically added?"
@@ -4583,6 +4604,11 @@ msgstr "日時"
msgid "event_where"
msgstr "場所"
+#. Default: "/example"
+#: components/manage/Controlpanels/Aliases
+msgid "examplePath"
+msgstr ""
+
#. Default: "This website does not accept files larger than {limit}"
#: helpers/MessageLabels/MessageLabels
msgid "fileTooLarge"
diff --git a/packages/volto/locales/nl/LC_MESSAGES/volto.po b/packages/volto/locales/nl/LC_MESSAGES/volto.po
index 7ae5fd8b4a..4357dae948 100644
--- a/packages/volto/locales/nl/LC_MESSAGES/volto.po
+++ b/packages/volto/locales/nl/LC_MESSAGES/volto.po
@@ -430,6 +430,11 @@ msgstr ""
msgid "Assignments"
msgstr ""
+#. Default: "Automatically"
+#: components/manage/Controlpanels/Aliases
+msgid "Automatically"
+msgstr ""
+
#. Default: "Available"
#: components/manage/Controlpanels/AddonsControlpanel
msgid "Available"
@@ -489,6 +494,11 @@ msgstr ""
msgid "Block"
msgstr ""
+#. Default: "Both"
+#: components/manage/Controlpanels/Aliases
+msgid "Both"
+msgstr ""
+
#. Default: "Both email address and password are case sensitive, check that caps lock is not enabled."
#: components/theme/Login/Login
msgid "Both email address and password are case sensitive, check that caps lock is not enabled."
@@ -1412,6 +1422,11 @@ msgstr ""
msgid "Event view"
msgstr ""
+#. Default: "Example"
+#: components/manage/Controlpanels/Aliases
+msgid "Example"
+msgstr ""
+
#. Default: "Exclude from navigation"
#: components/manage/Contents/ContentsPropertiesModal
msgid "Exclude from navigation"
@@ -1523,6 +1538,7 @@ msgid "Files uploaded: {uploadedFiles}"
msgstr "Geüploade bestanden: {uploadedFiles}"
#. Default: "Filter"
+#: components/manage/Controlpanels/Aliases
#: helpers/MessageLabels/MessageLabels
msgid "Filter"
msgstr ""
@@ -2183,6 +2199,11 @@ msgstr ""
msgid "Manual"
msgstr ""
+#. Default: "Manually"
+#: components/manage/Controlpanels/Aliases
+msgid "Manually"
+msgstr ""
+
#. Default: "Manually or automatically added?"
#: components/manage/Controlpanels/Aliases
msgid "Manually or automatically added?"
@@ -4582,6 +4603,11 @@ msgstr ""
msgid "event_where"
msgstr ""
+#. Default: "/example"
+#: components/manage/Controlpanels/Aliases
+msgid "examplePath"
+msgstr ""
+
#. Default: "This website does not accept files larger than {limit}"
#: helpers/MessageLabels/MessageLabels
msgid "fileTooLarge"
diff --git a/packages/volto/locales/pt/LC_MESSAGES/volto.po b/packages/volto/locales/pt/LC_MESSAGES/volto.po
index 38e7165a15..d30596d054 100644
--- a/packages/volto/locales/pt/LC_MESSAGES/volto.po
+++ b/packages/volto/locales/pt/LC_MESSAGES/volto.po
@@ -431,6 +431,11 @@ msgstr ""
msgid "Assignments"
msgstr ""
+#. Default: "Automatically"
+#: components/manage/Controlpanels/Aliases
+msgid "Automatically"
+msgstr ""
+
#. Default: "Available"
#: components/manage/Controlpanels/AddonsControlpanel
msgid "Available"
@@ -490,6 +495,11 @@ msgstr ""
msgid "Block"
msgstr "Bloco"
+#. Default: "Both"
+#: components/manage/Controlpanels/Aliases
+msgid "Both"
+msgstr ""
+
#. Default: "Both email address and password are case sensitive, check that caps lock is not enabled."
#: components/theme/Login/Login
msgid "Both email address and password are case sensitive, check that caps lock is not enabled."
@@ -1413,6 +1423,11 @@ msgstr ""
msgid "Event view"
msgstr ""
+#. Default: "Example"
+#: components/manage/Controlpanels/Aliases
+msgid "Example"
+msgstr ""
+
#. Default: "Exclude from navigation"
#: components/manage/Contents/ContentsPropertiesModal
msgid "Exclude from navigation"
@@ -1524,6 +1539,7 @@ msgid "Files uploaded: {uploadedFiles}"
msgstr "Arquivos enviados: {uploadedFiles}"
#. Default: "Filter"
+#: components/manage/Controlpanels/Aliases
#: helpers/MessageLabels/MessageLabels
msgid "Filter"
msgstr ""
@@ -2184,6 +2200,11 @@ msgstr ""
msgid "Manual"
msgstr ""
+#. Default: "Manually"
+#: components/manage/Controlpanels/Aliases
+msgid "Manually"
+msgstr ""
+
#. Default: "Manually or automatically added?"
#: components/manage/Controlpanels/Aliases
msgid "Manually or automatically added?"
@@ -4583,6 +4604,11 @@ msgstr ""
msgid "event_where"
msgstr ""
+#. Default: "/example"
+#: components/manage/Controlpanels/Aliases
+msgid "examplePath"
+msgstr ""
+
#. Default: "This website does not accept files larger than {limit}"
#: helpers/MessageLabels/MessageLabels
msgid "fileTooLarge"
diff --git a/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po b/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po
index a49133408d..af520c765e 100644
--- a/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po
+++ b/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po
@@ -432,6 +432,11 @@ msgstr "Atribuir o papel de {role} à {entry}"
msgid "Assignments"
msgstr "Atribuições"
+#. Default: "Automatically"
+#: components/manage/Controlpanels/Aliases
+msgid "Automatically"
+msgstr ""
+
#. Default: "Available"
#: components/manage/Controlpanels/AddonsControlpanel
msgid "Available"
@@ -491,6 +496,11 @@ msgstr "Base da consulta para busca"
msgid "Block"
msgstr "Bloco"
+#. Default: "Both"
+#: components/manage/Controlpanels/Aliases
+msgid "Both"
+msgstr ""
+
#. Default: "Both email address and password are case sensitive, check that caps lock is not enabled."
#: components/theme/Login/Login
msgid "Both email address and password are case sensitive, check that caps lock is not enabled."
@@ -1414,6 +1424,11 @@ msgstr "A data de início do evento deve ser igual ou anterior a {endDateValueOr
msgid "Event view"
msgstr "Visão de Evento"
+#. Default: "Example"
+#: components/manage/Controlpanels/Aliases
+msgid "Example"
+msgstr ""
+
#. Default: "Exclude from navigation"
#: components/manage/Contents/ContentsPropertiesModal
msgid "Exclude from navigation"
@@ -1525,6 +1540,7 @@ msgid "Files uploaded: {uploadedFiles}"
msgstr "Arquivos carregados: {uploadedFiles}"
#. Default: "Filter"
+#: components/manage/Controlpanels/Aliases
#: helpers/MessageLabels/MessageLabels
msgid "Filter"
msgstr "Filtrar"
@@ -2185,6 +2201,11 @@ msgstr "Gerenciar traduções para {title}"
msgid "Manual"
msgstr "Manual"
+#. Default: "Manually"
+#: components/manage/Controlpanels/Aliases
+msgid "Manually"
+msgstr ""
+
#. Default: "Manually or automatically added?"
#: components/manage/Controlpanels/Aliases
msgid "Manually or automatically added?"
@@ -4584,6 +4605,11 @@ msgstr "Quando"
msgid "event_where"
msgstr "Onde"
+#. Default: "/example"
+#: components/manage/Controlpanels/Aliases
+msgid "examplePath"
+msgstr ""
+
#. Default: "This website does not accept files larger than {limit}"
#: helpers/MessageLabels/MessageLabels
msgid "fileTooLarge"
diff --git a/packages/volto/locales/ro/LC_MESSAGES/volto.po b/packages/volto/locales/ro/LC_MESSAGES/volto.po
index 64f8414719..6ef3d38984 100644
--- a/packages/volto/locales/ro/LC_MESSAGES/volto.po
+++ b/packages/volto/locales/ro/LC_MESSAGES/volto.po
@@ -426,6 +426,11 @@ msgstr ""
msgid "Assignments"
msgstr ""
+#. Default: "Automatically"
+#: components/manage/Controlpanels/Aliases
+msgid "Automatically"
+msgstr ""
+
#. Default: "Available"
#: components/manage/Controlpanels/AddonsControlpanel
msgid "Available"
@@ -485,6 +490,11 @@ msgstr "Interogare căutare de bază"
msgid "Block"
msgstr "Bloc"
+#. Default: "Both"
+#: components/manage/Controlpanels/Aliases
+msgid "Both"
+msgstr ""
+
#. Default: "Both email address and password are case sensitive, check that caps lock is not enabled."
#: components/theme/Login/Login
msgid "Both email address and password are case sensitive, check that caps lock is not enabled."
@@ -1408,6 +1418,11 @@ msgstr ""
msgid "Event view"
msgstr ""
+#. Default: "Example"
+#: components/manage/Controlpanels/Aliases
+msgid "Example"
+msgstr ""
+
#. Default: "Exclude from navigation"
#: components/manage/Contents/ContentsPropertiesModal
msgid "Exclude from navigation"
@@ -1519,6 +1534,7 @@ msgid "Files uploaded: {uploadedFiles}"
msgstr "Fișiere încărcate: {uploadedFiles}"
#. Default: "Filter"
+#: components/manage/Controlpanels/Aliases
#: helpers/MessageLabels/MessageLabels
msgid "Filter"
msgstr ""
@@ -2179,6 +2195,11 @@ msgstr "Gestionați traducerile pentru {title}"
msgid "Manual"
msgstr ""
+#. Default: "Manually"
+#: components/manage/Controlpanels/Aliases
+msgid "Manually"
+msgstr ""
+
#. Default: "Manually or automatically added?"
#: components/manage/Controlpanels/Aliases
msgid "Manually or automatically added?"
@@ -4578,6 +4599,11 @@ msgstr "Data"
msgid "event_where"
msgstr "Locație"
+#. Default: "/example"
+#: components/manage/Controlpanels/Aliases
+msgid "examplePath"
+msgstr ""
+
#. Default: "This website does not accept files larger than {limit}"
#: helpers/MessageLabels/MessageLabels
msgid "fileTooLarge"
diff --git a/packages/volto/locales/volto.pot b/packages/volto/locales/volto.pot
index 8d69039230..0490c9b7a6 100644
--- a/packages/volto/locales/volto.pot
+++ b/packages/volto/locales/volto.pot
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Plone\n"
-"POT-Creation-Date: 2024-10-22T18:13:27.236Z\n"
+"POT-Creation-Date: 2024-10-24T16:41:21.354Z\n"
"Last-Translator: Plone i18n \n"
"Language-Team: Plone i18n \n"
"Content-Type: text/plain; charset=utf-8\n"
@@ -428,6 +428,11 @@ msgstr ""
msgid "Assignments"
msgstr ""
+#. Default: "Automatically"
+#: components/manage/Controlpanels/Aliases
+msgid "Automatically"
+msgstr ""
+
#. Default: "Available"
#: components/manage/Controlpanels/AddonsControlpanel
msgid "Available"
@@ -487,6 +492,11 @@ msgstr ""
msgid "Block"
msgstr ""
+#. Default: "Both"
+#: components/manage/Controlpanels/Aliases
+msgid "Both"
+msgstr ""
+
#. Default: "Both email address and password are case sensitive, check that caps lock is not enabled."
#: components/theme/Login/Login
msgid "Both email address and password are case sensitive, check that caps lock is not enabled."
@@ -1410,6 +1420,11 @@ msgstr ""
msgid "Event view"
msgstr ""
+#. Default: "Example"
+#: components/manage/Controlpanels/Aliases
+msgid "Example"
+msgstr ""
+
#. Default: "Exclude from navigation"
#: components/manage/Contents/ContentsPropertiesModal
msgid "Exclude from navigation"
@@ -1521,6 +1536,7 @@ msgid "Files uploaded: {uploadedFiles}"
msgstr ""
#. Default: "Filter"
+#: components/manage/Controlpanels/Aliases
#: helpers/MessageLabels/MessageLabels
msgid "Filter"
msgstr ""
@@ -2181,6 +2197,11 @@ msgstr ""
msgid "Manual"
msgstr ""
+#. Default: "Manually"
+#: components/manage/Controlpanels/Aliases
+msgid "Manually"
+msgstr ""
+
#. Default: "Manually or automatically added?"
#: components/manage/Controlpanels/Aliases
msgid "Manually or automatically added?"
@@ -4580,6 +4601,11 @@ msgstr ""
msgid "event_where"
msgstr ""
+#. Default: "/example"
+#: components/manage/Controlpanels/Aliases
+msgid "examplePath"
+msgstr ""
+
#. Default: "This website does not accept files larger than {limit}"
#: helpers/MessageLabels/MessageLabels
msgid "fileTooLarge"
diff --git a/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po b/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po
index c64ddee6a5..6d98786196 100644
--- a/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po
+++ b/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po
@@ -432,6 +432,11 @@ msgstr ""
msgid "Assignments"
msgstr "分配"
+#. Default: "Automatically"
+#: components/manage/Controlpanels/Aliases
+msgid "Automatically"
+msgstr ""
+
#. Default: "Available"
#: components/manage/Controlpanels/AddonsControlpanel
msgid "Available"
@@ -491,6 +496,11 @@ msgstr "基本搜索查询"
msgid "Block"
msgstr "块"
+#. Default: "Both"
+#: components/manage/Controlpanels/Aliases
+msgid "Both"
+msgstr ""
+
#. Default: "Both email address and password are case sensitive, check that caps lock is not enabled."
#: components/theme/Login/Login
msgid "Both email address and password are case sensitive, check that caps lock is not enabled."
@@ -1414,6 +1424,11 @@ msgstr ""
msgid "Event view"
msgstr "事件视图"
+#. Default: "Example"
+#: components/manage/Controlpanels/Aliases
+msgid "Example"
+msgstr ""
+
#. Default: "Exclude from navigation"
#: components/manage/Contents/ContentsPropertiesModal
msgid "Exclude from navigation"
@@ -1525,6 +1540,7 @@ msgid "Files uploaded: {uploadedFiles}"
msgstr "已上载的文件:{uploadedFiles}"
#. Default: "Filter"
+#: components/manage/Controlpanels/Aliases
#: helpers/MessageLabels/MessageLabels
msgid "Filter"
msgstr ""
@@ -2185,6 +2201,11 @@ msgstr "管理{title}的翻译"
msgid "Manual"
msgstr ""
+#. Default: "Manually"
+#: components/manage/Controlpanels/Aliases
+msgid "Manually"
+msgstr ""
+
#. Default: "Manually or automatically added?"
#: components/manage/Controlpanels/Aliases
msgid "Manually or automatically added?"
@@ -4584,6 +4605,11 @@ msgstr ""
msgid "event_where"
msgstr ""
+#. Default: "/example"
+#: components/manage/Controlpanels/Aliases
+msgid "examplePath"
+msgstr ""
+
#. Default: "This website does not accept files larger than {limit}"
#: helpers/MessageLabels/MessageLabels
msgid "fileTooLarge"
diff --git a/packages/volto/news/6308.internal b/packages/volto/news/6308.internal
new file mode 100644
index 0000000000..c2b9271b6b
--- /dev/null
+++ b/packages/volto/news/6308.internal
@@ -0,0 +1 @@
+Used `resource title` instead of `resource type` in page title on edit. @Faakhir30
diff --git a/packages/volto/news/6426.documentation b/packages/volto/news/6426.documentation
new file mode 100644
index 0000000000..dc5079729a
--- /dev/null
+++ b/packages/volto/news/6426.documentation
@@ -0,0 +1 @@
+Added deprecation notices to the upgrade guide for Volto 18. @sneridagh
diff --git a/packages/volto/news/6433.documentation b/packages/volto/news/6433.documentation
new file mode 100644
index 0000000000..82111de185
--- /dev/null
+++ b/packages/volto/news/6433.documentation
@@ -0,0 +1 @@
+Replace `yarn` with `pnpm` wherever necessary. @sneridagh
diff --git a/packages/volto/news/6436.bugfix b/packages/volto/news/6436.bugfix
new file mode 100644
index 0000000000..a0e0bf3309
--- /dev/null
+++ b/packages/volto/news/6436.bugfix
@@ -0,0 +1 @@
+URL Management control panel: add missing translations. @davisagli
diff --git a/packages/volto/news/6438.documentation b/packages/volto/news/6438.documentation
new file mode 100644
index 0000000000..f894f6db1b
--- /dev/null
+++ b/packages/volto/news/6438.documentation
@@ -0,0 +1 @@
+Rename page title from Frontend to Volto UI. @stevepiercy
diff --git a/packages/volto/src/components/manage/Controlpanels/Aliases.jsx b/packages/volto/src/components/manage/Controlpanels/Aliases.jsx
index 56bd71f0e9..d607e4949b 100644
--- a/packages/volto/src/components/manage/Controlpanels/Aliases.jsx
+++ b/packages/volto/src/components/manage/Controlpanels/Aliases.jsx
@@ -106,6 +106,22 @@ const messages = defineMessages({
id: 'CSVFile',
defaultMessage: 'CSV file',
},
+ Both: {
+ id: 'Both',
+ defaultMessage: 'Both',
+ },
+ Automatically: {
+ id: 'Automatically',
+ defaultMessage: 'Automatically',
+ },
+ Manually: {
+ id: 'Manually',
+ defaultMessage: 'Manually',
+ },
+ examplePath: {
+ id: 'examplePath',
+ defaultMessage: '/example',
+ },
});
const filterChoices = [
@@ -320,7 +336,7 @@ const Aliases = (props) => {
defaultMessage="Enter the absolute path where the alternative URL should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring."
/>
),
- placeholder: '/example',
+ placeholder: intl.formatMessage(messages.examplePath),
},
targetUrlPath: {
title: intl.formatMessage(messages.targetUrlPathTitle),
@@ -330,7 +346,7 @@ const Aliases = (props) => {
defaultMessage="Enter the absolute path of the target. Target must exist or be an existing alternative URL path to the target."
/>
),
- placeholder: '/example',
+ placeholder: intl.formatMessage(messages.examplePath),
},
},
required: ['altUrlPath', 'targetUrlPath'],
@@ -359,7 +375,11 @@ const Aliases = (props) => {
/>