From 2162667328adc2fed60f7d6441e688ef588595ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Mon, 20 Apr 2026 13:08:27 +0200 Subject: [PATCH 1/6] Update security fixes --- docs/release-notes/17-3-1/README.md | 36 +++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 docs/release-notes/17-3-1/README.md diff --git a/docs/release-notes/17-3-1/README.md b/docs/release-notes/17-3-1/README.md new file mode 100644 index 000000000000..c0eadfc87121 --- /dev/null +++ b/docs/release-notes/17-3-1/README.md @@ -0,0 +1,36 @@ +--- +title: OpenProject 17.3.1 +sidebar_navigation: + title: 17.3.1 +release_version: 17.3.1 +release_date: 2026-04-20 +--- + + # OpenProject 17.3.1 + + Release date: 2026-04-20 + + We released OpenProject [OpenProject 17.3.1](https://community.openproject.org/versions/2288). + The release contains several bug fixes and we recommend updating to the newest version. + Below you will find a complete list of all changes and bug fixes. + + + + + + + +## Bug fixes and changes + + + + +- Bugfix: Some macros cannot be used (displayed behind modal) while creating a new child via relations tab \[[#62585](https://community.openproject.org/wp/62585)\] +- Bugfix: The 'Reload' action in the banner about the meeting being updated in the background no longer auto-scrolls to the previous position \[[#70559](https://community.openproject.org/wp/70559)\] +- Bugfix: Items multiplying on page and page becoming unresponsive when macros and code snippet are used \[[#73117](https://community.openproject.org/wp/73117)\] +- Bugfix: Remove a 2FA device from a user as admin does not work \[[#73218](https://community.openproject.org/wp/73218)\] +- Bugfix: Error when changing wp type from the wp list \[[#73224](https://community.openproject.org/wp/73224)\] +- Bugfix: Internal error on custom actions form \[[#74131](https://community.openproject.org/wp/74131)\] + + + From 93b3645c5499aa17b3e1bc568092885171cf23c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Mon, 20 Apr 2026 13:08:28 +0200 Subject: [PATCH 2/6] Add release-notes file --- docs/release-notes/README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/release-notes/README.md b/docs/release-notes/README.md index a2c36ea9a972..3ec076a4427b 100644 --- a/docs/release-notes/README.md +++ b/docs/release-notes/README.md @@ -13,6 +13,13 @@ Stay up to date and get an overview of the new features included in the releases +## 17.3.1 + +Release date: 2026-04-20 + +[Release Notes](17-3-1/) + + ## 17.3.0 Release date: 2026-04-15 From 6d8872768363153153eb79bfffb5eb1ea8a20c1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Mon, 20 Apr 2026 13:08:29 +0200 Subject: [PATCH 3/6] Update hocuspocus image to openproject/hocuspocus:17.3.1 --- docker/prod/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/prod/Dockerfile b/docker/prod/Dockerfile index 9271e5f5d537..2a9177b642a0 100755 --- a/docker/prod/Dockerfile +++ b/docker/prod/Dockerfile @@ -141,7 +141,7 @@ ENV PGDATA=/var/openproject/pgdata COPY --from=openproject/gosu /go/bin/gosu /usr/local/bin/gosu RUN chmod +x /usr/local/bin/gosu && gosu nobody true -COPY --from=openproject/hocuspocus:17.3.0 --chown=$APP_USER:$APP_USER /app /opt/hocuspocus +COPY --from=openproject/hocuspocus:17.3.1 --chown=$APP_USER:$APP_USER /app /opt/hocuspocus # Keep node/npm in all-in-one for bundled hocuspocus even when BIM support is disabled. COPY --from=build-base /usr/local/bin/node /usr/local/bin/node COPY --from=build-base /usr/local/lib/node_modules /usr/local/lib/node_modules From a6129a7f3639f43062200d461480ea4988123d6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Mon, 20 Apr 2026 13:08:30 +0200 Subject: [PATCH 4/6] Update publiccode.yml --- publiccode.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/publiccode.yml b/publiccode.yml index f3b794b37fe4..8d1cb8709698 100644 --- a/publiccode.yml +++ b/publiccode.yml @@ -7,8 +7,8 @@ name: OpenProject applicationSuite: openDesk url: 'https://github.com/opf/openproject' roadmap: 'https://www.openproject.org/roadmap' -releaseDate: '2026-04-15' -softwareVersion: '17.3.0' +releaseDate: '2026-04-20' +softwareVersion: '17.3.1' developmentStatus: stable softwareType: standalone/web logo: 'publiccode_logo.svg' From 098bd4927c38c9be735c7b60ea82a948db8b69ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Mon, 20 Apr 2026 13:08:33 +0200 Subject: [PATCH 5/6] Bumped version to 17.3.2 [ci skip] --- lib/open_project/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/open_project/version.rb b/lib/open_project/version.rb index 6f2fbeb3e744..72977a83cb63 100644 --- a/lib/open_project/version.rb +++ b/lib/open_project/version.rb @@ -33,7 +33,7 @@ module OpenProject module VERSION # :nodoc: MAJOR = 17 MINOR = 3 - PATCH = 1 + PATCH = 2 class << self def revision From 68286ab68f69e04bd6b813b63fab632e8276c808 Mon Sep 17 00:00:00 2001 From: OpenProject Actions CI Date: Tue, 21 Apr 2026 04:20:30 +0000 Subject: [PATCH 6/6] update locales from crowdin [ci skip] --- config/locales/crowdin/de.yml | 16 +++++++-------- config/locales/crowdin/hu.yml | 6 +++--- .../backlogs/config/locales/crowdin/de.yml | 2 +- modules/costs/config/locales/crowdin/de.yml | 12 +++++------ .../documents/config/locales/crowdin/de.yml | 4 ++-- modules/grids/config/locales/crowdin/de.yml | 2 +- modules/meeting/config/locales/crowdin/de.yml | 20 +++++++++---------- 7 files changed, 31 insertions(+), 31 deletions(-) diff --git a/config/locales/crowdin/de.yml b/config/locales/crowdin/de.yml index 9905a4194b29..880955ff275e 100644 --- a/config/locales/crowdin/de.yml +++ b/config/locales/crowdin/de.yml @@ -440,7 +440,7 @@ de: confirm: Entfernen leave_confirmation: title: Änderungen speichern, bevor Sie fortfahren? - description: Sie sind im Begriff, diese Seite zu verlassen, aber Sie haben noch nicht gespeicherte Änderungen. Möchten Sie diese speichern, bevor Sie fortfahren? + description: Sie sind dabei, diese Seite zu verlassen, haben aber noch nicht gespeicherte Änderungen. Möchten Sie diese vor dem Fortfahren speichern? ignore: Änderungen ignorieren save: Änderungen speichern und fortfahren role_selector: @@ -582,13 +582,13 @@ de: blankslate: root: title: Ihre Liste der Elemente ist leer - description: Beginnen Sie mit dem Hinzufügen von Elementen in das benutzerdefinierte Feld der Typ-Hierarchie. Jedes Element kann verwendet werden, um eine Hierarchie darunter zu erstellen. Um Unterelemente innerhalb einer Hierarchie zu navigieren und zu erstellen, klicken Sie auf das erstellte Element. + description: Beginnen Sie mit dem Hinzufügen von Elementen in das selbstdefinierte Feld der Typ-Hierarchie. Jedes Element kann verwendet werden, um eine Hierarchie darunter zu erstellen. Um Unterelemente innerhalb einer Hierarchie zu navigieren und zu erstellen, klicken Sie auf das erstellte Element. item: title: Dieses Element hat keine untergeordnete Hierarchieebene description: Füge Elemente zu dieser Liste hinzu, um Unterelemente innerhalb eines anderen zu erstellen delete_dialog: - title: Benutzerdefiniertes Feldelement löschen - heading: Benutzerdefiniertes Feldelement löschen? + title: Selbstdefiniertes Feldelement löschen + heading: Slebstdefiniertes Feldelement löschen? description: Mit dieser Aktion werden das Element und alle seine Unterelemente unwiderruflich entfernt. Alle zugewiesenen Werte werden endgültig gelöscht. Wenn dieses Feld erforderlich ist, kann das Entfernen von Elementen dazu führen, dass bestehende Arbeitspakete ungültig werden. placeholder: label: Elementbezeichnung @@ -635,11 +635,11 @@ de: no_role_assigment: Keine Rollenzuweisung instructions: is_required: - all: Markieren Sie das benutzerdefinierte Feld als erforderlich. Dadurch wird das Ausfüllen des Feldes bei der Erstellung neuer Ressourcen obligatorisch. Bei der Aktualisierung bestehender Felder wird kein Wert benötigt. + all: Markieren Sie das selbstdefinierte Feld als erforderlich. Dadurch wird das Ausfüllen des Feldes bei der Erstellung neuer Ressourcen obligatorisch. Bei der Aktualisierung bestehender Felder wird kein Wert benötigt. project: Erforderliche Attribute müssen vom Benutzer bei der Projekterstellung ausgefüllt werden, wenn das Feld aktiv ist ("Für alle Projekte" aktiviert oder beim Kopieren eines Projekts/Templates, in dem das Feld aktiv ist). Vorhandene Projekte benötigen keinen Wert, wenn sie aktualisiert werden. is_for_all: - all: Markiert das benutzerdefinierte Feld als verfügbar in allen bestehenden und neuen Projekten. - project: Markiert das benutzerdefinierte Feld als verfügbar in allen bestehenden und neuen Projekten. + all: Markiert das selbstdefinierte Feld als verfügbar in allen bestehenden und neuen Projekten. + project: Markiert das selbstdefinierte Feld als verfügbar in allen bestehenden und neuen Projekten. multi_select: all: Ermöglicht dem Benutzer, diesem benutzerdefinierten Feld mehrere Werte zuzuweisen. project: Ermöglicht dem Benutzer, diesem benutzerdefinierten Feld mehrere Werte zuzuweisen. @@ -652,7 +652,7 @@ de: all: Das Attribut ist nur für Administratoren sichtbar. Nutzer ohne Adminrechte können dieses Attribut nicht sehen oder bearbeiten. project: Das Attribut ist nur für Administratoren sichtbar. Nutzer ohne Adminrechte können dieses Attribut nicht sehen oder bearbeiten. is_filter: - all: 'Erlaubt das benutzerdefinierte Feld in einem Filter in der Arbeitspaket-Ansicht zu verwenden. Beachten Sie, dass, nur wenn "Für alle Projekte" ausgewählt ist, das benutzerdefinierte Feld in globalen Ansichten angezeigt wird. + all: 'Erlaubt das selbstdefinierte Feld in einem Filter in der Arbeitspaket-Ansicht zu verwenden. Beachten Sie, dass, nur wenn "Für alle Projekte" ausgewählt ist, das selbstdefinierte Feld in globalen Ansichten angezeigt wird. ' formula: diff --git a/config/locales/crowdin/hu.yml b/config/locales/crowdin/hu.yml index 7a8be4745113..651df1ab955d 100644 --- a/config/locales/crowdin/hu.yml +++ b/config/locales/crowdin/hu.yml @@ -1475,10 +1475,10 @@ hu: follows_description: A kapcsolódó munkacsomagnak feltétlenül be kell fejeződnie, mielőtt ez a munkacsomag elkezdődhet label_child_singular: child label_child_plural: children - new_child: Új gyermek kapcsolat hozzáadása + new_child: Új gyermek munkacsomag létrehozása new_child_description: Új kapcsolódó munkacsomagot hoz létre az aktuális munkacsomag (szülő) alelemeként - child: Child - child_description: Makes the related work package a sub-item of the current (parent) work package + child: Gyermek + child_description: Meglévő munkacsomag csatolása az aktuális munkacsomag (szülő) alelemeként parent: Szülő parent_description: A kapcsolódó munkacsomagot az aktuális munkacsomag (gyermek) szülőjévé teszi label_closest: Closest diff --git a/modules/backlogs/config/locales/crowdin/de.yml b/modules/backlogs/config/locales/crowdin/de.yml index e94db1b06732..8b0962850006 100644 --- a/modules/backlogs/config/locales/crowdin/de.yml +++ b/modules/backlogs/config/locales/crowdin/de.yml @@ -225,7 +225,7 @@ de: task_type: cannot_be_story_type: kann nicht auch ein Story-Typ sein label_backlog: Backlog - label_inbox: Eingang + label_inbox: Posteingang label_backlogs: Backlogs label_backlogs_unconfigured: Sie haben noch keine Backlogs konfiguriert. Bitte gehen Sie auf %{administration} > %{plugins}, klicken Sie dann auf den %{configure} Link für dieses Plugin. Kommen Sie hierher zurück, sobald sie die Felder konfiguriert haben. label_blocks_ids: IDs der blockierten Arbeitspakete diff --git a/modules/costs/config/locales/crowdin/de.yml b/modules/costs/config/locales/crowdin/de.yml index d4a8adf68a6a..7f3c2619045d 100644 --- a/modules/costs/config/locales/crowdin/de.yml +++ b/modules/costs/config/locales/crowdin/de.yml @@ -34,7 +34,7 @@ de: logged_by: Gebucht von entity: Eintrag für entity_id: Eintrag für - entity_gid: Eintrag für + entity_gid: Gebucht für cost_type: unit: Einheit unit_plural: Einheit plural @@ -62,9 +62,9 @@ de: start_time: Startzeit end_time: Endzeit time: Zeit - entity: Eintrag für - entity_id: Eintrag für - entity_gid: Eintrag für + entity: Geloggt für + entity_id: Geloggt für + entity_gid: Geloggt für models: time_entry: one: Zeitbuchung @@ -84,7 +84,7 @@ de: time_entry: invalid_time: muss zwischen 00:00 und 23:59 liegen. cannot_log_for_this_work_package: Für dieses Arbeitspaket kann keine Zeit gebucht werden. - duplicate_ongoing: Eine laufende Zeitbuchung existiert bereits für diesen Nutzer. + duplicate_ongoing: Für diese Person besteht bereits eine laufende Zeitbuchung. work_package: is_not_a_valid_target_for_cost_entries: 'Arbeitspaket #%{id} ist kein gültiges Ziel für die Zuordnug der Stückkosteneinträge.' nullify_is_not_valid_for_cost_entries: Stückkosten können keinem Projekt zugeordnet werden. @@ -187,7 +187,7 @@ de: notice_successful_restore: Erfolgreich wiederhergestellt. notice_successful_lock: Erfolgreich gesperrt. notice_cost_logged_successfully: Stückkosten erfolgreich gebucht. - notice_different_time_zones: Dieser Benutzer hat eine andere Zeitzone (%{tz}). Die Zeit wird unter Verwendung seiner Zeitzone protokolliert. + notice_different_time_zones: Diese Person hat eine andere Zeitzone (%{tz}). Die Zeit wird unter Verwendung seiner Zeitzone protokolliert. notice_time_entry_update_failed: 'Fehler beim Aktualisieren der Zeitbuchung. Fehler: %{errors}' notice_time_entry_delete_failed: 'Fehler beim Löschen des Zeiteintrags. Fehler: %{errors}' permission_edit_cost_entries: Bearbeiten gebuchter Stückkosten diff --git a/modules/documents/config/locales/crowdin/de.yml b/modules/documents/config/locales/crowdin/de.yml index 14a5c8488f6f..d7fa9e498e24 100644 --- a/modules/documents/config/locales/crowdin/de.yml +++ b/modules/documents/config/locales/crowdin/de.yml @@ -114,7 +114,7 @@ de: collaboration_settings: page_header: description: |- - Wenn die Echtzeit-Kollaboration aktiviert ist, können mehrere Benutzer ein Dokument zur gleichen Zeit bearbeiten. + Wenn die Echtzeit-Kollaboration aktiviert ist, können mehrere Personen ein Dokument zur gleichen Zeit bearbeiten. Sie erfordert einen funktionierenden %{hocuspocus_server_link}, um zu funktionieren. banner: none_writable: Diese Werte werden über Umgebungsvariablen konfiguriert und können hier nicht bearbeitet werden. @@ -130,7 +130,7 @@ de: enable_text_collaboration: heading: Echtzeit-Kollaboration ist nicht aktiv description: |- - Sobald diese Funktion aktiviert ist, können mehrere Benutzer gleichzeitig an einem Dokument arbeiten. + Sobald diese Funktion aktiviert ist, können mehrere Personen gleichzeitig an einem Dokument arbeiten. Alle neuen Dokumente basieren auf einem neuen Editor (BlockNote) und erfordern eine funktionierende Verbindung zu einem Hocuspocus-Server. primary_action: Echtzeit-Kollaboration aktivieren success: Echtzeit-Kollaboration wurde aktiviert. diff --git a/modules/grids/config/locales/crowdin/de.yml b/modules/grids/config/locales/crowdin/de.yml index 5b34fbea569f..a909d2752c59 100644 --- a/modules/grids/config/locales/crowdin/de.yml +++ b/modules/grids/config/locales/crowdin/de.yml @@ -12,7 +12,7 @@ de: button_text: Unterelement members: title: Mitglieder - no_results: Kein sichtbaren Mitglieder. + no_results: Keine sichtbaren Mitglieder. view_all_members: Alle Mitglieder anzeigen show_members_count: Alle %{count} Mitglieder anzeigen x_more: diff --git a/modules/meeting/config/locales/crowdin/de.yml b/modules/meeting/config/locales/crowdin/de.yml index 86c75e15fca4..a4a9f6baa19e 100644 --- a/modules/meeting/config/locales/crowdin/de.yml +++ b/modules/meeting/config/locales/crowdin/de.yml @@ -202,13 +202,13 @@ de: meeting: participants: label: - participants: Teilnehmer + participants: Teilnehmende attended: Teilgenommen mark_as_attended: Als teilgenommen markieren mark_all_as_attended: Alle als teilgenommen markieren - remove_participant: Teilnehmer entfernen - manage_participants: Teilnehmer verwalten - no_participants: Keine Teilnehmer + remove_participant: Teilnehmende entfernen + manage_participants: Teilnehmende verwalten + no_participants: Keine Teilnehmende show_all: Alle anzeigen apply_to_upcoming_meetings: Wenden Sie diese Änderungen auf alle kommenden Besprechungen in dieser Terminserie an text: @@ -357,7 +357,7 @@ de: sidepanel: title: E-Mail-Kalender-Aktualisierungen description: - disabled: Die Teilnehmer erhalten keine E-Mail bei Änderungen an der Besprechung. + disabled: Teilnehmende erhalten keine E-Mail bei Änderungen an der Besprechung. enabled: Alle Teilnehmenden erhalten aktualisierte Kalendereinladungen per E-Mail bei wesentlichen Änderungen der Besprechung. change_via_template: Bearbeiten Sie die Vorlage der Terminserie, um diese Einstellung zu ändern. dialog: @@ -368,7 +368,7 @@ de: enable: 'Alle Teilnehmenden erhalten aktualisierte Kalendereinladungen per E-Mail, wenn sich das Datum, die Uhrzeit, der Ort oder die Teilnehmenden der Besprechung geändert haben. Sobald die Funktion aktiviert ist, wird sofort eine E-Mail an alle Teilnehmenden gesendet. ' - disable: 'Die Teilnehmer erhalten keine aktualisierten Kalendereinladungen mehr per E-Mail, wenn sich das Datum, die Uhrzeit, der Ort oder die Teilnehmer der Besprechung geändert haben. Wenn sie bereits eine Einladung für diese Besprechung hatten, wird diese nicht mehr aktualisiert und könnte veraltete Informationen anzeigen. + disable: 'Teilnehmende erhalten keine aktualisierten Kalendereinladungen mehr per E-Mail, wenn sich Datum, Uhrzeit, Ort oder Teilnehmende der Besprechung ändern. Wenn sie bereits eine Einladung für diese Besprechung erhalten haben, wird diese nicht mehr aktualisiert und könnte veraltete Informationen enthalten. ' confirm_label: @@ -389,7 +389,7 @@ de: enabled: 'Alle Teilnehmenden erhalten aktualisierte Kalendereinladungen per E-Mail, wenn Sie Teilnehmende hinzufügen oder entfernen. ' - disabled: 'Die Teilnehmer erhalten keine E-Mail, die sie über Änderungen des Datums, der Uhrzeit oder der Teilnehmer der Besprechung informiert. + disabled: 'Die Teilnehmended erhalten keine E-Mail, die sie über Änderungen des Datums, der Uhrzeit oder der Teilnehmer der Besprechung informiert. ' occurrence: @@ -644,7 +644,7 @@ de: text_meeting_draft_description: Bereiten Sie Ihre Tagesordnung als Entwurf vor. Besprechungen in diesem Modus versenden keine Kalenderaktualisierungen oder Einladungen, selbst wenn Sie Besprechungsdetails ändern oder Teilnehmende hinzufügen/entfernen. text_meeting_open_description: Sie können Tagesordnungspunkte hinzufügen oder entfernen und bearbeiten. Sobald die Tagesordnung fertig ist, wechseln Sie auf In Durchführung, um Ergebnisse zu dokumentieren. text_meeting_closed_description: Diese Besprechung ist abgeschlossen. Sie können keine Tagesordnungspunkte mehr hinzufügen/entfernen. - text_meeting_in_progress_description: Sie können die Tagesordnung ändern, die Ergebnisse für jeden Agendapunkt dokumentieren und die Anwesenheit der Teilnehmer verfolgen. Sobald die Besprechung abgeschlossen ist, können Sie sie als geschlossen markieren, um sie zu sperren. + text_meeting_in_progress_description: Sie können die Tagesordnung ändern, die Ergebnisse für jeden Agendapunkt dokumentieren und die Anwesenheit der Teilnehmenden verfolgen. Sobald die Besprechung abgeschlossen ist, können Sie sie als geschlossen markieren, um sie zu sperren. text_meeting_open_dropdown_description: Alle bestehenden Ergebnisse bleiben bestehen, aber die Benutzer werden nicht in der Lage sein, neue Ergebnisse hinzuzufügen. text_meeting_in_progress_dropdown_description: Ergebnisse der Besprechung festhalten, wie z. B. Informationsbedarf oder Entscheidungen, die während der Besprechung getroffen werden. text_meeting_closed_dropdown_description: Diese Besprechung ist geschlossen. Sie können keine Tagesordnungspunkte mehr hinzufügen/entfernen. @@ -683,7 +683,7 @@ de: text_agenda_item_dialog_skipping_cancelled_many: 'Hinweis: Überspringe %{count} abgesagte Besprechungen.' text_work_package_add_to_meeting_hint: Über den Button "Zur Besprechung hinzufügen" können Sie dieses Arbeitspaket zu einer zukünftigen Besprechung hinzuzufügen. text_work_package_has_no_past_meeting_agenda_items: Dieses Arbeitspaket wurde in einer früheren Besprechung nicht als Tagesordnungspunkt hinzugefügt. - text_email_updates_muted: E-Mail-Kalenderaktualisierungen sind deaktiviert. Die Teilnehmer erhalten keine aktualisierten Einladungen per E-Mail, wenn Sie Änderungen vornehmen. + text_email_updates_muted: E-Mail-Kalenderaktualisierungen sind deaktiviert. Teilnehmende erhalten keine aktualisierten Einladungen per E-Mail, wenn Sie Änderungen vornehmen. text_email_updates_enabled: E-Mail-Kalenderaktualisierungen sind aktiviert. Alle Teilnehmenden erhalten aktualisierte Einladungen per E-Mail, wenn Sie Änderungen vornehmen. my_account: access_tokens: @@ -693,7 +693,7 @@ de: title: iCalendar für Besprechungen table_title: iCalendar-Besprechungs-Token text_hint: iCalendar Besprechungs-Token ermöglichen es Benutzern, ihre Besprechungen zu abonnieren und aktuelle Informationen in externen Kalendern anzuzeigen. - disabled_text: iCalendar Besprechungs-Abonnements wurden nicht vom Administrator aktiviert. Bitte wenden Sie sich an Ihren Administrator, um diese Funktion zu nutzen. + disabled_text: iCalendar Besprechungs-Abonnements wurden nicht von Administratoren aktiviert. Bitte wenden Sie sich an Ihre Administratoren, um diese Funktion zu nutzen. add_button: Im Kalender abonnieren my: access_token: