Skip to content

Commit 81c9c26

Browse files
committed
update the widget for privacy_url to support multilingual website
1 parent 2132ddd commit 81c9c26

9 files changed

Lines changed: 136 additions & 25 deletions

File tree

backend/src/kitconcept/website/controlpanels/dsgvo.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@
3232
"type": "object",
3333
})
3434

35+
PRIVACY_URL_SCHEMA = json.dumps({
36+
"type": "object",
37+
})
38+
3539

3640
class IDSGVOSettings(Interface):
3741
"""Settings for @kitconcept/volto-dsgvo-banner"""
@@ -96,17 +100,21 @@ class IDSGVOSettings(Interface):
96100
directives.widget(
97101
"privacy_url",
98102
frontendOptions={
99-
"widget": "url",
103+
"widget": "modalJSONEditor",
100104
},
101105
)
102-
privacy_url = schema.TextLine(
106+
privacy_url = JSONField(
103107
title=_("label_dsgvo_privacy_url", default="Privacy policy URL"),
104108
description=_(
105109
"help_dsgvo_privacy_url",
106-
default="Path or URL to the privacy policy page, e.g. /en/privacy.",
110+
default="JSON object mapping language codes to privacy policy paths or URLs. "
111+
'Example: {"en": "/en/privacy", "de": "/de/datenschutz"}.',
107112
),
113+
schema=PRIVACY_URL_SCHEMA,
108114
required=False,
109115
default=None,
116+
missing_value=None,
117+
widget="",
110118
)
111119

112120

backend/src/kitconcept/website/locales/de/LC_MESSAGES/kitconcept.website.po

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
msgid ""
22
msgstr ""
33
"Project-Id-Version: PACKAGE VERSION\n"
4-
"POT-Creation-Date: 2026-05-13 10:56+0000\n"
4+
"POT-Creation-Date: 2026-06-17 12:10+0000\n"
55
"PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n"
66
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
77
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -27,15 +27,32 @@ msgid "GDPR Settings"
2727
msgstr "DSGVO-Einstellungen"
2828

2929
#. Default: "List of 3rd-party sites to be shown in privacy preferences."
30-
#: kitconcept/website/controlpanels/dsgvo.py:42
30+
#: kitconcept/website/controlpanels/dsgvo.py:56
3131
msgid "help_dsgvo_modules"
3232
msgstr "Liste der Drittanbieter-Dienste, die in den Datenschutzeinstellungen angezeigt werden."
3333

34+
#. Default: "JSON object mapping language codes to privacy policy paths or URLs. Example: {\"en\": \"/en/privacy\", \"de\": \"/de/datenschutz\"}."
35+
#: kitconcept/website/controlpanels/dsgvo.py:108
36+
#, fuzzy
37+
msgid "help_dsgvo_privacy_url"
38+
msgstr "JSON-Objekt, das Sprachcodes auf Pfade oder URLs zur Datenschutzrichtlinie abbildet. Beispiel: {\"en\": \"/en/privacy\", \"de\": \"/de/datenschutz\"}."
39+
3440
#. Default: "If true, the cookie consent banner will be shown immediately. If false, users will be prompted to accept cookies only in the context of blocks where they are needed."
35-
#: kitconcept/website/controlpanels/dsgvo.py:31
41+
#: kitconcept/website/controlpanels/dsgvo.py:45
3642
msgid "help_dsgvo_show_banner"
3743
msgstr "Wenn aktiviert, wird das Cookie-Zustimmungsbanner sofort angezeigt. Wenn deaktiviert, werden Benutzer nur im Kontext von Blöcken, in denen Cookies benötigt werden, zur Zustimmung aufgefordert."
3844

45+
#. Default: "Analytics tracker to use. Choose 'google' for Google Analytics or 'matomo' for Matomo."
46+
#: kitconcept/website/controlpanels/dsgvo.py:69
47+
msgid "help_dsgvo_tracker"
48+
msgstr "Zu verwendender Analytics-Tracker. Wählen Sie 'google' für Google Analytics oder 'matomo' für Matomo."
49+
50+
#. Default: "JSON object with tracker configuration. For Google Analytics: {\"id\": \"G-XXXXXXX\", \"gaOptions\": {\"anonymizeIp\": true}}. For Matomo: {\"id\": 1, \"urlBase\": \"https://matomo.example.com/\"}."
51+
#: kitconcept/website/controlpanels/dsgvo.py:87
52+
#, fuzzy
53+
msgid "help_dsgvo_tracker_options"
54+
msgstr "JSON-Objekt mit Tracker-Konfiguration. Für Google Analytics: {\"id\": \"G-XXXXXXX\", \"gaOptions\": {\"anonymizeIp\": true}}. Für Matomo: {\"id\": 1, \"urlBase\": \"https://matomo.example.com/\"}."
55+
3956
#: kitconcept/website/distributions.zcml:17
4057
msgid "kitconcept Website"
4158
msgstr ""
@@ -45,11 +62,26 @@ msgid "kitconcept.website"
4562
msgstr ""
4663

4764
#. Default: "Show privacy settings for"
48-
#: kitconcept/website/controlpanels/dsgvo.py:41
65+
#: kitconcept/website/controlpanels/dsgvo.py:55
4966
msgid "label_dsgvo_modules"
5067
msgstr "Datenschutzeinstellungen anzeigen für"
5168

69+
#. Default: "Privacy policy URL"
70+
#: kitconcept/website/controlpanels/dsgvo.py:107
71+
msgid "label_dsgvo_privacy_url"
72+
msgstr "Datenschutzrichtlinien-URL"
73+
5274
#. Default: "Show GDPR banner on first visit"
53-
#: kitconcept/website/controlpanels/dsgvo.py:30
75+
#: kitconcept/website/controlpanels/dsgvo.py:44
5476
msgid "label_dsgvo_show_banner"
5577
msgstr "DSGVO-Banner beim ersten Besuch anzeigen"
78+
79+
#. Default: "Tracker"
80+
#: kitconcept/website/controlpanels/dsgvo.py:68
81+
msgid "label_dsgvo_tracker"
82+
msgstr "Tracker"
83+
84+
#. Default: "Tracker options"
85+
#: kitconcept/website/controlpanels/dsgvo.py:86
86+
msgid "label_dsgvo_tracker_options"
87+
msgstr "Tracker-Optionen"

backend/src/kitconcept/website/locales/en/LC_MESSAGES/kitconcept.website.po

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
msgid ""
22
msgstr ""
33
"Project-Id-Version: PACKAGE VERSION\n"
4-
"POT-Creation-Date: 2026-05-13 10:56+0000\n"
4+
"POT-Creation-Date: 2026-06-17 12:10+0000\n"
55
"PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n"
66
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
77
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -27,15 +27,30 @@ msgid "GDPR Settings"
2727
msgstr ""
2828

2929
#. Default: "List of 3rd-party sites to be shown in privacy preferences."
30-
#: kitconcept/website/controlpanels/dsgvo.py:42
30+
#: kitconcept/website/controlpanels/dsgvo.py:56
3131
msgid "help_dsgvo_modules"
3232
msgstr ""
3333

34+
#. Default: "JSON object mapping language codes to privacy policy paths or URLs. Example: {\"en\": \"/en/privacy\", \"de\": \"/de/datenschutz\"}."
35+
#: kitconcept/website/controlpanels/dsgvo.py:108
36+
msgid "help_dsgvo_privacy_url"
37+
msgstr ""
38+
3439
#. Default: "If true, the cookie consent banner will be shown immediately. If false, users will be prompted to accept cookies only in the context of blocks where they are needed."
35-
#: kitconcept/website/controlpanels/dsgvo.py:31
40+
#: kitconcept/website/controlpanels/dsgvo.py:45
3641
msgid "help_dsgvo_show_banner"
3742
msgstr ""
3843

44+
#. Default: "Analytics tracker to use. Choose 'google' for Google Analytics or 'matomo' for Matomo."
45+
#: kitconcept/website/controlpanels/dsgvo.py:69
46+
msgid "help_dsgvo_tracker"
47+
msgstr ""
48+
49+
#. Default: "JSON object with tracker configuration. For Google Analytics: {\"id\": \"G-XXXXXXX\", \"gaOptions\": {\"anonymizeIp\": true}}. For Matomo: {\"id\": 1, \"urlBase\": \"https://matomo.example.com/\"}."
50+
#: kitconcept/website/controlpanels/dsgvo.py:87
51+
msgid "help_dsgvo_tracker_options"
52+
msgstr ""
53+
3954
#: kitconcept/website/distributions.zcml:17
4055
msgid "kitconcept Website"
4156
msgstr ""
@@ -45,11 +60,26 @@ msgid "kitconcept.website"
4560
msgstr ""
4661

4762
#. Default: "Show privacy settings for"
48-
#: kitconcept/website/controlpanels/dsgvo.py:41
63+
#: kitconcept/website/controlpanels/dsgvo.py:55
4964
msgid "label_dsgvo_modules"
5065
msgstr ""
5166

67+
#. Default: "Privacy policy URL"
68+
#: kitconcept/website/controlpanels/dsgvo.py:107
69+
msgid "label_dsgvo_privacy_url"
70+
msgstr ""
71+
5272
#. Default: "Show GDPR banner on first visit"
53-
#: kitconcept/website/controlpanels/dsgvo.py:30
73+
#: kitconcept/website/controlpanels/dsgvo.py:44
5474
msgid "label_dsgvo_show_banner"
5575
msgstr ""
76+
77+
#. Default: "Tracker"
78+
#: kitconcept/website/controlpanels/dsgvo.py:68
79+
msgid "label_dsgvo_tracker"
80+
msgstr ""
81+
82+
#. Default: "Tracker options"
83+
#: kitconcept/website/controlpanels/dsgvo.py:86
84+
msgid "label_dsgvo_tracker_options"
85+
msgstr ""

backend/src/kitconcept/website/locales/kitconcept.website.pot

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
msgid ""
55
msgstr ""
66
"Project-Id-Version: PACKAGE VERSION\n"
7-
"POT-Creation-Date: 2026-05-13 10:56+0000\n"
7+
"POT-Creation-Date: 2026-06-17 12:10+0000\n"
88
"PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n"
99
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1010
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -30,15 +30,30 @@ msgid "GDPR Settings"
3030
msgstr ""
3131

3232
#. Default: "List of 3rd-party sites to be shown in privacy preferences."
33-
#: kitconcept/website/controlpanels/dsgvo.py:42
33+
#: kitconcept/website/controlpanels/dsgvo.py:56
3434
msgid "help_dsgvo_modules"
3535
msgstr ""
3636

37+
#. Default: "JSON object mapping language codes to privacy policy paths or URLs. Example: {\"en\": \"/en/privacy\", \"de\": \"/de/datenschutz\"}."
38+
#: kitconcept/website/controlpanels/dsgvo.py:108
39+
msgid "help_dsgvo_privacy_url"
40+
msgstr ""
41+
3742
#. Default: "If true, the cookie consent banner will be shown immediately. If false, users will be prompted to accept cookies only in the context of blocks where they are needed."
38-
#: kitconcept/website/controlpanels/dsgvo.py:31
43+
#: kitconcept/website/controlpanels/dsgvo.py:45
3944
msgid "help_dsgvo_show_banner"
4045
msgstr ""
4146

47+
#. Default: "Analytics tracker to use. Choose 'google' for Google Analytics or 'matomo' for Matomo."
48+
#: kitconcept/website/controlpanels/dsgvo.py:69
49+
msgid "help_dsgvo_tracker"
50+
msgstr ""
51+
52+
#. Default: "JSON object with tracker configuration. For Google Analytics: {\"id\": \"G-XXXXXXX\", \"gaOptions\": {\"anonymizeIp\": true}}. For Matomo: {\"id\": 1, \"urlBase\": \"https://matomo.example.com/\"}."
53+
#: kitconcept/website/controlpanels/dsgvo.py:87
54+
msgid "help_dsgvo_tracker_options"
55+
msgstr ""
56+
4257
#: kitconcept/website/distributions.zcml:17
4358
msgid "kitconcept Website"
4459
msgstr ""
@@ -48,11 +63,26 @@ msgid "kitconcept.website"
4863
msgstr ""
4964

5065
#. Default: "Show privacy settings for"
51-
#: kitconcept/website/controlpanels/dsgvo.py:41
66+
#: kitconcept/website/controlpanels/dsgvo.py:55
5267
msgid "label_dsgvo_modules"
5368
msgstr ""
5469

70+
#. Default: "Privacy policy URL"
71+
#: kitconcept/website/controlpanels/dsgvo.py:107
72+
msgid "label_dsgvo_privacy_url"
73+
msgstr ""
74+
5575
#. Default: "Show GDPR banner on first visit"
56-
#: kitconcept/website/controlpanels/dsgvo.py:30
76+
#: kitconcept/website/controlpanels/dsgvo.py:44
5777
msgid "label_dsgvo_show_banner"
5878
msgstr ""
79+
80+
#. Default: "Tracker"
81+
#: kitconcept/website/controlpanels/dsgvo.py:68
82+
msgid "label_dsgvo_tracker"
83+
msgstr ""
84+
85+
#. Default: "Tracker options"
86+
#: kitconcept/website/controlpanels/dsgvo.py:86
87+
msgid "label_dsgvo_tracker_options"
88+
msgstr ""
-32.5 KB
Loading
-41.1 KB
Loading
-63 KB
Loading
-80.9 KB
Loading

docs/docs/how-to-guides/settings/configure-gdpr-settings.md

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ This guide shows you how to configure the cookie consent banner, the third-party
2323
1. Go to **Site Setup**.
2424
2. Under the general settings, open **GDPR Settings**.
2525

26-
![The GDPR Settings control panel, showing the banner toggle, privacy modules, tracker, tracker options, and privacy policy URL fields](/_static/images/gdpr-settings-overview.png)
26+
![The GDPR Settings control panel showing the Show GDPR banner on first visit toggle, Show privacy settings for field, Tracker dropdown, Tracker options JSON editor button, and Privacy policy URL JSON editor button](/_static/images/gdpr-settings-overview.png)
2727

2828
### 2. Show or hide the banner on first visit
2929

@@ -51,15 +51,15 @@ In the **Tracker** field, select which analytics service the site should use:
5151

5252
Leave it empty if you don't want to enable any analytics tracker.
5353

54-
![The Tracker field's dropdown open, showing the google and matomo options](/_static/images/gdpr-settings-tracker-dropdown.png)
54+
![The Tracker dropdown open, showing the google, matomo, and No value options](/_static/images/gdpr-settings-tracker-dropdown.png)
5555

5656
### 5. Configure the tracker options
5757

5858
Click **Open configuration** next to **Tracker options** to open the JSON editor:
5959

60-
![The Tracker options JSON editor modal](/_static/images/gdpr-settings-tracker-options-modal.png)
60+
![The Tracker options JSON editor modal showing a null value](/_static/images/gdpr-settings-tracker-options-modal.png)
6161

62-
The modal opens empty. Enter the configuration for the tracker you selected in step 4:
62+
The modal opens with `null`. Replace it with the configuration for the tracker you selected in step 4:
6363

6464
- For Google Analytics:
6565

@@ -83,9 +83,20 @@ Click **Close** to save the JSON and return to the control panel.
8383

8484
### 6. Set the privacy policy URL
8585

86-
In **Privacy policy URL**, enter the path or URL of your privacy policy page, for example `/en/privacy`. The cookie consent banner links to this page.
86+
Click **Open configuration** next to **Privacy policy URL** to open the JSON editor. Enter a JSON object that maps each language code to the path or URL of the privacy policy page for that language. The cookie consent banner automatically picks the URL that matches the visitor's current language.
8787

88-
![The GDPR Settings control panel with a privacy policy URL set](/_static/images/gdpr-settings-privacy-url-set.png)
88+
For a site with English and German:
89+
90+
```json
91+
{
92+
"en": "/en/privacy",
93+
"de": "/de/datenschutz"
94+
}
95+
```
96+
97+
![The Privacy policy URL JSON editor modal showing a null value](/_static/images/gdpr-settings-privacy-url-set.png)
98+
99+
The modal opens with `null`. Replace it with your JSON object, then click **Close** to save and return to the control panel.
89100

90101
### 7. Save
91102

@@ -95,7 +106,7 @@ Click **Save** in the left toolbar.
95106

96107
1. Visit the site as an anonymous user. If you enabled the banner on first visit, it should appear immediately.
97108
2. Open the privacy preferences and confirm that only the modules you selected in step 3 are listed.
98-
3. Click the privacy policy link in the banner and confirm it leads to the page you set in step 6.
109+
3. Click the privacy policy link in the banner and confirm it leads to the correct language-specific page you configured in step 6.
99110
4. Accept tracking and confirm that the analytics requests for the tracker you configured (Google Analytics or Matomo) are sent.
100111

101112
## Notes

0 commit comments

Comments
 (0)