diff --git a/.project-dictionary.txt b/.project-dictionary.txt
index c17fcebf15bfa8d3272c99c26db38071f6f207e8..055bb5fc5e43bc3ac2ba5fdd0021c9ac65592e8f 100644
--- a/.project-dictionary.txt
+++ b/.project-dictionary.txt
@@ -1,3 +1,4 @@
+activitypub
 Andi
 ASGI
 backoffice
@@ -9,37 +10,47 @@ Conferencemember
 csrf
 csrfmiddlewaretoken
 datatables
+dect
 derefer
 Dereferrer
+Disclaimern
 Einlöseseite
 endblocktranslate
 endfor
 endspaceless
 engelsystem
 exneuland
+favorited
 forloop
 gettz
 Habitatsbeitritt
 Habitatseinladung
 Habitatszuordnung
 htmlhead
+jitsi
 JITSI
 keepalive
 markdownify
 merch
 Merch
 metanav
+mgmt
 msgid
 msgstr
 naturaltime
 nplurals
+orga
 Orga
 pentabarf
 plainui
 pois
 pretix
+Registrierungs
+Registrierungsinformationen
+Registrierungsstart
 renderable
 Roang
+Shadowbanned
 Shibboleet
 Vorlesungsraum
 Vorlesungssaal
diff --git a/src/backoffice/locale/de/LC_MESSAGES/django.po b/src/backoffice/locale/de/LC_MESSAGES/django.po
index 5948482be0a097e1c0224d007121310605c5d0ad..1b28bba1ee65541bed4342812c902c3f5747a882 100644
--- a/src/backoffice/locale/de/LC_MESSAGES/django.po
+++ b/src/backoffice/locale/de/LC_MESSAGES/django.po
@@ -564,7 +564,7 @@ msgid "assemblies_filteredtag"
 msgstr "Es werden nur Assemblies mit dem folgenden Tag angezeigt:"
 
 # use translation from core
-msgid "Assembly__hierarchy-cluster"
+msgid "Assembly__hierarchy__cluster"
 msgstr ""
 
 # use translation from core
diff --git a/src/backoffice/locale/en/LC_MESSAGES/django.po b/src/backoffice/locale/en/LC_MESSAGES/django.po
index 19d140bb1cbf4edbbe82f3e9fffb6df32562f376..061dec354005bc93368b1a340563008944630070 100644
--- a/src/backoffice/locale/en/LC_MESSAGES/django.po
+++ b/src/backoffice/locale/en/LC_MESSAGES/django.po
@@ -564,7 +564,7 @@ msgid "assemblies_filteredtag"
 msgstr "Showing only assemblies tagged with:"
 
 # use translation from core
-msgid "Assembly__hierarchy-cluster"
+msgid "Assembly__hierarchy__cluster"
 msgstr ""
 
 # use translation from core
diff --git a/src/backoffice/templates/backoffice/assembly_list.html b/src/backoffice/templates/backoffice/assembly_list.html
index 3824104a00033426ca879adb9b92fd950da6dae8..05c323a66885af7d4eb19a77241f7094edd87a0a 100644
--- a/src/backoffice/templates/backoffice/assembly_list.html
+++ b/src/backoffice/templates/backoffice/assembly_list.html
@@ -61,7 +61,7 @@
         <thead>
           <tr>
             {% if conference.support_clusters %}
-              <th>{% trans "Assembly__hierarchy-cluster" %}</th>
+              <th>{% trans "Assembly__hierarchy__cluster" %}</th>
             {% endif %}
             <th>{% trans "Assembly__name" %}</th>
             <th title="{% trans "Assembly__is_official" %}">{% trans "Assembly__is_official__short" %}</th>
diff --git a/src/backoffice/templates/backoffice/moderation_assembly-list.html b/src/backoffice/templates/backoffice/moderation_assembly-list.html
index 428b542b565baee0133e50f83dbf83b035192087..0823babad4b0f7ca91b0929225d3212ea1aff352 100644
--- a/src/backoffice/templates/backoffice/moderation_assembly-list.html
+++ b/src/backoffice/templates/backoffice/moderation_assembly-list.html
@@ -61,7 +61,7 @@
         <thead>
           <tr>
             {% if conference.support_clusters %}
-              <th>{% trans "Assembly__hierarchy-cluster" %}</th>
+              <th>{% trans "Assembly__hierarchy__cluster" %}</th>
             {% endif %}
             <th>{% trans "Assembly__slug" %}</th>
             <th>{% trans "Assembly__name" %}</th>
diff --git a/src/core/locale/de/LC_MESSAGES/django.po b/src/core/locale/de/LC_MESSAGES/django.po
index ed1fa0e48e6500913493bdbf453986f6ceb4f4a1..78a8c3466ef9872f41ab518c305ec82f6a2eda10 100644
--- a/src/core/locale/de/LC_MESSAGES/django.po
+++ b/src/core/locale/de/LC_MESSAGES/django.po
@@ -168,10 +168,10 @@ msgid "Invalid Response"
 msgstr "Fehlerhafte Antwort"
 
 msgid "ActivityLogEntry"
-msgstr "Logeintrag"
+msgstr "Log-Eintrag"
 
 msgid "ActivityLogEntries"
-msgstr "Logeinträge"
+msgstr "Log-Einträge"
 
 msgid "ActivityLogEntry__kind-sys"
 msgstr "Systemänderung"
@@ -257,13 +257,13 @@ msgstr "angekommen (eigene Aussage)"
 msgid "Assembly__state-arrived_confirmed"
 msgstr "angekommen (bestätigt)"
 
-msgid "Assembly__hierarchy-regular"
+msgid "Assembly__hierarchy__regular"
 msgstr "regulär"
 
-msgid "Assembly__hierarchy-cluster"
+msgid "Assembly__hierarchy__cluster"
 msgstr "Habitat"
 
-msgid "Assembly__hierarchy-clusterrestricted"
+msgid "Assembly__hierarchy__cluster_restricted"
 msgstr "Habitat (nicht öffentlich)"
 
 msgid "Assembly__slug__help"
@@ -334,7 +334,7 @@ msgid "Assembly__is_virtual"
 msgstr "virtuell"
 
 msgid "Assembly__is_virtual__help"
-msgstr "Assembly ist virtuell dabei, z.B. über digitale Meetingräume wie WorkAdventure"
+msgstr "Assembly ist virtuell dabei, z.B. über digitale Meeting-Räume wie WorkAdventure"
 
 msgid "Assembly__is_physical"
 msgstr "physisch"
@@ -619,25 +619,25 @@ msgstr "Wenn du eine neue Badge akzeptierst wird sie standardmäßig mit dieser
 msgid "ConferenceMember__default_badge_visibility"
 msgstr "Sichtbarkeit neuer Badges"
 
-msgid "ConferenceMember__permission-confernece_admin"
+msgid "ConferenceMember__permission__conference_admin"
 msgstr "Konferenz-Admin: Kann die Veröffentlichungszeitpunkte der Konferenz verwalten"
 
-msgid "ConferenceMember__permission-assembly_team"
+msgid "ConferenceMember__permission__assembly_team"
 msgstr "Assembly-Team: alle Assemblies verwaltbar, auch noch nicht fertig angelegte und abgelehnte sind sichtbar"
 
-msgid "ConferenceMember__permission-assembly_registration_admin"
+msgid "ConferenceMember__permission__assembly_registration_admin"
 msgstr "Registrierungs-Admin: Verwalten der Registrierungsinformationen für Assemblies"
 
-msgid "ConferenceMember__permission-static_pages"
+msgid "ConferenceMember__permission__static_pages"
 msgstr "Statische Seiten: Verwaltung von Info-Seiten"
 
-msgid "ConferenceMember__permission-map_edit"
+msgid "ConferenceMember__permission__map_edit"
 msgstr "Bearbeitung der Karte (POIs)"
 
-msgid "ConferenceMember__permission-voucher_admin"
+msgid "ConferenceMember__permission__voucher_admin"
 msgstr "Voucher in der Konferenz verwalten"
 
-msgid "ConferenceMember__permission-scheduleadmin"
+msgid "ConferenceMember__permission__schedule_admin"
 msgstr "alle Schedule-Imports verwalten/debuggen"
 
 msgid "Conference"
@@ -695,7 +695,7 @@ msgid "Conference__end"
 msgstr "Ende"
 
 msgid "Conference__timezone__help"
-msgstr "Zeitzone in der die Konfernez veranstaltet wird"
+msgstr "Zeitzone in der die Konferenz veranstaltet wird"
 
 msgid "Conference__timezone"
 msgstr "Zeitzone"
@@ -770,13 +770,13 @@ msgid "Conference__support_assembly_virtual__help"
 msgstr "erlaube Assemblies in der virtuellen Welt"
 
 msgid "Conference__support_assembly_virtual"
-msgstr "virt. Assemblies"
+msgstr "virtuelle Assemblies"
 
 msgid "Conference__support_assembly_remote__help"
 msgstr "erlaube Assemblies an entfernten Standorten (ergänzt Orts-Angabe)"
 
 msgid "Conference__support_assembly_remote"
-msgstr "entf. Assemblies"
+msgstr "externe Assemblies"
 
 msgid "Conference__mail_footer__help"
 msgstr "Text, welcher am Ende einer Nachricht angehängt wird (z.B. in E-Mails)"
@@ -1010,7 +1010,7 @@ msgid "Event__favorite_of"
 msgstr "Favorisiert von"
 
 msgid "Event__owner__help"
-msgstr "Nutzer dem diese Veranstaltung gehört (sie angelegt hat), insb. für selbst Organisiertes relevant"
+msgstr "Nutzer dem diese Veranstaltung gehört (sie angelegt hat), insbesondere für selbst Organisiertes relevant"
 
 msgid "Event__owner"
 msgstr "Eigentümer"
@@ -1045,7 +1045,7 @@ msgid "Event__schedule_start__non_empty %(event_type)s"
 msgstr "Eine öffentliche %(event_type)s muss einen Begin haben!"
 
 #, python-format
-msgid "Event__schedule_start__outside_conference_timeframe %(event_type)s"
+msgid "Event__schedule_start__outside_conference_time_frame %(event_type)s"
 msgstr "Diese %(event_type)s würde außerhalb des Zeitraums der Konferenz starten."
 
 #, python-format
@@ -1320,10 +1320,10 @@ msgstr "Datum/Zeit der Nachricht"
 msgid "DirectMessage__timestamp"
 msgstr "Zeitpunkt"
 
-msgid "DirectMessage__autodelete_after__help"
+msgid "DirectMessage__auto_delete_after__help"
 msgstr "Nach diesem Zeitpunkt wird die Nachricht automatisch beim nächsten Reinigungslauf gelöscht."
 
-msgid "DirectMessage__autodelete_after"
+msgid "DirectMessage__auto_delete_after"
 msgstr "löschen nach"
 
 msgid "DirectMessage__in_reply_to__help"
@@ -1369,7 +1369,7 @@ msgid "DirectMessage__has_responded"
 msgstr "beantwortet"
 
 msgid "DirectMessage__flagged_for_abuse__help"
-msgstr "Die Nachricht wurde als missbräulich gekennzeichnet."
+msgstr "Die Nachricht wurde als missbräuchlich gekennzeichnet."
 
 msgid "DirectMessage__flagged_for_abuse"
 msgstr "Spam"
@@ -1447,7 +1447,7 @@ msgid "StaticPageNamespace__prefix"
 msgstr "Präfix"
 
 msgid "StaticPageNamespace__groups__help"
-msgstr "Liste der für diesen Namespace berechtigten Gruppen (komma-separiert)."
+msgstr "Liste der für diesen Namespace berechtigten Gruppen (Komma-separiert)."
 
 msgid "StaticPageNamespace__groups"
 msgstr "Gruppen"
@@ -1474,7 +1474,7 @@ msgid "StaticPage__privacy-none"
 msgstr "Öffentlich"
 
 msgid "StaticPage__privacy-conf"
-msgstr "Nur Eventbesucher"
+msgstr "Nur Event-Besucher"
 
 msgid "StaticPage__privacy-perm"
 msgstr "Nur Organisatoren"
@@ -1630,31 +1630,31 @@ msgstr "Es muss entweder ein Eigentümer oder eine Assembly angegeben werden. (M
 msgid "Project__owner_and_assembly_not_allowed"
 msgstr "Es muss entweder ein Besitzer oder eine Assembly gewählt werden, beides ist nicht erlaubt."
 
-msgid "Room__type-lecturehall"
+msgid "Room__type__lecture_hall"
 msgstr "Vorlesungssaal"
 
-msgid "Room__type-stage"
+msgid "Room__type__stage"
 msgstr "Bühne"
 
-msgid "Room__type-workshop"
+msgid "Room__type__workshop"
 msgstr "Workshop"
 
-msgid "Room__type-outside"
+msgid "Room__type__outside"
 msgstr "draußen"
 
-msgid "Room__type-online"
+msgid "Room__type__online"
 msgstr "online"
 
-msgid "Room__type-project"
+msgid "Room__type__project"
 msgstr "Projekt"
 
-msgid "Room__type-bbb"
+msgid "Room__type__bbb"
 msgstr "BigBlueButton"
 
-msgid "Room__type-hangar"
+msgid "Room__type__hangar"
 msgstr "Hangar"
 
-msgid "Room__type-other"
+msgid "Room__type__other"
 msgstr "andere"
 
 #, python-format
@@ -1779,7 +1779,7 @@ msgid "Room__recording_state"
 msgstr "Aufnahmestatus"
 
 #, fuzzy
-#| msgid "Room__type-project"
+#| msgid "Room__type__project"
 msgid "Room__type_project_not_allowed"
 msgstr "Projekt"
 
@@ -1813,10 +1813,10 @@ msgstr "Die Freigabe gilt für diese eine Assembly."
 msgid "RoomShare__single_assembly"
 msgstr "Assembly"
 
-msgid "RoomShare__timeframe__help"
+msgid "RoomShare__time_frame__help"
 msgstr "Start- und Endzeitpunkt zwischen denen der Raum freigegeben wird. Die Angabe ist optional, leere Angabe bedeutet \"immer\"."
 
-msgid "RoomShare__timeframe"
+msgid "RoomShare__time_frame"
 msgstr "Zeitfenster"
 
 msgid "RoomShare__all_and_single_assembly_fail"
@@ -1841,7 +1841,7 @@ msgid "ScheduleSource__import_url"
 msgstr "URL"
 
 msgid "ScheduleSource__import_configuration__help"
-msgstr "nur für Experten: implementationsspezifische Konfiguration"
+msgstr "nur für Experten: Implementierungs-spezifische Konfiguration"
 
 msgid "ScheduleSource__import_configuration"
 msgstr "Konfiguration"
@@ -1995,7 +1995,7 @@ msgid "PlatformUser__type-human"
 msgstr "Mensch"
 
 msgid "PlatformUser__type-speaker"
-msgstr "Vortragender (autom. importiert)"
+msgstr "Vortragender (automatisch importiert)"
 
 msgid "PlatformUser__type-service"
 msgstr "Dienst (Service)"
@@ -2081,10 +2081,10 @@ msgstr "Farbschema mit hohem Kontrast wählen"
 msgid "PlatformUser__high_contrast"
 msgstr "hoher Kontrast"
 
-msgid "PlatformUser__tag_ignorelist__help"
+msgid "PlatformUser__tag_ignore_list__help"
 msgstr "Vorträge, Assemblies, etc. mit diesen Tags werden ausgeblendet."
 
-msgid "PlatformUser__tag_ignorelist"
+msgid "PlatformUser__tag_ignore_list"
 msgstr "Tags ignorieren"
 
 msgid "PlatformUser__theme"
@@ -2129,11 +2129,11 @@ msgstr "Zeigt dem User auf jeder Seite diese Nachricht an"
 msgid "PlatformUser__admin_notification"
 msgstr "Admin Notification"
 
-msgid "PlatformUser__autoaccept_contacts__help"
+msgid "PlatformUser__auto_accept_contacts__help"
 msgstr "Kontaktanfragen automatisch akzeptieren"
 
-msgid "PlatformUser__autoaccept_contacts"
-msgstr "autom. akzeptieren"
+msgid "PlatformUser__auto_accept_contacts"
+msgstr "automatisch akzeptieren"
 
 msgid "PlatformUser__is_searchable__help"
 msgstr "soll der Nutzer in der Suche angezeigt werden"
@@ -2384,11 +2384,11 @@ msgstr "Du bist Teilnehmer:in von {name}."
 msgid "SSO__svc_angels"
 msgstr "Backend-Services Engelsystem @ {slug}"
 
-msgid "SSO__svc_usermgmt"
+msgid "SSO__svc_user_mgmt"
 msgstr "Deinen {slug}-Benutzerstatus setzen."
 
 msgid "SSO__authorize"
-msgstr "Authorisieren von"
+msgstr "Autorisieren von"
 
 msgid "SSO__authorize_scopes"
 msgstr "Die Seite möchte folgendes wissen:"
@@ -2403,7 +2403,7 @@ msgid "SSO__authorize_accept"
 msgstr "akzeptieren"
 
 msgid "SSO__out_of_band_noscript"
-msgstr "Bitte kopiere nun das Token in das Program, welches die Authentifikation angefragt hat. Du kannst das Token in der Adress Zeile zwischen '#code=' und '&' finden."
+msgstr "Bitte kopiere nun das Token in das Program, welches die Authentifikation angefragt hat. Du kannst das Token in der Adress-Zeile zwischen '#code=' und '&' finden."
 
 msgid "SSO__out_of_band"
 msgstr "Bitte kopiere nun das Token in die Anwendung, welche die Authentifikation angefragt hat."
@@ -2418,7 +2418,7 @@ msgid ""
 "Please use the following link and choose a new password:\n"
 msgstr ""
 "\n"
-"Du erhältst diese E-Mail, weil du ein neues Passwort für dein Benutzerkonto bei %(site_name_safe)sbeantragt hast.\n"
+"Du erhältst diese E-Mail, weil du ein neues Passwort für dein Benutzerkonto bei %(site_name_safe)s beantragt hast.\n"
 "Bitte benutze den folgenden Link um ein neues Passwort zu wählen:\n"
 
 #, python-format
diff --git a/src/core/locale/en/LC_MESSAGES/django.po b/src/core/locale/en/LC_MESSAGES/django.po
index c941b632a518f621d6a2297dcb402e6217b0114a..85ac8ddc26c70fd1ddce1d3354a1a5aed1c215d0 100644
--- a/src/core/locale/en/LC_MESSAGES/django.po
+++ b/src/core/locale/en/LC_MESSAGES/django.po
@@ -186,7 +186,7 @@ msgid "ActivityLogEntry__kind-entity"
 msgstr "entity"
 
 msgid "ActivityLogEntry__kind-other"
-msgstr "õther"
+msgstr "other"
 
 msgid "ActivityLogEntry__user__help"
 msgstr "user which triggered the logged activity"
@@ -257,13 +257,13 @@ msgstr "arrived (self-announced)"
 msgid "Assembly__state-arrived_confirmed"
 msgstr "arrived (confirmed)"
 
-msgid "Assembly__hierarchy-regular"
+msgid "Assembly__hierarchy__regular"
 msgstr "regular"
 
-msgid "Assembly__hierarchy-cluster"
+msgid "Assembly__hierarchy__cluster"
 msgstr "habitat"
 
-msgid "Assembly__hierarchy-clusterrestricted"
+msgid "Assembly__hierarchy__cluster_restricted"
 msgstr "habitat (non-public)"
 
 msgid "Assembly__slug__help"
@@ -619,25 +619,25 @@ msgstr " When you accept a new badge, it will be displayed with this visibility
 msgid "ConferenceMember__default_badge_visibility"
 msgstr "visibility of new badges"
 
-msgid "ConferenceMember__permission-confernece_admin"
+msgid "ConferenceMember__permission__conference_admin"
 msgstr "Conference admin: can manage the conference's publication times"
 
-msgid "ConferenceMember__permission-assembly_team"
+msgid "ConferenceMember__permission__assembly_team"
 msgstr "assemblies team: manage all assemblies, see also incomplete and rejected registrations"
 
-msgid "ConferenceMember__permission-assembly_registration_admin"
+msgid "ConferenceMember__permission__assembly_registration_admin"
 msgstr "Registration-Admin: Manage registration information for assemblies"
 
-msgid "ConferenceMember__permission-static_pages"
+msgid "ConferenceMember__permission__static_pages"
 msgstr "static pages: manage information pages"
 
-msgid "ConferenceMember__permission-map_edit"
+msgid "ConferenceMember__permission__map_edit"
 msgstr "edit the map (POIs)"
 
-msgid "ConferenceMember__permission-voucher_admin"
+msgid "ConferenceMember__permission__voucher_admin"
 msgstr "manage vouchers"
 
-msgid "ConferenceMember__permission-scheduleadmin"
+msgid "ConferenceMember__permission__schedule_admin"
 msgstr "manage/debug schedule source imports"
 
 msgid "Conference"
@@ -1045,7 +1045,7 @@ msgid "Event__schedule_start__non_empty %(event_type)s"
 msgstr "Start of public %(event_type)ss must be set!"
 
 #, python-format
-msgid "Event__schedule_start__outside_conference_timeframe %(event_type)s"
+msgid "Event__schedule_start__outside_conference_time_frame %(event_type)s"
 msgstr "Your  %(event_type)s starts outside the conference's time frame."
 
 #, python-format
@@ -1069,11 +1069,11 @@ msgid "Event__is_public__conference_has_no_start %(event_type)s"
 msgstr "The conference has no start date yet, %(event_type)ss cannot be published."
 
 msgid "Event__room__unavailable"
-msgstr "The selected room is not available (in the selected timeframe)."
+msgstr "The selected room is not available (in the selected time-frame)."
 
 #, python-format
 msgid "Event__room__colliding_events_%(slugs)s"
-msgstr "There are already events in the selected room at the selected timeframe: %(slugs)s"
+msgstr "There are already events in the selected room at the selected time-frame: %(slugs)s"
 
 #, python-format
 msgid "Event__room__colliding_events_plus%(count)dhidden"
@@ -1320,10 +1320,10 @@ msgstr "date and time of this message"
 msgid "DirectMessage__timestamp"
 msgstr "timestamp"
 
-msgid "DirectMessage__autodelete_after__help"
+msgid "DirectMessage__auto_delete_after__help"
 msgstr "This message will be deleted during the next cleanup run after this timestamp."
 
-msgid "DirectMessage__autodelete_after"
+msgid "DirectMessage__auto_delete_after"
 msgstr "delete after"
 
 msgid "DirectMessage__in_reply_to__help"
@@ -1630,31 +1630,31 @@ msgstr "Either a owner or an assembly must be provided. (Mutually exclusive)"
 msgid "Project__owner_and_assembly_not_allowed"
 msgstr "Either a owner or an assembly must be chosen, both are not allowed."
 
-msgid "Room__type-lecturehall"
+msgid "Room__type__lecture_hall"
 msgstr "lecture hall"
 
-msgid "Room__type-stage"
+msgid "Room__type__stage"
 msgstr "stage"
 
-msgid "Room__type-workshop"
+msgid "Room__type__workshop"
 msgstr "workshop room"
 
-msgid "Room__type-outside"
+msgid "Room__type__outside"
 msgstr "outside"
 
-msgid "Room__type-online"
+msgid "Room__type__online"
 msgstr "online"
 
-msgid "Room__type-project"
+msgid "Room__type__project"
 msgstr "project"
 
-msgid "Room__type-bbb"
+msgid "Room__type__bbb"
 msgstr "BigBlueButton"
 
-msgid "Room__type-hangar"
+msgid "Room__type__hangar"
 msgstr "hangar"
 
-msgid "Room__type-other"
+msgid "Room__type__other"
 msgstr "other"
 
 #, fuzzy, python-format
@@ -1811,11 +1811,11 @@ msgstr "The room is available to this specific (single) assembly."
 msgid "RoomShare__single_assembly"
 msgstr "single assembly"
 
-msgid "RoomShare__timeframe__help"
+msgid "RoomShare__time_frame__help"
 msgstr "optional: start and end point in time between which the share is active"
 
-msgid "RoomShare__timeframe"
-msgstr "timeframe"
+msgid "RoomShare__time_frame"
+msgstr "time-frame"
 
 msgid "RoomShare__all_and_single_assembly_fail"
 msgstr "It does not make sense to combine the options \"all assemblies\" with the selection of a single assembly."
@@ -1962,7 +1962,7 @@ msgid "ConferenceTag__value_type"
 msgstr "type"
 
 msgid "ConferenceTag__description__help"
-msgstr "additional explaination of this tag"
+msgstr "additional explanation of this tag"
 
 msgid "ConferenceTag__description"
 msgstr "description"
@@ -2079,10 +2079,10 @@ msgstr "use a colorscheme with high contrasts"
 msgid "PlatformUser__high_contrast"
 msgstr "high contrast"
 
-msgid "PlatformUser__tag_ignorelist__help"
+msgid "PlatformUser__tag_ignore_list__help"
 msgstr "presentations, assemblies, etc. with these tags will be hidden"
 
-msgid "PlatformUser__tag_ignorelist"
+msgid "PlatformUser__tag_ignore_list"
 msgstr "ignored tags"
 
 msgid "PlatformUser__theme"
@@ -2127,10 +2127,10 @@ msgstr "shows the user this message on every page"
 msgid "PlatformUser__admin_notification"
 msgstr "admin notification"
 
-msgid "PlatformUser__autoaccept_contacts__help"
+msgid "PlatformUser__auto_accept_contacts__help"
 msgstr "automatically accept incoming contact requests"
 
-msgid "PlatformUser__autoaccept_contacts"
+msgid "PlatformUser__auto_accept_contacts"
 msgstr "auto-accept"
 
 msgid "PlatformUser__is_searchable__help"
@@ -2382,7 +2382,7 @@ msgstr "You are a participant of {name}."
 msgid "SSO__svc_angels"
 msgstr "Engelsystem Backend service @ {slug}"
 
-msgid "SSO__svc_usermgmt"
+msgid "SSO__svc_user_mgmt"
 msgstr "Set your user status at {name}."
 
 msgid "SSO__authorize"
diff --git a/src/core/migrations/0164_alter_translation_keys.py b/src/core/migrations/0164_alter_translation_keys.py
new file mode 100644
index 0000000000000000000000000000000000000000..200bb311df358c36c692f5ce7ca615798eefe86d
--- /dev/null
+++ b/src/core/migrations/0164_alter_translation_keys.py
@@ -0,0 +1,112 @@
+# Generated by Django 5.1.3 on 2024-12-07 01:11
+
+import django.contrib.postgres.fields
+import django.contrib.postgres.fields.ranges
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("core", "0163_alter_invitation_options"),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name="conferencemember",
+            options={
+                "permissions": [
+                    (
+                        "conference_admin",
+                        "ConferenceMember__permission__conference_admin",
+                    ),
+                    ("assembly_team", "ConferenceMember__permission__assembly_team"),
+                    (
+                        "assembly_registration_admin",
+                        "ConferenceMember__permission__assembly_registration_admin",
+                    ),
+                    ("static_pages", "ConferenceMember__permission__static_pages"),
+                    ("map_edit", "ConferenceMember__permission__map_edit"),
+                    ("moderation", "Orga: Moderation"),
+                    ("voucher_admin", "ConferenceMember__permission__voucher_admin"),
+                    ("scheduleadmin", "ConferenceMember__permission__schedule_admin"),
+                ]
+            },
+        ),
+        migrations.AlterField(
+            model_name="assembly",
+            name="hierarchy",
+            field=models.CharField(
+                choices=[
+                    ("regular", "Assembly__hierarchy__regular"),
+                    ("cluster", "Assembly__hierarchy__cluster"),
+                    ("clusterrestricted", "Assembly__hierarchy__cluster_restricted"),
+                ],
+                default="regular",
+                help_text="Assembly__hierarchy__help",
+                max_length=20,
+                verbose_name="Assembly__hierarchy",
+            ),
+        ),
+        migrations.AlterField(
+            model_name="directmessage",
+            name="autodelete_after",
+            field=models.DateTimeField(
+                blank=True,
+                help_text="DirectMessage__auto_delete_after__help",
+                null=True,
+                verbose_name="DirectMessage__auto_delete_after",
+            ),
+        ),
+        migrations.AlterField(
+            model_name="platformuser",
+            name="autoaccept_contacts",
+            field=models.BooleanField(
+                default=False,
+                help_text="PlatformUser__auto_accept_contacts__help",
+                verbose_name="PlatformUser__auto_accept_contacts",
+            ),
+        ),
+        migrations.AlterField(
+            model_name="platformuser",
+            name="tag_ignorelist",
+            field=django.contrib.postgres.fields.ArrayField(
+                base_field=models.SlugField(),
+                blank=True,
+                default=list,
+                help_text="PlatformUser__tag_ignore_list__help",
+                size=None,
+                verbose_name="PlatformUser__tag_ignore_list",
+            ),
+        ),
+        migrations.AlterField(
+            model_name="room",
+            name="room_type",
+            field=models.CharField(
+                choices=[
+                    ("lecturehall", "Room__type__lecture_hall"),
+                    ("stage", "Room__type__stage"),
+                    ("workshop", "Room__type__workshop"),
+                    ("outside", "Room__type__outside"),
+                    ("online", "Room__type__online"),
+                    ("project", "Room__type__project"),
+                    ("bbb", "Room__type__bbb"),
+                    ("hangar", "Room__type__hangar"),
+                    ("other", "Room__type__other"),
+                ],
+                help_text="Room__type__help",
+                max_length=20,
+                verbose_name="Room__type",
+            ),
+        ),
+        migrations.AlterField(
+            model_name="roomshare",
+            name="timeframe",
+            field=django.contrib.postgres.fields.ranges.DateTimeRangeField(
+                blank=True,
+                help_text="RoomShare__time_frame__help",
+                null=True,
+                verbose_name="RoomShare__time_frame",
+            ),
+        ),
+    ]
diff --git a/src/core/models/assemblies.py b/src/core/models/assemblies.py
index 36c01d31669464a460dce2f3ed9864ff326108e8..c8e95327e0a37ffeb0982043ceb01c1611232f58 100644
--- a/src/core/models/assemblies.py
+++ b/src/core/models/assemblies.py
@@ -109,9 +109,9 @@ class Assembly(TaggedItemMixin, ActivityLogMixin, RulesModel):
         ARRIVED_CONFIRMED = 'confirmed', _('Assembly__state-arrived_confirmed')
 
     class Hierarchy(models.TextChoices):
-        REGULAR = 'regular', _('Assembly__hierarchy-regular')
-        CLUSTER = 'cluster', _('Assembly__hierarchy-cluster')
-        CLUSTER_RESTRICTED = 'clusterrestricted', _('Assembly__hierarchy-clusterrestricted')
+        REGULAR = 'regular', _('Assembly__hierarchy__regular')
+        CLUSTER = 'cluster', _('Assembly__hierarchy__cluster')
+        CLUSTER_RESTRICTED = 'clusterrestricted', _('Assembly__hierarchy__cluster_restricted')
 
     objects = AssemblyManager()
     logger = logging.getLogger(__name__)
diff --git a/src/core/models/conference.py b/src/core/models/conference.py
index 250bb63eaf87b0ab21f474336b137c3c900b0596..96e19c112cdfeedca2a45fce1716b0aaa44e4bba 100644
--- a/src/core/models/conference.py
+++ b/src/core/models/conference.py
@@ -78,21 +78,21 @@ class ConferenceMember(models.Model):
 
     class Meta:
         permissions = [
-            ('conference_admin', _('ConferenceMember__permission-confernece_admin')),
+            ('conference_admin', _('ConferenceMember__permission__conference_admin')),
             # Change conference settings (e.g., dates, ), update venue json.
-            ('assembly_team', _('ConferenceMember__permission-assembly_team')),
+            ('assembly_team', _('ConferenceMember__permission__assembly_team')),
             # See all assemblies, not only the accepted ones.
-            ('assembly_registration_admin', _('ConferenceMember__permission-assembly_registration_admin')),
+            ('assembly_registration_admin', _('ConferenceMember__permission__assembly_registration_admin')),
             # See all assemblies, not only the accepted ones.
-            ('static_pages', _('ConferenceMember__permission-static_pages')),
+            ('static_pages', _('ConferenceMember__permission__static_pages')),
             # Access to static pages, can be further limited by configuring static_page_groups.
-            ('map_edit', _('ConferenceMember__permission-map_edit')),
+            ('map_edit', _('ConferenceMember__permission__map_edit')),
             # modification of the map, i.e. POIs
             ('moderation', 'Orga: Moderation'),
             # moderation of all content
-            ('voucher_admin', _('ConferenceMember__permission-voucher_admin')),
+            ('voucher_admin', _('ConferenceMember__permission__voucher_admin')),
             # configure conference's vouchers
-            ('scheduleadmin', _('ConferenceMember__permission-scheduleadmin')),
+            ('scheduleadmin', _('ConferenceMember__permission__schedule_admin')),
             # manage/support ScheduleSupports globally, i.e. without access to an individual assembly
         ]
 
diff --git a/src/core/models/events.py b/src/core/models/events.py
index 2a6de1497858c605de4e0762f6e6c6af30d3f416..d2dfb2f09fddac209126ded5a44ca1b94f9e15f8 100644
--- a/src/core/models/events.py
+++ b/src/core/models/events.py
@@ -504,7 +504,7 @@ class Event(TaggedItemMixin, BackendMixin, ActivityLogMixin, models.Model):
                 self.conference.end is not None and self.conference.end < self.schedule_start
             ):
                 errors['schedule_start'] = ValidationError(
-                    _('Event__schedule_start__outside_conference_timeframe %(event_type)s') % {'event_type': event_type}, code='invalid_date'
+                    _('Event__schedule_start__outside_conference_time_frame %(event_type)s') % {'event_type': event_type}, code='invalid_date'
                 )
 
         # When setting to public we must have a duration
diff --git a/src/core/models/messages.py b/src/core/models/messages.py
index 28e424ce9bac8c3be832245d62b3b2f2ed72875c..a1068959aafa802feaf525d74233790b0aae94b5 100644
--- a/src/core/models/messages.py
+++ b/src/core/models/messages.py
@@ -41,7 +41,7 @@ class DirectMessage(models.Model):
     """Timestamp when the message was sent."""
 
     autodelete_after = models.DateTimeField(
-        blank=True, null=True, help_text=_('DirectMessage__autodelete_after__help'), verbose_name=_('DirectMessage__autodelete_after')
+        blank=True, null=True, help_text=_('DirectMessage__auto_delete_after__help'), verbose_name=_('DirectMessage__auto_delete_after')
     )
     """Automatic purging deletes this message after this timestamp."""
 
diff --git a/src/core/models/rooms.py b/src/core/models/rooms.py
index c0a870cd01c010b4f583b0e3305d968fb7e944e9..3285a9daf4de28583714e561e8c3dfa09762c873 100644
--- a/src/core/models/rooms.py
+++ b/src/core/models/rooms.py
@@ -26,15 +26,15 @@ from core.validators import FileSizeValidator, ImageDimensionValidator
 
 
 class RoomType(models.TextChoices):
-    LECTURE_HALL = 'lecturehall', _('Room__type-lecturehall')
-    STAGE = 'stage', _('Room__type-stage')
-    WORKSHOP = 'workshop', _('Room__type-workshop')
-    OUTSIDE = 'outside', _('Room__type-outside')
-    ONLINE = 'online', _('Room__type-online')
-    PROJECT = 'project', _('Room__type-project')
-    BIGBLUEBUTTON = 'bbb', _('Room__type-bbb')
-    HANGAR = 'hangar', _('Room__type-hangar')
-    OTHER = 'other', _('Room__type-other')
+    LECTURE_HALL = 'lecturehall', _('Room__type__lecture_hall')
+    STAGE = 'stage', _('Room__type__stage')
+    WORKSHOP = 'workshop', _('Room__type__workshop')
+    OUTSIDE = 'outside', _('Room__type__outside')
+    ONLINE = 'online', _('Room__type__online')
+    PROJECT = 'project', _('Room__type__project')
+    BIGBLUEBUTTON = 'bbb', _('Room__type__bbb')
+    HANGAR = 'hangar', _('Room__type__hangar')
+    OTHER = 'other', _('Room__type__other')
 
 
 class RoomManager(ConferenceManagerMixin['Room']):
@@ -408,8 +408,8 @@ class RoomShare(models.Model):
     timeframe = DateTimeRangeField(
         blank=True,
         null=True,
-        help_text=_('RoomShare__timeframe__help'),
-        verbose_name=_('RoomShare__timeframe'),
+        help_text=_('RoomShare__time_frame__help'),
+        verbose_name=_('RoomShare__time_frame'),
     )
 
     def __str__(self):
diff --git a/src/core/models/users.py b/src/core/models/users.py
index 0000022f481fff3371cfeca0869a33016c8f5e97..134d8cc414d51ce4e9f022af77a32f78eea68b56 100644
--- a/src/core/models/users.py
+++ b/src/core/models/users.py
@@ -143,7 +143,7 @@ class PlatformUser(AbstractUser):
     colorblind = models.BooleanField(default=False, help_text=_('PlatformUser__colorblind__help'), verbose_name=_('PlatformUser__colorblind'))
     high_contrast = models.BooleanField(default=False, help_text=_('PlatformUser__high_contrast__help'), verbose_name=_('PlatformUser__high_contrast'))
     tag_ignorelist = pg_fields.ArrayField(
-        models.SlugField(), blank=True, default=list, help_text=_('PlatformUser__tag_ignorelist__help'), verbose_name=_('PlatformUser__tag_ignorelist')
+        models.SlugField(), blank=True, default=list, help_text=_('PlatformUser__tag_ignore_list__help'), verbose_name=_('PlatformUser__tag_ignore_list')
     )
     theme = models.CharField(
         max_length=50, choices=Theme.choices, default=Theme.DARK, verbose_name=_('PlatformUser__theme'), help_text=_('PlatformUser__theme__help')
@@ -168,7 +168,7 @@ class PlatformUser(AbstractUser):
 
     # privacy settings
     autoaccept_contacts = models.BooleanField(
-        default=False, help_text=_('PlatformUser__autoaccept_contacts__help'), verbose_name=_('PlatformUser__autoaccept_contacts')
+        default=False, help_text=_('PlatformUser__auto_accept_contacts__help'), verbose_name=_('PlatformUser__auto_accept_contacts')
     )
 
     is_searchable = models.BooleanField(default=False, help_text=_('PlatformUser__is_searchable__help'), verbose_name=_('PlatformUser__is_searchable'))
diff --git a/src/core/sso.py b/src/core/sso.py
index 75f7e33ee92f567a9070f6fb5fb510a8d751f9e6..ad9913252553722bfe4b6aa00f9fe563a1de20e0 100644
--- a/src/core/sso.py
+++ b/src/core/sso.py
@@ -56,7 +56,7 @@ class OAuth2Scopes(BaseScopes):
         for c in Conference.objects.values('slug', 'name'):
             scopes[c['slug'] + '_attendee'] = format_lazy(_('SSO__conf_attendee'), **c)
             scopes[c['slug'] + '_service_angels'] = format_lazy(_('SSO__svc_angels'), **c)
-            scopes[c['slug'] + '_service_usermgmt'] = format_lazy(_('SSO__svc_usermgmt'), **c)
+            scopes[c['slug'] + '_service_usermgmt'] = format_lazy(_('SSO__svc_user_mgmt'), **c)
 
         return scopes