diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 6ab2b30fe7dd1bba5743890c624b8172ab61ce35..890eeeb496c6a1325e7bf4d58923d11917ffdec3 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -28,10 +28,12 @@ Added
 * Notification drawer in top nav bar
 * GraphQL queries and mutations for core data management
 * [Dev] Introduce new mechanism to register classes over all apps.
+* Data template for `room` model used for haystack search indexing moved to core.
 
 Changed
 ~~~~~~~
 
+* Show languages in local language
 * Rewrite of frontend using Vuetify
   * The runuwsgi dev server now starts a Vite dev server with HMR in the
     background
@@ -45,11 +47,13 @@ Changed
 * [Dev] The undocumented field `check` on `DataCheckResult` was renamed to `data_check`
 * Frontend bundling migrated from Webpack to Vite
 * Get dashboard widgets and data checks from apps with new registration mechanism.
+* Use write-through cache for sessions to retain on clear_cache
 * Better error page with redirect option to login page when user has no permission to access a route.
 
 Fixed
 ~~~~~
 
+* The error page displayed when an ObjectOverview component is not able to get the required data was incomplete.
 * The permission check for the dashboard edit page failed when the user had no person assigned.
 * In some cases, the IFrame for legacy pages was not properly sized for its content.
 * When accessing the person overview page without a person ID, the avatar image was not displayed properly.
@@ -58,6 +62,9 @@ Fixed
 * Invitations for existing short name did not work.
 * Invitations for persons without pre-defined e-mail address did not behave correctly
 * OIDC scope "phone" had no claims.
+* 2FA via messages or phone calls didn't work.
+* [Dev] Site reference on extensible models can no longer cause name clashes
+  because of its related name.
 
 Removed
 ~~~~~~~
@@ -203,6 +210,7 @@ Fixed
 * Due to a merge error, the once removed account menu in the sidenav appeared again.
 * Scheduled notifications were shown on dashboard before time.
 * Remove broken notifications menu item in favor of item next to account menu.
+* Serve OAuth discovery information under root of domain
 * [OAuth2] Resources which are protected with client credentials
   allowed access if no scopes were allowed (CVE-2022-29773).
 * The site logo could overlap with the menu for logos with an unexpected aspect ratio.
diff --git a/aleksis/core/frontend/app/i18n.js b/aleksis/core/frontend/app/i18n.js
index ed50743eddf2d7fe306b9fe1116ef17fc914911d..a345a13c457ca979a1a2cee7319d82f46cb67ca2 100644
--- a/aleksis/core/frontend/app/i18n.js
+++ b/aleksis/core/frontend/app/i18n.js
@@ -5,7 +5,6 @@
 import dateTimeFormats from "./dateTimeFormats.js";
 
 const i18nOpts = {
-  locale: "en",
   fallbackLocale: "en",
   messages: {},
   dateTimeFormats,
diff --git a/aleksis/core/frontend/components/app/AccountMenu.vue b/aleksis/core/frontend/components/app/AccountMenu.vue
index 70e8c52fa770b743c138c6212f296b223be83340..ed5ee1ba5873756b37be18e21cea7c0603f1b8e2 100644
--- a/aleksis/core/frontend/components/app/AccountMenu.vue
+++ b/aleksis/core/frontend/components/app/AccountMenu.vue
@@ -52,7 +52,11 @@
           <v-list-item-icon>
             <v-icon v-if="menuItem.icon">{{ menuItem.icon }}</v-icon>
           </v-list-item-icon>
-          <v-list-item-title>{{ $t(menuItem.titleKey) }}</v-list-item-title>
+          <v-list-item-title>{{
+            !menuItem.rawTitleString
+              ? $t(menuItem.titleKey)
+              : menuItemm.rawTitleString
+          }}</v-list-item-title>
         </v-list-item>
       </div>
     </v-list>
diff --git a/aleksis/core/frontend/components/app/App.vue b/aleksis/core/frontend/components/app/App.vue
index da681615b320f70c3ac3c494bc12f1d70cd1d7f9..e11725a36e9dc33310750397a68305b3af05c566 100644
--- a/aleksis/core/frontend/components/app/App.vue
+++ b/aleksis/core/frontend/components/app/App.vue
@@ -82,8 +82,17 @@
             </message-box>
           </div>
 
+          <error-page
+            v-if="error404"
+            short-error-message-key="network_errors.error_404"
+            long-error-message-key="network_errors.page_not_found"
+            redirect-button-text-key="network_errors.back_to_start"
+            redirect-route-name="dashboard"
+            redirect-button-icon="mdi-home-outline"
+          >
+          </error-page>
           <router-view
-            v-if="
+            v-else-if="
               !$route.meta.permission ||
               checkPermission($route.meta.permission) ||
               $route.name === 'dashboard'
@@ -216,6 +225,7 @@ import gqlSystemProperties from "./systemProperties.graphql";
 import useRegisterSWMixin from "../../mixins/useRegisterSW";
 import offlineMixin from "../../mixins/offline";
 import menusMixin from "../../mixins/menus";
+import routesMixin from "../../mixins/routes";
 
 export default {
   data() {
@@ -224,6 +234,7 @@ export default {
       whoAmI: null,
       systemProperties: null,
       messages: null,
+      error404: false,
     };
   },
   apollo: {
@@ -244,8 +255,6 @@ export default {
   },
   watch: {
     systemProperties: function (newProperties) {
-      this.$i18n.locale = newProperties.currentLanguage;
-      this.$vuetify.lang.current = newProperties.currentLanguage;
       this.$vuetify.theme.themes.light.primary =
         newProperties.sitePreferences.themePrimary;
       this.$vuetify.theme.themes.light.secondary =
@@ -261,6 +270,16 @@ export default {
       },
       deep: true,
     },
+    $route: {
+      handler(newRoute) {
+        if (newRoute.matched.length == 0) {
+          this.error404 = true;
+        } else {
+          this.error404 = false;
+        }
+      },
+      immediate: true,
+    },
   },
   name: "App",
   components: {
@@ -272,7 +291,7 @@ export default {
     SideNav,
     SnackbarItem,
   },
-  mixins: [useRegisterSWMixin, offlineMixin, menusMixin],
+  mixins: [useRegisterSWMixin, offlineMixin, menusMixin, routesMixin],
 };
 </script>
 
diff --git a/aleksis/core/frontend/components/app/ErrorPage.vue b/aleksis/core/frontend/components/app/ErrorPage.vue
index abfb51fd08aad58aaed196b84aba8acf906964c9..18ee6e7db6f84dcaeb1e8a013ee70451769afea5 100644
--- a/aleksis/core/frontend/components/app/ErrorPage.vue
+++ b/aleksis/core/frontend/components/app/ErrorPage.vue
@@ -5,7 +5,11 @@
   >
     <h1 class="text-h2">{{ $t(shortErrorMessageKey) }}</h1>
     <div>{{ $t(longErrorMessageKey) }}</div>
-    <v-btn color="secondary" :to="{ name: redirectRouteName }">
+    <v-btn
+      color="secondary"
+      :to="{ name: redirectRouteName }"
+      v-if="!hideButton"
+    >
       <v-icon left>{{ redirectButtonIcon }}</v-icon>
       {{ $t(redirectButtonTextKey) }}
     </v-btn>
@@ -36,6 +40,11 @@ export default {
       type: String,
       required: true,
     },
+    hideButton: {
+      type: Boolean,
+      default: false,
+      required: false,
+    },
   },
 };
 </script>
diff --git a/aleksis/core/frontend/components/app/LanguageForm.vue b/aleksis/core/frontend/components/app/LanguageForm.vue
index 355f719e45eb6e77f2ca6e439687986cbbf788de..12acbe613e94a23e25f5d1195b0badf420d92aa6 100644
--- a/aleksis/core/frontend/components/app/LanguageForm.vue
+++ b/aleksis/core/frontend/components/app/LanguageForm.vue
@@ -3,7 +3,7 @@
     v-if="availableLanguages"
     v-model="language"
     :items="availableLanguages"
-    item-text="nameTranslated"
+    :item-text="nameForMenu"
     item-value="code"
     menu-props="auto"
     outlined
@@ -40,6 +40,9 @@ export default {
       this.$i18n.locale = languageOption.code;
       this.$vuetify.lang.current = languageOption.code;
     },
+    nameForMenu: function (item) {
+      return `${item.nameLocal} (${item.code})`;
+    },
   },
   name: "LanguageForm",
 };
diff --git a/aleksis/core/frontend/components/app/SideNav.vue b/aleksis/core/frontend/components/app/SideNav.vue
index 79ee3745b7c4fc4199eda657d18482408ad06f29..0975c580cda88d03fd8a5d34b2fb16425ece69ee 100644
--- a/aleksis/core/frontend/components/app/SideNav.vue
+++ b/aleksis/core/frontend/components/app/SideNav.vue
@@ -1,5 +1,5 @@
 <template>
-  <v-navigation-drawer app :value="value">
+  <v-navigation-drawer app :value="value" @input="$emit('input', $event)">
     <v-list nav dense shaped>
       <v-list-item class="logo">
         <a
@@ -19,11 +19,19 @@
             v-if="menuItem.subMenu.length > 0"
             href="#!"
             :prepend-icon="menuItem.icon"
-            :value="$route.matched.slice(-2).shift().name === menuItem.name"
+            :value="
+              $route.matched.slice(-2).shift()
+                ? $route.matched.slice(-2).shift().name === menuItem.name
+                : false
+            "
           >
             <template #activator>
               <v-list-item-title
-                >{{ $t(menuItem.titleKey) }}
+                >{{
+                  !menuItem.rawTitleString
+                    ? $t(menuItem.titleKey)
+                    : menuItem.rawTitleString
+                }}
               </v-list-item-title>
             </template>
             <v-list-item
@@ -38,7 +46,11 @@
                 <v-icon v-if="subMenuItem.icon">{{ subMenuItem.icon }} </v-icon>
               </v-list-item-icon>
               <v-list-item-title
-                >{{ $t(subMenuItem.titleKey) }}
+                >{{
+                  !subMenuItem.rawTitleString
+                    ? $t(subMenuItem.titleKey)
+                    : subMenuItem.rawTitleString
+                }}
               </v-list-item-title>
             </v-list-item>
           </v-list-group>
@@ -52,7 +64,11 @@
             <v-list-item-icon>
               <v-icon v-if="menuItem.icon">{{ menuItem.icon }}</v-icon>
             </v-list-item-icon>
-            <v-list-item-title>{{ $t(menuItem.titleKey) }}</v-list-item-title>
+            <v-list-item-title>{{
+              !menuItem.rawTitleString
+                ? $t(menuItem.titleKey)
+                : menuItem.rawTitleString
+            }}</v-list-item-title>
           </v-list-item>
         </div>
       </v-list-item-group>
diff --git a/aleksis/core/frontend/components/app/SidenavSearch.vue b/aleksis/core/frontend/components/app/SidenavSearch.vue
index 281e5abb9ffc3d07e9607f6af4e076d192b9fd8a..9901c345fc0b55a30afab7ec0edab9fd35474d49 100644
--- a/aleksis/core/frontend/components/app/SidenavSearch.vue
+++ b/aleksis/core/frontend/components/app/SidenavSearch.vue
@@ -55,6 +55,7 @@ export default {
       skip() {
         return !this.q;
       },
+      fetchPolicy: "network-only",
     },
   },
 };
diff --git a/aleksis/core/frontend/components/app/dynamicRoutes.graphql b/aleksis/core/frontend/components/app/dynamicRoutes.graphql
new file mode 100644
index 0000000000000000000000000000000000000000..49c208b729f4185b0053e8bfbff13fd3ca8c78f5
--- /dev/null
+++ b/aleksis/core/frontend/components/app/dynamicRoutes.graphql
@@ -0,0 +1,18 @@
+{
+  dynamicRoutes {
+    parentRouteName
+
+    routePath
+    routeName
+
+    displayAccountMenu
+    displaySidenavMenu
+    menuNewTab
+
+    menuTitle
+    menuIcon
+
+    menuPermission
+    routePermission
+  }
+}
diff --git a/aleksis/core/frontend/components/app/systemProperties.graphql b/aleksis/core/frontend/components/app/systemProperties.graphql
index e599cf04694c79a0bd7d1a38dd7f9bb0bd80a4ae..99533650b65369f4a07c330399a2f452a815b763 100644
--- a/aleksis/core/frontend/components/app/systemProperties.graphql
+++ b/aleksis/core/frontend/components/app/systemProperties.graphql
@@ -3,9 +3,9 @@
     availableLanguages {
       code
       nameTranslated
+      nameLocal
       cookie
     }
-    currentLanguage
     sitePreferences {
       themePrimary
       themeSecondary
diff --git a/aleksis/core/frontend/components/generic/ObjectOverview.vue b/aleksis/core/frontend/components/generic/ObjectOverview.vue
index d962243e988167f266cf003fd81b01c6e41a0454..4839b3b8a8a3413ffa11ac2478a5c571c9378522 100644
--- a/aleksis/core/frontend/components/generic/ObjectOverview.vue
+++ b/aleksis/core/frontend/components/generic/ObjectOverview.vue
@@ -6,6 +6,9 @@
       v-else
       :short-error-message-key="shortErrorMessageKey"
       :long-error-message-key="longErrorMessageKey"
+      :redirect-button-text-key="redirectButtonTextKey"
+      :redirect-route-name="redirectRouteName"
+      :redirect-button-icon="redirectButtonIcon"
     />
   </div>
 </template>
@@ -32,6 +35,21 @@ export default {
       required: false,
       default: "network_errors.page_not_found",
     },
+    redirectButtonTextKey: {
+      type: String,
+      required: false,
+      default: "network_errors.back_to_start",
+    },
+    redirectRouteName: {
+      type: String,
+      required: false,
+      default: "dashboard",
+    },
+    redirectButtonIcon: {
+      type: String,
+      required: false,
+      default: "mdi-home-outline",
+    },
   },
   methods: {
     getTitleAttr(obj) {
diff --git a/aleksis/core/frontend/components/two_factor/TwoFactor.vue b/aleksis/core/frontend/components/two_factor/TwoFactor.vue
index 1d9dd9e78348bce2814dd22c631a58d4cc7610e2..6cdf7331a1f912f3f430a4f0b2443ac61de834ec 100644
--- a/aleksis/core/frontend/components/two_factor/TwoFactor.vue
+++ b/aleksis/core/frontend/components/two_factor/TwoFactor.vue
@@ -7,9 +7,7 @@
     <div v-else-if="twoFactor && twoFactor.activated">
       <v-card class="mb-4">
         <v-card-title>
-          {{
-          $t("accounts.two_factor.primary_device_title")
-        }}
+          {{ $t("accounts.two_factor.primary_device_title") }}
         </v-card-title>
         <v-card-text>
           {{ $t("accounts.two_factor.primary_device_description") }}
@@ -21,15 +19,13 @@
 
       <v-card class="mb-4">
         <v-card-title>
-          {{
-          $t("accounts.two_factor.other_devices_title")
-        }}
+          {{ $t("accounts.two_factor.other_devices_title") }}
         </v-card-title>
         <v-card-text>
           {{ $t("accounts.two_factor.other_devices_description") }}
         </v-card-text>
         <v-list three-line>
-          <div v-for="(device, index) in twoFactor.otherDevices">
+          <div v-for="(device, index) in twoFactor.otherDevices" :key="index">
             <two-factor-device :device="device" />
             <v-divider />
           </div>
@@ -89,9 +85,7 @@
     <div v-else>
       <v-card class="mb-4">
         <v-card-title>
-          {{
-          $t("accounts.two_factor.enable_title")
-        }}
+          {{ $t("accounts.two_factor.enable_title") }}
         </v-card-title>
         <v-card-text>
           {{ $t("accounts.two_factor.enable_description") }}
diff --git a/aleksis/core/frontend/components/two_factor/TwoFactorDevice.vue b/aleksis/core/frontend/components/two_factor/TwoFactorDevice.vue
index c01fc922f8c5c57dab3305ddeeebda3996ea42ba..5cd74e6ff5c03b8ad9699509cccebf32524120cc 100644
--- a/aleksis/core/frontend/components/two_factor/TwoFactorDevice.vue
+++ b/aleksis/core/frontend/components/two_factor/TwoFactorDevice.vue
@@ -3,9 +3,7 @@
     <template #title>{{ device.methodVerboseName }}</template>
     <template #subtitles>
       <v-list-item-subtitle>
-        {{
-        $t("accounts.two_factor.methods." + device.methodCode)
-      }}
+        {{ $t("accounts.two_factor.methods." + device.methodCode) }}
       </v-list-item-subtitle>
       <v-list-item-subtitle
         v-if="device.methodCode === 'call' || device.methodCode === 'sms'"
diff --git a/aleksis/core/frontend/index.js b/aleksis/core/frontend/index.js
index ef66ecf6576ed1d7d4581639a65b5607c7a75dc5..25df11b343a0708bbb6a1a378cfa1b17ab154749 100644
--- a/aleksis/core/frontend/index.js
+++ b/aleksis/core/frontend/index.js
@@ -9,6 +9,7 @@ import Vuetify from "@/vuetify";
 import VueI18n from "@/vue-i18n";
 import VueRouter from "@/vue-router";
 import VueApollo from "@/vue-apollo";
+import VueCookies from "@/vue-cookies";
 
 import AleksisVue from "./plugins/aleksis.js";
 
@@ -26,6 +27,7 @@ Vue.use(Vuetify);
 Vue.use(VueI18n);
 Vue.use(VueRouter);
 Vue.use(VueApollo);
+Vue.use(VueCookies);
 
 // All of these imports yield config objects to be passed to the plugin constructors
 import vuetifyOpts from "./app/vuetify.js";
@@ -33,8 +35,20 @@ import i18nOpts from "./app/i18n.js";
 import routerOpts from "./app/router.js";
 import apolloOpts from "./app/apollo.js";
 
-const i18n = new VueI18n(i18nOpts);
-const vuetify = new Vuetify(vuetifyOpts);
+const i18n = new VueI18n({
+  locale: Vue.$cookies.get("django_language")
+    ? Vue.$cookies.get("django_language")
+    : "en",
+  ...i18nOpts,
+});
+const vuetify = new Vuetify({
+  lang: {
+    current: Vue.$cookies.get("django_language")
+      ? Vue.$cookies.get("django_language")
+      : "en",
+  },
+  ...vuetifyOpts,
+});
 const router = new VueRouter(routerOpts);
 const apolloProvider = new VueApollo(apolloOpts);
 
diff --git a/aleksis/core/frontend/mixins/menus.js b/aleksis/core/frontend/mixins/menus.js
index 8afed7f424ebf1bd4b33b316dc311f14831161fc..ee07678848c93436fc15f4f015b056f7a7728aa1 100644
--- a/aleksis/core/frontend/mixins/menus.js
+++ b/aleksis/core/frontend/mixins/menus.js
@@ -19,12 +19,19 @@ const menusMixin = {
       let permArray = [];
 
       for (const route of this.$router.getRoutes()) {
-        if (
-          route.meta &&
-          route.meta["permission"] &&
-          !(route.meta["permission"] in permArray)
-        ) {
-          permArray.push(route.meta["permission"]);
+        if (route.meta) {
+          if (
+            route.meta["permission"] &&
+            !(route.meta["permission"] in permArray)
+          ) {
+            permArray.push(route.meta["permission"]);
+          }
+          if (
+            route.meta["menuPermission"] &&
+            !(route.meta["menuPermission"] in permArray)
+          ) {
+            permArray.push(route.meta["menuPermission"]);
+          }
         }
       }
 
@@ -41,7 +48,9 @@ const menusMixin = {
           route.meta &&
           route.meta[menuKey] &&
           !route.parent &&
-          (route.meta.permission
+          (route.meta.menuPermission
+            ? this.checkPermission(route.meta.menuPermission)
+            : route.meta.permission
             ? this.checkPermission(route.meta.permission)
             : true) &&
           (route.meta.validators
@@ -67,7 +76,9 @@ const menusMixin = {
           route.parent &&
           route.parent.name &&
           route.parent.name in menu &&
-          (route.meta.permission
+          (route.meta.menuPermission
+            ? this.checkPermission(route.meta.menuPermission)
+            : route.meta.permission
             ? this.checkPermission(route.meta.permission)
             : true) &&
           (route.meta.validators
diff --git a/aleksis/core/frontend/mixins/routes.js b/aleksis/core/frontend/mixins/routes.js
new file mode 100644
index 0000000000000000000000000000000000000000..813edd5777e9868680d5a5d9e8e495d70ef35790
--- /dev/null
+++ b/aleksis/core/frontend/mixins/routes.js
@@ -0,0 +1,60 @@
+import gqlDynamicRoutes from "../components/app/dynamicRoutes.graphql";
+
+/**
+ * Vue mixin containing code getting dynamically added routes from other apps.
+ *
+ * Only used by main App component, but factored out for readability.
+ */
+const routesMixin = {
+  data() {
+    return {
+      dynamicRoutes: null,
+    };
+  },
+  apollo: {
+    dynamicRoutes: {
+      query: gqlDynamicRoutes,
+      pollInterval: 60000,
+    },
+  },
+  watch: {
+    dynamicRoutes: {
+      handler(newDynamicRoutes) {
+        for (const route of newDynamicRoutes) {
+          if (route) {
+            console.debug("Adding new dynamic route:", route.routeName);
+            let routeEntry = {
+              path: route.routePath,
+              name: route.routeName,
+              component: () => import("../components/LegacyBaseTemplate.vue"),
+              props: {
+                byTheGreatnessOfTheAlmightyAleksolotlISwearIAmWorthyOfUsingTheLegacyBaseTemplate: true,
+              },
+              meta: {
+                inMenu: route.displaySidenavMenu,
+                inAccountMenu: route.displayAccountMenu,
+                icon: route.menuIcon,
+                rawTitleString: route.menuTitle,
+                menuPermission: route.menuPermission,
+                permission: route.routePermission,
+                newTab: route.menuNewTab,
+              },
+            };
+
+            if (route.parentRouteName) {
+              this.$router.addRoute(route.parentRouteName, routeEntry);
+            } else {
+              this.$router.addRoute(routeEntry);
+            }
+          }
+        }
+
+        this.getPermissionNames();
+        this.buildMenus();
+      },
+      deep: true,
+    },
+  },
+};
+
+export default routesMixin;
diff --git a/aleksis/core/frontend/routes.js b/aleksis/core/frontend/routes.js
index ae73c4751416d6fc59a6a5195613f70dd97604c3..215f4d1485644883eef42f14216735547abb041a 100644
--- a/aleksis/core/frontend/routes.js
+++ b/aleksis/core/frontend/routes.js
@@ -37,6 +37,7 @@ const routes = [
       inMenu: true,
       icon: "mdi-account-plus-outline",
       titleKey: "accounts.signup.menu_title",
+      menuPermission: "core.signup_rule",
       validators: [notLoggedInValidator],
       invalidate: "leave",
     },
@@ -1069,18 +1070,4 @@ for (const [appName, appRoutes] of Object.entries(appObjects)) {
   });
 }
 
-// Fallback route defined last to ensure 404 view works
-routes.push({
-  path: "/*",
-  component: () => import("./components/app/ErrorPage.vue"),
-  name: "core.error404",
-  props: {
-    shortErrorMessageKey: "network_errors.error_404",
-    longErrorMessageKey: "network_errors.page_not_found",
-    redirectButtonTextKey: "network_errors.back_to_start",
-    redirectRouteName: "dashboard",
-    redirectButtonIcon: "mdi-home-outline",
-  },
-});
-
 export default routes;
diff --git a/aleksis/core/locale/ar/LC_MESSAGES/django.po b/aleksis/core/locale/ar/LC_MESSAGES/django.po
index 7601d361668f068f942d130014ca1897f000d92b..0c841f397f7272dec10e501c103a069b11e51f3b 100644
--- a/aleksis/core/locale/ar/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/ar/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: AlekSIS (School Information System) 0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-01-22 20:49+0100\n"
+"POT-Creation-Date: 2023-02-15 20:00+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -397,7 +397,7 @@ msgstr ""
 msgid "other"
 msgstr ""
 
-#: aleksis/core/models.py:189 aleksis/core/models.py:1345
+#: aleksis/core/models.py:189 aleksis/core/models.py:1353
 msgid "Linked user"
 msgstr ""
 
@@ -406,7 +406,7 @@ msgid "Additional name(s)"
 msgstr ""
 
 #: aleksis/core/models.py:199 aleksis/core/models.py:511
-#: aleksis/core/models.py:1431
+#: aleksis/core/models.py:1439
 msgid "Short name"
 msgstr ""
 
@@ -468,7 +468,7 @@ msgstr ""
 
 #: aleksis/core/models.py:244 aleksis/core/models.py:724
 #: aleksis/core/models.py:748 aleksis/core/models.py:843
-#: aleksis/core/models.py:1104
+#: aleksis/core/models.py:1112
 msgid "Description"
 msgstr ""
 
@@ -504,7 +504,7 @@ msgstr ""
 msgid "Can view statistics about group."
 msgstr ""
 
-#: aleksis/core/models.py:509 aleksis/core/models.py:1432
+#: aleksis/core/models.py:509 aleksis/core/models.py:1440
 msgid "Long name"
 msgstr ""
 
@@ -531,7 +531,7 @@ msgid "Additional fields"
 msgstr ""
 
 #: aleksis/core/models.py:723 aleksis/core/models.py:747
-#: aleksis/core/models.py:842 aleksis/core/models.py:1262
+#: aleksis/core/models.py:842 aleksis/core/models.py:1270
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr ""
@@ -561,7 +561,7 @@ msgid "Link"
 msgstr ""
 
 #: aleksis/core/models.py:752 aleksis/core/models.py:1079
-#: aleksis/core/models.py:1392
+#: aleksis/core/models.py:1400
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr ""
@@ -744,205 +744,205 @@ msgstr ""
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1103
+#: aleksis/core/models.py:1111
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1110 aleksis/core/templates/core/group/full.html:50
+#: aleksis/core/models.py:1118 aleksis/core/templates/core/group/full.html:50
 msgid "Group type"
 msgstr ""
 
-#: aleksis/core/models.py:1111
+#: aleksis/core/models.py:1119
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 msgid "Group types"
 msgstr ""
 
-#: aleksis/core/models.py:1124
+#: aleksis/core/models.py:1132
 msgid "Can view system status"
 msgstr ""
 
-#: aleksis/core/models.py:1125
+#: aleksis/core/models.py:1133
 msgid "Can manage data"
 msgstr ""
 
-#: aleksis/core/models.py:1126
+#: aleksis/core/models.py:1134
 msgid "Can impersonate"
 msgstr ""
 
-#: aleksis/core/models.py:1127
+#: aleksis/core/models.py:1135
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1128
+#: aleksis/core/models.py:1136
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1129
+#: aleksis/core/models.py:1137
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1130
+#: aleksis/core/models.py:1138
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1131
+#: aleksis/core/models.py:1139
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1132
+#: aleksis/core/models.py:1140
 msgid "Can invite persons"
 msgstr ""
 
-#: aleksis/core/models.py:1168
+#: aleksis/core/models.py:1176
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1176
+#: aleksis/core/models.py:1184
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1177
+#: aleksis/core/models.py:1185
 msgid "Notification sent"
 msgstr ""
 
-#: aleksis/core/models.py:1190
+#: aleksis/core/models.py:1198
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1191
+#: aleksis/core/models.py:1199
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1193
+#: aleksis/core/models.py:1201
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1194
+#: aleksis/core/models.py:1202
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1201
+#: aleksis/core/models.py:1209
 msgid "E-Mail address"
 msgstr ""
 
-#: aleksis/core/models.py:1233
+#: aleksis/core/models.py:1241
 msgid "Owner"
 msgstr ""
 
-#: aleksis/core/models.py:1237
+#: aleksis/core/models.py:1245
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1240
+#: aleksis/core/models.py:1248
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1243
+#: aleksis/core/models.py:1251
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1250
+#: aleksis/core/models.py:1258
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1251
+#: aleksis/core/models.py:1259
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1256
+#: aleksis/core/models.py:1264
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1259
+#: aleksis/core/models.py:1267
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1263
+#: aleksis/core/models.py:1271
 msgid "Back URL"
 msgstr ""
 
-#: aleksis/core/models.py:1264
+#: aleksis/core/models.py:1272
 msgid "Progress title"
 msgstr ""
 
-#: aleksis/core/models.py:1265
+#: aleksis/core/models.py:1273
 msgid "Error message"
 msgstr ""
 
-#: aleksis/core/models.py:1266
+#: aleksis/core/models.py:1274
 msgid "Success message"
 msgstr ""
 
-#: aleksis/core/models.py:1267
+#: aleksis/core/models.py:1275
 msgid "Redirect on success URL"
 msgstr ""
 
-#: aleksis/core/models.py:1269
+#: aleksis/core/models.py:1277
 msgid "Additional button title"
 msgstr ""
 
-#: aleksis/core/models.py:1271
+#: aleksis/core/models.py:1279
 msgid "Additional button URL"
 msgstr ""
 
-#: aleksis/core/models.py:1273
+#: aleksis/core/models.py:1281
 msgid "Additional button icon"
 msgstr ""
 
-#: aleksis/core/models.py:1275
+#: aleksis/core/models.py:1283
 msgid "Result fetched"
 msgstr ""
 
-#: aleksis/core/models.py:1300
+#: aleksis/core/models.py:1308
 msgid "Background task completed successfully"
 msgstr ""
 
-#: aleksis/core/models.py:1301
+#: aleksis/core/models.py:1309
 msgid "The background task '{}' has been completed successfully."
 msgstr ""
 
-#: aleksis/core/models.py:1307
+#: aleksis/core/models.py:1315
 msgid "Background task failed"
 msgstr ""
 
-#: aleksis/core/models.py:1308
+#: aleksis/core/models.py:1316
 msgid "The background task '{}' has failed."
 msgstr ""
 
-#: aleksis/core/models.py:1317
+#: aleksis/core/models.py:1325
 msgid "Background task"
 msgstr ""
 
-#: aleksis/core/models.py:1331
+#: aleksis/core/models.py:1339
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1332
+#: aleksis/core/models.py:1340
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1348
+#: aleksis/core/models.py:1356
 msgid "Additional attributes"
 msgstr ""
 
-#: aleksis/core/models.py:1386
+#: aleksis/core/models.py:1394
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1396
+#: aleksis/core/models.py:1404
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
-#: aleksis/core/models.py:1441
+#: aleksis/core/models.py:1449
 msgid "Can view room timetable"
 msgstr ""
 
-#: aleksis/core/models.py:1443
+#: aleksis/core/models.py:1451
 msgid "Room"
 msgstr ""
 
-#: aleksis/core/models.py:1444
+#: aleksis/core/models.py:1452
 msgid "Rooms"
 msgstr ""
 
@@ -1154,15 +1154,15 @@ msgstr ""
 msgid "Country for phone number parsing"
 msgstr ""
 
-#: aleksis/core/settings.py:539
+#: aleksis/core/settings.py:544
 msgid "English"
 msgstr ""
 
-#: aleksis/core/settings.py:540
+#: aleksis/core/settings.py:545
 msgid "German"
 msgstr ""
 
-#: aleksis/core/settings.py:541
+#: aleksis/core/settings.py:546
 msgid "Ukrainian"
 msgstr ""
 
@@ -2984,51 +2984,51 @@ msgstr ""
 msgid "The dashboard widget has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1030
+#: aleksis/core/views.py:1031
 msgid "Your dashboard configuration has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1032
+#: aleksis/core/views.py:1033
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1103
+#: aleksis/core/views.py:1104
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr ""
 
-#: aleksis/core/views.py:1200
+#: aleksis/core/views.py:1201
 msgid "We have successfully assigned the permissions."
 msgstr ""
 
-#: aleksis/core/views.py:1210
+#: aleksis/core/views.py:1211
 msgid "The global user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1220
+#: aleksis/core/views.py:1221
 msgid "The global group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1230
+#: aleksis/core/views.py:1231
 msgid "The object user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1240
+#: aleksis/core/views.py:1241
 msgid "The object group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1349
+#: aleksis/core/views.py:1350
 msgid "The third-party account could not be disconnected because it is the only login method available."
 msgstr ""
 
-#: aleksis/core/views.py:1356
+#: aleksis/core/views.py:1357
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1432
+#: aleksis/core/views.py:1433
 msgid "Person was invited successfully and an email with further instructions has been send to them."
 msgstr ""
 
-#: aleksis/core/views.py:1443
+#: aleksis/core/views.py:1444
 msgid "Person was already invited."
 msgstr ""
diff --git a/aleksis/core/locale/de_DE/LC_MESSAGES/django.po b/aleksis/core/locale/de_DE/LC_MESSAGES/django.po
index d1d1ddf4e3ee080bbf511bf335169806a26fce5f..ec7c990b8b51e1db438b7599911f3c1ce32b8807 100644
--- a/aleksis/core/locale/de_DE/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/de_DE/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: AlekSIS (School Information System) 0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-05-24 19:37+0200\n"
+"POT-Creation-Date: 2023-02-15 20:00+0100\n"
 "PO-Revision-Date: 2023-01-22 20:05+0000\n"
 "Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n"
 "Language-Team: German <https://translate.edugit.org/projects/aleksis/aleksis-core/de/>\n"
@@ -18,80 +18,64 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
 "X-Generator: Weblate 4.12.1\n"
 
-#: aleksis/core/apps.py:166 aleksis/core/apps.py:155
+#: aleksis/core/apps.py:155
 msgid "OpenID Connect scope"
 msgstr "OpenID-Connect-Scope"
 
-#: aleksis/core/apps.py:167 aleksis/core/apps.py:156
+#: aleksis/core/apps.py:156
 msgid "Given name, family name, link to profile and picture if existing."
 msgstr "Vorname, Nachname, Link zum Profil und Bild falls vorhanden."
 
-#: aleksis/core/apps.py:168 aleksis/core/apps.py:157
+#: aleksis/core/apps.py:157
 msgid "Full home postal address"
 msgstr "Vollständige Postanschrift"
 
-#: aleksis/core/apps.py:169 aleksis/core/apps.py:158
+#: aleksis/core/apps.py:158
 msgid "Email address"
 msgstr "E-Mail-Adresse"
 
-#: aleksis/core/apps.py:170 aleksis/core/apps.py:159
+#: aleksis/core/apps.py:159
 msgid "Home and mobile phone"
 msgstr "Festnetz- und Mobilfunknummer"
 
-#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:171
-#: aleksis/core/models.py:489 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:160 aleksis/core/forms.py:220
+#: aleksis/core/models.py:494 aleksis/core/templates/core/group/list.html:8
 #: aleksis/core/templates/core/group/list.html:9
-#: aleksis/core/templates/core/person/full.html:246 aleksis/core/models.py:494
-#: aleksis/core/apps.py:160
 msgid "Groups"
 msgstr "Gruppen"
 
-#: aleksis/core/data_checks.py:56 aleksis/core/data_checks.py:59
 #: aleksis/core/data_checks.py:60
 msgid "Ignore problem"
 msgstr "Problem ignorieren"
 
-#: aleksis/core/data_checks.py:185 aleksis/core/data_checks.py:188
+#: aleksis/core/data_checks.py:188
 #, python-brace-format
 msgid "Solve option '{solve_option_obj.verbose_name}' "
 msgstr "Lösungsoption \"{solve_option_obj.verbose_name}\" "
 
-#: aleksis/core/data_checks.py:291 aleksis/core/data_checks.py:294
 #: aleksis/core/data_checks.py:284
 msgid "Deactivate DashboardWidget"
 msgstr "Dashboard-Widget deaktivieren"
 
-#: aleksis/core/data_checks.py:303 aleksis/core/data_checks.py:306
 #: aleksis/core/data_checks.py:296
 msgid "Ensure that there are no broken DashboardWidgets."
 msgstr "Sicherstellen, dass es keine kaputten Dashboard-Widgets gibt."
 
-#: aleksis/core/data_checks.py:304 aleksis/core/data_checks.py:307
 #: aleksis/core/data_checks.py:297
 msgid "The DashboardWidget was reported broken automatically."
 msgstr "Das Dashboard-Widget wurde automatisch als kaputt gemeldet."
 
-#: aleksis/core/feeds.py:52
-msgid "Birthday Calendar"
-msgstr "Geburtstagskalender"
-
-#: aleksis/core/feeds.py:53
-msgid "A Calendar of Birthdays"
-msgstr "Ein Kalender mit Geburtstagen"
-
-#: aleksis/core/feeds.py:66
+#: aleksis/core/data_checks.py:320
 #, python-format
-msgid "%(name)s's birthday"
-msgstr "%(name)ss Geburtstag"
+msgid "Validate field %s of model %s."
+msgstr "Feld %s von Model %s validieren."
 
-#: aleksis/core/feeds.py:71
+#: aleksis/core/data_checks.py:322
 #, python-format
-msgid "%(name)s was born on %(birthday)s"
-msgstr "%(name)s wurde am %(birthday)s geboren"
+msgid "The field %s couldn't be validated successfully."
+msgstr "Das Feld %s konnte nicht erfolgreich validiert werden."
 
-#: aleksis/core/filters.py:42 aleksis/core/templates/core/base.html:139
-#: aleksis/core/templates/core/base.html:140
-#: aleksis/core/templates/core/group/list.html:20
+#: aleksis/core/filters.py:42 aleksis/core/templates/core/group/list.html:20
 #: aleksis/core/templates/core/person/list.html:24
 #: aleksis/core/templates/search/search.html:7
 #: aleksis/core/templates/search/search.html:22
@@ -114,13 +98,11 @@ msgstr "Berechtigung"
 msgid "Content type"
 msgstr "Inhaltstyp"
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:715
-#: aleksis/core/models.py:720
+#: aleksis/core/filters.py:113 aleksis/core/models.py:720
 msgid "User"
 msgstr "Benutzer"
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:488
-#: aleksis/core/models.py:493
+#: aleksis/core/filters.py:135 aleksis/core/models.py:493
 msgid "Group"
 msgstr "Gruppe"
 
@@ -150,16 +132,13 @@ msgstr "Neues Benutzerkonto erstellen"
 
 #: aleksis/core/forms.py:132
 msgid "You cannot set a new username when also selecting an existing user."
-msgstr ""
-"Sie können keine neuen Benutzer erstellen, wenn Sie gleichzeitig einen "
-"existierenden Benutzer auswählen."
+msgstr "Sie können keine neuen Benutzer erstellen, wenn Sie gleichzeitig einen existierenden Benutzer auswählen."
 
 #: aleksis/core/forms.py:136
 msgid "This username is already in use."
 msgstr "Dieser Benutzername wird bereits genutzt."
 
-#: aleksis/core/forms.py:153 aleksis/core/models.py:136
-#: aleksis/core/models.py:141
+#: aleksis/core/forms.py:153 aleksis/core/models.py:141
 msgid "School term"
 msgstr "Schuljahr"
 
@@ -168,9 +147,8 @@ msgid "Common data"
 msgstr "Allgemeine Daten"
 
 #: aleksis/core/forms.py:155 aleksis/core/forms.py:207
-#: aleksis/core/menus.py:160 aleksis/core/models.py:159
-#: aleksis/core/templates/core/person/list.html:8
-#: aleksis/core/templates/core/person/list.html:9 aleksis/core/models.py:164
+#: aleksis/core/models.py:164 aleksis/core/templates/core/person/list.html:8
+#: aleksis/core/templates/core/person/list.html:9
 msgid "Persons"
 msgstr "Personen"
 
@@ -178,19 +156,18 @@ msgstr "Personen"
 msgid "Additional data"
 msgstr "Zusätzliche Daten"
 
-#: aleksis/core/forms.py:157 aleksis/core/models.py:212
-#: aleksis/core/models.py:541 aleksis/core/models.py:217
+#: aleksis/core/forms.py:157 aleksis/core/models.py:217
 #: aleksis/core/models.py:546 aleksis/core/tables.py:46
 msgid "Photo"
 msgstr "Foto"
 
 #: aleksis/core/forms.py:199 aleksis/core/forms.py:202
-#: aleksis/core/models.py:79 aleksis/core/models.py:84
+#: aleksis/core/models.py:84
 msgid "Date"
 msgstr "Datum"
 
 #: aleksis/core/forms.py:200 aleksis/core/forms.py:203
-#: aleksis/core/models.py:87 aleksis/core/models.py:92
+#: aleksis/core/models.py:92
 msgid "Time"
 msgstr "Zeit"
 
@@ -207,17 +184,12 @@ msgid "Write your announcement:"
 msgstr "Schreiben Sie ihre Ankündigung:"
 
 #: aleksis/core/forms.py:276
-msgid ""
-"You are not allowed to create announcements which are only valid in the past."
-msgstr ""
-"Sie dürfen keine Ankündigungen erstellen, die nur für die Vergangenheit "
-"gültig sind."
+msgid "You are not allowed to create announcements which are only valid in the past."
+msgstr "Sie dürfen keine Ankündigungen erstellen, die nur für die Vergangenheit gültig sind."
 
 #: aleksis/core/forms.py:280
 msgid "The from date and time must be earlier then the until date and time."
-msgstr ""
-"Das Startdatum und die Startzeit müssen vor dem Enddatum und der Endzeit "
-"sein."
+msgstr "Das Startdatum und die Startzeit müssen vor dem Enddatum und der Endzeit sein."
 
 #: aleksis/core/forms.py:289
 msgid "You need at least one recipient."
@@ -231,13 +203,11 @@ msgstr "Einladungscode"
 msgid "Please enter your invitation code."
 msgstr "Bitte geben Sie Ihren Einladungscode ein."
 
-#: aleksis/core/forms.py:418 aleksis/core/models.py:187
-#: aleksis/core/models.py:192
+#: aleksis/core/forms.py:418 aleksis/core/models.py:192
 msgid "First name"
 msgstr "Vorname"
 
-#: aleksis/core/forms.py:419 aleksis/core/models.py:188
-#: aleksis/core/models.py:193
+#: aleksis/core/forms.py:419 aleksis/core/models.py:193
 msgid "Last name"
 msgstr "Nachname"
 
@@ -255,25 +225,19 @@ msgstr "Auf was?"
 
 #: aleksis/core/forms.py:483
 msgid "Select objects which the permission should be granted for:"
-msgstr ""
-"Wählen Sie die Objekte aus, für welche die Berechtigung vergeben werden soll:"
+msgstr "Wählen Sie die Objekte aus, für welche die Berechtigung vergeben werden soll:"
 
 #: aleksis/core/forms.py:486
 msgid "Grant the permission for all objects"
 msgstr "Vergebe die Berechtigung für alle Objekte"
 
 #: aleksis/core/forms.py:494
-msgid ""
-"You must select at least one group or person which should get the permission."
-msgstr ""
-"Sie müssen mindestens eine Gruppe oder Person auswählen, welche die "
-"Berechtigung erhalten soll."
+msgid "You must select at least one group or person which should get the permission."
+msgstr "Sie müssen mindestens eine Gruppe oder Person auswählen, welche die Berechtigung erhalten soll."
 
 #: aleksis/core/forms.py:499
-msgid "You must grant the permission to all objects and/or to some objects."
-msgstr ""
-"Sie müssen die Berechtigung auf alle Objekte und/oder für einige Objekte "
-"vergeben."
+msgid "You must grant the permission to all objects or to specific objects."
+msgstr "Sie müssen die Berechtigung auf alle Objekte oder für spezifische Objekte vergeben."
 
 #: aleksis/core/forms.py:586
 msgid "Address data"
@@ -291,17 +255,15 @@ msgstr "Passwort"
 msgid "Password (again)"
 msgstr "Passwort wiederholen"
 
-#: aleksis/core/forms.py:728 aleksis/core/forms.py:761
+#: aleksis/core/forms.py:761
 msgid "The selected action does not exist."
 msgstr "Die ausgewählte Aktion existiert nicht."
 
-#: aleksis/core/forms.py:739 aleksis/core/forms.py:772
+#: aleksis/core/forms.py:772
 msgid "You do not have permission to run {} on all selected objects."
-msgstr ""
-"Sie haben nicht die Berechtigung, {} auf alle ausgewählten Objekte "
-"auszuführen."
+msgstr "Sie haben nicht die Berechtigung, {} auf alle ausgewählten Objekte auszuführen."
 
-#: aleksis/core/forms.py:795 aleksis/core/forms.py:828
+#: aleksis/core/forms.py:828
 msgid "No valid selection."
 msgstr "Keine gültige Auswahl."
 
@@ -325,833 +287,664 @@ msgstr "Kein Backup gefunden!"
 msgid "No backup result found!"
 msgstr "Kein Backupergebnis gefunden!"
 
-#: aleksis/core/menus.py:7 aleksis/core/templates/two_factor/core/login.html:6
-#: aleksis/core/templates/two_factor/core/login.html:32
-#: aleksis/core/templates/two_factor/core/login.html:95
-msgid "Login"
-msgstr "Anmelden"
-
-#: aleksis/core/menus.py:13 aleksis/core/templates/account/signup.html:22
-#: aleksis/core/templates/socialaccount/signup.html:23
-msgid "Sign up"
-msgstr "Registrieren"
-
-#: aleksis/core/menus.py:22 aleksis/core/templates/invitations/enter.html:7
-msgid "Accept invitation"
-msgstr "Einladung akzeptieren"
-
-#: aleksis/core/menus.py:31
-msgid "Dashboard"
-msgstr "Dashboard"
-
-#: aleksis/core/menus.py:39
-msgid "Admin"
-msgstr "Admin"
-
-#: aleksis/core/menus.py:47 aleksis/core/models.py:867
-#: aleksis/core/templates/core/announcement/list.html:7
-#: aleksis/core/templates/core/announcement/list.html:8
-#: aleksis/core/models.py:872 aleksis/core/models.py:876
-msgid "Announcements"
-msgstr "Ankündigungen"
-
-#: aleksis/core/menus.py:58 aleksis/core/models.py:137
-#: aleksis/core/templates/core/school_term/list.html:8
-#: aleksis/core/templates/core/school_term/list.html:9
-#: aleksis/core/models.py:142
-msgid "School terms"
-msgstr "Schuljahre"
-
-#: aleksis/core/menus.py:69
-#: aleksis/core/templates/core/dashboard_widget/list.html:8
-#: aleksis/core/templates/core/dashboard_widget/list.html:9
-msgid "Dashboard widgets"
-msgstr "Dashboard-Widgets"
-
-#: aleksis/core/menus.py:80
-#: aleksis/core/templates/core/management/data_management.html:6
-#: aleksis/core/templates/core/management/data_management.html:7
-msgid "Data management"
-msgstr "Datenverwaltung"
-
-#: aleksis/core/menus.py:91
-#: aleksis/core/templates/core/pages/system_status.html:5
-#: aleksis/core/templates/core/pages/system_status.html:7
-msgid "System status"
-msgstr "Systemstatus"
-
-#: aleksis/core/menus.py:102
-msgid "Configuration"
-msgstr "Konfiguration"
-
-#: aleksis/core/menus.py:113 aleksis/core/templates/core/data_check/list.html:9
-#: aleksis/core/templates/core/data_check/list.html:10
-msgid "Data checks"
-msgstr "Datenprüfungen"
-
-#: aleksis/core/menus.py:119 aleksis/core/templates/core/perms/list.html:13
-#: aleksis/core/templates/core/perms/list.html:14
-msgid "Manage permissions"
-msgstr "Berechtigungen verwalten"
-
-#: aleksis/core/menus.py:130
-msgid "Backend Admin"
-msgstr "Backend-Administration"
-
-#: aleksis/core/menus.py:138
-#: aleksis/core/templates/oauth2_provider/application/list.html:5
-#: aleksis/core/templates/oauth2_provider/application/list.html:6
-msgid "OAuth2 Applications"
-msgstr "OAuth2-Anwendungen"
-
-#: aleksis/core/menus.py:151
-msgid "People"
-msgstr "Leute"
-
-#: aleksis/core/menus.py:182 aleksis/core/models.py:1101
-#: aleksis/core/templates/core/group_type/list.html:8
-#: aleksis/core/templates/core/group_type/list.html:9
-#: aleksis/core/models.py:1111
-msgid "Group types"
-msgstr "Gruppentypen"
-
-#: aleksis/core/menus.py:193
-msgid "Groups and child groups"
-msgstr "Gruppen und Kindgruppen"
-
-#: aleksis/core/menus.py:204 aleksis/core/models.py:537
-#: aleksis/core/templates/core/additional_field/list.html:8
-#: aleksis/core/templates/core/additional_field/list.html:9
-#: aleksis/core/models.py:542
-msgid "Additional fields"
-msgstr "Zusätzliche Felder"
-
-#: aleksis/core/menus.py:215
-msgid "Invite person"
-msgstr "Person einladen"
-
-#: aleksis/core/menus.py:228
-#: aleksis/core/templates/core/group/child_groups.html:7
-#: aleksis/core/templates/core/group/child_groups.html:9
-msgid "Assign child groups to groups"
-msgstr "Kindgruppen zu Gruppen zuordnen"
-
-#: aleksis/core/menus.py:240
-msgid "Stop impersonation"
-msgstr "Verkleidung beenden"
-
-#: aleksis/core/menus.py:249
-msgid "Account"
-msgstr "Konto"
-
-#: aleksis/core/menus.py:258
-#: aleksis/core/templates/dynamic_preferences/form.html:5
-msgid "Preferences"
-msgstr "Einstellungen"
-
-#: aleksis/core/menus.py:267
-msgid "2FA"
-msgstr "2FA"
-
-#: aleksis/core/menus.py:275
-#: aleksis/core/templates/account/password_change.html:5
-#: aleksis/core/templates/account/password_change.html:6
-#: aleksis/core/templates/account/password_change.html:19
-#: aleksis/core/templates/account/password_reset_from_key.html:5
-#: aleksis/core/templates/account/password_reset_from_key.html:42
-#: aleksis/core/templates/account/password_reset_from_key.html:46
-#: aleksis/core/templates/account/password_reset_from_key_done.html:5
-#: aleksis/core/templates/account/password_reset_from_key_done.html:6
-msgid "Change password"
-msgstr "Passwort ändern"
-
-#: aleksis/core/menus.py:287
-msgid "Third-party accounts"
-msgstr "Drittanbieter-Konten"
-
-#: aleksis/core/menus.py:296
-#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5
-#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6
-msgid "Authorized applications"
-msgstr "Autorisierte Anwendungen"
-
-#: aleksis/core/menus.py:305
-msgid "Calendar Feeds"
-msgstr "Kalender-Feeds"
-
-#: aleksis/core/menus.py:318
-msgid "Logout"
-msgstr "Abmelden"
-
 #: aleksis/core/mixins.py:511
 msgid "Linked school term"
 msgstr "Zugeordnetes Schuljahr"
 
-#: aleksis/core/models.py:77 aleksis/core/models.py:82
+#: aleksis/core/models.py:82
 msgid "Boolean (Yes/No)"
 msgstr "Boolean (Ja/Nein)"
 
-#: aleksis/core/models.py:78 aleksis/core/models.py:83
+#: aleksis/core/models.py:83
 msgid "Text (one line)"
 msgstr "Text (eine Zeile)"
 
-#: aleksis/core/models.py:80 aleksis/core/models.py:85
+#: aleksis/core/models.py:85
 msgid "Date and time"
 msgstr "Datum und Uhrzeit"
 
-#: aleksis/core/models.py:81 aleksis/core/models.py:86
+#: aleksis/core/models.py:86
 msgid "Decimal number"
 msgstr "Dezimalzahl"
 
-#: aleksis/core/models.py:82 aleksis/core/models.py:205
 #: aleksis/core/models.py:87 aleksis/core/models.py:210
 msgid "E-mail address"
 msgstr "E-Mail-Adresse"
 
-#: aleksis/core/models.py:83 aleksis/core/models.py:88
+#: aleksis/core/models.py:88
 msgid "Integer"
 msgstr "Ganze Zahl"
 
-#: aleksis/core/models.py:84 aleksis/core/models.py:89
+#: aleksis/core/models.py:89
 msgid "IP address"
 msgstr "IP-Adresse"
 
-#: aleksis/core/models.py:85 aleksis/core/models.py:90
+#: aleksis/core/models.py:90
 msgid "Boolean or empty (Yes/No/Neither)"
 msgstr "Boolean oder leer (Ja/Nein/weder)"
 
-#: aleksis/core/models.py:86 aleksis/core/models.py:91
+#: aleksis/core/models.py:91
 msgid "Text (multi-line)"
 msgstr "Text (mehrzeilig)"
 
-#: aleksis/core/models.py:88 aleksis/core/models.py:93
+#: aleksis/core/models.py:93
 msgid "URL / Link"
 msgstr "URL / Link"
 
-#: aleksis/core/models.py:100 aleksis/core/models.py:1070
-#: aleksis/core/models.py:1374 aleksis/core/models.py:105
-#: aleksis/core/models.py:1077 aleksis/core/models.py:1384
+#: aleksis/core/models.py:105 aleksis/core/models.py:1077
 msgid "Name"
 msgstr "Name"
 
-#: aleksis/core/models.py:102 aleksis/core/models.py:107
+#: aleksis/core/models.py:107
 msgid "Start date"
 msgstr "Startdatum"
 
-#: aleksis/core/models.py:103 aleksis/core/models.py:108
+#: aleksis/core/models.py:108
 msgid "End date"
 msgstr "Enddatum"
 
-#: aleksis/core/models.py:122 aleksis/core/models.py:127
+#: aleksis/core/models.py:127
 msgid "The start date must be earlier than the end date."
 msgstr "Das Startdatum muss vor dem Enddatum liegen."
 
-#: aleksis/core/models.py:129 aleksis/core/models.py:134
+#: aleksis/core/models.py:134
 msgid "There is already a school term for this time or a part of this time."
-msgstr ""
-"Es gibt bereits ein Schuljahr für diesen Zeitraum oder einen Teilzeitraum."
+msgstr "Es gibt bereits ein Schuljahr für diesen Zeitraum oder einen Teilzeitraum."
+
+#: aleksis/core/models.py:142
+#: aleksis/core/templates/core/school_term/list.html:8
+#: aleksis/core/templates/core/school_term/list.html:9
+msgid "School terms"
+msgstr "Schuljahre"
 
-#: aleksis/core/models.py:158 aleksis/core/models.py:1019
-#: aleksis/core/models.py:1371 aleksis/core/models.py:163
-#: aleksis/core/models.py:1024 aleksis/core/models.py:1381
-#: aleksis/core/models.py:1026
+#: aleksis/core/models.py:163 aleksis/core/models.py:1026
 msgid "Person"
 msgstr "Person"
 
-#: aleksis/core/models.py:161 aleksis/core/models.py:166
+#: aleksis/core/models.py:166
 msgid "Can view address"
 msgstr "Kann Adresse sehen"
 
-#: aleksis/core/models.py:162 aleksis/core/models.py:167
+#: aleksis/core/models.py:167
 msgid "Can view contact details"
 msgstr "Kann Kontaktdetails sehen"
 
-#: aleksis/core/models.py:163 aleksis/core/models.py:168
+#: aleksis/core/models.py:168
 msgid "Can view photo"
 msgstr "Kann Foto sehen"
 
-#: aleksis/core/models.py:164 aleksis/core/models.py:169
+#: aleksis/core/models.py:169
 msgid "Can view avatar image"
 msgstr "Kann Avatar-Bild sehen"
 
-#: aleksis/core/models.py:165 aleksis/core/models.py:170
+#: aleksis/core/models.py:170
 msgid "Can view persons groups"
 msgstr "Kann Gruppen einer Person sehen"
 
-#: aleksis/core/models.py:166 aleksis/core/models.py:171
+#: aleksis/core/models.py:171
 msgid "Can view personal details"
 msgstr "Kann persönliche Daten sehen"
 
-#: aleksis/core/models.py:176 aleksis/core/models.py:181
+#: aleksis/core/models.py:181
 msgid "female"
 msgstr "weiblich"
 
-#: aleksis/core/models.py:176 aleksis/core/models.py:181
+#: aleksis/core/models.py:181
 msgid "male"
 msgstr "männlich"
 
-#: aleksis/core/models.py:184 aleksis/core/models.py:1273
-#: aleksis/core/models.py:189 aleksis/core/models.py:1283
-#: aleksis/core/models.py:1345
+#: aleksis/core/models.py:181
+msgid "other"
+msgstr "andere"
+
+#: aleksis/core/models.py:189 aleksis/core/models.py:1353
 msgid "Linked user"
 msgstr "Verknüpfter Benutzer"
 
-#: aleksis/core/models.py:190 aleksis/core/models.py:195
+#: aleksis/core/models.py:195
 msgid "Additional name(s)"
 msgstr "Zusätzliche Namen"
 
-#: aleksis/core/models.py:194 aleksis/core/models.py:506
 #: aleksis/core/models.py:199 aleksis/core/models.py:511
-#: aleksis/core/models.py:1431
+#: aleksis/core/models.py:1439
 msgid "Short name"
 msgstr "Kurzname"
 
-#: aleksis/core/models.py:197 aleksis/core/models.py:202
+#: aleksis/core/models.py:202
 msgid "Street"
 msgstr "Straße"
 
-#: aleksis/core/models.py:198 aleksis/core/models.py:203
+#: aleksis/core/models.py:203
 msgid "Street number"
 msgstr "Hausnummer"
 
-#: aleksis/core/models.py:199 aleksis/core/models.py:204
+#: aleksis/core/models.py:204
 msgid "Postal code"
 msgstr "Postleitzahl"
 
-#: aleksis/core/models.py:200 aleksis/core/models.py:205
+#: aleksis/core/models.py:205
 msgid "Place"
 msgstr "Ort"
 
-#: aleksis/core/models.py:202 aleksis/core/templates/core/person/full.html:160
 #: aleksis/core/models.py:207
 msgid "Home phone"
 msgstr "Festnetz"
 
-#: aleksis/core/models.py:203 aleksis/core/templates/core/person/full.html:170
 #: aleksis/core/models.py:208
 msgid "Mobile phone"
 msgstr "Handy"
 
-#: aleksis/core/models.py:207 aleksis/core/models.py:212
+#: aleksis/core/models.py:212
 msgid "Date of birth"
 msgstr "Geburtsdatum"
 
-#: aleksis/core/models.py:208 aleksis/core/models.py:213
+#: aleksis/core/models.py:213
 msgid "Place of birth"
 msgstr "Geburtsort"
 
-#: aleksis/core/models.py:209 aleksis/core/models.py:214
+#: aleksis/core/models.py:214
 msgid "Sex"
 msgstr "Geschlecht"
 
-#: aleksis/core/models.py:216 aleksis/core/models.py:545
 #: aleksis/core/models.py:221 aleksis/core/models.py:550
-msgid ""
-"This is an official photo, used for official documents and for internal use "
-"cases."
-msgstr ""
-"Dies ist ein offizielles Foto, genutzt für offizielle Dokumente und interne "
-"Zwecke."
+msgid "This is an official photo, used for official documents and for internal use cases."
+msgstr "Dies ist ein offizielles Foto, genutzt für offizielle Dokumente und interne Zwecke."
 
-#: aleksis/core/models.py:221 aleksis/core/models.py:549
 #: aleksis/core/models.py:226 aleksis/core/models.py:554
 msgid "Display picture / Avatar"
 msgstr "Bild/Avatar anzeigen"
 
-#: aleksis/core/models.py:224 aleksis/core/models.py:552
 #: aleksis/core/models.py:229 aleksis/core/models.py:557
 msgid "This is a picture or an avatar for public display."
 msgstr "Dies ist ein Bild oder ein Avatar für die öffentliche Darstellung."
 
-#: aleksis/core/models.py:229 aleksis/core/templates/core/person/full.html:235
 #: aleksis/core/models.py:234
 msgid "Guardians / Parents"
 msgstr "Erziehungsberechtigte / Eltern"
 
-#: aleksis/core/models.py:236 aleksis/core/models.py:241
+#: aleksis/core/models.py:241
 msgid "Primary group"
 msgstr "Primärgruppe"
 
-#: aleksis/core/models.py:239 aleksis/core/models.py:719
-#: aleksis/core/models.py:743 aleksis/core/models.py:834
-#: aleksis/core/models.py:1094 aleksis/core/models.py:244
-#: aleksis/core/models.py:724 aleksis/core/models.py:748
-#: aleksis/core/models.py:839 aleksis/core/models.py:1104
-#: aleksis/core/models.py:843
+#: aleksis/core/models.py:244 aleksis/core/models.py:724
+#: aleksis/core/models.py:748 aleksis/core/models.py:843
+#: aleksis/core/models.py:1112
 msgid "Description"
 msgstr "Beschreibung"
 
-#: aleksis/core/models.py:459 aleksis/core/models.py:464
+#: aleksis/core/models.py:464
 msgid "Title of field"
 msgstr "Feldtitel"
 
-#: aleksis/core/models.py:461 aleksis/core/models.py:466
+#: aleksis/core/models.py:466
 msgid "Type of field"
 msgstr "Feldtyp"
 
-#: aleksis/core/models.py:463 aleksis/core/models.py:468
+#: aleksis/core/models.py:468
 msgid "Required"
 msgstr "Pflichtfeld"
 
-#: aleksis/core/models.py:464 aleksis/core/models.py:469
+#: aleksis/core/models.py:469
 msgid "Help text / description"
 msgstr "Hilfetext/Beschreibung"
 
-#: aleksis/core/models.py:470 aleksis/core/models.py:475
+#: aleksis/core/models.py:475
 msgid "Addtitional field for groups"
 msgstr "Zusätzliche Felder für Gruppen"
 
-#: aleksis/core/models.py:471 aleksis/core/models.py:476
+#: aleksis/core/models.py:476
 msgid "Addtitional fields for groups"
 msgstr "Zusätzliche Felder für Gruppen"
 
-#: aleksis/core/models.py:491 aleksis/core/models.py:496
+#: aleksis/core/models.py:496
 msgid "Can assign child groups to groups"
 msgstr "Kann Kindgruppen zu Gruppen zuordnen"
 
-#: aleksis/core/models.py:492 aleksis/core/models.py:497
+#: aleksis/core/models.py:497
 msgid "Can view statistics about group."
 msgstr "Kann Statistiken über Gruppen sehen."
 
-#: aleksis/core/models.py:504 aleksis/core/models.py:509
-#: aleksis/core/models.py:1432
+#: aleksis/core/models.py:509 aleksis/core/models.py:1440
 msgid "Long name"
 msgstr "Langname"
 
-#: aleksis/core/models.py:514 aleksis/core/templates/core/group/full.html:85
 #: aleksis/core/models.py:519 aleksis/core/templates/core/group/full.html:105
 msgid "Members"
 msgstr "Mitglieder"
 
-#: aleksis/core/models.py:517 aleksis/core/templates/core/group/full.html:82
 #: aleksis/core/models.py:522 aleksis/core/templates/core/group/full.html:102
 msgid "Owners"
 msgstr "Leiter/-innen"
 
-#: aleksis/core/models.py:524 aleksis/core/templates/core/group/full.html:55
 #: aleksis/core/models.py:529 aleksis/core/templates/core/group/full.html:59
 msgid "Parent groups"
 msgstr "Übergeordnete Gruppen"
 
-#: aleksis/core/models.py:532 aleksis/core/models.py:537
+#: aleksis/core/models.py:537
 msgid "Type of group"
 msgstr "Gruppentyp"
 
-#: aleksis/core/models.py:718 aleksis/core/models.py:742
-#: aleksis/core/models.py:833
-#: aleksis/core/templates/core/announcement/list.html:18
+#: aleksis/core/models.py:542
+#: aleksis/core/templates/core/additional_field/list.html:8
+#: aleksis/core/templates/core/additional_field/list.html:9
+msgid "Additional fields"
+msgstr "Zusätzliche Felder"
+
 #: aleksis/core/models.py:723 aleksis/core/models.py:747
-#: aleksis/core/models.py:838 aleksis/core/models.py:842
-#: aleksis/core/models.py:1262
+#: aleksis/core/models.py:842 aleksis/core/models.py:1270
+#: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr "Titel"
 
-#: aleksis/core/models.py:721 aleksis/core/models.py:726
+#: aleksis/core/models.py:726
 msgid "Application"
 msgstr "Anwendung"
 
-#: aleksis/core/models.py:727 aleksis/core/models.py:732
+#: aleksis/core/models.py:732
 msgid "Activity"
 msgstr "Aktivität"
 
-#: aleksis/core/models.py:728 aleksis/core/models.py:733
+#: aleksis/core/models.py:733
 msgid "Activities"
 msgstr "Aktivitäten"
 
-#: aleksis/core/models.py:734 aleksis/core/models.py:739
+#: aleksis/core/models.py:739
 msgid "Sender"
 msgstr "Absender"
 
-#: aleksis/core/models.py:739 aleksis/core/models.py:744
+#: aleksis/core/models.py:744
 msgid "Recipient"
 msgstr "Empfänger"
 
-#: aleksis/core/models.py:744 aleksis/core/models.py:1071
 #: aleksis/core/models.py:749 aleksis/core/models.py:1078
 msgid "Link"
 msgstr "Link"
 
-#: aleksis/core/models.py:746 aleksis/core/models.py:751
+#: aleksis/core/models.py:752 aleksis/core/models.py:1079
+#: aleksis/core/models.py:1400
+#: aleksis/core/templates/oauth2_provider/application/detail.html:26
+msgid "Icon"
+msgstr "Symbol"
+
 #: aleksis/core/models.py:755
 msgid "Send notification at"
 msgstr "Benachrichtigung schicken am"
 
-#: aleksis/core/models.py:748 aleksis/core/models.py:753
 #: aleksis/core/models.py:757
 msgid "Read"
 msgstr "Gelesen"
 
-#: aleksis/core/models.py:749 aleksis/core/models.py:754
 #: aleksis/core/models.py:758
 msgid "Sent"
 msgstr "Versandt"
 
-#: aleksis/core/models.py:766 aleksis/core/models.py:771
 #: aleksis/core/models.py:775
 msgid "Notification"
 msgstr "Benachrichtigung"
 
-#: aleksis/core/models.py:767 aleksis/core/preferences.py:29
-#: aleksis/core/templates/core/base.html:81
-#: aleksis/core/templates/core/notifications.html:4
-#: aleksis/core/templates/core/notifications.html:5 aleksis/core/models.py:772
-#: aleksis/core/models.py:776
+#: aleksis/core/models.py:776 aleksis/core/preferences.py:29
 msgid "Notifications"
 msgstr "Benachrichtigungen"
 
-#: aleksis/core/models.py:835 aleksis/core/models.py:840
 #: aleksis/core/models.py:844
 msgid "Link to detailed view"
 msgstr "Link zur detaillierten Ansicht"
 
-#: aleksis/core/models.py:838 aleksis/core/models.py:843
 #: aleksis/core/models.py:847
 msgid "Date and time from when to show"
 msgstr "Datum und Uhrzeit des Anzeigestarts"
 
-#: aleksis/core/models.py:841 aleksis/core/models.py:846
 #: aleksis/core/models.py:850
 msgid "Date and time until when to show"
 msgstr "Anzeigezeitraum"
 
-#: aleksis/core/models.py:866 aleksis/core/models.py:871
 #: aleksis/core/models.py:875
 msgid "Announcement"
 msgstr "Ankündigung"
 
-#: aleksis/core/models.py:904 aleksis/core/models.py:909
+#: aleksis/core/models.py:876
+#: aleksis/core/templates/core/announcement/list.html:7
+#: aleksis/core/templates/core/announcement/list.html:8
+msgid "Announcements"
+msgstr "Ankündigungen"
+
 #: aleksis/core/models.py:913
 msgid "Announcement recipient"
 msgstr "Empfänger der Ankündigung"
 
-#: aleksis/core/models.py:905 aleksis/core/models.py:910
 #: aleksis/core/models.py:914
 msgid "Announcement recipients"
 msgstr "Empfänger der Ankündigung"
 
-#: aleksis/core/models.py:927 aleksis/core/models.py:932
 #: aleksis/core/models.py:934
 msgid "Widget Title"
 msgstr "Widget-Titel"
 
-#: aleksis/core/models.py:928 aleksis/core/models.py:933
 #: aleksis/core/models.py:935
 msgid "Activate Widget"
 msgstr "Widget aktivieren"
 
-#: aleksis/core/models.py:929 aleksis/core/models.py:934
 #: aleksis/core/models.py:936
 msgid "Widget is broken"
 msgstr "Widget ist kaputt"
 
-#: aleksis/core/models.py:932 aleksis/core/models.py:937
 #: aleksis/core/models.py:939
 msgid "Size on mobile devices"
 msgstr "Größe auf Mobilgeräten"
 
-#: aleksis/core/models.py:933 aleksis/core/models.py:938
 #: aleksis/core/models.py:940
 msgid "<= 600 px, 12 columns"
 msgstr "<= 600 px, 12 Spalten"
 
-#: aleksis/core/models.py:938 aleksis/core/models.py:943
 #: aleksis/core/models.py:945
 msgid "Size on tablet devices"
 msgstr "Größe auf Tablets"
 
-#: aleksis/core/models.py:939 aleksis/core/models.py:944
 #: aleksis/core/models.py:946
 msgid "> 600 px, 12 columns"
 msgstr "> 600px, 12 Spalten"
 
-#: aleksis/core/models.py:944 aleksis/core/models.py:949
 #: aleksis/core/models.py:951
 msgid "Size on desktop devices"
 msgstr "Größe auf Desktopgeräten"
 
-#: aleksis/core/models.py:945 aleksis/core/models.py:950
 #: aleksis/core/models.py:952
 msgid "> 992 px, 12 columns"
 msgstr "> 992 px, 12 Spalten"
 
-#: aleksis/core/models.py:950 aleksis/core/models.py:955
 #: aleksis/core/models.py:957
 msgid "Size on large desktop devices"
 msgstr "Größe auf großen Desktopgeräten"
 
-#: aleksis/core/models.py:951 aleksis/core/models.py:956
 #: aleksis/core/models.py:958
 msgid "> 1200 px>, 12 columns"
 msgstr "> 1200 px, 12 Spalten"
 
-#: aleksis/core/models.py:982 aleksis/core/models.py:987
 #: aleksis/core/models.py:989
 msgid "Can edit default dashboard"
 msgstr "Kann Standarddashboard bearbeiten"
 
-#: aleksis/core/models.py:983 aleksis/core/models.py:988
 #: aleksis/core/models.py:990
 msgid "Dashboard Widget"
 msgstr "Dashboard-Widget"
 
-#: aleksis/core/models.py:984 aleksis/core/models.py:989
 #: aleksis/core/models.py:991
 msgid "Dashboard Widgets"
 msgstr "Dashboard-Widgets"
 
-#: aleksis/core/models.py:990 aleksis/core/models.py:995
 #: aleksis/core/models.py:997
 msgid "URL"
 msgstr "URL"
 
-#: aleksis/core/models.py:991 aleksis/core/models.py:996
 #: aleksis/core/models.py:998
 msgid "Icon URL"
 msgstr "Symbol-URL"
 
-#: aleksis/core/models.py:997 aleksis/core/models.py:1002
 #: aleksis/core/models.py:1004
 msgid "External link widget"
 msgstr "Externer-Link-Widget"
 
-#: aleksis/core/models.py:998 aleksis/core/models.py:1003
 #: aleksis/core/models.py:1005
 msgid "External link widgets"
 msgstr "Externer-Link-Widgets"
 
-#: aleksis/core/models.py:1004 aleksis/core/models.py:1009
 #: aleksis/core/models.py:1011
 msgid "Content"
 msgstr "Inhalt"
 
-#: aleksis/core/models.py:1010 aleksis/core/models.py:1015
 #: aleksis/core/models.py:1017
 msgid "Static content widget"
 msgstr "Statischer-Inhalt-Widget"
 
-#: aleksis/core/models.py:1011 aleksis/core/models.py:1016
 #: aleksis/core/models.py:1018
 msgid "Static content widgets"
 msgstr "Statischer-Inhalt-Widgets"
 
-#: aleksis/core/models.py:1016 aleksis/core/models.py:1021
 #: aleksis/core/models.py:1023
 msgid "Dashboard widget"
 msgstr "Dashboard-Widget"
 
-#: aleksis/core/models.py:1021 aleksis/core/models.py:1026
 #: aleksis/core/models.py:1028
 msgid "Order"
 msgstr "Reihenfolge"
 
-#: aleksis/core/models.py:1022 aleksis/core/models.py:1027
 #: aleksis/core/models.py:1029
 msgid "Part of the default dashboard"
 msgstr "Teil des Standarddashboards"
 
-#: aleksis/core/models.py:1037 aleksis/core/models.py:1042
 #: aleksis/core/models.py:1044
 msgid "Dashboard widget order"
 msgstr "Reihenfolge der Dashboard-Widgets"
 
-#: aleksis/core/models.py:1038 aleksis/core/models.py:1043
 #: aleksis/core/models.py:1045
 msgid "Dashboard widget orders"
 msgstr "Reihenfolgen der Dashboard-Widgets"
 
-#: aleksis/core/models.py:1044 aleksis/core/models.py:1049
 #: aleksis/core/models.py:1051
 msgid "Menu ID"
 msgstr "Menü-ID"
 
-#: aleksis/core/models.py:1057 aleksis/core/models.py:1062
 #: aleksis/core/models.py:1064
 msgid "Custom menu"
 msgstr "Benutzerdefiniertes Menü"
 
-#: aleksis/core/models.py:1058 aleksis/core/models.py:1063
 #: aleksis/core/models.py:1065
 msgid "Custom menus"
 msgstr "Benutzerdefinierte Menüs"
 
-#: aleksis/core/models.py:1068 aleksis/core/models.py:1075
+#: aleksis/core/models.py:1075
 msgid "Menu"
 msgstr "Menü"
 
-#: aleksis/core/models.py:1072 aleksis/core/models.py:1320
-#: aleksis/core/templates/oauth2_provider/application/detail.html:26
-#: aleksis/core/models.py:1079 aleksis/core/models.py:1330
-#: aleksis/core/models.py:752 aleksis/core/models.py:1392
-msgid "Icon"
-msgstr "Symbol"
-
-#: aleksis/core/models.py:1078 aleksis/core/models.py:1085
+#: aleksis/core/models.py:1085
 msgid "Custom menu item"
 msgstr "Benutzerdefiniertes Menüelement"
 
-#: aleksis/core/models.py:1079 aleksis/core/models.py:1086
+#: aleksis/core/models.py:1086
 msgid "Custom menu items"
 msgstr "Benutzerdefinierte Menüelemente"
 
-#: aleksis/core/models.py:1093 aleksis/core/models.py:1103
+#: aleksis/core/models.py:1111
 msgid "Title of type"
 msgstr "Titel des Typs"
 
-#: aleksis/core/models.py:1100 aleksis/core/templates/core/group/full.html:47
-#: aleksis/core/models.py:1110 aleksis/core/templates/core/group/full.html:50
+#: aleksis/core/models.py:1118 aleksis/core/templates/core/group/full.html:50
 msgid "Group type"
 msgstr "Gruppentyp"
 
-#: aleksis/core/models.py:1114 aleksis/core/models.py:1124
+#: aleksis/core/models.py:1119
+#: aleksis/core/templates/core/group_type/list.html:8
+#: aleksis/core/templates/core/group_type/list.html:9
+msgid "Group types"
+msgstr "Gruppentypen"
+
+#: aleksis/core/models.py:1132
 msgid "Can view system status"
 msgstr "Kann Systemstatus sehen"
 
-#: aleksis/core/models.py:1115 aleksis/core/models.py:1125
+#: aleksis/core/models.py:1133
 msgid "Can manage data"
 msgstr "Kann Daten verwalten"
 
-#: aleksis/core/models.py:1116 aleksis/core/models.py:1126
+#: aleksis/core/models.py:1134
 msgid "Can impersonate"
 msgstr "Kann sich verkleiden"
 
-#: aleksis/core/models.py:1117 aleksis/core/models.py:1127
+#: aleksis/core/models.py:1135
 msgid "Can use search"
 msgstr "Kann Suche benutzen"
 
-#: aleksis/core/models.py:1118 aleksis/core/models.py:1128
+#: aleksis/core/models.py:1136
 msgid "Can change site preferences"
 msgstr "Kann Konfiguration ändern"
 
-#: aleksis/core/models.py:1119 aleksis/core/models.py:1129
+#: aleksis/core/models.py:1137
 msgid "Can change person preferences"
 msgstr "Kann Einstellungen einer Person verändern"
 
-#: aleksis/core/models.py:1120 aleksis/core/models.py:1130
+#: aleksis/core/models.py:1138
 msgid "Can change group preferences"
 msgstr "Kann Einstellungen einer Gruppe verändern"
 
-#: aleksis/core/models.py:1121 aleksis/core/models.py:1131
+#: aleksis/core/models.py:1139
 msgid "Can test PDF generation"
 msgstr "Kann die PDF-Generierung testen"
 
-#: aleksis/core/models.py:1122 aleksis/core/models.py:1132
+#: aleksis/core/models.py:1140
 msgid "Can invite persons"
 msgstr "Kann Personen einladen"
 
-#: aleksis/core/models.py:1158 aleksis/core/models.py:1168
+#: aleksis/core/models.py:1176
 msgid "Related data check task"
 msgstr "Zugehörige Datenprüfungsaufgabe"
 
-#: aleksis/core/models.py:1166 aleksis/core/models.py:1176
+#: aleksis/core/models.py:1184
 msgid "Issue solved"
 msgstr "Problem gelöst"
 
-#: aleksis/core/models.py:1167 aleksis/core/models.py:1177
+#: aleksis/core/models.py:1185
 msgid "Notification sent"
 msgstr "Benachrichtigung gesendet"
 
-#: aleksis/core/models.py:1180 aleksis/core/models.py:1190
+#: aleksis/core/models.py:1198
 msgid "Data check result"
 msgstr "Datenprüfungsergebnis"
 
-#: aleksis/core/models.py:1181 aleksis/core/models.py:1191
+#: aleksis/core/models.py:1199
 msgid "Data check results"
 msgstr "Datenprüfungsergebnisse"
 
-#: aleksis/core/models.py:1183 aleksis/core/models.py:1193
+#: aleksis/core/models.py:1201
 msgid "Can run data checks"
 msgstr "Kann Datenprüfungen ausführen"
 
-#: aleksis/core/models.py:1184 aleksis/core/models.py:1194
+#: aleksis/core/models.py:1202
 msgid "Can solve data check problems"
 msgstr "Kann Datenprüfungsprobleme lösen"
 
-#: aleksis/core/models.py:1191 aleksis/core/models.py:1201
+#: aleksis/core/models.py:1209
 msgid "E-Mail address"
 msgstr "E-Mail-Adresse"
 
-#: aleksis/core/models.py:1223 aleksis/core/models.py:1233
+#: aleksis/core/models.py:1241
 msgid "Owner"
 msgstr "Leiter"
 
-#: aleksis/core/models.py:1227 aleksis/core/models.py:1237
+#: aleksis/core/models.py:1245
 msgid "File expires at"
 msgstr "Datei abgelaufen am"
 
-#: aleksis/core/models.py:1229 aleksis/core/models.py:1239
-#: aleksis/core/models.py:1240
+#: aleksis/core/models.py:1248
 msgid "Generated HTML file"
 msgstr "Generierte HTML-Datei"
 
-#: aleksis/core/models.py:1231 aleksis/core/models.py:1241
-#: aleksis/core/models.py:1243
+#: aleksis/core/models.py:1251
 msgid "Generated PDF file"
 msgstr "Generierte PDF-Datei"
 
-#: aleksis/core/models.py:1238 aleksis/core/models.py:1248
-#: aleksis/core/models.py:1250
+#: aleksis/core/models.py:1258
 msgid "PDF file"
 msgstr "PDF-Datei"
 
-#: aleksis/core/models.py:1239 aleksis/core/models.py:1249
-#: aleksis/core/models.py:1251
+#: aleksis/core/models.py:1259
 msgid "PDF files"
 msgstr "PDF-Dateien"
 
-#: aleksis/core/models.py:1244 aleksis/core/models.py:1254
-#: aleksis/core/models.py:1256
+#: aleksis/core/models.py:1264
 msgid "Task result"
 msgstr "Task-Ergebnis"
 
-#: aleksis/core/models.py:1247 aleksis/core/models.py:1257
-#: aleksis/core/models.py:1259
+#: aleksis/core/models.py:1267
 msgid "Task user"
 msgstr "Task-Benutzer"
 
-#: aleksis/core/models.py:1259 aleksis/core/models.py:1269
-#: aleksis/core/models.py:1331
+#: aleksis/core/models.py:1271
+msgid "Back URL"
+msgstr "Zurück-URL"
+
+#: aleksis/core/models.py:1272
+msgid "Progress title"
+msgstr "Fortschritt-Titel"
+
+#: aleksis/core/models.py:1273
+msgid "Error message"
+msgstr "Fehlernachricht"
+
+#: aleksis/core/models.py:1274
+msgid "Success message"
+msgstr "Erfolgsnachricht"
+
+#: aleksis/core/models.py:1275
+msgid "Redirect on success URL"
+msgstr "URL, auf die bei Erfolg weitergeleitet wird"
+
+#: aleksis/core/models.py:1277
+msgid "Additional button title"
+msgstr "Titel des zusätzlichen Buttons"
+
+#: aleksis/core/models.py:1279
+msgid "Additional button URL"
+msgstr "URL des zusätzlichen Buttons"
+
+#: aleksis/core/models.py:1281
+msgid "Additional button icon"
+msgstr "Symbol des zusätzlichen Buttons"
+
+#: aleksis/core/models.py:1283
+msgid "Result fetched"
+msgstr "Ergebnis abgerufen"
+
+#: aleksis/core/models.py:1308
+msgid "Background task completed successfully"
+msgstr "Hintergrundaufgabe erfolgreich fertiggestellt"
+
+#: aleksis/core/models.py:1309
+msgid "The background task '{}' has been completed successfully."
+msgstr "Die Hintergrundaufgabe '{}' wurde erfolgreich fertiggestellt."
+
+#: aleksis/core/models.py:1315
+msgid "Background task failed"
+msgstr "Hintergrundaufgabe fehlgeschlagen"
+
+#: aleksis/core/models.py:1316
+msgid "The background task '{}' has failed."
+msgstr "Die Hintergrundaufgabe '{}' ist fehlgeschlagen."
+
+#: aleksis/core/models.py:1325
+msgid "Background task"
+msgstr "Hintergrundaufgabe"
+
+#: aleksis/core/models.py:1339
 msgid "Task user assignment"
 msgstr "Task-Benutzer-Zuordnung"
 
-#: aleksis/core/models.py:1260 aleksis/core/models.py:1270
-#: aleksis/core/models.py:1332
+#: aleksis/core/models.py:1340
 msgid "Task user assignments"
 msgstr "Task-Benutzer-Zuordnungen"
 
-#: aleksis/core/models.py:1276 aleksis/core/models.py:1286
-#: aleksis/core/models.py:1348
+#: aleksis/core/models.py:1356
 msgid "Additional attributes"
 msgstr "Zusätzliche Attribute"
 
-#: aleksis/core/models.py:1314 aleksis/core/models.py:1324
-#: aleksis/core/models.py:1386
+#: aleksis/core/models.py:1394
 msgid "Allowed scopes that clients can request"
 msgstr "Erlaubte Scopes, die ein Client anfordern kann"
 
-#: aleksis/core/models.py:1324 aleksis/core/models.py:1334
-#: aleksis/core/models.py:1396
-msgid ""
-"This image will be shown as icon in the authorization flow. It should be "
-"squared."
-msgstr ""
-"Dieses Bild wird im Autorisierungs-Vorgang als Symbol angezeigt werden. Es "
-"sollte rechteckig sein."
-
-#: aleksis/core/models.py:1373 aleksis/core/models.py:1383
-msgid "UUID"
-msgstr "UUID"
+#: aleksis/core/models.py:1404
+msgid "This image will be shown as icon in the authorization flow. It should be squared."
+msgstr "Dieses Bild wird im Autorisierungs-Vorgang als Symbol angezeigt werden. Es sollte rechteckig sein."
 
-#: aleksis/core/models.py:1377 aleksis/core/models.py:1387
-msgid "Selected ICal feed"
-msgstr "Ausgewählter iCal-Feed"
+#: aleksis/core/models.py:1449
+msgid "Can view room timetable"
+msgstr "Kann Raum-Stundenplan sehen"
 
-#: aleksis/core/models.py:1386 aleksis/core/models.py:1396
-msgid "Personal Calendar URL"
-msgstr "Persönliche Kalender-URL"
+#: aleksis/core/models.py:1451
+msgid "Room"
+msgstr "Raum"
 
-#: aleksis/core/models.py:1387 aleksis/core/models.py:1397
-msgid "Personal Calendar URLs"
-msgstr "Persönliche Kalender-URLs"
+#: aleksis/core/models.py:1452
+msgid "Rooms"
+msgstr "Räume"
 
 #: aleksis/core/preferences.py:25
 msgid "General"
@@ -1241,191 +1034,163 @@ msgstr "Namensformat für Anreden"
 msgid "Channels to use for notifications"
 msgstr "Aktivierte Benachrichtungskanäle"
 
-#: aleksis/core/preferences.py:209 aleksis/core/preferences.py:224
+#: aleksis/core/preferences.py:208
+msgid "Select Design"
+msgstr "Design auswählen"
+
+#: aleksis/core/preferences.py:211
+msgid "Light mode"
+msgstr "Heller Modus"
+
+#: aleksis/core/preferences.py:224
 msgid "Regular expression to match primary group, e.g. '^Class .*'"
 msgstr "Regulärer Ausdruck um Primärgruppen zu finden, z.B. '^Class .*'"
 
-#: aleksis/core/preferences.py:220 aleksis/core/preferences.py:235
+#: aleksis/core/preferences.py:235
 msgid "Field on person to match primary group against"
 msgstr "Feld um Primärgruppen zu finden"
 
-#: aleksis/core/preferences.py:232 aleksis/core/preferences.py:247
+#: aleksis/core/preferences.py:247
 msgid "Automatically create new persons for new users"
 msgstr "Erstelle automatisch neue Personen für neue Benutzer"
 
-#: aleksis/core/preferences.py:241 aleksis/core/preferences.py:256
-msgid ""
-"Automatically link existing persons to new users by their e-mail address"
-msgstr ""
-"Verknüpfe existierende Personen automatisch mit neuen Personen anhand ihrer "
-"E-Mail-Adresse"
+#: aleksis/core/preferences.py:256
+msgid "Automatically link existing persons to new users by their e-mail address"
+msgstr "Verknüpfe existierende Personen automatisch mit neuen Personen anhand ihrer E-Mail-Adresse"
 
-#: aleksis/core/preferences.py:252 aleksis/core/preferences.py:267
+#: aleksis/core/preferences.py:267
 msgid "Display name of the school"
 msgstr "Sichtbarer Name der Schule"
 
-#: aleksis/core/preferences.py:263 aleksis/core/preferences.py:278
+#: aleksis/core/preferences.py:278
 msgid "Official name of the school, e.g. as given by supervisory authority"
-msgstr ""
-"Offizieller Name der Schule, wie er z.B. von der Behörde vorgegeben ist"
+msgstr "Offizieller Name der Schule, wie er z.B. von der Behörde vorgegeben ist"
 
-#: aleksis/core/preferences.py:271 aleksis/core/preferences.py:286
+#: aleksis/core/preferences.py:286
 msgid "Allow users to change their passwords"
 msgstr "Erlaube Benutzern, ihr Passwort zu ändern"
 
-#: aleksis/core/preferences.py:279 aleksis/core/preferences.py:294
+#: aleksis/core/preferences.py:294
 msgid "Allow users to reset their passwords"
 msgstr "Erlaube Benutzern, ihr Passwort zurückzusetzen"
 
-#: aleksis/core/preferences.py:287 aleksis/core/preferences.py:302
+#: aleksis/core/preferences.py:302
 msgid "Enable signup"
 msgstr "Registrierung aktivieren"
 
-#: aleksis/core/preferences.py:295 aleksis/core/preferences.py:310
+#: aleksis/core/preferences.py:310
 msgid "Regular expression for allowed usernames"
 msgstr "Regulärer Ausdruck für erlaubte Benutzernamen"
 
-#: aleksis/core/preferences.py:303 aleksis/core/preferences.py:318
+#: aleksis/core/preferences.py:318
 msgid "Enable invitations"
 msgstr "Einladungen aktivieren"
 
-#: aleksis/core/preferences.py:311 aleksis/core/preferences.py:326
+#: aleksis/core/preferences.py:326
 msgid "Length of invite code. (Default 3: abcde-acbde-abcde)"
 msgstr "Länge des Einladungscodes. (Standard: 3: abcde-acbde-abcde)"
 
-#: aleksis/core/preferences.py:319 aleksis/core/preferences.py:334
+#: aleksis/core/preferences.py:334
 msgid "Size of packets. (Default 5: abcde)"
 msgstr "Größe der Pakete. (Standard 5: abcde)"
 
-#: aleksis/core/preferences.py:330 aleksis/core/preferences.py:345
+#: aleksis/core/preferences.py:345
 msgid "Allowed Grant Flows for OAuth applications"
 msgstr "Erlaubte Grant Flows für OAuth-Anwendungen"
 
-#: aleksis/core/preferences.py:344
-msgid "Available languages"
-msgstr "Verfügbare Sprachen"
-
-#: aleksis/core/preferences.py:357 aleksis/core/preferences.py:343
 #: aleksis/core/preferences.py:358
 msgid "Send emails if data checks detect problems"
 msgstr "E-Mails versenden, wenn Datenprüfungen Probleme finden"
 
-#: aleksis/core/preferences.py:368 aleksis/core/preferences.py:354
 #: aleksis/core/preferences.py:369
 msgid "Email recipients for data checks problem emails"
 msgstr "E-Mailempfänger für Datenprüfungsproblem-E-Mails"
 
-#: aleksis/core/preferences.py:379 aleksis/core/preferences.py:365
 #: aleksis/core/preferences.py:380
 msgid "Email recipient groups for data checks problem emails"
 msgstr "E-Mail-Empfängergruppen für Datenprüfungsproblem-E-Mails"
 
-#: aleksis/core/preferences.py:388 aleksis/core/preferences.py:374
 #: aleksis/core/preferences.py:389
 msgid "Show dashboard to users without login"
 msgstr "Zeige Dashboard für Benutzer ohne Login"
 
-#: aleksis/core/preferences.py:397 aleksis/core/preferences.py:383
 #: aleksis/core/preferences.py:398
 msgid "Allow users to edit their dashboard"
 msgstr "Erlaube Benutzern, ihr Dashboard zu bearbeiten"
 
-#: aleksis/core/preferences.py:408 aleksis/core/preferences.py:394
 #: aleksis/core/preferences.py:409
 msgid "Fields on person model which are editable by themselves."
 msgstr "Felder des Personen-Models welche von ihnen selbst editierbar sind."
 
-#: aleksis/core/preferences.py:423 aleksis/core/preferences.py:409
 #: aleksis/core/preferences.py:424
-msgid ""
-"Editable fields on person model which should trigger a notification on change"
-msgstr ""
-"Editierbare Felder des Personen-Models welche eine Benachrichtigung für "
-"Änderungen auslösen soll"
+msgid "Editable fields on person model which should trigger a notification on change"
+msgstr "Editierbare Felder des Personen-Models welche eine Benachrichtigung für Änderungen auslösen soll"
 
-#: aleksis/core/preferences.py:437 aleksis/core/preferences.py:423
 #: aleksis/core/preferences.py:438
 msgid "Contact for notification if a person changes their data"
 msgstr "Kontakt für Benachrichtigung, wenn eine Person ihre Daten ändert"
 
-#: aleksis/core/preferences.py:448 aleksis/core/preferences.py:434
 #: aleksis/core/preferences.py:449
 msgid "Prefer personal photos over avatars"
 msgstr "Persönliche Fotos Avataren vorziehen"
 
-#: aleksis/core/preferences.py:458 aleksis/core/preferences.py:444
 #: aleksis/core/preferences.py:459
 msgid "PDF file expiration duration"
 msgstr "PDF-Datei-Ablaufdauer"
 
-#: aleksis/core/preferences.py:459 aleksis/core/preferences.py:445
 #: aleksis/core/preferences.py:460
 msgid "in minutes"
 msgstr "in Minuten"
 
-#: aleksis/core/preferences.py:469 aleksis/core/preferences.py:455
 #: aleksis/core/preferences.py:470
 msgid "Automatically update the dashboard and its widgets"
 msgstr "Automatisch das Dashboard und seine Widgets aktualisieren"
 
-#: aleksis/core/preferences.py:479 aleksis/core/preferences.py:465
 #: aleksis/core/preferences.py:480
 msgid "Automatically update the dashboard and its widgets sitewide"
-msgstr ""
-"Automatisch das Dashboard und seine Widgets aktualisieren (auf der ganzen "
-"Seite)"
+msgstr "Automatisch das Dashboard und seine Widgets aktualisieren (auf der ganzen Seite)"
 
-#: aleksis/core/preferences.py:489 aleksis/core/preferences.py:475
 #: aleksis/core/preferences.py:490
 msgid "Country for phone number parsing"
 msgstr "Land für das Einlesen von Telefonnummern"
 
-#: aleksis/core/settings.py:540 aleksis/core/settings.py:541
-#: aleksis/core/settings.py:539
+#: aleksis/core/settings.py:544
 msgid "English"
 msgstr "Englisch"
 
-#: aleksis/core/settings.py:541 aleksis/core/settings.py:542
-#: aleksis/core/settings.py:540
+#: aleksis/core/settings.py:545
 msgid "German"
 msgstr "Deutsch"
 
-#: aleksis/core/tables.py:24
+#: aleksis/core/settings.py:546
+msgid "Ukrainian"
+msgstr "Ukrainisch"
+
+#: aleksis/core/tables.py:25
 #: aleksis/core/templates/core/announcement/list.html:36
-#: aleksis/core/templates/core/group/full.html:24
-#: aleksis/core/templates/core/person/full.html:26
-#: aleksis/core/templates/core/person/full.html:86
+#: aleksis/core/templates/core/group/full.html:26
 #: aleksis/core/templates/oauth2_provider/application/detail.html:17
-#: aleksis/core/tables.py:25 aleksis/core/templates/core/group/full.html:26
 msgid "Edit"
 msgstr "Bearbeiten"
 
-#: aleksis/core/tables.py:26 aleksis/core/tables.py:94
-#: aleksis/core/tables.py:138
-#: aleksis/core/templates/core/announcement/list.html:22
 #: aleksis/core/tables.py:27 aleksis/core/tables.py:148
 #: aleksis/core/tables.py:192
+#: aleksis/core/templates/core/announcement/list.html:22
 msgid "Actions"
 msgstr "Aktionen"
 
-#: aleksis/core/tables.py:61 aleksis/core/tables.py:62
-#: aleksis/core/tables.py:76 aleksis/core/tables.py:92
-#: aleksis/core/tables.py:136
+#: aleksis/core/tables.py:115 aleksis/core/tables.py:116
+#: aleksis/core/tables.py:130 aleksis/core/tables.py:146
+#: aleksis/core/tables.py:190
 #: aleksis/core/templates/core/announcement/list.html:42
-#: aleksis/core/templates/core/group/full.html:31
+#: aleksis/core/templates/core/group/full.html:33
 #: aleksis/core/templates/core/pages/delete.html:22
-#: aleksis/core/templates/core/person/full.html:33
-#: aleksis/core/templates/core/person/full.html:93
 #: aleksis/core/templates/oauth2_provider/application/detail.html:21
-#: aleksis/core/tables.py:115 aleksis/core/tables.py:116
-#: aleksis/core/tables.py:130 aleksis/core/tables.py:146
-#: aleksis/core/tables.py:190 aleksis/core/templates/core/group/full.html:33
 msgid "Delete"
 msgstr "Löschen"
 
 #: aleksis/core/templates/403.html:14 aleksis/core/templates/500.html:10
 #: aleksis/core/templates/oauth2_provider/authorize.html:54
-#: aleksis/core/templates/oauth2_provider/authorized-oob.html:24
 msgid "Error"
 msgstr "Fehler"
 
@@ -1440,14 +1205,12 @@ msgstr ""
 #: aleksis/core/templates/403.html:19 aleksis/core/templates/404.html:16
 msgid ""
 "\n"
-"            If you think this is an error in AlekSIS, please contact your "
-"site\n"
+"            If you think this is an error in AlekSIS, please contact your site\n"
 "            administrators:\n"
 "          "
 msgstr ""
 "\n"
-"            Wenn Sie der Meinung sind, dass es sich um einen Fehler in "
-"AlekSIS handelt, kontaktieren Sie bitte einen Ihrer\n"
+"            Wenn Sie der Meinung sind, dass es sich um einen Fehler in AlekSIS handelt, kontaktieren Sie bitte einen Ihrer\n"
 "     Systemadministratoren:\n"
 "          "
 
@@ -1459,15 +1222,14 @@ msgid ""
 "          "
 msgstr ""
 "\n"
-"            Wenn Sie über einen Link auf einer externen Seite hierher "
-"gelangt sind,\n"
+"            Wenn Sie über einen Link auf einer externen Seite hierher gelangt sind,\n"
 "      ist es möglich, dass dieser veraltet war.\n"
 "          "
 
 #: aleksis/core/templates/500.html:10
 msgid ""
 "An unexpected error has\n"
-"          occured."
+"          occurred."
 msgstr ""
 "Ein unerwarteter Fehler ist\n"
 "            aufgetreten."
@@ -1475,14 +1237,12 @@ msgstr ""
 #: aleksis/core/templates/500.html:13
 msgid ""
 "\n"
-"            Your site administrators will automatically be notified about "
-"this\n"
+"            Your site administrators will automatically be notified about this\n"
 "            error. You can also contact them directly:\n"
 "          "
 msgstr ""
 "\n"
-"            Ihre Administratoren werden automatisch über diesen Fehler "
-"informiert.\n"
+"            Ihre Administratoren werden automatisch über diesen Fehler informiert.\n"
 "      Sie können diese auch direkt kontaktieren:\n"
 "          "
 
@@ -1501,13 +1261,11 @@ msgstr ""
 #: aleksis/core/templates/503.html:13
 msgid ""
 "\n"
-"            This page is currently unavailable. If this error persists, "
-"contact your site administrators:\n"
+"            This page is currently unavailable. If this error persists, contact your site administrators:\n"
 "          "
 msgstr ""
 "\n"
-"            Diese Seite ist aktuell nicht erreichbar. Wenn dieser Fehler "
-"bestehen bleibt, kontaktieren Sie bitte einen Ihrer Systemadministratoren:\n"
+"            Diese Seite ist aktuell nicht erreichbar. Wenn dieser Fehler bestehen bleibt, kontaktieren Sie bitte einen Ihrer Systemadministratoren:\n"
 "          "
 
 #: aleksis/core/templates/account/account_inactive.html:5
@@ -1548,27 +1306,28 @@ msgstr "Bestätigen"
 
 #: aleksis/core/templates/account/email_confirm.html:12
 #, python-format
-msgid ""
-"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an e-mail "
-"address for user %(user_display)s."
-msgstr ""
-"Bitte bestätigen Sie, dass <a href=\"mailto:%(email)s\">%(email)s</a> eine E-"
-"Mail-Adresse für den Benutzer %(user_display)s ist."
+msgid "Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an e-mail address for user %(user_display)s."
+msgstr "Bitte bestätigen Sie, dass <a href=\"mailto:%(email)s\">%(email)s</a> eine E-Mail-Adresse für den Benutzer %(user_display)s ist."
 
 #: aleksis/core/templates/account/email_confirm.html:25
 #, python-format
-msgid ""
-"This e-mail confirmation link expired or is invalid. Please <a href="
-"\"%(email_url)s\">issue a new e-mail confirmation request</a>."
-msgstr ""
-"Dieser E-Mail-Bestätigungslink ist abgelaufen oder nicht gültig. Bitte <a "
-"href=\"%(email_url)s\">fragen Sie eine neue E-Mail-Bestätigung an</a>."
+msgid "This e-mail confirmation link expired or is invalid. Please <a href=\"%(email_url)s\">issue a new e-mail confirmation request</a>."
+msgstr "Dieser E-Mail-Bestätigungslink ist abgelaufen oder nicht gültig. Bitte <a href=\"%(email_url)s\">fragen Sie eine neue E-Mail-Bestätigung an</a>."
+
+#: aleksis/core/templates/account/password_change.html:5
+#: aleksis/core/templates/account/password_change.html:6
+#: aleksis/core/templates/account/password_change.html:19
+#: aleksis/core/templates/account/password_reset_from_key.html:5
+#: aleksis/core/templates/account/password_reset_from_key.html:42
+#: aleksis/core/templates/account/password_reset_from_key.html:46
+#: aleksis/core/templates/account/password_reset_from_key_done.html:5
+#: aleksis/core/templates/account/password_reset_from_key_done.html:6
+msgid "Change password"
+msgstr "Passwort ändern"
 
 #: aleksis/core/templates/account/password_change.html:12
 msgid "Forgot your current password? Click here to reset it:"
-msgstr ""
-"Haben Sie Ihr aktuelles Passwort vergessen? Klicken Sie hier, um es "
-"zurückzusetzen:"
+msgstr "Haben Sie Ihr aktuelles Passwort vergessen? Klicken Sie hier, um es zurückzusetzen:"
 
 #: aleksis/core/templates/account/password_change.html:12
 msgid "Forgot Password?"
@@ -1587,13 +1346,11 @@ msgstr "Passwortänderung deaktiviert."
 msgid ""
 "\n"
 "            Users are not allowed to edit their own passwords. If you think\n"
-"            this is an error please contact one of your site "
-"administrators.\n"
+"            this is an error please contact one of your site administrators.\n"
 "          "
 msgstr ""
 "\n"
-"            Benutzer dürfen ihre eigenen Passwörter nicht ändern. Wenn Sie "
-"denken, \n"
+"            Benutzer dürfen ihre eigenen Passwörter nicht ändern. Wenn Sie denken, \n"
 "dass dies ein Fehler ist, kontaktieren Sie bitte einen der Administratoren:\n"
 "          "
 
@@ -1608,12 +1365,8 @@ msgid "Reset password"
 msgstr "Passwort zurücksetzen"
 
 #: aleksis/core/templates/account/password_reset.html:17
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll send you "
-"an e-mail allowing you to reset it."
-msgstr ""
-"Passwort vergessen? Geben Sie Ihre E-Mail-Adresse hier ein und wir werden "
-"Ihnen eine E-Mail zum Zurücksetzen des Passwortes schicken."
+msgid "Forgotten your password? Enter your e-mail address below, and we'll send you an e-mail allowing you to reset it."
+msgstr "Passwort vergessen? Geben Sie Ihre E-Mail-Adresse hier ein und wir werden Ihnen eine E-Mail zum Zurücksetzen des Passwortes schicken."
 
 #: aleksis/core/templates/account/password_reset.html:30
 msgid ""
@@ -1636,8 +1389,7 @@ msgid ""
 "          "
 msgstr ""
 "\n"
-"            Wir haben Ihnen eine E-Mail gesendet. Bitte kontaktieren Sie "
-"einen der Administratoren,\n"
+"            Wir haben Ihnen eine E-Mail gesendet. Bitte kontaktieren Sie einen der Administratoren,\n"
 "wenn Sie diese nicht innerhalb weniger Minuten erhalten.\n"
 "          "
 
@@ -1649,16 +1401,12 @@ msgstr "Ungültiges Token"
 #, python-format
 msgid ""
 "\n"
-"              The password reset link was invalid, possibly because it has "
-"already been used. Please request a <a href=\"%(passwd_reset_url)s\"\n"
+"              The password reset link was invalid, possibly because it has already been used. Please request a <a href=\"%(passwd_reset_url)s\"\n"
 "              class=\"blue-text text-lighten-2\">new password reset</a>.\n"
 "            "
 msgstr ""
 "\n"
-"              Der Link zum Zurücksetzen des Passwortes war falsch, "
-"wahrscheinlich, weil er bereits benutzt wurde. Bitte starten Sie eine neue "
-"Anfrage <a href=\"%(passwd_reset_url)s\"              class=\"blue-text text-"
-"lighten-2\">zum Zurücksetzen des Passwortes</a>.\n"
+"              Der Link zum Zurücksetzen des Passwortes war falsch, wahrscheinlich, weil er bereits benutzt wurde. Bitte starten Sie eine neue Anfrage <a href=\"%(passwd_reset_url)s\"              class=\"blue-text text-lighten-2\">zum Zurücksetzen des Passwortes</a>.\n"
 "            "
 
 #: aleksis/core/templates/account/password_reset_from_key.html:25
@@ -1707,11 +1455,13 @@ msgstr "Registrierung"
 
 #: aleksis/core/templates/account/signup.html:12
 #, python-format
-msgid ""
-"Already have an account? Then please <a href=\"%(login_url)s\">sign in</a>."
-msgstr ""
-"Haben Sie bereits ein Konto? Dann <a href=\"%(login_url)s\">melden Sie sich "
-"bitte an</a>."
+msgid "Already have an account? Then please <a href=\"%(login_url)s\">sign in</a>."
+msgstr "Haben Sie bereits ein Konto? Dann <a href=\"%(login_url)s\">melden Sie sich bitte an</a>."
+
+#: aleksis/core/templates/account/signup.html:22
+#: aleksis/core/templates/socialaccount/signup.html:23
+msgid "Sign up"
+msgstr "Registrieren"
 
 #: aleksis/core/templates/account/signup_closed.html:5
 #: aleksis/core/templates/account/signup_closed.html:6
@@ -1730,8 +1480,7 @@ msgid ""
 "          "
 msgstr ""
 "\n"
-"            Die Registrierung ist aktuell geschlossen. Wenn Sie denken, dass "
-"dies ein Fehler ist,\n"
+"            Die Registrierung ist aktuell geschlossen. Wenn Sie denken, dass dies ein Fehler ist,\n"
 " kontaktieren Sie bitte einen Ihrer Systemadministratoren.\n"
 "          "
 
@@ -1751,17 +1500,13 @@ msgstr "Verifizieren Sie Ihre E-Mail!"
 #: aleksis/core/templates/account/verification_sent.html:16
 msgid ""
 "\n"
-"            This part of the site requires us to verify that you are who you "
-"claim to be.\n"
-"            For this purpose, we require that you verify ownership of your e-"
-"mail address.\n"
+"            This part of the site requires us to verify that you are who you claim to be.\n"
+"            For this purpose, we require that you verify ownership of your e-mail address.\n"
 "          "
 msgstr ""
 "\n"
-"            Dieser Teil der Anwendung setzt voraus, dass wir verifizieren, "
-"dass Sie die Person sind, die sie vorgeben, zu sein.\n"
-"Zu diesem Zweck setzen wir voraus, dass Sie die Inhaberschaft Ihrer E-Mail-"
-"Adresse bestätigen.\n"
+"            Dieser Teil der Anwendung setzt voraus, dass wir verifizieren, dass Sie die Person sind, die sie vorgeben, zu sein.\n"
+"Zu diesem Zweck setzen wir voraus, dass Sie die Inhaberschaft Ihrer E-Mail-Adresse bestätigen.\n"
 "          "
 
 #: aleksis/core/templates/account/verification_sent.html:22
@@ -1775,8 +1520,7 @@ msgstr ""
 "\n"
 "            Wir haben Ihnen eine E-Mail zur Verifizierung geschickt.\n"
 "Bitte klicken Sie auf den Link in dieser E-Mail.\n"
-"Bitte kontaktieren Sie uns, wenn Sie diese nicht binnen weniger Minuten "
-"erhalten.\n"
+"Bitte kontaktieren Sie uns, wenn Sie diese nicht binnen weniger Minuten erhalten.\n"
 "          "
 
 #: aleksis/core/templates/core/additional_field/edit.html:6
@@ -1822,18 +1566,6 @@ msgstr "Empfänger"
 msgid "There are no announcements."
 msgstr "Es gibt aktuell keine Ankündigungen."
 
-#: aleksis/core/templates/core/base.html:213
-msgid "About AlekSIS® — The Free School Information System"
-msgstr "Über AlekSIS® — The Free School Information System"
-
-#: aleksis/core/templates/core/base.html:221
-msgid "Imprint"
-msgstr "Impressum"
-
-#: aleksis/core/templates/core/base.html:229
-msgid "Privacy Policy"
-msgstr "Datenschutzerklärung"
-
 #: aleksis/core/templates/core/base_print.html:74
 msgid "Powered by AlekSIS®"
 msgstr "Betrieben mit AlekSIS®"
@@ -1857,8 +1589,7 @@ msgid ""
 "          "
 msgstr ""
 "\n"
-"            Es ist ein Problem dabei aufgetreten, das Widget \"%(title)s\" "
-"zu laden.\n"
+"            Es ist ein Problem dabei aufgetreten, das Widget \"%(title)s\" zu laden.\n"
 "Sie brauchen nichts weiter machen.\n"
 "          "
 
@@ -1868,6 +1599,11 @@ msgstr ""
 msgid "Edit %(widget)s"
 msgstr "%(widget)s bearbeiten"
 
+#: aleksis/core/templates/core/dashboard_widget/list.html:8
+#: aleksis/core/templates/core/dashboard_widget/list.html:9
+msgid "Dashboard widgets"
+msgstr "Dashboard-Widgets"
+
 #: aleksis/core/templates/core/dashboard_widget/list.html:15
 msgid "Create dashboard widget"
 msgstr "Dashboard-Widget erstellen"
@@ -1883,6 +1619,11 @@ msgstr "%(name)s erstellen"
 msgid "Edit default dashboard"
 msgstr "Standard-Dashboard bearbeiten"
 
+#: aleksis/core/templates/core/data_check/list.html:9
+#: aleksis/core/templates/core/data_check/list.html:10
+msgid "Data checks"
+msgstr "Datenprüfungen"
+
 #: aleksis/core/templates/core/data_check/list.html:15
 msgid "Check data again"
 msgstr "Daten erneut prüfen"
@@ -1954,42 +1695,29 @@ msgstr "Dashboard bearbeiten"
 #: aleksis/core/templates/core/edit_dashboard.html:24
 msgid ""
 "\n"
-"          On this page you can arrange your personal dashboard. You can drag "
-"any items from \"Available widgets\" to \"Your\n"
-"          Dashboard\" or change the order by moving the widgets. After you "
-"have finished, please don't forget to click on\n"
+"          On this page you can arrange your personal dashboard. You can drag any items from \"Available widgets\" to \"Your\n"
+"          Dashboard\" or change the order by moving the widgets. After you have finished, please don't forget to click on\n"
 "          \"Save\".\n"
 "        "
 msgstr ""
 "\n"
-"          Auf dieser Seite können Sie Ihr persönliches Dashboard "
-"zusammenstallen. Sie können beliebige Elemente von den \"Verfügbaren Widgets"
-"\" \n"
-"in \"Ihr Dashboard\" ziehen oder die Reihenfolge verändern, indem Sie die "
-"Widgets bewegen. Wenn Sie fertig sind, vergessen Sie bitte nicht, \n"
+"          Auf dieser Seite können Sie Ihr persönliches Dashboard zusammenstallen. Sie können beliebige Elemente von den \"Verfügbaren Widgets\" \n"
+"in \"Ihr Dashboard\" ziehen oder die Reihenfolge verändern, indem Sie die Widgets bewegen. Wenn Sie fertig sind, vergessen Sie bitte nicht, \n"
 "auf \"Speichern\" zu drücken.\n"
 "        "
 
 #: aleksis/core/templates/core/edit_dashboard.html:30
 msgid ""
 "\n"
-"          On this page you can arrange the default dashboard which is shown "
-"when a user doesn't arrange his own\n"
-"          dashboard. You can drag any items from \"Available widgets\" to "
-"\"Default Dashboard\" or change the order\n"
-"          by moving the widgets. After you have finished, please don't "
-"forget to click on \"Save\".\n"
+"          On this page you can arrange the default dashboard which is shown when a user doesn't arrange his own\n"
+"          dashboard. You can drag any items from \"Available widgets\" to \"Default Dashboard\" or change the order\n"
+"          by moving the widgets. After you have finished, please don't forget to click on \"Save\".\n"
 "        "
 msgstr ""
 "\n"
-"          Auf dieser Seite können Sie Ihr das Standard-Dashboard "
-"zusammenstallen, welches angezeigt wird, wenn ein Benutzer kein eigenes "
-"definiert. \n"
-"Sie können beliebige Elemente von den \"Verfügbaren Widgets\" in \"Standard-"
-"Dashboard\" ziehen oder die Reihenfolge verändern, indem Sie die Widgets "
-"bewegen. \n"
-"Wenn Sie fertig sind, vergessen Sie bitte nicht, auf \"Speichern\" zu "
-"drücken.\n"
+"          Auf dieser Seite können Sie Ihr das Standard-Dashboard zusammenstallen, welches angezeigt wird, wenn ein Benutzer kein eigenes definiert. \n"
+"Sie können beliebige Elemente von den \"Verfügbaren Widgets\" in \"Standard-Dashboard\" ziehen oder die Reihenfolge verändern, indem Sie die Widgets bewegen. \n"
+"Wenn Sie fertig sind, vergessen Sie bitte nicht, auf \"Speichern\" zu drücken.\n"
 "        "
 
 #: aleksis/core/templates/core/edit_dashboard.html:48
@@ -2004,18 +1732,20 @@ msgstr "Ihr Dashboard"
 msgid "Default dashboard"
 msgstr "Standard-Dashboard"
 
+#: aleksis/core/templates/core/group/child_groups.html:7
+#: aleksis/core/templates/core/group/child_groups.html:9
+msgid "Assign child groups to groups"
+msgstr "Kindgruppen zu Gruppen zuordnen"
+
 #: aleksis/core/templates/core/group/child_groups.html:18
 msgid ""
 "\n"
-"          You can use this to assign child groups to groups. Please use the "
-"filters below to select groups you want to\n"
+"          You can use this to assign child groups to groups. Please use the filters below to select groups you want to\n"
 "          change and click \"Next\".\n"
 "        "
 msgstr ""
 "\n"
-"          Sie können diese Seite verwenden, um Kindgruppen zu Gruppen "
-"zuzuordnen. Bitte nutzen Sie die folgenden Filter, um die Gruppen "
-"auszuwählen, die Sie \n"
+"          Sie können diese Seite verwenden, um Kindgruppen zu Gruppen zuzuordnen. Bitte nutzen Sie die folgenden Filter, um die Gruppen auszuwählen, die Sie \n"
 "          ändern möchten und klicken auf \"Weiter\".\n"
 "        "
 
@@ -2056,18 +1786,14 @@ msgstr "Bitte seien Sie vorsichtig!"
 #: aleksis/core/templates/core/group/child_groups.html:79
 msgid ""
 "\n"
-"            If you click \"Back\" or \"Next\" the current group assignments "
-"are not saved.\n"
-"            If you click \"Save\", you will overwrite all existing child "
-"group relations for this group with what you\n"
+"            If you click \"Back\" or \"Next\" the current group assignments are not saved.\n"
+"            If you click \"Save\", you will overwrite all existing child group relations for this group with what you\n"
 "            selected on this page.\n"
 "          "
 msgstr ""
 "\n"
-"            Wenn Sie auf \"Zurück\" oder \"Weiter\" klicken, werden die "
-"aktuellen Gruppenzuordnungen nicht gespeichert.\n"
-"Wenn Sie auf \"Speichern\" klicken, werden alle existierenden Zuordnungen "
-"von Kindgruppen für diese Gruppe\n"
+"            Wenn Sie auf \"Zurück\" oder \"Weiter\" klicken, werden die aktuellen Gruppenzuordnungen nicht gespeichert.\n"
+"Wenn Sie auf \"Speichern\" klicken, werden alle existierenden Zuordnungen von Kindgruppen für diese Gruppe\n"
 "mit dem überschrieben, was Sie auf dieser Seite ausgewählt haben.\n"
 "          "
 
@@ -2101,40 +1827,36 @@ msgstr "Speichern und weiter"
 msgid "Edit group"
 msgstr "Gruppe editieren"
 
-#: aleksis/core/templates/core/group/full.html:38
-#: aleksis/core/templates/core/person/full.html:40
-#: aleksis/core/templates/core/person/full.html:100
 #: aleksis/core/templates/core/group/full.html:40
 msgid "Change preferences"
 msgstr "Einstellungen ändern"
 
-#: aleksis/core/templates/core/group/full.html:64
 #: aleksis/core/templates/core/group/full.html:68
 msgid "Statistics"
 msgstr "Statistiken"
 
-#: aleksis/core/templates/core/group/full.html:67
 #: aleksis/core/templates/core/group/full.html:73
 msgid "Count of members"
 msgstr "Anzahl der Mitglieder"
 
-#: aleksis/core/templates/core/group/full.html:71
 #: aleksis/core/templates/core/group/full.html:81
 msgid "Average age"
 msgstr "Durchschnittsalter"
 
-#: aleksis/core/templates/core/group/full.html:76
 #: aleksis/core/templates/core/group/full.html:90
 msgid "Age range"
 msgstr "Altersbereich"
 
-#: aleksis/core/templates/core/group/full.html:76
-msgid "years to"
-msgstr "Jahre bis"
-
-#: aleksis/core/templates/core/group/full.html:76
-msgid "years "
-msgstr "Jahre "
+#: aleksis/core/templates/core/group/full.html:93
+#, python-format
+msgid ""
+"\n"
+"              %(min)s years to %(max)s years\n"
+"            "
+msgstr ""
+"\n"
+"              %(min)s Jahre bis %(max)s Jahre\n"
+"            "
 
 #: aleksis/core/templates/core/group/list.html:14
 msgid "Create group"
@@ -2162,188 +1884,30 @@ msgstr "Gruppentyp editieren"
 msgid "Create group type"
 msgstr "Gruppentyp erstellen"
 
-#: aleksis/core/templates/core/ical/ical_create.html:4
-#: aleksis/core/templates/core/ical/ical_create.html:5
-#: aleksis/core/templates/core/ical/ical_list.html:12
-msgid "Create iCal URL"
-msgstr "iCal-URL erstellen"
-
-#: aleksis/core/templates/core/ical/ical_create.html:16
-#: aleksis/core/templates/core/ical/ical_edit.html:16
-#: aleksis/core/templates/oauth2_provider/application/create.html:14
-#: aleksis/core/templates/oauth2_provider/application/edit.html:14
-#: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:24
-#: aleksis/core/templates/two_factor/_wizard_actions.html:6
-msgid "Cancel"
-msgstr "Abbrechen"
-
-#: aleksis/core/templates/core/ical/ical_edit.html:4
-#: aleksis/core/templates/core/ical/ical_edit.html:5
-#, python-format
-msgid "Edit iCal URL %(object)s"
-msgstr "iCal-URL %(object)s bearbeiten"
-
-#: aleksis/core/templates/core/ical/ical_list.html:4
-#: aleksis/core/templates/core/ical/ical_list.html:5
-msgid "ICal Feeds"
-msgstr "iCal-Feeds"
-
-#: aleksis/core/templates/core/ical/ical_list.html:8
-msgid ""
-"These are URLs for different Calendar Feeds in the iCal (.ics) format. You "
-"can create as many as you want and import them in your calendar software."
-msgstr ""
-"Dies sind URLs für verschiedene Kalender-Feeds im iCal-Format (.ics). Sie "
-"können so viele erstellen, wie sie wollen, und in Ihre Kalender-Software "
-"importieren."
-
-#: aleksis/core/templates/core/ical/ical_list.html:14
-msgid "Your iCal URLs"
-msgstr "Deine iCal-URLs"
-
 #: aleksis/core/templates/core/index.html:4
 msgid "Home"
 msgstr "Startseite"
 
-#: aleksis/core/templates/core/index.html:49
 #: aleksis/core/templates/core/index.html:34
 msgid ""
 "\n"
-"        You didn't customise your dashboard so that you see the system "
-"default. Please click on \"Edit dashboard\" to\n"
+"        You didn't customise your dashboard so that you see the system default. Please click on \"Edit dashboard\" to\n"
 "        customise your personal dashboard.\n"
 "      "
 msgstr ""
 "\n"
-"        Sie haben Ihr Dashboard nicht angepasst, sodass Sie das Standard-"
-"Dashboard sehen.\n"
-"Bitte klicken Sie auf \"Dashboard bearbeiten\", um Ihr persönliches "
-"Dashboard anzupassen.\n"
+"        Sie haben Ihr Dashboard nicht angepasst, sodass Sie das Standard-Dashboard sehen.\n"
+"Bitte klicken Sie auf \"Dashboard bearbeiten\", um Ihr persönliches Dashboard anzupassen.\n"
 "      "
 
-#: aleksis/core/templates/core/index.html:59
 #: aleksis/core/templates/core/index.html:44
 msgid "Last activities"
 msgstr "Letzte Aktivitäten"
 
-#: aleksis/core/templates/core/index.html:77
 #: aleksis/core/templates/core/index.html:62
 msgid "No activities available yet."
 msgstr "Aktuell keine Aktivitäten verfügbar."
 
-#: aleksis/core/templates/core/index.html:82
-msgid "Recent notifications"
-msgstr "Letzte Benachrichtigungen"
-
-#: aleksis/core/templates/core/index.html:98
-#: aleksis/core/templates/core/notifications.html:23
-msgid "More information →"
-msgstr "Mehr Informationen →"
-
-#: aleksis/core/templates/core/index.html:105
-#: aleksis/core/templates/core/notifications.html:30
-msgid "No notifications available yet."
-msgstr "Aktuell keine Benachrichtigungen verfügbar."
-
-#: aleksis/core/templates/core/pages/about.html:6
-msgid "About AlekSIS®"
-msgstr "Über AlekSIS®"
-
-#: aleksis/core/templates/core/pages/about.html:7
-msgid "AlekSIS® – The Free School Information System"
-msgstr "AlekSIS® – The Free School Information System"
-
-#: aleksis/core/templates/core/pages/about.html:15
-msgid "About AlekSIS"
-msgstr "Über AlekSIS"
-
-#: aleksis/core/templates/core/pages/about.html:17
-msgid ""
-"\n"
-"              This platform is powered by AlekSIS®, a web-based school "
-"information system (SIS) which can be used\n"
-"              to manage and/or publish organisational artifacts of "
-"educational institutions. AlekSIS is free software and\n"
-"              can be used by anyone.\n"
-"            "
-msgstr ""
-"\n"
-"              Diese Plattform wird mit AlekSIS®, einem webbasierten "
-"Schulinformationssystem (SIS), \n"
-"welches für die Verwaltung und/oder Veröffentlichung von "
-"Bildungseinrichtungen verwendet werden kann.\n"
-"AlekSIS ist freie Software und kann von jedem benutzt werden.\n"
-"            "
-
-#: aleksis/core/templates/core/pages/about.html:24
-msgid ""
-"\n"
-"              AlekSIS® is a registered trademark of the AlekSIS open source "
-"project, represented by Teckids e.V.\n"
-"            "
-msgstr ""
-"\n"
-"              AlekSIS® ist eine eingetragene Wortmarke des Open-Source-"
-"Projektes AlekSIS, vertreten durch den Teckids e.V.\n"
-"            "
-
-#: aleksis/core/templates/core/pages/about.html:30
-msgid "Website of AlekSIS"
-msgstr "Website von AlekSIS"
-
-#: aleksis/core/templates/core/pages/about.html:31
-msgid "Source code"
-msgstr "Quellcode"
-
-#: aleksis/core/templates/core/pages/about.html:40
-msgid "Licence information"
-msgstr "Lizenzinformationen"
-
-#: aleksis/core/templates/core/pages/about.html:42
-msgid ""
-"\n"
-"              The core and the official apps of AlekSIS are licenced under "
-"the EUPL, version 1.2 or later. For licence\n"
-"              information from third-party apps, if installed, refer to the "
-"respective components below. The\n"
-"              licences are marked like this:\n"
-"            "
-msgstr ""
-"\n"
-"              Der Core und die offiziellen Apps von AlekSIS sind unter der "
-"EUPL, Version 1.2 oder später, lizenziert. Für Lizenzinformationen\n"
-"zu Apps von Drittanbietern, wenn installiert, siehe direkt bei der "
-"jeweiligen App weiter unten auf dieser Seite. Die Lizenzen\n"
-"sind wie folgt markiert:\n"
-"            "
-
-#: aleksis/core/templates/core/pages/about.html:50
-msgid "Free/Open Source Licence"
-msgstr "Freie/Open Source Lizenz"
-
-#: aleksis/core/templates/core/pages/about.html:51
-msgid "Other Licence"
-msgstr "Andere Lizenz"
-
-#: aleksis/core/templates/core/pages/about.html:55
-msgid "Full licence text"
-msgstr "Kompletter Lizenztext"
-
-#: aleksis/core/templates/core/pages/about.html:56
-msgid "More information about the EUPL"
-msgstr "Weitere Informationen über die EUPL"
-
-#: aleksis/core/templates/core/pages/about.html:95
-#, python-format
-msgid ""
-"\n"
-"                    This app is licenced under %(licence)s.\n"
-"                  "
-msgstr ""
-"\n"
-"                    Diese App ist unter %(licence)s lizenziert.\n"
-"                  "
-
 #: aleksis/core/templates/core/pages/delete.html:6
 #, python-format
 msgid "Delete %(object_name)s"
@@ -2360,22 +1924,10 @@ msgstr ""
 "      Möchten Sie wirklich %(object_name)s \"%(object)s\" löschen?\n"
 "    "
 
-#: aleksis/core/templates/core/pages/progress.html:27
-msgid ""
-"\n"
-"              Without activated JavaScript the progress status can't be "
-"updated.\n"
-"            "
-msgstr ""
-"\n"
-"              Ohne aktiviertes JavaScript kann der Fortschritt leider nicht "
-"aktualisiert werden.\n"
-"            "
-
-#: aleksis/core/templates/core/pages/progress.html:47
-#: aleksis/core/templates/two_factor/core/otp_required.html:19
-msgid "Go back"
-msgstr "Zurück"
+#: aleksis/core/templates/core/pages/system_status.html:5
+#: aleksis/core/templates/core/pages/system_status.html:7
+msgid "System status"
+msgstr "Systemstatus"
 
 #: aleksis/core/templates/core/pages/system_status.html:12
 msgid "System checks"
@@ -2388,13 +1940,11 @@ msgstr "Wartungsmodus aktiviert"
 #: aleksis/core/templates/core/pages/system_status.html:24
 msgid ""
 "\n"
-"                Only admin and visitors from internal IPs can access "
-"thesite.\n"
+"                Only admin and visitors from internal IPs can access the site.\n"
 "              "
 msgstr ""
 "\n"
-"                Nur Administratoren und Besucher von internen IP-Adressen "
-"können die Seite aufrufen.\n"
+"                Nur Administratoren und Besucher von internen IP-Adressen können die Seite aufrufen.\n"
 "              "
 
 #: aleksis/core/templates/core/pages/system_status.html:36
@@ -2412,13 +1962,11 @@ msgstr "Debug-Modus aktiviert"
 #: aleksis/core/templates/core/pages/system_status.html:49
 msgid ""
 "\n"
-"                The web server throws back debug information on errors. Do "
-"not use in production!\n"
+"                The web server throws back debug information on errors. Do not use in production!\n"
 "              "
 msgstr ""
 "\n"
-"                Der Server gibt Debug-Informationen bei Fehlern zurück. "
-"Nicht im Produktivbetrieb nutzen!\n"
+"                Der Server gibt Debug-Informationen bei Fehlern zurück. Nicht im Produktivbetrieb nutzen!\n"
 "              "
 
 #: aleksis/core/templates/core/pages/system_status.html:56
@@ -2428,13 +1976,11 @@ msgstr "Debug-Modus deaktivert"
 #: aleksis/core/templates/core/pages/system_status.html:58
 msgid ""
 "\n"
-"                Debug mode is disabled. Default error pages are displayed on "
-"errors.\n"
+"                Debug mode is disabled. Default error pages are displayed on errors.\n"
 "              "
 msgstr ""
 "\n"
-"                Debug-Modus ist deaktiviert. Standard-Fehlerseiten werden "
-"bei Fehlern angezeigt.\n"
+"                Debug-Modus ist deaktiviert. Standard-Fehlerseiten werden bei Fehlern angezeigt.\n"
 "              "
 
 #: aleksis/core/templates/core/pages/system_status.html:71
@@ -2484,13 +2030,11 @@ msgstr "PDF-Generierung testen"
 #: aleksis/core/templates/core/pages/test_pdf.html:14
 msgid ""
 "\n"
-"        This simple view can be used to ensure the correct function of the "
-"built-in PDF generation system.\n"
+"        This simple view can be used to ensure the correct function of the built-in PDF generation system.\n"
 "      "
 msgstr ""
 "\n"
-"        Diese einfache Seite kann genutzt werden, um die korrekte "
-"Funktionalität des eingebauten PDF-Generierungssystem zu testen.\n"
+"        Diese einfache Seite kann genutzt werden, um die korrekte Funktionalität des eingebauten PDF-Generierungssystem zu testen.\n"
 "      "
 
 #: aleksis/core/templates/core/partials/announcements.html:8
@@ -2529,14 +2073,11 @@ msgstr ""
 
 #: aleksis/core/templates/core/partials/avatar_content.html:14
 #: aleksis/core/templates/core/partials/avatar_content.html:15
-#: aleksis/core/templates/core/person/full.html:213
-#: aleksis/core/templates/core/person/full.html:214
 msgid "Avatar"
 msgstr "Avatar"
 
-#: aleksis/core/templates/core/partials/avatar_content.html:19
-#: aleksis/core/templates/core/partials/avatar_content.html:20
 #: aleksis/core/templates/core/partials/avatar_content.html:18
+#: aleksis/core/templates/core/partials/avatar_content.html:19
 msgid "Identicon"
 msgstr "Identicon"
 
@@ -2548,45 +2089,15 @@ msgstr "Verändert von"
 msgid "Unknown"
 msgstr "Unbekannt"
 
-#: aleksis/core/templates/core/partials/language_form.html:15
-#: aleksis/core/templates/core/partials/language_form.html:17
-msgid "Language"
-msgstr "Sprache"
-
-#: aleksis/core/templates/core/partials/language_form.html:27
-#: aleksis/core/templates/core/partials/language_form.html:29
-msgid "Select language"
-msgstr "Sprache auswählen"
-
-#: aleksis/core/templates/core/partials/no_person.html:12
-msgid ""
-"\n"
-"            Your administrator account is not linked to any person. "
-"Therefore,\n"
-"            a dummy person has been linked to your account.\n"
-"          "
-msgstr ""
-"\n"
-"            Ihr Administratorenkonto ist mit keiner Person verknüpft. "
-"Deshalb\n"
-"            wurde Ihr Konto mit einer Dummyperson verknüpft.\n"
-"          "
-
-#: aleksis/core/templates/core/partials/no_person.html:19
+#: aleksis/core/templates/core/partials/splash_screen.html:11
 msgid ""
 "\n"
-"            Your user account is not linked to a person. This means you\n"
-"            cannot access any school-related information. Please contact\n"
-"            the managers of AlekSIS at your school.\n"
-"          "
+"      This webbrowser doesn't support JavaScript, or its execution is blocked. Please use another browser to continue.\n"
+"    "
 msgstr ""
 "\n"
-"            Ihr Benutzerkonto ist nicht mit einer Person verknüpft. Das "
-"bedeutet, dass Sie\n"
-"        keine schulbezogenen Informationen aufrufen können. Bitte wenden Sie "
-"sich an\n"
-"        die Verwaltenden von AlekSIS an Ihrer Schule.\n"
-"          "
+"      Dieser Webbrowser unterstützt kein JavaScript oder die Ausführung wurde blockiert. Bitte nutzen Sie einen anderen Browser, um fortzufahren.\n"
+"    "
 
 #: aleksis/core/templates/core/perms/assign.html:12
 #: aleksis/core/templates/core/perms/assign.html:13
@@ -2601,6 +2112,11 @@ msgstr "Ausgewählte Berechtigung"
 msgid "Assign"
 msgstr "Zuweisen"
 
+#: aleksis/core/templates/core/perms/list.html:13
+#: aleksis/core/templates/core/perms/list.html:14
+msgid "Manage permissions"
+msgstr "Berechtigungen verwalten"
+
 #: aleksis/core/templates/core/perms/list.html:21
 msgid "Assign a new permission"
 msgstr "Eine neue Berechtigung zuweisen"
@@ -2644,28 +2160,6 @@ msgstr "Person erstellen"
 msgid "Edit person"
 msgstr "Person editieren"
 
-#: aleksis/core/templates/core/person/full.html:47
-#: aleksis/core/templates/core/person/full.html:107
-msgid "Impersonate"
-msgstr "Verkleiden"
-
-#: aleksis/core/templates/core/person/full.html:54
-#: aleksis/core/templates/core/person/full.html:114
-msgid "Invite user"
-msgstr "Benutzer einladen"
-
-#: aleksis/core/templates/core/person/full.html:121
-msgid "Contact details"
-msgstr "Kontaktdetails"
-
-#: aleksis/core/templates/core/person/full.html:220
-msgid "This person didn't upload a personal photo."
-msgstr "Diese Person hat kein persönliches Foto hochgeladen."
-
-#: aleksis/core/templates/core/person/full.html:228
-msgid "Children"
-msgstr "Kinder"
-
 #: aleksis/core/templates/core/person/list.html:21
 msgid "Filter persons"
 msgstr "Personen filtern"
@@ -2685,6 +2179,10 @@ msgstr "Schuljahr erstellen"
 msgid "Edit school term"
 msgstr "Schuljahr bearbeiten"
 
+#: aleksis/core/templates/dynamic_preferences/form.html:5
+msgid "Preferences"
+msgstr "Einstellungen"
+
 #: aleksis/core/templates/dynamic_preferences/form.html:9
 msgid "Site preferences"
 msgstr "Seiteneinstellungen ändern"
@@ -2711,17 +2209,17 @@ msgid "The invite feature is disabled."
 msgstr "Die Einladungsfunktion ist deaktiviert."
 
 #: aleksis/core/templates/invitations/disabled.html:15
-msgid ""
-"To enable it, switch on the corresponding checkbox in the authentication "
-"section of the "
-msgstr ""
-"Um sie zu aktivieren, nutzen Sie die Checkbox im Abschnitt \"Authentifikation"
-"\" der "
+msgid "To enable it, switch on the corresponding checkbox in the authentication section of the "
+msgstr "Um sie zu aktivieren, nutzen Sie die Checkbox im Abschnitt \"Authentifikation\" der "
 
 #: aleksis/core/templates/invitations/disabled.html:16
 msgid "site preferences page"
 msgstr "Seiteneinstellungen"
 
+#: aleksis/core/templates/invitations/enter.html:7
+msgid "Accept invitation"
+msgstr "Einladung akzeptieren"
+
 #: aleksis/core/templates/invitations/enter.html:21
 msgid "Accept your invitation"
 msgstr "Ihre Einladung akzeptieren"
@@ -2774,6 +2272,13 @@ msgstr "Die Einladung für %(email)s wurde akzeptiert."
 msgid "Register OAuth2 Application"
 msgstr "OAuth2-Anwendung registrieren"
 
+#: aleksis/core/templates/oauth2_provider/application/create.html:14
+#: aleksis/core/templates/oauth2_provider/application/edit.html:14
+#: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:24
+#: aleksis/core/templates/two_factor/_wizard_actions.html:6
+msgid "Cancel"
+msgstr "Abbrechen"
+
 #: aleksis/core/templates/oauth2_provider/application/detail.html:5
 msgid "OAuth2 Application"
 msgstr "OAuth2-Anwendung"
@@ -2807,6 +2312,11 @@ msgstr "Authentifizierung überspringen"
 msgid "Edit OAuth2 Application"
 msgstr "OAuth2-Anwendung bearbeiten"
 
+#: aleksis/core/templates/oauth2_provider/application/list.html:5
+#: aleksis/core/templates/oauth2_provider/application/list.html:6
+msgid "OAuth2 Applications"
+msgstr "OAuth2-Anwendungen"
+
 #: aleksis/core/templates/oauth2_provider/application/list.html:11
 msgid "Register new application"
 msgstr "Neue Anwendung registrieren"
@@ -2838,15 +2348,6 @@ msgstr "Erlauben"
 msgid "Disallow"
 msgstr "Verbieten"
 
-#: aleksis/core/templates/oauth2_provider/authorized-oob.html:12
-msgid "Success!"
-msgstr "Erfolg!"
-
-#: aleksis/core/templates/oauth2_provider/authorized-oob.html:14
-msgid "Please return to your application and enter this code:"
-msgstr ""
-"Bitte gehen Sie zurück in Ihre Anwendung und geben Sie diesen Code ein:"
-
 #: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:5
 #: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:6
 #: aleksis/core/templates/oauth2_provider/authorized-tokens.html:23
@@ -2855,14 +2356,17 @@ msgstr "Zugriff zurückziehen"
 
 #: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:12
 msgid "Are you sure to revoke the access for this application?"
-msgstr ""
-"Sind Sie sicher, dass Sie den Zugriff für diese Anwendung zurückziehen "
-"möchten?"
+msgstr "Sind Sie sicher, dass Sie den Zugriff für diese Anwendung zurückziehen möchten?"
 
 #: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:20
 msgid "Revoke"
 msgstr "Zurückziehen"
 
+#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5
+#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6
+msgid "Authorized applications"
+msgstr "Autorisierte Anwendungen"
+
 #: aleksis/core/templates/oauth2_provider/authorized-tokens.html:33
 msgid "No authorized applications."
 msgstr "Keine autorisierten Anwendungen."
@@ -2872,25 +2376,20 @@ msgid "Network error"
 msgstr "Netzwerkfehler"
 
 #: aleksis/core/templates/offline.html:10
-msgid "No internet connection."
-msgstr "Keine Internetverbindung."
+msgid "Page not available offline."
+msgstr "Seite nicht offline verfügbar."
 
 #: aleksis/core/templates/offline.html:14
 msgid ""
 "\n"
-"      There was an error accessing this page. You probably don't have an "
-"internet connection. Check to see if your WiFi\n"
-"      or mobile data is turned on and try again. If you think you are "
-"connected, please contact the system\n"
+"      This page is not available offline. Since you probably don't have an internet connection, check to see if your WiFi\n"
+"      or mobile data is turned on and try again. If you think you are connected, please contact the system\n"
 "      administrators:\n"
 "    "
 msgstr ""
 "\n"
-"      Es ist ein Fehler beim Aufrufen der Seite aufgetreten. Eventuell haben "
-"Sie keine Internetverbindung. Bitte prüfen Sie, ob WLAN oder mobile Daten "
-"aktiv sind, \n"
-"      und probieren Sie es erneut. Wenn Sie der Meinung sind, dass Sie mit "
-"dem Internet verbunden sind, kontaktieren Sie bitte einen Ihrer \n"
+"      Diese Seite ist offline nicht verfügbar. Da Sie vermutliche keine Internetverbindung haben, prüfen Sie, ob Ihr WLAN oder mobile Daten angeschaltet sind, \n"
+"      und probieren Sie es erneut. Wenn Sie der Meinung sind, dass Sie verbunden sind, kontaktieren Sie bitte die \n"
 "      Systemadministratoren:\n"
 "    "
 
@@ -2926,14 +2425,12 @@ msgstr "Anmeldung über Drittanbieter-Konto fehlgeschlagen."
 #: aleksis/core/templates/socialaccount/authentication_error.html:15
 msgid ""
 "\n"
-"            An error occurred while attempting to login via your third-party "
-"account.\n"
+"            An error occurred while attempting to login via your third-party account.\n"
 "            Please contact one of your site administrators.\n"
 "          "
 msgstr ""
 "\n"
-"            Beim dem Versuch, die Anmeldung über Ihr Drittanbieter-Konto "
-"durchzuführen, ist ein Fehler aufgetreten.\n"
+"            Beim dem Versuch, die Anmeldung über Ihr Drittanbieter-Konto durchzuführen, ist ein Fehler aufgetreten.\n"
 "            Kontaktieren Sie bitte einen Ihrer Systemadministratoren:\n"
 "          "
 
@@ -2948,8 +2445,7 @@ msgstr "Löschen"
 
 #: aleksis/core/templates/socialaccount/connections.html:34
 msgid "You currently have no third-party accounts connected to this account."
-msgstr ""
-"Sie haben aktuell keine Drittanbieter-Konten mit Ihrem Konto verbunden."
+msgstr "Sie haben aktuell keine Drittanbieter-Konten mit Ihrem Konto verbunden."
 
 #: aleksis/core/templates/socialaccount/connections.html:37
 msgid "Add a Third-party Account"
@@ -2958,15 +2454,12 @@ msgstr "Ein Drittanbieter-Konto hinzufügen"
 #: aleksis/core/templates/socialaccount/login.html:12
 #, python-format
 msgid "You are about to connect a new third party account from %(provider)s."
-msgstr ""
-"Sie sind dabei, ein neues Drittanbieterkonto von %(provider)s zu verbinden."
+msgstr "Sie sind dabei, ein neues Drittanbieterkonto von %(provider)s zu verbinden."
 
 #: aleksis/core/templates/socialaccount/login.html:23
 #, python-format
 msgid "You are about to sign in using a third party account from %(provider)s."
-msgstr ""
-"Sie sind dabei, sich mit einem Drittanbieterkonto von %(provider)s "
-"anzumelden."
+msgstr "Sie sind dabei, sich mit einem Drittanbieterkonto von %(provider)s anzumelden."
 
 #: aleksis/core/templates/socialaccount/login.html:28
 msgid "Continue"
@@ -2982,15 +2475,11 @@ msgstr "Login abgebrochen"
 #, python-format
 msgid ""
 "\n"
-"            You decided to cancel logging in to our site using one of your "
-"existing accounts. If this was a mistake, please proceed to <a href="
-"\"%(login_url)s\">sign in</a>.\n"
+"            You decided to cancel logging in to our site using one of your existing accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s\">sign in</a>.\n"
 "          "
 msgstr ""
 "\n"
-"            Sie haben sich entschieden, die Anmeldung mit einem Ihrer "
-"bestehenden Konten bei uns abzubrechen. Wenn dies ein Fehler war, <a href="
-"\"%(login_url)s\">fahren Sie bitte mit dem Login fort</a>.\n"
+"            Sie haben sich entschieden, die Anmeldung mit einem Ihrer bestehenden Konten bei uns abzubrechen. Wenn dies ein Fehler war, <a href=\"%(login_url)s\">fahren Sie bitte mit dem Login fort</a>.\n"
 "          "
 
 #: aleksis/core/templates/socialaccount/signup.html:12
@@ -2999,8 +2488,7 @@ msgid ""
 "You are about to use your %(provider_name)s account to login to\n"
 "        %(site_name)s. As a final step, please complete the following form:"
 msgstr ""
-"Sie sind dabei, Ihr %(provider_name)s-Konto zur Anmeldung bei %(site_name)s "
-"zu nutzen. \n"
+"Sie sind dabei, Ihr %(provider_name)s-Konto zur Anmeldung bei %(site_name)s zu nutzen. \n"
 "Als ein letzter Schritt vervollständigen Sie bitte das folgende Formular:"
 
 #: aleksis/core/templates/socialaccount/snippets/provider_list.html:12
@@ -3048,8 +2536,7 @@ msgstr "Celery-Task %(task_name)s fehlgeschlagen!"
 #: aleksis/core/templates/templated_email/celery_failure.email:7
 #, python-format
 msgid "the celery task %(task_name)s failed with following information:"
-msgstr ""
-"der Celery-Task %(task_name)s ist mit folgenden Informationen fehlgeschlagen:"
+msgstr "der Celery-Task %(task_name)s ist mit folgenden Informationen fehlgeschlagen:"
 
 #: aleksis/core/templates/templated_email/celery_failure.email:10
 #: aleksis/core/templates/templated_email/celery_failure.email:29
@@ -3079,8 +2566,7 @@ msgid ""
 "    "
 msgstr ""
 "\n"
-"      der Celery-Task  %(task_name)s ist mit folgenden Informationen "
-"fehlgeschlagen:\n"
+"      der Celery-Task  %(task_name)s ist mit folgenden Informationen fehlgeschlagen:\n"
 "    "
 
 #: aleksis/core/templates/templated_email/data_checks.email:3
@@ -3090,25 +2576,21 @@ msgstr "Das System hat einige neue Probleme mit Ihren Daten entdeckt."
 #: aleksis/core/templates/templated_email/data_checks.email:6
 msgid ""
 "the system detected some new problems with your data.\n"
-"Please take some time to inspect them and solve the issues or mark them as "
-"ignored."
+"Please take some time to inspect them and solve the issues or mark them as ignored."
 msgstr ""
 "das System hat einige neue Probleme mit Ihren Daten entdeckt.\n"
-"Bitte nehmen Sie sich etwas Zeit, diese zu überprüfen und sie zu lösen oder "
-"als ignoriert zu markieren."
+"Bitte nehmen Sie sich etwas Zeit, diese zu überprüfen und sie zu lösen oder als ignoriert zu markieren."
 
 #: aleksis/core/templates/templated_email/data_checks.email:15
 msgid ""
 "\n"
 "   the system detected some new problems with your data.\n"
-"   Please take some time to inspect them and solve the issues or mark them "
-"as ignored.\n"
+"   Please take some time to inspect them and solve the issues or mark them as ignored.\n"
 "  "
 msgstr ""
 "\n"
 "   das System hat einige neue Probleme mit Ihren Daten entdeckt.\n"
-"Bitte nehmen Sie sich etwas Zeit, diese zu überprüfen und sie zu lösen oder "
-"als ignoriert zu markieren.\n"
+"Bitte nehmen Sie sich etwas Zeit, diese zu überprüfen und sie zu lösen oder als ignoriert zu markieren.\n"
 "  "
 
 #: aleksis/core/templates/templated_email/data_checks.email:23
@@ -3194,21 +2676,16 @@ msgid ""
 "\n"
 "        Backup tokens can be used when your primary and backup\n"
 "        phone numbers aren't available. The backup tokens below can be used\n"
-"        for login verification. If you've used up all your backup tokens, "
-"you\n"
-"        can generate a new set of backup tokens. Only the backup tokens "
-"shown\n"
+"        for login verification. If you've used up all your backup tokens, you\n"
+"        can generate a new set of backup tokens. Only the backup tokens shown\n"
 "        below will be valid.\n"
 "      "
 msgstr ""
 "\n"
 "        Backup-Token können genutzt werden, wenn Ihre primären und Backup-\n"
-"        Telefonnummern nicht verfügbar sind. Die Backup-Tokens unten können "
-"für\n"
-"        die Anmeldungsverifizierung genutzt werden. Wenn Sie alle Backup-"
-"Tokens genutzt haben,\n"
-"        müssen Sie neue generieren. Nur gültige Backup-Tokens werden "
-"angezeigt.\n"
+"        Telefonnummern nicht verfügbar sind. Die Backup-Tokens unten können für\n"
+"        die Anmeldungsverifizierung genutzt werden. Wenn Sie alle Backup-Tokens genutzt haben,\n"
+"        müssen Sie neue generieren. Nur gültige Backup-Tokens werden angezeigt.\n"
 "      "
 
 #: aleksis/core/templates/two_factor/core/backup_tokens.html:33
@@ -3233,6 +2710,12 @@ msgstr "Zurück zur Kontosicherheit"
 msgid "Generate Tokens"
 msgstr "Tokens generieren"
 
+#: aleksis/core/templates/two_factor/core/login.html:6
+#: aleksis/core/templates/two_factor/core/login.html:32
+#: aleksis/core/templates/two_factor/core/login.html:95
+msgid "Login"
+msgstr "Anmelden"
+
 #: aleksis/core/templates/two_factor/core/login.html:27
 #, python-format
 msgid "Login for %(name)s"
@@ -3252,9 +2735,7 @@ msgstr ""
 
 #: aleksis/core/templates/two_factor/core/login.html:47
 msgid "Please login with your account to use the external application."
-msgstr ""
-"Bitte melden Sie sich mit Ihrem Konto an, um die externe Anwendung zu "
-"benutzen."
+msgstr "Bitte melden Sie sich mit Ihrem Konto an, um die externe Anwendung zu benutzen."
 
 #: aleksis/core/templates/two_factor/core/login.html:54
 msgid "Please login to see this page."
@@ -3263,8 +2744,7 @@ msgstr "Bitte melden Sie sich an, um diese Seite zu sehen."
 #: aleksis/core/templates/two_factor/core/login.html:65
 msgid ""
 "\n"
-"                        We are calling your phone right now, please enter "
-"the\n"
+"                        We are calling your phone right now, please enter the\n"
 "                        digits you hear.\n"
 "                      "
 msgstr ""
@@ -3276,8 +2756,7 @@ msgstr ""
 #: aleksis/core/templates/two_factor/core/login.html:70
 msgid ""
 "\n"
-"                        We sent you a text message, please enter the tokens "
-"we\n"
+"                        We sent you a text message, please enter the tokens we\n"
 "                        sent.\n"
 "                      "
 msgstr ""
@@ -3301,19 +2780,14 @@ msgstr ""
 #: aleksis/core/templates/two_factor/core/login.html:81
 msgid ""
 "\n"
-"                      Use this form for entering backup tokens for logging "
-"in.\n"
-"                      These tokens have been generated for you to print and "
-"keep safe. Please\n"
-"                      enter one of these backup tokens to login to your "
-"account.\n"
+"                      Use this form for entering backup tokens for logging in.\n"
+"                      These tokens have been generated for you to print and keep safe. Please\n"
+"                      enter one of these backup tokens to login to your account.\n"
 "                    "
 msgstr ""
 "\n"
-"                      Nutzen Sie dieses Formular um Ihre Backup-Tokens zum "
-"Anmelden einzugeben.\n"
-"                Diese Tokens wurden für Sie generiert, um diese gut "
-"aufzubewahren. Bitte\n"
+"                      Nutzen Sie dieses Formular um Ihre Backup-Tokens zum Anmelden einzugeben.\n"
+"                Diese Tokens wurden für Sie generiert, um diese gut aufzubewahren. Bitte\n"
 "                geben Sie einen dieser Tokens ein, um sich einzuloggen.\n"
 "                    "
 
@@ -3344,13 +2818,11 @@ msgstr "Zugriff verwehrt"
 #: aleksis/core/templates/two_factor/core/otp_required.html:10
 msgid ""
 "The page you requested, enforces users to verify using\n"
-"          two-factor authentication for security reasons. You need to enable "
-"these\n"
+"          two-factor authentication for security reasons. You need to enable these\n"
 "          security features in order to access this page."
 msgstr ""
 "Die von Ihnen gewünschte Seite erfordert aus Sicherheitsgründen\n"
-"          eine Verifizierung durch Zwei-Faktor-Authentifizierung. Sie müssen "
-"diese\n"
+"          eine Verifizierung durch Zwei-Faktor-Authentifizierung. Sie müssen diese\n"
 "          Sicherheitsfunktion aktivieren, um diese Seite aufzurufen."
 
 #: aleksis/core/templates/two_factor/core/otp_required.html:14
@@ -3363,6 +2835,10 @@ msgstr ""
 "          Aktivieren Sie Zwei-Faktor-Authentifizierung für eine verbesserte\n"
 "          Accountsicherheit."
 
+#: aleksis/core/templates/two_factor/core/otp_required.html:19
+msgid "Go back"
+msgstr "Zurück"
+
 #: aleksis/core/templates/two_factor/core/phone_register.html:5
 #: aleksis/core/templates/two_factor/core/phone_register.html:9
 msgid "Add Backup Phone"
@@ -3396,8 +2872,7 @@ msgid ""
 msgstr ""
 "\n"
 "        Sie sind dabei, Ihre Account-Sicherheit auf das\n"
-"       nächste Level zu erhöhen. Bitte folgen Sie den Schritten im "
-"Assistenten, um die\n"
+"       nächste Level zu erhöhen. Bitte folgen Sie den Schritten im Assistenten, um die\n"
 "       Zwei-Faktor-Authentifizierung zu aktivieren.\n"
 "      "
 
@@ -3408,16 +2883,14 @@ msgid ""
 "      "
 msgstr ""
 "\n"
-"        Bitte wählen Sie aus, welche Authentifikationsmethode Sie nutzen "
-"wollen:\n"
+"        Bitte wählen Sie aus, welche Authentifikationsmethode Sie nutzen wollen:\n"
 "      "
 
 #: aleksis/core/templates/two_factor/core/setup.html:23
 msgid ""
 "\n"
 "        To start using a token generator, please use your\n"
-"        favourite two factor authentication (TOTP) app to scan the QR code "
-"below.\n"
+"        favourite two factor authentication (TOTP) app to scan the QR code below.\n"
 "        Then, enter the token generated by the app.\n"
 "      "
 msgstr ""
@@ -3436,8 +2909,7 @@ msgid ""
 msgstr ""
 "\n"
 "        Bitte geben Sie die Telefonnummer des Gerätes an,\n"
-"        an die die SMS-Nachrichten geschickt werden sollen. Diese Nummer "
-"wird im nächsten Schritt überprüft.\n"
+"        an die die SMS-Nachrichten geschickt werden sollen. Diese Nummer wird im nächsten Schritt überprüft.\n"
 "      "
 
 #: aleksis/core/templates/two_factor/core/setup.html:41
@@ -3455,13 +2927,11 @@ msgstr ""
 #: aleksis/core/templates/two_factor/core/setup.html:50
 msgid ""
 "\n"
-"            We are calling your phone right now, please enter the digits you "
-"hear.\n"
+"            We are calling your phone right now, please enter the digits you hear.\n"
 "          "
 msgstr ""
 "\n"
-"            Wir rufen Ihr Telefon jetzt an, bitte geben Sie die Zahlen ein, "
-"die Sie hören.\n"
+"            Wir rufen Ihr Telefon jetzt an, bitte geben Sie die Zahlen ein, die Sie hören.\n"
 "          "
 
 #: aleksis/core/templates/two_factor/core/setup.html:56
@@ -3471,30 +2941,23 @@ msgid ""
 "          "
 msgstr ""
 "\n"
-"            Wir haben Ihnen eine SMS geschickt, bitte geben Sie die Tokens "
-"ein, die wir geschickt haben.\n"
+"            Wir haben Ihnen eine SMS geschickt, bitte geben Sie die Tokens ein, die wir geschickt haben.\n"
 "          "
 
 #: aleksis/core/templates/two_factor/core/setup.html:63
 msgid ""
 "\n"
-"          We've encountered an issue with the selected authentication "
-"method. Please\n"
-"          go back and verify that you entered your information correctly, "
-"try\n"
-"          again, or use a different authentication method instead. If the "
-"issue\n"
+"          We've encountered an issue with the selected authentication method. Please\n"
+"          go back and verify that you entered your information correctly, try\n"
+"          again, or use a different authentication method instead. If the issue\n"
 "          persists, contact the site administrator.\n"
 "        "
 msgstr ""
 "\n"
-"          Mit der ausgewählten Authentifizierungsmethode ist ein Fehler "
-"aufgetreten. \n"
-"Bitte gehen Sie zurück und überprüfen, dass Sie die Informationen korrekt "
-"eingegeben haben, versuchen Sie es erneut,\n"
+"          Mit der ausgewählten Authentifizierungsmethode ist ein Fehler aufgetreten. \n"
+"Bitte gehen Sie zurück und überprüfen, dass Sie die Informationen korrekt eingegeben haben, versuchen Sie es erneut,\n"
 "oder benutzen Sie stattdessen eine andere Authentifizierungsmethode. \n"
-"Wenn der Fehler bestehen bleibt, kontaktieren Sie bitte einen der "
-"Administratoren.\n"
+"Wenn der Fehler bestehen bleibt, kontaktieren Sie bitte einen der Administratoren.\n"
 "        "
 
 #: aleksis/core/templates/two_factor/core/setup.html:73
@@ -3519,13 +2982,11 @@ msgstr "Zwei-Faktor-Authentifizierung erfolgreich aktiviert"
 #: aleksis/core/templates/two_factor/core/setup_complete.html:14
 msgid ""
 "\n"
-"        Congratulations, you've successfully enabled two-factor "
-"authentication.\n"
+"        Congratulations, you've successfully enabled two-factor authentication.\n"
 "      "
 msgstr ""
 "\n"
-"        Gratulation, Sie haben die Zwei-Faktor-Authentifizierung erfolgreich "
-"aktiviert.\n"
+"        Gratulation, Sie haben die Zwei-Faktor-Authentifizierung erfolgreich aktiviert.\n"
 "      "
 
 #: aleksis/core/templates/two_factor/core/setup_complete.html:24
@@ -3542,14 +3003,12 @@ msgstr "Backup-Codes generieren"
 msgid ""
 "\n"
 "          However, it might happen that you don't have access to\n"
-"          your primary token device. To enable account recovery, generate "
-"backup codes\n"
+"          your primary token device. To enable account recovery, generate backup codes\n"
 "          or add a phone number.\n"
 "        "
 msgstr ""
 "\n"
-"          Es kann passieren, dass Sie keinen Zugriff auf Ihren "
-"Tokengenerator haben. \n"
+"          Es kann passieren, dass Sie keinen Zugriff auf Ihren Tokengenerator haben. \n"
 "Um die Wiederherstellung zu aktivieren,\n"
 "generieren Sie Backupcodes oder fügen eine Telefonnummer hinzu.\n"
 "        "
@@ -3567,12 +3026,8 @@ msgid "Disable Two-Factor Authentication"
 msgstr "Zwei-Faktor-Authentifizierung deaktiveren"
 
 #: aleksis/core/templates/two_factor/profile/disable.html:12
-msgid ""
-"You are about to disable two-factor authentication. This weakens your "
-"account security, are you sure?"
-msgstr ""
-"Sie sind dabei, Zwei-Faktor-Authentifizierung zu deaktivieren. Das "
-"verschlechtert Ihre Kontosicherheit. Sind Sie sicher?"
+msgid "You are about to disable two-factor authentication. This weakens your account security, are you sure?"
+msgstr "Sie sind dabei, Zwei-Faktor-Authentifizierung zu deaktivieren. Das verschlechtert Ihre Kontosicherheit. Sind Sie sicher?"
 
 #: aleksis/core/templates/two_factor/profile/disable.html:26
 msgid "Disable"
@@ -3652,8 +3107,7 @@ msgid ""
 msgstr ""
 "\n"
 "        Wir raten Ihnen jedoch dringend davon ab.\n"
-"        Sie können jedoch auch die Zwei-Faktor-Authentifizierung für Ihr "
-"Konto deaktivieren.\n"
+"        Sie können jedoch auch die Zwei-Faktor-Authentifizierung für Ihr Konto deaktivieren.\n"
 "      "
 
 #: aleksis/core/templates/two_factor/profile/profile.html:78
@@ -3665,8 +3119,7 @@ msgid ""
 "      "
 msgstr ""
 "\n"
-"        Die Zwei-Faktor-Authentifizierung ist nicht für Ihren Account "
-"aktiviert.\n"
+"        Die Zwei-Faktor-Authentifizierung ist nicht für Ihren Account aktiviert.\n"
 "          Aktivieren Sie Zwei-Faktor-Authentifizierung für eine verbesserte\n"
 "          Accountsicherheit.\n"
 "      "
@@ -3679,419 +3132,482 @@ msgstr "E-Mail"
 msgid "SMS"
 msgstr "SMS"
 
-#: aleksis/core/util/pdf.py:118 aleksis/core/util/pdf.py:151
+#: aleksis/core/util/pdf.py:151
 msgid "Progress: Generate PDF file"
 msgstr "Fortschritt: PDF-Datei generieren"
 
-#: aleksis/core/util/pdf.py:119 aleksis/core/util/pdf.py:152
+#: aleksis/core/util/pdf.py:152
 msgid "Generating PDF file …"
 msgstr "PDF-Datei wird generiert …"
 
-#: aleksis/core/util/pdf.py:120 aleksis/core/util/pdf.py:153
+#: aleksis/core/util/pdf.py:153
 msgid "The PDF file has been generated successfully."
 msgstr "Die PDF-Datei wurde erfolgreich generiert."
 
-#: aleksis/core/util/pdf.py:121 aleksis/core/util/pdf.py:154
+#: aleksis/core/util/pdf.py:154
 msgid "There was a problem while generating the PDF file."
 msgstr "Es ist ein Fehler beim Generieren der PDF-Datei aufgetreten."
 
-#: aleksis/core/util/pdf.py:124 aleksis/core/util/pdf.py:157
+#: aleksis/core/util/pdf.py:157
 msgid "Download PDF"
 msgstr "PDF herunterladen"
 
-#: aleksis/core/views.py:292 aleksis/core/views.py:294
 #: aleksis/core/views.py:278
 msgid "The school term has been created."
 msgstr "Das Schuljahr wurde erstellt."
 
-#: aleksis/core/views.py:304 aleksis/core/views.py:306
 #: aleksis/core/views.py:290
 msgid "The school term has been saved."
 msgstr "Das Schuljahr wurde gespeichert."
 
-#: aleksis/core/views.py:424 aleksis/core/views.py:426
 #: aleksis/core/views.py:394
 msgid "The child groups were successfully saved."
 msgstr "Die Untergruppen wurden gespeichert."
 
-#: aleksis/core/views.py:443 aleksis/core/views.py:453
-#: aleksis/core/views.py:445 aleksis/core/views.py:455
 #: aleksis/core/views.py:413 aleksis/core/views.py:423
 msgid "The person has been saved."
 msgstr "Die Person wurde gespeichert."
 
-#: aleksis/core/views.py:503 aleksis/core/views.py:505
 #: aleksis/core/views.py:473
 msgid "The group has been saved."
 msgstr "Die Gruppe wurde gespeichert."
 
-#: aleksis/core/views.py:600 aleksis/core/views.py:602
 #: aleksis/core/views.py:556
 msgid "The announcement has been saved."
 msgstr "Die Ankündigung wurde gespeichert."
 
-#: aleksis/core/views.py:616 aleksis/core/views.py:618
 #: aleksis/core/views.py:572
 msgid "The announcement has been deleted."
 msgstr "Ankündigung wurde gelöscht."
 
-#: aleksis/core/views.py:684 aleksis/core/views.py:686
 #: aleksis/core/views.py:641
 msgid "The requested preference registry does not exist"
 msgstr "Das angeforderte Einstellungsregister existiert nicht"
 
-#: aleksis/core/views.py:703 aleksis/core/views.py:705
 #: aleksis/core/views.py:660
 msgid "The preferences have been saved successfully."
 msgstr "Die Einstellungen wurde gespeichert."
 
-#: aleksis/core/views.py:727 aleksis/core/views.py:729
 #: aleksis/core/views.py:684
 msgid "The person has been deleted."
 msgstr "Die Person wurde gelöscht."
 
-#: aleksis/core/views.py:741 aleksis/core/views.py:743
 #: aleksis/core/views.py:698
 msgid "The group has been deleted."
 msgstr "Die Gruppe wurde gelöscht."
 
-#: aleksis/core/views.py:773
-msgid "The additional_field has been saved."
+#: aleksis/core/views.py:730
+msgid "The additional field has been saved."
 msgstr "Das zusätzliche Feld wurde gespeichert."
 
-#: aleksis/core/views.py:807 aleksis/core/views.py:809
 #: aleksis/core/views.py:765
 msgid "The additional field has been deleted."
 msgstr "Das zusätzliche Feld wurde gelöscht."
 
-#: aleksis/core/views.py:832 aleksis/core/views.py:834
 #: aleksis/core/views.py:790
 msgid "The group type has been saved."
 msgstr "Der Gruppentyp wurde gespeichert."
 
-#: aleksis/core/views.py:862 aleksis/core/views.py:864
 #: aleksis/core/views.py:821
 msgid "The group type has been deleted."
 msgstr "Der Gruppentyp wurde gelöscht."
 
-#: aleksis/core/views.py:895 aleksis/core/views.py:897
 #: aleksis/core/views.py:856
 msgid "Progress: Run data checks"
 msgstr "Fortschritt: Datenprüfungen ausführen"
 
-#: aleksis/core/views.py:896 aleksis/core/views.py:898
 #: aleksis/core/views.py:857
 msgid "Run data checks …"
 msgstr "Datenprüfungen laufen …"
 
-#: aleksis/core/views.py:897 aleksis/core/views.py:899
 #: aleksis/core/views.py:858
 msgid "The data checks were run successfully."
 msgstr "Die Datenprüfungen wurden erfolgreich ausgeführt."
 
-#: aleksis/core/views.py:898 aleksis/core/views.py:900
 #: aleksis/core/views.py:859
 msgid "There was a problem while running data checks."
 msgstr "Es gab ein Problem beim Ausführen der Datenprüfungen."
 
-#: aleksis/core/views.py:914 aleksis/core/views.py:916
 #: aleksis/core/views.py:876
 #, python-brace-format
 msgid "The solve option '{solve_option_obj.verbose_name}' "
 msgstr "Die Lösungsoption \"{solve_option_obj.verbose_name}\" "
 
-#: aleksis/core/views.py:924 aleksis/core/views.py:926
 #: aleksis/core/views.py:886
 msgid "The requested solve option does not exist"
 msgstr "Die angeforderte Lösungsoption existiert nicht"
 
-#: aleksis/core/views.py:956 aleksis/core/views.py:958
 #: aleksis/core/views.py:919
 msgid "The dashboard widget has been saved."
 msgstr "Das Dashboard-Widget wurde gespeichert."
 
-#: aleksis/core/views.py:986 aleksis/core/views.py:988
 #: aleksis/core/views.py:949
 msgid "The dashboard widget has been created."
 msgstr "Das Dashboard-Widget wurde erstellt."
 
-#: aleksis/core/views.py:996 aleksis/core/views.py:998
 #: aleksis/core/views.py:959
 msgid "The dashboard widget has been deleted."
 msgstr "Das Dashboard-Widget wurde gelöscht."
 
-#: aleksis/core/views.py:1067 aleksis/core/views.py:1069
-#: aleksis/core/views.py:1030
+#: aleksis/core/views.py:1031
 msgid "Your dashboard configuration has been saved successfully."
 msgstr "Ihre Dashboardkonfiguration wurde erfolgreich gespeichert."
 
-#: aleksis/core/views.py:1069 aleksis/core/views.py:1071
-#: aleksis/core/views.py:1032
+#: aleksis/core/views.py:1033
 msgid "The configuration of the default dashboard has been saved successfully."
-msgstr ""
-"Die Konfiguration des Standard-Dashboardes wurde erfolgreich gespeichert."
+msgstr "Die Konfiguration des Standard-Dashboardes wurde erfolgreich gespeichert."
 
-#: aleksis/core/views.py:1145 aleksis/core/views.py:1147
-#: aleksis/core/views.py:1103
+#: aleksis/core/views.py:1104
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
-msgstr ""
-"Die Einladung wurde erfolgreich erstellt. Der Einladungscode ist {code}"
+msgstr "Die Einladung wurde erfolgreich erstellt. Der Einladungscode ist {code}"
 
-#: aleksis/core/views.py:1236 aleksis/core/views.py:1238
-#: aleksis/core/views.py:1200
+#: aleksis/core/views.py:1201
 msgid "We have successfully assigned the permissions."
 msgstr "Wir haben die Berechtigungen erfolgreich zugewiesen."
 
-#: aleksis/core/views.py:1246 aleksis/core/views.py:1248
-#: aleksis/core/views.py:1210
+#: aleksis/core/views.py:1211
 msgid "The global user permission has been deleted."
 msgstr "Die globale Benutzerberechtigung wurde gelöscht."
 
-#: aleksis/core/views.py:1256 aleksis/core/views.py:1258
-#: aleksis/core/views.py:1220
+#: aleksis/core/views.py:1221
 msgid "The global group permission has been deleted."
 msgstr "Die globale Gruppenberechtigung wurde gelöscht."
 
-#: aleksis/core/views.py:1266 aleksis/core/views.py:1268
-#: aleksis/core/views.py:1230
+#: aleksis/core/views.py:1231
 msgid "The object user permission has been deleted."
 msgstr "Die Objekt-Benutzerberechtigung wurde gelöscht."
 
-#: aleksis/core/views.py:1276 aleksis/core/views.py:1278
-#: aleksis/core/views.py:1240
+#: aleksis/core/views.py:1241
 msgid "The object group permission has been deleted."
 msgstr "Die Objekt-Gruppenberechtigung wurde gelöscht."
 
-#: aleksis/core/views.py:1344 aleksis/core/views.py:1346
-msgid "The requested PDF file does not exist"
-msgstr "Die angeforderte PDF-Datei existiert nicht"
-
-#: aleksis/core/views.py:1353 aleksis/core/views.py:1357
-#: aleksis/core/views.py:1355 aleksis/core/views.py:1359
-msgid "The requested task does not exist or is not accessible"
-msgstr "Der angeforderte Task existiert nicht oder ist nicht abrufbar"
-
-#: aleksis/core/views.py:1409 aleksis/core/views.py:1411
-#: aleksis/core/views.py:1349
-msgid ""
-"The third-party account could not be disconnected because it is the only "
-"login method available."
-msgstr ""
-"Das Drittanbieter-Konto konnte nicht deaktiviert werden, weil es die einzige "
-"verfügbare Anmeldeoption ist."
+#: aleksis/core/views.py:1350
+msgid "The third-party account could not be disconnected because it is the only login method available."
+msgstr "Das Drittanbieter-Konto konnte nicht deaktiviert werden, weil es die einzige verfügbare Anmeldeoption ist."
 
-#: aleksis/core/views.py:1416 aleksis/core/views.py:1418
-#: aleksis/core/views.py:1356
+#: aleksis/core/views.py:1357
 msgid "The third-party account has been successfully disconnected."
 msgstr "Das Drittanbieter-Konto wurde erfolgreich getrennt."
 
-#: aleksis/core/views.py:1487 aleksis/core/views.py:1489
-#: aleksis/core/views.py:1432
-msgid ""
-"Person was invited successfully and an email with further instructions has "
-"been send to them."
-msgstr ""
-"Die Person wurde erfolgreich eingeladen und eine E-Mail mit weiteren "
-"Anweisungen wurde an sie verschickt."
+#: aleksis/core/views.py:1433
+msgid "Person was invited successfully and an email with further instructions has been send to them."
+msgstr "Die Person wurde erfolgreich eingeladen und eine E-Mail mit weiteren Anweisungen wurde an sie verschickt."
 
-#: aleksis/core/views.py:1498 aleksis/core/views.py:1500
-#: aleksis/core/views.py:1443
+#: aleksis/core/views.py:1444
 msgid "Person was already invited."
 msgstr "Person wurde bereits eingeladen."
 
-#: aleksis/core/views.py:1598
-msgid "ICal feed updated successfully"
-msgstr "Der iCal-Feed wurde erfolgreich aktualisiert"
+#~ msgid "Birthday Calendar"
+#~ msgstr "Geburtstagskalender"
 
-#: aleksis/core/views.py:1608
-msgid "ICal feed deleted successfully"
-msgstr "Der iCal-Feed wurde erfolgreich gelöscht"
+#~ msgid "A Calendar of Birthdays"
+#~ msgstr "Ein Kalender mit Geburtstagen"
 
-#: aleksis/core/views.py:1616
-msgid "ICal feed created successfully"
-msgstr "Der iCal-Feed wurde erfolgreich erstellt"
-
-#: aleksis/core/data_checks.py:330 aleksis/core/data_checks.py:320
 #, python-format
-msgid "Validate field %s of model %s."
-msgstr "Feld %s von Model %s validieren."
+#~ msgid "%(name)s's birthday"
+#~ msgstr "%(name)ss Geburtstag"
 
-#: aleksis/core/data_checks.py:332 aleksis/core/data_checks.py:322
 #, python-format
-msgid "The field %s couldn't be validated successfully."
-msgstr "Das Feld %s konnte nicht erfolgreich validiert werden."
+#~ msgid "%(name)s was born on %(birthday)s"
+#~ msgstr "%(name)s wurde am %(birthday)s geboren"
 
-#: aleksis/core/models.py:181
-msgid "other"
-msgstr "andere"
+#~ msgid "You must grant the permission to all objects and/or to some objects."
+#~ msgstr "Sie müssen die Berechtigung auf alle Objekte und/oder für einige Objekte vergeben."
 
-#: aleksis/core/settings.py:543 aleksis/core/settings.py:541
-msgid "Ukrainian"
-msgstr "Ukrainisch"
+#~ msgid "Dashboard"
+#~ msgstr "Dashboard"
 
-#: aleksis/core/templates/500.html:10
-msgid ""
-"An unexpected error has\n"
-"          occurred."
-msgstr ""
-"Ein unerwarteter Fehler ist\n"
-"            aufgetreten."
+#~ msgid "Admin"
+#~ msgstr "Admin"
+
+#~ msgid "Data management"
+#~ msgstr "Datenverwaltung"
+
+#~ msgid "Configuration"
+#~ msgstr "Konfiguration"
+
+#~ msgid "Backend Admin"
+#~ msgstr "Backend-Administration"
+
+#~ msgid "People"
+#~ msgstr "Leute"
+
+#~ msgid "Groups and child groups"
+#~ msgstr "Gruppen und Kindgruppen"
+
+#~ msgid "Invite person"
+#~ msgstr "Person einladen"
+
+#~ msgid "Stop impersonation"
+#~ msgstr "Verkleidung beenden"
+
+#~ msgid "Account"
+#~ msgstr "Konto"
+
+#~ msgid "2FA"
+#~ msgstr "2FA"
+
+#~ msgid "Third-party accounts"
+#~ msgstr "Drittanbieter-Konten"
+
+#~ msgid "Calendar Feeds"
+#~ msgstr "Kalender-Feeds"
+
+#~ msgid "Logout"
+#~ msgstr "Abmelden"
+
+#~ msgid "UUID"
+#~ msgstr "UUID"
+
+#~ msgid "Selected ICal feed"
+#~ msgstr "Ausgewählter iCal-Feed"
+
+#~ msgid "Personal Calendar URL"
+#~ msgstr "Persönliche Kalender-URL"
+
+#~ msgid "Personal Calendar URLs"
+#~ msgstr "Persönliche Kalender-URLs"
+
+#~ msgid "Available languages"
+#~ msgstr "Verfügbare Sprachen"
+
+#~ msgid ""
+#~ "An unexpected error has\n"
+#~ "          occured."
+#~ msgstr ""
+#~ "Ein unerwarteter Fehler ist\n"
+#~ "            aufgetreten."
+
+#~ msgid "About AlekSIS® — The Free School Information System"
+#~ msgstr "Über AlekSIS® — The Free School Information System"
+
+#~ msgid "Imprint"
+#~ msgstr "Impressum"
+
+#~ msgid "Privacy Policy"
+#~ msgstr "Datenschutzerklärung"
+
+#~ msgid "years to"
+#~ msgstr "Jahre bis"
+
+#~ msgid "years "
+#~ msgstr "Jahre "
+
+#~ msgid "Create iCal URL"
+#~ msgstr "iCal-URL erstellen"
 
-#: aleksis/core/templates/core/group/full.html:93
 #, python-format
-msgid ""
-"\n"
-"              %(min)s years to %(max)s years\n"
-"            "
-msgstr ""
-"\n"
-"              %(min)s Jahre bis %(max)s Jahre\n"
-"            "
+#~ msgid "Edit iCal URL %(object)s"
+#~ msgstr "iCal-URL %(object)s bearbeiten"
 
-#: aleksis/core/templates/core/ical/ical_list.html:4
-#: aleksis/core/templates/core/ical/ical_list.html:5
-msgid "iCal Feeds"
-msgstr "iCal-Feeds"
+#~ msgid "ICal Feeds"
+#~ msgstr "iCal-Feeds"
 
-#: aleksis/core/views.py:775 aleksis/core/views.py:730
-msgid "The additional field has been saved."
-msgstr "Das zusätzliche Feld wurde gespeichert."
+#~ msgid "These are URLs for different Calendar Feeds in the iCal (.ics) format. You can create as many as you want and import them in your calendar software."
+#~ msgstr "Dies sind URLs für verschiedene Kalender-Feeds im iCal-Format (.ics). Sie können so viele erstellen, wie sie wollen, und in Ihre Kalender-Software importieren."
 
-#: aleksis/core/views.py:1600
-msgid "iCal feed updated successfully"
-msgstr "Der iCal-Feed wurde erfolgreich aktualisiert"
+#~ msgid "Your iCal URLs"
+#~ msgstr "Deine iCal-URLs"
 
-#: aleksis/core/views.py:1610
-msgid "iCal feed deleted successfully"
-msgstr "Der iCal-Feed wurde erfolgreich gelöscht"
+#~ msgid "Recent notifications"
+#~ msgstr "Letzte Benachrichtigungen"
 
-#: aleksis/core/views.py:1618
-msgid "iCal feed created successfully"
-msgstr "Der iCal-Feed wurde erfolgreich erstellt"
+#~ msgid "More information →"
+#~ msgstr "Mehr Informationen →"
 
-#: aleksis/core/templates/core/pages/system_status.html:24
-msgid ""
-"\n"
-"                Only admin and visitors from internal IPs can access the "
-"site.\n"
-"              "
-msgstr ""
-"\n"
-"                Nur Administratoren und Besucher von internen IP-Adressen "
-"können die Seite aufrufen.\n"
-"              "
+#~ msgid "No notifications available yet."
+#~ msgstr "Aktuell keine Benachrichtigungen verfügbar."
 
-#: aleksis/core/forms.py:499
-msgid "You must grant the permission to all objects or to specific objects."
-msgstr "Sie müssen die Berechtigung auf alle Objekte oder für spezifische Objekte vergeben."
+#~ msgid "About AlekSIS®"
+#~ msgstr "Über AlekSIS®"
 
-#: aleksis/core/models.py:1263
-msgid "Back URL"
-msgstr "Zurück-URL"
+#~ msgid "AlekSIS® – The Free School Information System"
+#~ msgstr "AlekSIS® – The Free School Information System"
 
-#: aleksis/core/models.py:1264
-msgid "Progress title"
-msgstr "Fortschritt-Titel"
+#~ msgid "About AlekSIS"
+#~ msgstr "Über AlekSIS"
 
-#: aleksis/core/models.py:1265
-msgid "Error message"
-msgstr "Fehlernachricht"
+#~ msgid ""
+#~ "\n"
+#~ "              This platform is powered by AlekSIS®, a web-based school information system (SIS) which can be used\n"
+#~ "              to manage and/or publish organisational artifacts of educational institutions. AlekSIS is free software and\n"
+#~ "              can be used by anyone.\n"
+#~ "            "
+#~ msgstr ""
+#~ "\n"
+#~ "              Diese Plattform wird mit AlekSIS®, einem webbasierten Schulinformationssystem (SIS), \n"
+#~ "welches für die Verwaltung und/oder Veröffentlichung von Bildungseinrichtungen verwendet werden kann.\n"
+#~ "AlekSIS ist freie Software und kann von jedem benutzt werden.\n"
+#~ "            "
 
-#: aleksis/core/models.py:1266
-msgid "Success message"
-msgstr "Erfolgsnachricht"
+#~ msgid ""
+#~ "\n"
+#~ "              AlekSIS® is a registered trademark of the AlekSIS open source project, represented by Teckids e.V.\n"
+#~ "            "
+#~ msgstr ""
+#~ "\n"
+#~ "              AlekSIS® ist eine eingetragene Wortmarke des Open-Source-Projektes AlekSIS, vertreten durch den Teckids e.V.\n"
+#~ "            "
 
-#: aleksis/core/models.py:1267
-msgid "Redirect on success URL"
-msgstr "URL, auf die bei Erfolg weitergeleitet wird"
+#~ msgid "Website of AlekSIS"
+#~ msgstr "Website von AlekSIS"
 
-#: aleksis/core/models.py:1269
-msgid "Additional button title"
-msgstr "Titel des zusätzlichen Buttons"
+#~ msgid "Source code"
+#~ msgstr "Quellcode"
 
-#: aleksis/core/models.py:1271
-msgid "Additional button URL"
-msgstr "URL des zusätzlichen Buttons"
+#~ msgid "Licence information"
+#~ msgstr "Lizenzinformationen"
 
-#: aleksis/core/models.py:1273
-msgid "Additional button icon"
-msgstr "Symbol des zusätzlichen Buttons"
+#~ msgid ""
+#~ "\n"
+#~ "              The core and the official apps of AlekSIS are licenced under the EUPL, version 1.2 or later. For licence\n"
+#~ "              information from third-party apps, if installed, refer to the respective components below. The\n"
+#~ "              licences are marked like this:\n"
+#~ "            "
+#~ msgstr ""
+#~ "\n"
+#~ "              Der Core und die offiziellen Apps von AlekSIS sind unter der EUPL, Version 1.2 oder später, lizenziert. Für Lizenzinformationen\n"
+#~ "zu Apps von Drittanbietern, wenn installiert, siehe direkt bei der jeweiligen App weiter unten auf dieser Seite. Die Lizenzen\n"
+#~ "sind wie folgt markiert:\n"
+#~ "            "
 
-#: aleksis/core/models.py:1275
-msgid "Result fetched"
-msgstr "Ergebnis abgerufen"
+#~ msgid "Free/Open Source Licence"
+#~ msgstr "Freie/Open Source Lizenz"
 
-#: aleksis/core/models.py:1300
-msgid "Background task completed successfully"
-msgstr "Hintergrundaufgabe erfolgreich fertiggestellt"
+#~ msgid "Other Licence"
+#~ msgstr "Andere Lizenz"
 
-#: aleksis/core/models.py:1301
-msgid "The background task '{}' has been completed successfully."
-msgstr "Die Hintergrundaufgabe '{}' wurde erfolgreich fertiggestellt."
+#~ msgid "Full licence text"
+#~ msgstr "Kompletter Lizenztext"
 
-#: aleksis/core/models.py:1307
-msgid "Background task failed"
-msgstr "Hintergrundaufgabe fehlgeschlagen"
+#~ msgid "More information about the EUPL"
+#~ msgstr "Weitere Informationen über die EUPL"
 
-#: aleksis/core/models.py:1308
-msgid "The background task '{}' has failed."
-msgstr "Die Hintergrundaufgabe '{}' ist fehlgeschlagen."
+#, python-format
+#~ msgid ""
+#~ "\n"
+#~ "                    This app is licenced under %(licence)s.\n"
+#~ "                  "
+#~ msgstr ""
+#~ "\n"
+#~ "                    Diese App ist unter %(licence)s lizenziert.\n"
+#~ "                  "
 
-#: aleksis/core/models.py:1317
-msgid "Background task"
-msgstr "Hintergrundaufgabe"
+#~ msgid ""
+#~ "\n"
+#~ "              Without activated JavaScript the progress status can't be updated.\n"
+#~ "            "
+#~ msgstr ""
+#~ "\n"
+#~ "              Ohne aktiviertes JavaScript kann der Fortschritt leider nicht aktualisiert werden.\n"
+#~ "            "
 
-#: aleksis/core/models.py:1441
-msgid "Can view room timetable"
-msgstr "Kann Raum-Stundenplan sehen"
+#~ msgid ""
+#~ "\n"
+#~ "                Only admin and visitors from internal IPs can access thesite.\n"
+#~ "              "
+#~ msgstr ""
+#~ "\n"
+#~ "                Nur Administratoren und Besucher von internen IP-Adressen können die Seite aufrufen.\n"
+#~ "              "
 
-#: aleksis/core/models.py:1443
-msgid "Room"
-msgstr "Raum"
+#~ msgid "Language"
+#~ msgstr "Sprache"
 
-#: aleksis/core/models.py:1444
-msgid "Rooms"
-msgstr "Räume"
+#~ msgid "Select language"
+#~ msgstr "Sprache auswählen"
 
-#: aleksis/core/preferences.py:208
-msgid "Select Design"
-msgstr "Design auswählen"
+#~ msgid ""
+#~ "\n"
+#~ "            Your administrator account is not linked to any person. Therefore,\n"
+#~ "            a dummy person has been linked to your account.\n"
+#~ "          "
+#~ msgstr ""
+#~ "\n"
+#~ "            Ihr Administratorenkonto ist mit keiner Person verknüpft. Deshalb\n"
+#~ "            wurde Ihr Konto mit einer Dummyperson verknüpft.\n"
+#~ "          "
 
-#: aleksis/core/preferences.py:211
-msgid "Light mode"
-msgstr "Heller Modus"
+#~ msgid ""
+#~ "\n"
+#~ "            Your user account is not linked to a person. This means you\n"
+#~ "            cannot access any school-related information. Please contact\n"
+#~ "            the managers of AlekSIS at your school.\n"
+#~ "          "
+#~ msgstr ""
+#~ "\n"
+#~ "            Ihr Benutzerkonto ist nicht mit einer Person verknüpft. Das bedeutet, dass Sie\n"
+#~ "        keine schulbezogenen Informationen aufrufen können. Bitte wenden Sie sich an\n"
+#~ "        die Verwaltenden von AlekSIS an Ihrer Schule.\n"
+#~ "          "
 
-#: aleksis/core/templates/core/partials/splash_screen.html:11
-msgid ""
-"\n"
-"      This webbrowser doesn't support JavaScript, or its execution is "
-"blocked. Please use another browser to continue.\n"
-"    "
-msgstr ""
-"\n"
-"      Dieser Webbrowser unterstützt kein JavaScript oder die Ausführung wurde blockiert. Bitte nutzen Sie einen anderen Browser, um fortzufahren.\n"
-"    "
+#~ msgid "Impersonate"
+#~ msgstr "Verkleiden"
 
-#: aleksis/core/templates/offline.html:10
-msgid "Page not available offline."
-msgstr "Seite nicht offline verfügbar."
+#~ msgid "Invite user"
+#~ msgstr "Benutzer einladen"
 
-#: aleksis/core/templates/offline.html:14
-msgid ""
-"\n"
-"      This page is not available offline. Since you probably don't have an "
-"internet connection, check to see if your WiFi\n"
-"      or mobile data is turned on and try again. If you think you are "
-"connected, please contact the system\n"
-"      administrators:\n"
-"    "
-msgstr ""
-"\n"
-"      Diese Seite ist offline nicht verfügbar. Da Sie vermutliche keine Internetverbindung haben, prüfen Sie, ob Ihr WLAN oder mobile Daten angeschaltet sind, \n"
-"      und probieren Sie es erneut. Wenn Sie der Meinung sind, dass Sie verbunden sind, kontaktieren Sie bitte die \n"
-"      Systemadministratoren:\n"
-"    "
+#~ msgid "Contact details"
+#~ msgstr "Kontaktdetails"
+
+#~ msgid "This person didn't upload a personal photo."
+#~ msgstr "Diese Person hat kein persönliches Foto hochgeladen."
+
+#~ msgid "Children"
+#~ msgstr "Kinder"
+
+#~ msgid "Success!"
+#~ msgstr "Erfolg!"
+
+#~ msgid "Please return to your application and enter this code:"
+#~ msgstr "Bitte gehen Sie zurück in Ihre Anwendung und geben Sie diesen Code ein:"
+
+#~ msgid "No internet connection."
+#~ msgstr "Keine Internetverbindung."
+
+#~ msgid ""
+#~ "\n"
+#~ "      There was an error accessing this page. You probably don't have an internet connection. Check to see if your WiFi\n"
+#~ "      or mobile data is turned on and try again. If you think you are connected, please contact the system\n"
+#~ "      administrators:\n"
+#~ "    "
+#~ msgstr ""
+#~ "\n"
+#~ "      Es ist ein Fehler beim Aufrufen der Seite aufgetreten. Eventuell haben Sie keine Internetverbindung. Bitte prüfen Sie, ob WLAN oder mobile Daten aktiv sind, \n"
+#~ "      und probieren Sie es erneut. Wenn Sie der Meinung sind, dass Sie mit dem Internet verbunden sind, kontaktieren Sie bitte einen Ihrer \n"
+#~ "      Systemadministratoren:\n"
+#~ "    "
+
+#~ msgid "The additional_field has been saved."
+#~ msgstr "Das zusätzliche Feld wurde gespeichert."
+
+#~ msgid "The requested PDF file does not exist"
+#~ msgstr "Die angeforderte PDF-Datei existiert nicht"
+
+#~ msgid "The requested task does not exist or is not accessible"
+#~ msgstr "Der angeforderte Task existiert nicht oder ist nicht abrufbar"
+
+#~ msgid "ICal feed updated successfully"
+#~ msgstr "Der iCal-Feed wurde erfolgreich aktualisiert"
+
+#~ msgid "ICal feed deleted successfully"
+#~ msgstr "Der iCal-Feed wurde erfolgreich gelöscht"
+
+#~ msgid "ICal feed created successfully"
+#~ msgstr "Der iCal-Feed wurde erfolgreich erstellt"
+
+#~ msgid "iCal Feeds"
+#~ msgstr "iCal-Feeds"
+
+#~ msgid "iCal feed updated successfully"
+#~ msgstr "Der iCal-Feed wurde erfolgreich aktualisiert"
+
+#~ msgid "iCal feed deleted successfully"
+#~ msgstr "Der iCal-Feed wurde erfolgreich gelöscht"
+
+#~ msgid "iCal feed created successfully"
+#~ msgstr "Der iCal-Feed wurde erfolgreich erstellt"
 
 #~ msgid "Me"
 #~ msgstr "Ich"
@@ -4155,8 +3671,7 @@ msgstr ""
 #~ "   <li>ID des Tasks: %(task_id)s</li>\n"
 #~ "   <li>Aufgetretene Exception: %(exception)s</li>\n"
 #~ "   <li>Argumente, mit denen der Task aufgerufen wurde: %(args)s</li>\n"
-#~ "   <li>Keyword-Argumente, mit denen der Task aufgerufen wurde: "
-#~ "%(kwargs)s</li>\n"
+#~ "   <li>Keyword-Argumente, mit denen der Task aufgerufen wurde: %(kwargs)s</li>\n"
 #~ "   <li>Stacktrace: %(traceback)s</li>\n"
 #~ " </ul>\n"
 #~ " "
@@ -4175,12 +3690,8 @@ msgstr ""
 #~ msgstr "Zustimmungen"
 
 #, python-brace-format
-#~ msgid ""
-#~ "I have read the <a href='{privacy_policy}'>Privacy policy</a> and agree "
-#~ "with them."
-#~ msgstr ""
-#~ "Ich habe die <a href='{privacy_policy}'>Datenschutzerklärung</a> gelesen "
-#~ "und stimme ihr zu."
+#~ msgid "I have read the <a href='{privacy_policy}'>Privacy policy</a> and agree with them."
+#~ msgstr "Ich habe die <a href='{privacy_policy}'>Datenschutzerklärung</a> gelesen und stimme ihr zu."
 
 #~ msgid "You must type the same password each time."
 #~ msgstr "Sie müssen zweimal das gleiche Passwort eingeben."
@@ -4189,12 +3700,8 @@ msgstr ""
 #~ msgstr "Verkleidung"
 
 #, python-format
-#~ msgid ""
-#~ "<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change "
-#~ "your e-mail address</a>"
-#~ msgstr ""
-#~ "<strong>Hinweis:</strong> Sie können immer noch <a href=\"%(email_url)s"
-#~ "\"> Ihre E-Mail-Adresse ändern</a>"
+#~ msgid "<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change your e-mail address</a>"
+#~ msgstr "<strong>Hinweis:</strong> Sie können immer noch <a href=\"%(email_url)s\"> Ihre E-Mail-Adresse ändern</a>"
 
 #~ msgid "Impress"
 #~ msgstr "Impressum"
@@ -4216,9 +3723,7 @@ msgstr ""
 
 #, python-format
 #~ msgid "Are you sure to delete the application %(application_name)s?"
-#~ msgstr ""
-#~ "Sind Sie sicher, dass Sie die Anwendung %(application_name)s löschen "
-#~ "möchten?"
+#~ msgstr "Sind Sie sicher, dass Sie die Anwendung %(application_name)s löschen möchten?"
 
 #~ msgid "Authorization Grant Type"
 #~ msgstr "Authorization Grant-Typ"
@@ -4243,23 +3748,17 @@ msgstr ""
 
 #~ msgid ""
 #~ "\n"
-#~ "        You can use this form to assign user accounts to persons. Use "
-#~ "the\n"
-#~ "        dropdowns to select existing accounts; use the text fields to "
-#~ "create new\n"
-#~ "        accounts on-the-fly. The latter will create a new account with "
-#~ "the\n"
+#~ "        You can use this form to assign user accounts to persons. Use the\n"
+#~ "        dropdowns to select existing accounts; use the text fields to create new\n"
+#~ "        accounts on-the-fly. The latter will create a new account with the\n"
 #~ "        entered username and copy all other details from the person.\n"
 #~ "      "
 #~ msgstr ""
 #~ "\n"
-#~ "        Sie können dieses Formular nutzen, um Benutzerkonten Personen "
-#~ "zuzuweisen. Nutzen Sie das\n"
-#~ "    Auswahlfeld um ein existierendes Benutzerkonto auszuwählen; nutzen "
-#~ "Sie das Textfeld, um einen neuen Benutzer zu\n"
+#~ "        Sie können dieses Formular nutzen, um Benutzerkonten Personen zuzuweisen. Nutzen Sie das\n"
+#~ "    Auswahlfeld um ein existierendes Benutzerkonto auszuwählen; nutzen Sie das Textfeld, um einen neuen Benutzer zu\n"
 #~ "    erstellen. Letzteres erstellt ein neues Benutzerkonto mit dem\n"
-#~ "    eingegebenen Benutzernamen und kopiert alle anderen Daten der "
-#~ "Person.\n"
+#~ "    eingegebenen Benutzernamen und kopiert alle anderen Daten der Person.\n"
 #~ "      "
 
 #~ msgid "Existing account"
@@ -4285,8 +3784,7 @@ msgstr ""
 #~ "We sent you a text message, please enter the tokens we\n"
 #~ "              sent."
 #~ msgstr ""
-#~ "Wir haben Ihnen eine Textnachricht geschickt. Bitte geben Sie die Tokens "
-#~ "ein,\n"
+#~ "Wir haben Ihnen eine Textnachricht geschickt. Bitte geben Sie die Tokens ein,\n"
 #~ "              die wir Ihnen geschickt haben."
 
 #~ msgid "French"
@@ -4295,12 +3793,8 @@ msgstr ""
 #~ msgid "Norwegian (bokmål)"
 #~ msgstr "Norwegisch (bokmål)"
 
-#~ msgid ""
-#~ "The data check has been started. Please note that it may take a while "
-#~ "before you are able to fetch the data on this page."
-#~ msgstr ""
-#~ "Die Datenüberprüfung wurde gestartet. Bitte beachten Sie, dass es eine "
-#~ "Weile dauern kann, bevor Sie auf dieser Seite Ergebnisse abrufen können."
+#~ msgid "The data check has been started. Please note that it may take a while before you are able to fetch the data on this page."
+#~ msgstr "Die Datenüberprüfung wurde gestartet. Bitte beachten Sie, dass es eine Weile dauern kann, bevor Sie auf dieser Seite Ergebnisse abrufen können."
 
 #~ msgid "The data check has finished."
 #~ msgstr "Die Datenüberprüfung wurde beendet."
@@ -4354,8 +3848,7 @@ msgstr ""
 #~ "     "
 #~ msgstr ""
 #~ "\n"
-#~ "      Wenn Sie der Meinung sind, dass es sich um einen Fehler in AlekSIS "
-#~ "handelt, kontaktieren Sie bitte einen Ihrer\n"
+#~ "      Wenn Sie der Meinung sind, dass es sich um einen Fehler in AlekSIS handelt, kontaktieren Sie bitte einen Ihrer\n"
 #~ "     Systemadministratoren:\n"
 #~ "     "
 
@@ -4429,9 +3922,7 @@ msgstr ""
 #~ msgstr "Markdown-Anleitung (Hilfe)"
 
 #~ msgid "You are not allowed to mark notifications from other users as read!"
-#~ msgstr ""
-#~ "Es ist Ihnen nicht erlaubt, Benachrichtigungen von anderen Benutzern als "
-#~ "gelesen zu markieren!"
+#~ msgstr "Es ist Ihnen nicht erlaubt, Benachrichtigungen von anderen Benutzern als gelesen zu markieren!"
 
 #, fuzzy
 #~ msgid "School name"
@@ -4491,8 +3982,7 @@ msgstr ""
 #~ "    "
 #~ msgstr ""
 #~ "\n"
-#~ "     Der Wartungsmodus ist aktuell aktiviert. Bitte versuchen Sie es "
-#~ "später erneut.\n"
+#~ "     Der Wartungsmodus ist aktuell aktiviert. Bitte versuchen Sie es später erneut.\n"
 #~ "    "
 
 #~ msgid "Details"
diff --git a/aleksis/core/locale/fr/LC_MESSAGES/django.po b/aleksis/core/locale/fr/LC_MESSAGES/django.po
index a37c9697651fb7c32c8af41a4631bce4f84d83b7..8925e976a23d950d62a99500c937bed7feb73ac0 100644
--- a/aleksis/core/locale/fr/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/fr/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: AlekSIS (School Information System) 0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-01-22 20:49+0100\n"
+"POT-Creation-Date: 2023-02-15 20:00+0100\n"
 "PO-Revision-Date: 2021-06-16 12:00+0000\n"
 "Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n"
 "Language-Team: French <https://translate.edugit.org/projects/aleksis/aleksis/fr/>\n"
@@ -429,7 +429,7 @@ msgstr ""
 msgid "other"
 msgstr ""
 
-#: aleksis/core/models.py:189 aleksis/core/models.py:1345
+#: aleksis/core/models.py:189 aleksis/core/models.py:1353
 msgid "Linked user"
 msgstr ""
 
@@ -438,7 +438,7 @@ msgid "Additional name(s)"
 msgstr ""
 
 #: aleksis/core/models.py:199 aleksis/core/models.py:511
-#: aleksis/core/models.py:1431
+#: aleksis/core/models.py:1439
 #, fuzzy
 #| msgid "First name"
 msgid "Short name"
@@ -504,7 +504,7 @@ msgstr ""
 
 #: aleksis/core/models.py:244 aleksis/core/models.py:724
 #: aleksis/core/models.py:748 aleksis/core/models.py:843
-#: aleksis/core/models.py:1104
+#: aleksis/core/models.py:1112
 msgid "Description"
 msgstr "Description"
 
@@ -544,7 +544,7 @@ msgstr ""
 msgid "Can view statistics about group."
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:509 aleksis/core/models.py:1432
+#: aleksis/core/models.py:509 aleksis/core/models.py:1440
 #, fuzzy
 #| msgid "Last name"
 msgid "Long name"
@@ -573,7 +573,7 @@ msgid "Additional fields"
 msgstr ""
 
 #: aleksis/core/models.py:723 aleksis/core/models.py:747
-#: aleksis/core/models.py:842 aleksis/core/models.py:1262
+#: aleksis/core/models.py:842 aleksis/core/models.py:1270
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr ""
@@ -603,7 +603,7 @@ msgid "Link"
 msgstr ""
 
 #: aleksis/core/models.py:752 aleksis/core/models.py:1079
-#: aleksis/core/models.py:1392
+#: aleksis/core/models.py:1400
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr ""
@@ -786,17 +786,17 @@ msgstr ""
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1103
+#: aleksis/core/models.py:1111
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1110 aleksis/core/templates/core/group/full.html:50
+#: aleksis/core/models.py:1118 aleksis/core/templates/core/group/full.html:50
 #, fuzzy
 #| msgid "Group"
 msgid "Group type"
 msgstr "Groupe"
 
-#: aleksis/core/models.py:1111
+#: aleksis/core/models.py:1119
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 #, fuzzy
@@ -804,211 +804,211 @@ msgstr "Groupe"
 msgid "Group types"
 msgstr "Groupe"
 
-#: aleksis/core/models.py:1124
+#: aleksis/core/models.py:1132
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view system status"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1125
+#: aleksis/core/models.py:1133
 msgid "Can manage data"
 msgstr ""
 
-#: aleksis/core/models.py:1126
+#: aleksis/core/models.py:1134
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can impersonate"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1127
+#: aleksis/core/models.py:1135
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1128
+#: aleksis/core/models.py:1136
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1129
+#: aleksis/core/models.py:1137
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1130
+#: aleksis/core/models.py:1138
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1131
+#: aleksis/core/models.py:1139
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1132
+#: aleksis/core/models.py:1140
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can invite persons"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1168
+#: aleksis/core/models.py:1176
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1176
+#: aleksis/core/models.py:1184
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1177
+#: aleksis/core/models.py:1185
 msgid "Notification sent"
 msgstr ""
 
-#: aleksis/core/models.py:1190
+#: aleksis/core/models.py:1198
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1191
+#: aleksis/core/models.py:1199
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1193
+#: aleksis/core/models.py:1201
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1194
+#: aleksis/core/models.py:1202
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1201
+#: aleksis/core/models.py:1209
 #, fuzzy
 #| msgid "Contact details"
 msgid "E-Mail address"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1233
+#: aleksis/core/models.py:1241
 #, fuzzy
 #| msgid "Owners"
 msgid "Owner"
 msgstr "Propriétaires"
 
-#: aleksis/core/models.py:1237
+#: aleksis/core/models.py:1245
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1240
+#: aleksis/core/models.py:1248
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1243
+#: aleksis/core/models.py:1251
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1250
+#: aleksis/core/models.py:1258
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1251
+#: aleksis/core/models.py:1259
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1256
+#: aleksis/core/models.py:1264
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1259
+#: aleksis/core/models.py:1267
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1263
+#: aleksis/core/models.py:1271
 msgid "Back URL"
 msgstr ""
 
-#: aleksis/core/models.py:1264
+#: aleksis/core/models.py:1272
 msgid "Progress title"
 msgstr ""
 
-#: aleksis/core/models.py:1265
+#: aleksis/core/models.py:1273
 msgid "Error message"
 msgstr ""
 
-#: aleksis/core/models.py:1266
+#: aleksis/core/models.py:1274
 msgid "Success message"
 msgstr ""
 
-#: aleksis/core/models.py:1267
+#: aleksis/core/models.py:1275
 msgid "Redirect on success URL"
 msgstr ""
 
-#: aleksis/core/models.py:1269
+#: aleksis/core/models.py:1277
 #, fuzzy
 #| msgid "Contact details"
 msgid "Additional button title"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1271
+#: aleksis/core/models.py:1279
 #, fuzzy
 #| msgid "Contact details"
 msgid "Additional button URL"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1273
+#: aleksis/core/models.py:1281
 #, fuzzy
 #| msgid "Contact details"
 msgid "Additional button icon"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1275
+#: aleksis/core/models.py:1283
 msgid "Result fetched"
 msgstr ""
 
-#: aleksis/core/models.py:1300
+#: aleksis/core/models.py:1308
 msgid "Background task completed successfully"
 msgstr ""
 
-#: aleksis/core/models.py:1301
+#: aleksis/core/models.py:1309
 msgid "The background task '{}' has been completed successfully."
 msgstr ""
 
-#: aleksis/core/models.py:1307
+#: aleksis/core/models.py:1315
 msgid "Background task failed"
 msgstr ""
 
-#: aleksis/core/models.py:1308
+#: aleksis/core/models.py:1316
 msgid "The background task '{}' has failed."
 msgstr ""
 
-#: aleksis/core/models.py:1317
+#: aleksis/core/models.py:1325
 msgid "Background task"
 msgstr ""
 
-#: aleksis/core/models.py:1331
+#: aleksis/core/models.py:1339
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1332
+#: aleksis/core/models.py:1340
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1348
+#: aleksis/core/models.py:1356
 #, fuzzy
 #| msgid "Contact details"
 msgid "Additional attributes"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1386
+#: aleksis/core/models.py:1394
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1396
+#: aleksis/core/models.py:1404
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
-#: aleksis/core/models.py:1441
+#: aleksis/core/models.py:1449
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view room timetable"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1443
+#: aleksis/core/models.py:1451
 msgid "Room"
 msgstr ""
 
-#: aleksis/core/models.py:1444
+#: aleksis/core/models.py:1452
 msgid "Rooms"
 msgstr ""
 
@@ -1230,15 +1230,15 @@ msgstr ""
 msgid "Country for phone number parsing"
 msgstr ""
 
-#: aleksis/core/settings.py:539
+#: aleksis/core/settings.py:544
 msgid "English"
 msgstr ""
 
-#: aleksis/core/settings.py:540
+#: aleksis/core/settings.py:545
 msgid "German"
 msgstr ""
 
-#: aleksis/core/settings.py:541
+#: aleksis/core/settings.py:546
 msgid "Ukrainian"
 msgstr ""
 
@@ -3090,52 +3090,52 @@ msgstr ""
 msgid "The dashboard widget has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1030
+#: aleksis/core/views.py:1031
 msgid "Your dashboard configuration has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1032
+#: aleksis/core/views.py:1033
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1103
+#: aleksis/core/views.py:1104
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr ""
 
-#: aleksis/core/views.py:1200
+#: aleksis/core/views.py:1201
 msgid "We have successfully assigned the permissions."
 msgstr ""
 
-#: aleksis/core/views.py:1210
+#: aleksis/core/views.py:1211
 msgid "The global user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1220
+#: aleksis/core/views.py:1221
 msgid "The global group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1230
+#: aleksis/core/views.py:1231
 msgid "The object user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1240
+#: aleksis/core/views.py:1241
 msgid "The object group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1349
+#: aleksis/core/views.py:1350
 msgid "The third-party account could not be disconnected because it is the only login method available."
 msgstr ""
 
-#: aleksis/core/views.py:1356
+#: aleksis/core/views.py:1357
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1432
+#: aleksis/core/views.py:1433
 msgid "Person was invited successfully and an email with further instructions has been send to them."
 msgstr ""
 
-#: aleksis/core/views.py:1443
+#: aleksis/core/views.py:1444
 #, fuzzy
 #| msgid "This username is already in use."
 msgid "Person was already invited."
diff --git a/aleksis/core/locale/la/LC_MESSAGES/django.po b/aleksis/core/locale/la/LC_MESSAGES/django.po
index 81cb58ba93fc0e0cb0132717762819fcd0b9bf63..217f324ef5c63ec5c7ed756887188bafa2fb1643 100644
--- a/aleksis/core/locale/la/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/la/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-01-22 20:49+0100\n"
+"POT-Creation-Date: 2023-02-15 20:00+0100\n"
 "PO-Revision-Date: 2020-12-19 12:57+0000\n"
 "Last-Translator: Julian <leuckerj@gmail.com>\n"
 "Language-Team: Latin <https://translate.edugit.org/projects/aleksis/aleksis/la/>\n"
@@ -441,7 +441,7 @@ msgstr "maskulinum"
 msgid "other"
 msgstr ""
 
-#: aleksis/core/models.py:189 aleksis/core/models.py:1345
+#: aleksis/core/models.py:189 aleksis/core/models.py:1353
 msgid "Linked user"
 msgstr ""
 
@@ -450,7 +450,7 @@ msgid "Additional name(s)"
 msgstr "addita nomines"
 
 #: aleksis/core/models.py:199 aleksis/core/models.py:511
-#: aleksis/core/models.py:1431
+#: aleksis/core/models.py:1439
 msgid "Short name"
 msgstr "Breve nomen"
 
@@ -514,7 +514,7 @@ msgstr ""
 
 #: aleksis/core/models.py:244 aleksis/core/models.py:724
 #: aleksis/core/models.py:748 aleksis/core/models.py:843
-#: aleksis/core/models.py:1104
+#: aleksis/core/models.py:1112
 msgid "Description"
 msgstr "Descriptio"
 
@@ -558,7 +558,7 @@ msgstr ""
 msgid "Can view statistics about group."
 msgstr "Personae et computi"
 
-#: aleksis/core/models.py:509 aleksis/core/models.py:1432
+#: aleksis/core/models.py:509 aleksis/core/models.py:1440
 #, fuzzy
 #| msgid "Last name"
 msgid "Long name"
@@ -589,7 +589,7 @@ msgid "Additional fields"
 msgstr "addita nomines"
 
 #: aleksis/core/models.py:723 aleksis/core/models.py:747
-#: aleksis/core/models.py:842 aleksis/core/models.py:1262
+#: aleksis/core/models.py:842 aleksis/core/models.py:1270
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr "Titulus"
@@ -619,7 +619,7 @@ msgid "Link"
 msgstr ""
 
 #: aleksis/core/models.py:752 aleksis/core/models.py:1079
-#: aleksis/core/models.py:1392
+#: aleksis/core/models.py:1400
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr "Nota"
@@ -830,17 +830,17 @@ msgstr ""
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1103
+#: aleksis/core/models.py:1111
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1110 aleksis/core/templates/core/group/full.html:50
+#: aleksis/core/models.py:1118 aleksis/core/templates/core/group/full.html:50
 #, fuzzy
 #| msgid "Group"
 msgid "Group type"
 msgstr "Grex"
 
-#: aleksis/core/models.py:1111
+#: aleksis/core/models.py:1119
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 #, fuzzy
@@ -848,215 +848,215 @@ msgstr "Grex"
 msgid "Group types"
 msgstr "Greges"
 
-#: aleksis/core/models.py:1124
+#: aleksis/core/models.py:1132
 #, fuzzy
 #| msgid "System status"
 msgid "Can view system status"
 msgstr "Status systemae"
 
-#: aleksis/core/models.py:1125
+#: aleksis/core/models.py:1133
 #, fuzzy
 #| msgid "Data management"
 msgid "Can manage data"
 msgstr "Adminstratio datarum"
 
-#: aleksis/core/models.py:1126
+#: aleksis/core/models.py:1134
 #, fuzzy
 #| msgid "Stop impersonation"
 msgid "Can impersonate"
 msgstr "Simulandum aliquem finire"
 
-#: aleksis/core/models.py:1127
+#: aleksis/core/models.py:1135
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1128
+#: aleksis/core/models.py:1136
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1129
+#: aleksis/core/models.py:1137
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1130
+#: aleksis/core/models.py:1138
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1131
+#: aleksis/core/models.py:1139
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1132
+#: aleksis/core/models.py:1140
 #, fuzzy
 #| msgid "Stop impersonation"
 msgid "Can invite persons"
 msgstr "Simulandum aliquem finire"
 
-#: aleksis/core/models.py:1168
+#: aleksis/core/models.py:1176
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1176
+#: aleksis/core/models.py:1184
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1177
+#: aleksis/core/models.py:1185
 #, fuzzy
 #| msgid "Notifications"
 msgid "Notification sent"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:1190
+#: aleksis/core/models.py:1198
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1191
+#: aleksis/core/models.py:1199
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1193
+#: aleksis/core/models.py:1201
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1194
+#: aleksis/core/models.py:1202
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1201
+#: aleksis/core/models.py:1209
 #, fuzzy
 #| msgid "E-mail address"
 msgid "E-Mail address"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:1233
+#: aleksis/core/models.py:1241
 msgid "Owner"
 msgstr ""
 
-#: aleksis/core/models.py:1237
+#: aleksis/core/models.py:1245
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1240
+#: aleksis/core/models.py:1248
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1243
+#: aleksis/core/models.py:1251
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1250
+#: aleksis/core/models.py:1258
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1251
+#: aleksis/core/models.py:1259
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1256
+#: aleksis/core/models.py:1264
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1259
+#: aleksis/core/models.py:1267
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1263
+#: aleksis/core/models.py:1271
 #, fuzzy
 #| msgid "Icon"
 msgid "Back URL"
 msgstr "Nota"
 
-#: aleksis/core/models.py:1264
+#: aleksis/core/models.py:1272
 msgid "Progress title"
 msgstr ""
 
-#: aleksis/core/models.py:1265
+#: aleksis/core/models.py:1273
 msgid "Error message"
 msgstr ""
 
-#: aleksis/core/models.py:1266
+#: aleksis/core/models.py:1274
 msgid "Success message"
 msgstr ""
 
-#: aleksis/core/models.py:1267
+#: aleksis/core/models.py:1275
 msgid "Redirect on success URL"
 msgstr ""
 
-#: aleksis/core/models.py:1269
+#: aleksis/core/models.py:1277
 #, fuzzy
 #| msgid "Additional name(s)"
 msgid "Additional button title"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:1271
+#: aleksis/core/models.py:1279
 #, fuzzy
 #| msgid "Additional name(s)"
 msgid "Additional button URL"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:1273
+#: aleksis/core/models.py:1281
 #, fuzzy
 #| msgid "Additional name(s)"
 msgid "Additional button icon"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:1275
+#: aleksis/core/models.py:1283
 msgid "Result fetched"
 msgstr ""
 
-#: aleksis/core/models.py:1300
+#: aleksis/core/models.py:1308
 msgid "Background task completed successfully"
 msgstr ""
 
-#: aleksis/core/models.py:1301
+#: aleksis/core/models.py:1309
 msgid "The background task '{}' has been completed successfully."
 msgstr ""
 
-#: aleksis/core/models.py:1307
+#: aleksis/core/models.py:1315
 msgid "Background task failed"
 msgstr ""
 
-#: aleksis/core/models.py:1308
+#: aleksis/core/models.py:1316
 msgid "The background task '{}' has failed."
 msgstr ""
 
-#: aleksis/core/models.py:1317
+#: aleksis/core/models.py:1325
 msgid "Background task"
 msgstr ""
 
-#: aleksis/core/models.py:1331
+#: aleksis/core/models.py:1339
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1332
+#: aleksis/core/models.py:1340
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1348
+#: aleksis/core/models.py:1356
 #, fuzzy
 #| msgid "Additional name(s)"
 msgid "Additional attributes"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:1386
+#: aleksis/core/models.py:1394
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1396
+#: aleksis/core/models.py:1404
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
-#: aleksis/core/models.py:1441
+#: aleksis/core/models.py:1449
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Can view room timetable"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:1443
+#: aleksis/core/models.py:1451
 msgid "Room"
 msgstr ""
 
-#: aleksis/core/models.py:1444
+#: aleksis/core/models.py:1452
 msgid "Rooms"
 msgstr ""
 
@@ -1286,15 +1286,15 @@ msgstr ""
 msgid "Country for phone number parsing"
 msgstr ""
 
-#: aleksis/core/settings.py:539
+#: aleksis/core/settings.py:544
 msgid "English"
 msgstr "Britannicus"
 
-#: aleksis/core/settings.py:540
+#: aleksis/core/settings.py:545
 msgid "German"
 msgstr "Germanus"
 
-#: aleksis/core/settings.py:541
+#: aleksis/core/settings.py:546
 msgid "Ukrainian"
 msgstr ""
 
@@ -3213,52 +3213,52 @@ msgstr ""
 msgid "The dashboard widget has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1030
+#: aleksis/core/views.py:1031
 msgid "Your dashboard configuration has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1032
+#: aleksis/core/views.py:1033
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1103
+#: aleksis/core/views.py:1104
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr ""
 
-#: aleksis/core/views.py:1200
+#: aleksis/core/views.py:1201
 msgid "We have successfully assigned the permissions."
 msgstr ""
 
-#: aleksis/core/views.py:1210
+#: aleksis/core/views.py:1211
 msgid "The global user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1220
+#: aleksis/core/views.py:1221
 msgid "The global group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1230
+#: aleksis/core/views.py:1231
 msgid "The object user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1240
+#: aleksis/core/views.py:1241
 msgid "The object group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1349
+#: aleksis/core/views.py:1350
 msgid "The third-party account could not be disconnected because it is the only login method available."
 msgstr ""
 
-#: aleksis/core/views.py:1356
+#: aleksis/core/views.py:1357
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1432
+#: aleksis/core/views.py:1433
 msgid "Person was invited successfully and an email with further instructions has been send to them."
 msgstr ""
 
-#: aleksis/core/views.py:1443
+#: aleksis/core/views.py:1444
 msgid "Person was already invited."
 msgstr ""
 
diff --git a/aleksis/core/locale/nb_NO/LC_MESSAGES/django.po b/aleksis/core/locale/nb_NO/LC_MESSAGES/django.po
index 2ea99e7cad1be5a61c71b50784fec05db9003c9d..a92744d7bb504c8b8488c5b7a091e905ff06f151 100644
--- a/aleksis/core/locale/nb_NO/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/nb_NO/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: AlekSIS (School Information System) 0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-01-22 20:49+0100\n"
+"POT-Creation-Date: 2023-02-15 20:00+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -396,7 +396,7 @@ msgstr ""
 msgid "other"
 msgstr ""
 
-#: aleksis/core/models.py:189 aleksis/core/models.py:1345
+#: aleksis/core/models.py:189 aleksis/core/models.py:1353
 msgid "Linked user"
 msgstr ""
 
@@ -405,7 +405,7 @@ msgid "Additional name(s)"
 msgstr ""
 
 #: aleksis/core/models.py:199 aleksis/core/models.py:511
-#: aleksis/core/models.py:1431
+#: aleksis/core/models.py:1439
 msgid "Short name"
 msgstr ""
 
@@ -467,7 +467,7 @@ msgstr ""
 
 #: aleksis/core/models.py:244 aleksis/core/models.py:724
 #: aleksis/core/models.py:748 aleksis/core/models.py:843
-#: aleksis/core/models.py:1104
+#: aleksis/core/models.py:1112
 msgid "Description"
 msgstr ""
 
@@ -503,7 +503,7 @@ msgstr ""
 msgid "Can view statistics about group."
 msgstr ""
 
-#: aleksis/core/models.py:509 aleksis/core/models.py:1432
+#: aleksis/core/models.py:509 aleksis/core/models.py:1440
 msgid "Long name"
 msgstr ""
 
@@ -530,7 +530,7 @@ msgid "Additional fields"
 msgstr ""
 
 #: aleksis/core/models.py:723 aleksis/core/models.py:747
-#: aleksis/core/models.py:842 aleksis/core/models.py:1262
+#: aleksis/core/models.py:842 aleksis/core/models.py:1270
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr ""
@@ -560,7 +560,7 @@ msgid "Link"
 msgstr ""
 
 #: aleksis/core/models.py:752 aleksis/core/models.py:1079
-#: aleksis/core/models.py:1392
+#: aleksis/core/models.py:1400
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr ""
@@ -743,205 +743,205 @@ msgstr ""
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1103
+#: aleksis/core/models.py:1111
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1110 aleksis/core/templates/core/group/full.html:50
+#: aleksis/core/models.py:1118 aleksis/core/templates/core/group/full.html:50
 msgid "Group type"
 msgstr ""
 
-#: aleksis/core/models.py:1111
+#: aleksis/core/models.py:1119
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 msgid "Group types"
 msgstr ""
 
-#: aleksis/core/models.py:1124
+#: aleksis/core/models.py:1132
 msgid "Can view system status"
 msgstr ""
 
-#: aleksis/core/models.py:1125
+#: aleksis/core/models.py:1133
 msgid "Can manage data"
 msgstr ""
 
-#: aleksis/core/models.py:1126
+#: aleksis/core/models.py:1134
 msgid "Can impersonate"
 msgstr ""
 
-#: aleksis/core/models.py:1127
+#: aleksis/core/models.py:1135
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1128
+#: aleksis/core/models.py:1136
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1129
+#: aleksis/core/models.py:1137
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1130
+#: aleksis/core/models.py:1138
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1131
+#: aleksis/core/models.py:1139
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1132
+#: aleksis/core/models.py:1140
 msgid "Can invite persons"
 msgstr ""
 
-#: aleksis/core/models.py:1168
+#: aleksis/core/models.py:1176
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1176
+#: aleksis/core/models.py:1184
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1177
+#: aleksis/core/models.py:1185
 msgid "Notification sent"
 msgstr ""
 
-#: aleksis/core/models.py:1190
+#: aleksis/core/models.py:1198
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1191
+#: aleksis/core/models.py:1199
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1193
+#: aleksis/core/models.py:1201
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1194
+#: aleksis/core/models.py:1202
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1201
+#: aleksis/core/models.py:1209
 msgid "E-Mail address"
 msgstr ""
 
-#: aleksis/core/models.py:1233
+#: aleksis/core/models.py:1241
 msgid "Owner"
 msgstr ""
 
-#: aleksis/core/models.py:1237
+#: aleksis/core/models.py:1245
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1240
+#: aleksis/core/models.py:1248
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1243
+#: aleksis/core/models.py:1251
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1250
+#: aleksis/core/models.py:1258
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1251
+#: aleksis/core/models.py:1259
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1256
+#: aleksis/core/models.py:1264
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1259
+#: aleksis/core/models.py:1267
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1263
+#: aleksis/core/models.py:1271
 msgid "Back URL"
 msgstr ""
 
-#: aleksis/core/models.py:1264
+#: aleksis/core/models.py:1272
 msgid "Progress title"
 msgstr ""
 
-#: aleksis/core/models.py:1265
+#: aleksis/core/models.py:1273
 msgid "Error message"
 msgstr ""
 
-#: aleksis/core/models.py:1266
+#: aleksis/core/models.py:1274
 msgid "Success message"
 msgstr ""
 
-#: aleksis/core/models.py:1267
+#: aleksis/core/models.py:1275
 msgid "Redirect on success URL"
 msgstr ""
 
-#: aleksis/core/models.py:1269
+#: aleksis/core/models.py:1277
 msgid "Additional button title"
 msgstr ""
 
-#: aleksis/core/models.py:1271
+#: aleksis/core/models.py:1279
 msgid "Additional button URL"
 msgstr ""
 
-#: aleksis/core/models.py:1273
+#: aleksis/core/models.py:1281
 msgid "Additional button icon"
 msgstr ""
 
-#: aleksis/core/models.py:1275
+#: aleksis/core/models.py:1283
 msgid "Result fetched"
 msgstr ""
 
-#: aleksis/core/models.py:1300
+#: aleksis/core/models.py:1308
 msgid "Background task completed successfully"
 msgstr ""
 
-#: aleksis/core/models.py:1301
+#: aleksis/core/models.py:1309
 msgid "The background task '{}' has been completed successfully."
 msgstr ""
 
-#: aleksis/core/models.py:1307
+#: aleksis/core/models.py:1315
 msgid "Background task failed"
 msgstr ""
 
-#: aleksis/core/models.py:1308
+#: aleksis/core/models.py:1316
 msgid "The background task '{}' has failed."
 msgstr ""
 
-#: aleksis/core/models.py:1317
+#: aleksis/core/models.py:1325
 msgid "Background task"
 msgstr ""
 
-#: aleksis/core/models.py:1331
+#: aleksis/core/models.py:1339
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1332
+#: aleksis/core/models.py:1340
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1348
+#: aleksis/core/models.py:1356
 msgid "Additional attributes"
 msgstr ""
 
-#: aleksis/core/models.py:1386
+#: aleksis/core/models.py:1394
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1396
+#: aleksis/core/models.py:1404
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
-#: aleksis/core/models.py:1441
+#: aleksis/core/models.py:1449
 msgid "Can view room timetable"
 msgstr ""
 
-#: aleksis/core/models.py:1443
+#: aleksis/core/models.py:1451
 msgid "Room"
 msgstr ""
 
-#: aleksis/core/models.py:1444
+#: aleksis/core/models.py:1452
 msgid "Rooms"
 msgstr ""
 
@@ -1153,15 +1153,15 @@ msgstr ""
 msgid "Country for phone number parsing"
 msgstr ""
 
-#: aleksis/core/settings.py:539
+#: aleksis/core/settings.py:544
 msgid "English"
 msgstr ""
 
-#: aleksis/core/settings.py:540
+#: aleksis/core/settings.py:545
 msgid "German"
 msgstr ""
 
-#: aleksis/core/settings.py:541
+#: aleksis/core/settings.py:546
 msgid "Ukrainian"
 msgstr ""
 
@@ -2979,52 +2979,52 @@ msgstr ""
 msgid "The dashboard widget has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1030
+#: aleksis/core/views.py:1031
 msgid "Your dashboard configuration has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1032
+#: aleksis/core/views.py:1033
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1103
+#: aleksis/core/views.py:1104
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr ""
 
-#: aleksis/core/views.py:1200
+#: aleksis/core/views.py:1201
 msgid "We have successfully assigned the permissions."
 msgstr ""
 
-#: aleksis/core/views.py:1210
+#: aleksis/core/views.py:1211
 msgid "The global user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1220
+#: aleksis/core/views.py:1221
 msgid "The global group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1230
+#: aleksis/core/views.py:1231
 msgid "The object user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1240
+#: aleksis/core/views.py:1241
 msgid "The object group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1349
+#: aleksis/core/views.py:1350
 msgid "The third-party account could not be disconnected because it is the only login method available."
 msgstr ""
 
-#: aleksis/core/views.py:1356
+#: aleksis/core/views.py:1357
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1432
+#: aleksis/core/views.py:1433
 msgid "Person was invited successfully and an email with further instructions has been send to them."
 msgstr ""
 
-#: aleksis/core/views.py:1443
+#: aleksis/core/views.py:1444
 msgid "Person was already invited."
 msgstr ""
 
diff --git a/aleksis/core/locale/ru/LC_MESSAGES/django.po b/aleksis/core/locale/ru/LC_MESSAGES/django.po
index 90703e6c4415480c873dbdaf505af0622a2ea982..9abedfffc09e36b826d9b9388c3eea7450149f37 100644
--- a/aleksis/core/locale/ru/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/ru/LC_MESSAGES/django.po
@@ -8,14 +8,17 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2023-01-22 20:49+0100\n"
-"PO-Revision-Date: 2022-07-05 12:54+0000\n"
+"PO-Revision-Date: 2023-02-08 22:40+0000\n"
 "Last-Translator: Serhii Horichenko <m@sgg.im>\n"
-"Language-Team: Russian <https://translate.edugit.org/projects/aleksis/aleksis-core/ru/>\n"
+"Language-Team: Russian <https://translate.edugit.org/projects/aleksis/"
+"aleksis-core/ru/>\n"
 "Language: ru\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
+"%100>=11 && n%100<=14)? 2 : 3);\n"
 "X-Generator: Weblate 4.12.1\n"
 
 #: aleksis/core/apps.py:155
@@ -184,7 +187,8 @@ msgid "Write your announcement:"
 msgstr "Напишите свое объявление:"
 
 #: aleksis/core/forms.py:276
-msgid "You are not allowed to create announcements which are only valid in the past."
+msgid ""
+"You are not allowed to create announcements which are only valid in the past."
 msgstr "Объявления для прошлого Вам создавать не разрешено."
 
 #: aleksis/core/forms.py:280
@@ -232,14 +236,13 @@ msgid "Grant the permission for all objects"
 msgstr "Предоставить доступ ко всем объектам"
 
 #: aleksis/core/forms.py:494
-msgid "You must select at least one group or person which should get the permission."
+msgid ""
+"You must select at least one group or person which should get the permission."
 msgstr "Вам нужно выбрать хотя бы одну группу или физлицо, кто получит доступ."
 
 #: aleksis/core/forms.py:499
-#, fuzzy
-#| msgid "You must grant the permission to all objects and/or to some objects."
 msgid "You must grant the permission to all objects or to specific objects."
-msgstr "Вы должны предоставить доступ ко всем и/или к некоторым объектам."
+msgstr "Вы должны предоставить доступ ко всем или к конкретным объектам."
 
 #: aleksis/core/forms.py:586
 msgid "Address data"
@@ -400,6 +403,7 @@ msgid "other"
 msgstr "другой"
 
 #: aleksis/core/models.py:189 aleksis/core/models.py:1345
+#: aleksis/core/models.py:1353
 msgid "Linked user"
 msgstr "Связанный пользователь"
 
@@ -408,7 +412,7 @@ msgid "Additional name(s)"
 msgstr "Дополнительные имена"
 
 #: aleksis/core/models.py:199 aleksis/core/models.py:511
-#: aleksis/core/models.py:1431
+#: aleksis/core/models.py:1431 aleksis/core/models.py:1439
 msgid "Short name"
 msgstr "Короткое имя"
 
@@ -449,8 +453,11 @@ msgid "Sex"
 msgstr "Пол"
 
 #: aleksis/core/models.py:221 aleksis/core/models.py:550
-msgid "This is an official photo, used for official documents and for internal use cases."
-msgstr "Это официальное фото, которое используется для документов и внутренних нужд."
+msgid ""
+"This is an official photo, used for official documents and for internal use "
+"cases."
+msgstr ""
+"Это официальное фото, которое используется для документов и внутренних нужд."
 
 #: aleksis/core/models.py:226 aleksis/core/models.py:554
 msgid "Display picture / Avatar"
@@ -470,7 +477,7 @@ msgstr "Основная группа"
 
 #: aleksis/core/models.py:244 aleksis/core/models.py:724
 #: aleksis/core/models.py:748 aleksis/core/models.py:843
-#: aleksis/core/models.py:1104
+#: aleksis/core/models.py:1104 aleksis/core/models.py:1112
 msgid "Description"
 msgstr "Описание"
 
@@ -507,6 +514,7 @@ msgid "Can view statistics about group."
 msgstr "Может видеть статистику группы."
 
 #: aleksis/core/models.py:509 aleksis/core/models.py:1432
+#: aleksis/core/models.py:1440
 msgid "Long name"
 msgstr "Длинное имя"
 
@@ -535,6 +543,7 @@ msgstr "Дополнительные поля"
 #: aleksis/core/models.py:723 aleksis/core/models.py:747
 #: aleksis/core/models.py:842 aleksis/core/models.py:1262
 #: aleksis/core/templates/core/announcement/list.html:18
+#: aleksis/core/models.py:1270
 msgid "Title"
 msgstr "Название"
 
@@ -565,6 +574,7 @@ msgstr "Ссылка"
 #: aleksis/core/models.py:752 aleksis/core/models.py:1079
 #: aleksis/core/models.py:1392
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
+#: aleksis/core/models.py:1400
 msgid "Icon"
 msgstr "Иконка"
 
@@ -746,227 +756,213 @@ msgstr "Пункт пользовательского меню"
 msgid "Custom menu items"
 msgstr "Пункты пользовательского меню"
 
-#: aleksis/core/models.py:1103
+#: aleksis/core/models.py:1103 aleksis/core/models.py:1111
 msgid "Title of type"
 msgstr "Название типа"
 
 #: aleksis/core/models.py:1110 aleksis/core/templates/core/group/full.html:50
+#: aleksis/core/models.py:1118
 msgid "Group type"
 msgstr "Тип группы"
 
 #: aleksis/core/models.py:1111
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
+#: aleksis/core/models.py:1119
 msgid "Group types"
 msgstr "Типы групп"
 
-#: aleksis/core/models.py:1124
+#: aleksis/core/models.py:1124 aleksis/core/models.py:1132
 msgid "Can view system status"
 msgstr "Может просматривать состояние системы"
 
-#: aleksis/core/models.py:1125
+#: aleksis/core/models.py:1125 aleksis/core/models.py:1133
 msgid "Can manage data"
 msgstr "Может управлять данными"
 
-#: aleksis/core/models.py:1126
+#: aleksis/core/models.py:1126 aleksis/core/models.py:1134
 msgid "Can impersonate"
 msgstr "Может маскироваться"
 
-#: aleksis/core/models.py:1127
+#: aleksis/core/models.py:1127 aleksis/core/models.py:1135
 msgid "Can use search"
 msgstr "Может использовать поиск"
 
-#: aleksis/core/models.py:1128
+#: aleksis/core/models.py:1128 aleksis/core/models.py:1136
 msgid "Can change site preferences"
 msgstr "Может менять свойства сайта"
 
-#: aleksis/core/models.py:1129
+#: aleksis/core/models.py:1129 aleksis/core/models.py:1137
 msgid "Can change person preferences"
 msgstr "Может менять персональные свойства"
 
-#: aleksis/core/models.py:1130
+#: aleksis/core/models.py:1130 aleksis/core/models.py:1138
 msgid "Can change group preferences"
 msgstr "Может менять свойства группы"
 
-#: aleksis/core/models.py:1131
+#: aleksis/core/models.py:1131 aleksis/core/models.py:1139
 msgid "Can test PDF generation"
 msgstr "Может генерировать тестовые PDF"
 
-#: aleksis/core/models.py:1132
+#: aleksis/core/models.py:1132 aleksis/core/models.py:1140
 msgid "Can invite persons"
 msgstr "Может приглашать других"
 
-#: aleksis/core/models.py:1168
+#: aleksis/core/models.py:1168 aleksis/core/models.py:1176
 msgid "Related data check task"
 msgstr "Задание проверки связанных данных"
 
-#: aleksis/core/models.py:1176
+#: aleksis/core/models.py:1176 aleksis/core/models.py:1184
 msgid "Issue solved"
 msgstr "Проблема решена"
 
-#: aleksis/core/models.py:1177
+#: aleksis/core/models.py:1177 aleksis/core/models.py:1185
 msgid "Notification sent"
 msgstr "Уведомление отправлено"
 
-#: aleksis/core/models.py:1190
+#: aleksis/core/models.py:1190 aleksis/core/models.py:1198
 msgid "Data check result"
 msgstr "Результат проверки данных"
 
-#: aleksis/core/models.py:1191
+#: aleksis/core/models.py:1191 aleksis/core/models.py:1199
 msgid "Data check results"
 msgstr "Результаты проверки данных"
 
-#: aleksis/core/models.py:1193
+#: aleksis/core/models.py:1193 aleksis/core/models.py:1201
 msgid "Can run data checks"
 msgstr "Может запускать проверки данных"
 
-#: aleksis/core/models.py:1194
+#: aleksis/core/models.py:1194 aleksis/core/models.py:1202
 msgid "Can solve data check problems"
 msgstr "Может решать проблемы проверки данных"
 
-#: aleksis/core/models.py:1201
+#: aleksis/core/models.py:1201 aleksis/core/models.py:1209
 msgid "E-Mail address"
 msgstr "Адрес эл.почты"
 
-#: aleksis/core/models.py:1233
+#: aleksis/core/models.py:1233 aleksis/core/models.py:1241
 msgid "Owner"
 msgstr "Владелец"
 
-#: aleksis/core/models.py:1237
+#: aleksis/core/models.py:1237 aleksis/core/models.py:1245
 msgid "File expires at"
 msgstr "Файл действителен до"
 
-#: aleksis/core/models.py:1240
+#: aleksis/core/models.py:1240 aleksis/core/models.py:1248
 msgid "Generated HTML file"
 msgstr "Сгенерированный файл HTML"
 
-#: aleksis/core/models.py:1243
+#: aleksis/core/models.py:1243 aleksis/core/models.py:1251
 msgid "Generated PDF file"
 msgstr "Сгенерированный файл PDF"
 
-#: aleksis/core/models.py:1250
+#: aleksis/core/models.py:1250 aleksis/core/models.py:1258
 msgid "PDF file"
 msgstr "Файл PDF"
 
-#: aleksis/core/models.py:1251
+#: aleksis/core/models.py:1251 aleksis/core/models.py:1259
 msgid "PDF files"
 msgstr "Файлы PDF"
 
-#: aleksis/core/models.py:1256
+#: aleksis/core/models.py:1256 aleksis/core/models.py:1264
 msgid "Task result"
 msgstr "Результат задания"
 
-#: aleksis/core/models.py:1259
+#: aleksis/core/models.py:1259 aleksis/core/models.py:1267
 msgid "Task user"
 msgstr "Пользователь задания"
 
 #: aleksis/core/models.py:1263
-#, fuzzy
-#| msgid "Back"
 msgid "Back URL"
-msgstr "Назад"
+msgstr "URL для возврата"
 
 #: aleksis/core/models.py:1264
-#, fuzzy
-#| msgid "Progress: Generate PDF file"
 msgid "Progress title"
-msgstr "В процессе: Генерирование файла PDF"
+msgstr "Название процесса"
 
 #: aleksis/core/models.py:1265
 msgid "Error message"
-msgstr ""
+msgstr "Сообщение об ошибке"
 
 #: aleksis/core/models.py:1266
-#, fuzzy
-#| msgid "Success!"
 msgid "Success message"
-msgstr "Успех!"
+msgstr "Сообщение об успехе"
 
 #: aleksis/core/models.py:1267
-#, fuzzy
-#| msgid "Redirect URIs"
 msgid "Redirect on success URL"
-msgstr "Перенаправление URI-адресов"
+msgstr "URL для перенаправления в случае успеха"
 
 #: aleksis/core/models.py:1269
-#, fuzzy
-#| msgid "Additional attributes"
 msgid "Additional button title"
-msgstr "Дополнительные атрибуты"
+msgstr "Название дополнительной кнопки"
 
 #: aleksis/core/models.py:1271
-#, fuzzy
-#| msgid "Additional data"
 msgid "Additional button URL"
-msgstr "Дополнительные данные"
+msgstr "URL дополнительной кнопки"
 
 #: aleksis/core/models.py:1273
-#, fuzzy
-#| msgid "Additional attributes"
 msgid "Additional button icon"
-msgstr "Дополнительные атрибуты"
+msgstr "Иконка дополнительной кнопки"
 
 #: aleksis/core/models.py:1275
 msgid "Result fetched"
-msgstr ""
+msgstr "Полученный результат"
 
 #: aleksis/core/models.py:1300
-#, fuzzy
-#| msgid "ICal feed deleted successfully"
 msgid "Background task completed successfully"
-msgstr "Лента iCal успешно удалена"
+msgstr "Фоновое задание успешно завершено"
 
 #: aleksis/core/models.py:1301
-#, fuzzy
-#| msgid "The PDF file has been generated successfully."
 msgid "The background task '{}' has been completed successfully."
-msgstr "Файл PDF успешно создан."
+msgstr "Фоновое задание \"{}\" успешно завершено."
 
 #: aleksis/core/models.py:1307
 msgid "Background task failed"
-msgstr ""
+msgstr "Ошибка фонового задания"
 
 #: aleksis/core/models.py:1308
 msgid "The background task '{}' has failed."
-msgstr ""
+msgstr "Ошибка фонового задания \"{}\"."
 
 #: aleksis/core/models.py:1317
 msgid "Background task"
-msgstr ""
+msgstr "Фоновое задание"
 
-#: aleksis/core/models.py:1331
+#: aleksis/core/models.py:1331 aleksis/core/models.py:1339
 msgid "Task user assignment"
 msgstr "Назначение пользователя задания"
 
-#: aleksis/core/models.py:1332
+#: aleksis/core/models.py:1332 aleksis/core/models.py:1340
 msgid "Task user assignments"
 msgstr "Назначения пользователей задания"
 
-#: aleksis/core/models.py:1348
+#: aleksis/core/models.py:1348 aleksis/core/models.py:1356
 msgid "Additional attributes"
 msgstr "Дополнительные атрибуты"
 
-#: aleksis/core/models.py:1386
+#: aleksis/core/models.py:1386 aleksis/core/models.py:1394
 msgid "Allowed scopes that clients can request"
 msgstr "Разрешённые пределы действия, которые могут запрашивать клиенты"
 
-#: aleksis/core/models.py:1396
-msgid "This image will be shown as icon in the authorization flow. It should be squared."
-msgstr "Это изображение будет использоваться в качестве значка во время авторизации. Должно быть квадратным."
+#: aleksis/core/models.py:1396 aleksis/core/models.py:1404
+msgid ""
+"This image will be shown as icon in the authorization flow. It should be "
+"squared."
+msgstr ""
+"Это изображение будет использоваться в качестве значка во время авторизации. "
+"Должно быть квадратным."
 
 #: aleksis/core/models.py:1441
-#, fuzzy
-#| msgid "Can view avatar image"
 msgid "Can view room timetable"
-msgstr "Может видеть аватар"
+msgstr "Может просмативать расписание комнаты"
 
 #: aleksis/core/models.py:1443
 msgid "Room"
-msgstr ""
+msgstr "Комната"
 
 #: aleksis/core/models.py:1444
 msgid "Rooms"
-msgstr ""
+msgstr "Комнаты"
 
 #: aleksis/core/preferences.py:25
 msgid "General"
@@ -1057,14 +1053,12 @@ msgid "Channels to use for notifications"
 msgstr "Каналы для уведомлений"
 
 #: aleksis/core/preferences.py:208
-#, fuzzy
-#| msgid "Selected persons"
 msgid "Select Design"
-msgstr "Выбранные физлица"
+msgstr "Выберите дизайн"
 
 #: aleksis/core/preferences.py:211
 msgid "Light mode"
-msgstr ""
+msgstr "Светлый режим"
 
 #: aleksis/core/preferences.py:224
 msgid "Regular expression to match primary group, e.g. '^Class .*'"
@@ -1079,8 +1073,11 @@ msgid "Automatically create new persons for new users"
 msgstr "Новые физлица для новых пользователей создавать автоматически"
 
 #: aleksis/core/preferences.py:256
-msgid "Automatically link existing persons to new users by their e-mail address"
-msgstr "Связывать существующие физлица с новыми пользователями автоматически по эл.адресам"
+msgid ""
+"Automatically link existing persons to new users by their e-mail address"
+msgstr ""
+"Связывать существующие физлица с новыми пользователями автоматически по эл."
+"адресам"
 
 #: aleksis/core/preferences.py:267
 msgid "Display name of the school"
@@ -1088,7 +1085,9 @@ msgstr "Название школы / уч.заведения для отобр
 
 #: aleksis/core/preferences.py:278
 msgid "Official name of the school, e.g. as given by supervisory authority"
-msgstr "Официальное название школы / уч.заведения, напр., как в регистрационных документах"
+msgstr ""
+"Официальное название школы / уч.заведения, напр., как в регистрационных "
+"документах"
 
 #: aleksis/core/preferences.py:286
 msgid "Allow users to change their passwords"
@@ -1147,8 +1146,11 @@ msgid "Fields on person model which are editable by themselves."
 msgstr "Поля с описанием физлица, которые можно редактировать самостоятельно."
 
 #: aleksis/core/preferences.py:424
-msgid "Editable fields on person model which should trigger a notification on change"
-msgstr "Изменяемые поля описания физлица, при изменении которых должен срабатывать триггер для уведомления"
+msgid ""
+"Editable fields on person model which should trigger a notification on change"
+msgstr ""
+"Изменяемые поля описания физлица, при изменении которых должен срабатывать "
+"триггер для уведомления"
 
 #: aleksis/core/preferences.py:438
 msgid "Contact for notification if a person changes their data"
@@ -1178,15 +1180,15 @@ msgstr "Автоматически обновлять информпанель 
 msgid "Country for phone number parsing"
 msgstr "Страна для парсинга номера телефона"
 
-#: aleksis/core/settings.py:539
+#: aleksis/core/settings.py:539 aleksis/core/settings.py:544
 msgid "English"
 msgstr "Английский"
 
-#: aleksis/core/settings.py:540
+#: aleksis/core/settings.py:540 aleksis/core/settings.py:545
 msgid "German"
 msgstr "Немецкий"
 
-#: aleksis/core/settings.py:541
+#: aleksis/core/settings.py:541 aleksis/core/settings.py:546
 msgid "Ukrainian"
 msgstr "Украинский"
 
@@ -1229,12 +1231,14 @@ msgstr ""
 #: aleksis/core/templates/403.html:19 aleksis/core/templates/404.html:16
 msgid ""
 "\n"
-"            If you think this is an error in AlekSIS, please contact your site\n"
+"            If you think this is an error in AlekSIS, please contact your "
+"site\n"
 "            administrators:\n"
 "          "
 msgstr ""
 "\n"
-"            Если Вы думаете, что это ошибка AlekSIS, обратитесь, пожалуйста,\n"
+"            Если Вы думаете, что это ошибка AlekSIS, обратитесь, "
+"пожалуйста,\n"
 "            к администраторам сайта:\n"
 "          "
 
@@ -1261,12 +1265,14 @@ msgstr ""
 #: aleksis/core/templates/500.html:13
 msgid ""
 "\n"
-"            Your site administrators will automatically be notified about this\n"
+"            Your site administrators will automatically be notified about "
+"this\n"
 "            error. You can also contact them directly:\n"
 "          "
 msgstr ""
 "\n"
-"            Администраторы сайта будут уведомлены об этой ошибке автоматически.\n"
+"            Администраторы сайта будут уведомлены об этой ошибке "
+"автоматически.\n"
 "            Вы также можете обратиться к ним непосредственно:\n"
 "          "
 
@@ -1285,11 +1291,13 @@ msgstr ""
 #: aleksis/core/templates/503.html:13
 msgid ""
 "\n"
-"            This page is currently unavailable. If this error persists, contact your site administrators:\n"
+"            This page is currently unavailable. If this error persists, "
+"contact your site administrators:\n"
 "          "
 msgstr ""
 "\n"
-"            Эта страница сейчас недоступна. Если ошибка проявится ещё раз, обратитесь к администраторам сайта:\n"
+"            Эта страница сейчас недоступна. Если ошибка проявится ещё раз, "
+"обратитесь к администраторам сайта:\n"
 "          "
 
 #: aleksis/core/templates/account/account_inactive.html:5
@@ -1330,13 +1338,21 @@ msgstr "Подтвердить"
 
 #: aleksis/core/templates/account/email_confirm.html:12
 #, python-format
-msgid "Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an e-mail address for user %(user_display)s."
-msgstr "Подтвердите, пожалуйста, что <a href=\"mailto:%(email)s\">%(email)s</a> — эл.адрес пользователя %(user_display)s."
+msgid ""
+"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an e-mail "
+"address for user %(user_display)s."
+msgstr ""
+"Подтвердите, пожалуйста, что <a href=\"mailto:%(email)s\">%(email)s</a> — эл."
+"адрес пользователя %(user_display)s."
 
 #: aleksis/core/templates/account/email_confirm.html:25
 #, python-format
-msgid "This e-mail confirmation link expired or is invalid. Please <a href=\"%(email_url)s\">issue a new e-mail confirmation request</a>."
-msgstr "Эта ссылка для подтверждения эл.почты просрочена или недействительна. Сделайте, пожалуйста, <a href=\"%(email_url)s\">новый запрос</a>."
+msgid ""
+"This e-mail confirmation link expired or is invalid. Please <a href="
+"\"%(email_url)s\">issue a new e-mail confirmation request</a>."
+msgstr ""
+"Эта ссылка для подтверждения эл.почты просрочена или недействительна. "
+"Сделайте, пожалуйста, <a href=\"%(email_url)s\">новый запрос</a>."
 
 #: aleksis/core/templates/account/password_change.html:5
 #: aleksis/core/templates/account/password_change.html:6
@@ -1370,7 +1386,8 @@ msgstr "Изменение пароля отключено."
 msgid ""
 "\n"
 "            Users are not allowed to edit their own passwords. If you think\n"
-"            this is an error please contact one of your site administrators.\n"
+"            this is an error please contact one of your site "
+"administrators.\n"
 "          "
 msgstr ""
 "\n"
@@ -1389,8 +1406,12 @@ msgid "Reset password"
 msgstr "Сбросить пароль"
 
 #: aleksis/core/templates/account/password_reset.html:17
-msgid "Forgotten your password? Enter your e-mail address below, and we'll send you an e-mail allowing you to reset it."
-msgstr "Забыли пароль? Укажите ниже свою эл.почту и мы отправим Вам письмо для сброса пароля."
+msgid ""
+"Forgotten your password? Enter your e-mail address below, and we'll send you "
+"an e-mail allowing you to reset it."
+msgstr ""
+"Забыли пароль? Укажите ниже свою эл.почту и мы отправим Вам письмо для "
+"сброса пароля."
 
 #: aleksis/core/templates/account/password_reset.html:30
 msgid ""
@@ -1413,8 +1434,10 @@ msgid ""
 "          "
 msgstr ""
 "\n"
-"            Мы отправили Вам эл.письмо. Если Вы не получите его на протяжении\n"
-"            нескольких минут, обратитесь, пожалуйста, к администраторам сайта.\n"
+"            Мы отправили Вам эл.письмо. Если Вы не получите его на "
+"протяжении\n"
+"            нескольких минут, обратитесь, пожалуйста, к администраторам "
+"сайта.\n"
 "          "
 
 #: aleksis/core/templates/account/password_reset_from_key.html:15
@@ -1425,13 +1448,16 @@ msgstr "Неправильный токен"
 #, python-format
 msgid ""
 "\n"
-"              The password reset link was invalid, possibly because it has already been used. Please request a <a href=\"%(passwd_reset_url)s\"\n"
+"              The password reset link was invalid, possibly because it has "
+"already been used. Please request a <a href=\"%(passwd_reset_url)s\"\n"
 "              class=\"blue-text text-lighten-2\">new password reset</a>.\n"
 "            "
 msgstr ""
 "\n"
-"              Ссылка на сброс пароля недействительна или, возможно, уже использована. Сделайте, пожалуйста, <a href=\"%(passwd_reset_url)s\"\n"
-"              class=\"blue-text text-lighten-2\">новый запрос на сброс пароля</a>.\n"
+"              Ссылка на сброс пароля недействительна или, возможно, уже "
+"использована. Сделайте, пожалуйста, <a href=\"%(passwd_reset_url)s\"\n"
+"              class=\"blue-text text-lighten-2\">новый запрос на сброс "
+"пароля</a>.\n"
 "            "
 
 #: aleksis/core/templates/account/password_reset_from_key.html:25
@@ -1480,8 +1506,11 @@ msgstr "Регистрация"
 
 #: aleksis/core/templates/account/signup.html:12
 #, python-format
-msgid "Already have an account? Then please <a href=\"%(login_url)s\">sign in</a>."
-msgstr "У Вас уже есть учётная запись? В таком случае можете <a href=\"%(login_url)s\">войти</a>."
+msgid ""
+"Already have an account? Then please <a href=\"%(login_url)s\">sign in</a>."
+msgstr ""
+"У Вас уже есть учётная запись? В таком случае можете <a href=\"%(login_url)s"
+"\">войти</a>."
 
 #: aleksis/core/templates/account/signup.html:22
 #: aleksis/core/templates/socialaccount/signup.html:23
@@ -1525,13 +1554,17 @@ msgstr "Подтвердите свой адрес эл.почты!"
 #: aleksis/core/templates/account/verification_sent.html:16
 msgid ""
 "\n"
-"            This part of the site requires us to verify that you are who you claim to be.\n"
-"            For this purpose, we require that you verify ownership of your e-mail address.\n"
+"            This part of the site requires us to verify that you are who you "
+"claim to be.\n"
+"            For this purpose, we require that you verify ownership of your e-"
+"mail address.\n"
 "          "
 msgstr ""
 "\n"
-"            Для этой части сайта необходимо пройти проверку, что Вы - именно Вы.\n"
-"            Для этого нам нужно проверить как минимум, что адрес эл.почты принадлежит именно Вам\n"
+"            Для этой части сайта необходимо пройти проверку, что Вы - именно "
+"Ð’Ñ‹.\n"
+"            Для этого нам нужно проверить как минимум, что адрес эл.почты "
+"принадлежит именно Вам\n"
 "          "
 
 #: aleksis/core/templates/account/verification_sent.html:22
@@ -1545,7 +1578,8 @@ msgstr ""
 "\n"
 "            Мы отправили Вам для проверки эл.письмо.\n"
 "            Пожалуйста, перейдите по указанной ссылке. Если Вы не получите\n"
-"            письмо в ближайшие несколько минут, обратитесь, пожалуйста, к нам.\n"
+"            письмо в ближайшие несколько минут, обратитесь, пожалуйста, к "
+"нам.\n"
 "          "
 
 #: aleksis/core/templates/core/additional_field/edit.html:6
@@ -1720,29 +1754,39 @@ msgstr "Редактировать информпанель"
 #: aleksis/core/templates/core/edit_dashboard.html:24
 msgid ""
 "\n"
-"          On this page you can arrange your personal dashboard. You can drag any items from \"Available widgets\" to \"Your\n"
-"          Dashboard\" or change the order by moving the widgets. After you have finished, please don't forget to click on\n"
+"          On this page you can arrange your personal dashboard. You can drag "
+"any items from \"Available widgets\" to \"Your\n"
+"          Dashboard\" or change the order by moving the widgets. After you "
+"have finished, please don't forget to click on\n"
 "          \"Save\".\n"
 "        "
 msgstr ""
 "\n"
-"          На этой странице Вы можете упорядочить свою информпанель. Перетаскивайте любые элементы из \"Доступных виджетов\"\n"
-"          в \"Свою информпанель\" или меняйте порядок, перетягивая виджеты. После завершения не забудьте нажать\n"
+"          На этой странице Вы можете упорядочить свою информпанель. "
+"Перетаскивайте любые элементы из \"Доступных виджетов\"\n"
+"          в \"Свою информпанель\" или меняйте порядок, перетягивая виджеты. "
+"После завершения не забудьте нажать\n"
 "          \"Сохранить\".\n"
 "        "
 
 #: aleksis/core/templates/core/edit_dashboard.html:30
 msgid ""
 "\n"
-"          On this page you can arrange the default dashboard which is shown when a user doesn't arrange his own\n"
-"          dashboard. You can drag any items from \"Available widgets\" to \"Default Dashboard\" or change the order\n"
-"          by moving the widgets. After you have finished, please don't forget to click on \"Save\".\n"
+"          On this page you can arrange the default dashboard which is shown "
+"when a user doesn't arrange his own\n"
+"          dashboard. You can drag any items from \"Available widgets\" to "
+"\"Default Dashboard\" or change the order\n"
+"          by moving the widgets. After you have finished, please don't "
+"forget to click on \"Save\".\n"
 "        "
 msgstr ""
 "\n"
-"          На этой странице Вы можете упорядочить типовую/стандартную информпанель, которая отображается, если пользователь\n"
-"          не настроил свою. Перетягивайте любые элементы из \"Доступных виджетов\" в \"Типовую информпанель\" или меняйте \n"
-"          порядок, перетягивая виджеты. После заврешения не забудьте нажать \"Сохранить\".\n"
+"          На этой странице Вы можете упорядочить типовую/стандартную "
+"информпанель, которая отображается, если пользователь\n"
+"          не настроил свою. Перетягивайте любые элементы из \"Доступных "
+"виджетов\" в \"Типовую информпанель\" или меняйте \n"
+"          порядок, перетягивая виджеты. После заврешения не забудьте нажать "
+"\"Сохранить\".\n"
 "        "
 
 #: aleksis/core/templates/core/edit_dashboard.html:48
@@ -1765,13 +1809,16 @@ msgstr "Определить дочерние группы к группе"
 #: aleksis/core/templates/core/group/child_groups.html:18
 msgid ""
 "\n"
-"          You can use this to assign child groups to groups. Please use the filters below to select groups you want to\n"
+"          You can use this to assign child groups to groups. Please use the "
+"filters below to select groups you want to\n"
 "          change and click \"Next\".\n"
 "        "
 msgstr ""
 "\n"
-"          Вы можете воспользоваться этим для привязки дочерних групп к основным. Для выбора групп,\n"
-"          которые хотите изменить, используйте фильтры, расположенные ниже и нажмите \"Далее\".\n"
+"          Вы можете воспользоваться этим для привязки дочерних групп к "
+"основным. Для выбора групп,\n"
+"          которые хотите изменить, используйте фильтры, расположенные ниже и "
+"нажмите \"Далее\".\n"
 "        "
 
 #: aleksis/core/templates/core/group/child_groups.html:31
@@ -1797,7 +1844,8 @@ msgid ""
 "          "
 msgstr ""
 "\n"
-"            Выберите, пожалуйста, несколько групп в порядке, по какому привязывать.\n"
+"            Выберите, пожалуйста, несколько групп в порядке, по какому "
+"привязывать.\n"
 "          "
 
 #: aleksis/core/templates/core/group/child_groups.html:72
@@ -1811,14 +1859,18 @@ msgstr "Пожалуйста, будьте аккуратны!"
 #: aleksis/core/templates/core/group/child_groups.html:79
 msgid ""
 "\n"
-"            If you click \"Back\" or \"Next\" the current group assignments are not saved.\n"
-"            If you click \"Save\", you will overwrite all existing child group relations for this group with what you\n"
+"            If you click \"Back\" or \"Next\" the current group assignments "
+"are not saved.\n"
+"            If you click \"Save\", you will overwrite all existing child "
+"group relations for this group with what you\n"
 "            selected on this page.\n"
 "          "
 msgstr ""
 "\n"
-"            Если нажмёте \"Назад\" или \"Далее\" привязки этой группы не сохранятся.\n"
-"            Если нажмёте \"Сохранить\", все существующие связи дочерней группы с этой группой будут заменены на\n"
+"            Если нажмёте \"Назад\" или \"Далее\" привязки этой группы не "
+"сохранятся.\n"
+"            Если нажмёте \"Сохранить\", все существующие связи дочерней "
+"группы с этой группой будут заменены на\n"
 "            выбранные на этой странице.\n"
 "          "
 
@@ -1916,12 +1968,14 @@ msgstr "Домой"
 #: aleksis/core/templates/core/index.html:34
 msgid ""
 "\n"
-"        You didn't customise your dashboard so that you see the system default. Please click on \"Edit dashboard\" to\n"
+"        You didn't customise your dashboard so that you see the system "
+"default. Please click on \"Edit dashboard\" to\n"
 "        customise your personal dashboard.\n"
 "      "
 msgstr ""
 "\n"
-"        Вы ещё не настроили свою информпанель, так что пока наблюдаете типовую по-умолчанию. Для настройки \n"
+"        Вы ещё не настроили свою информпанель, так что пока наблюдаете "
+"типовую по-умолчанию. Для настройки \n"
 "         своей информпанели клацните \"Редактировать информпанель\".\n"
 "      "
 
@@ -1965,11 +2019,13 @@ msgstr "Включен режим обслуживания"
 #: aleksis/core/templates/core/pages/system_status.html:24
 msgid ""
 "\n"
-"                Only admin and visitors from internal IPs can access the site.\n"
+"                Only admin and visitors from internal IPs can access the "
+"site.\n"
 "              "
 msgstr ""
 "\n"
-"                Доступ к сайту имеют только администратор и пользователи с внутренними IP-адресами.\n"
+"                Доступ к сайту имеют только администратор и пользователи с "
+"внутренними IP-адресами.\n"
 "              "
 
 #: aleksis/core/templates/core/pages/system_status.html:36
@@ -1987,11 +2043,13 @@ msgstr "Режим отладки включен"
 #: aleksis/core/templates/core/pages/system_status.html:49
 msgid ""
 "\n"
-"                The web server throws back debug information on errors. Do not use in production!\n"
+"                The web server throws back debug information on errors. Do "
+"not use in production!\n"
 "              "
 msgstr ""
 "\n"
-"                Веб-сервер во время ошибок пишет отладочную информацию. Не используйте в продакшене!\n"
+"                Веб-сервер во время ошибок пишет отладочную информацию. Не "
+"используйте в продакшене!\n"
 "              "
 
 #: aleksis/core/templates/core/pages/system_status.html:56
@@ -2001,11 +2059,13 @@ msgstr "Режим отладки отключен"
 #: aleksis/core/templates/core/pages/system_status.html:58
 msgid ""
 "\n"
-"                Debug mode is disabled. Default error pages are displayed on errors.\n"
+"                Debug mode is disabled. Default error pages are displayed on "
+"errors.\n"
 "              "
 msgstr ""
 "\n"
-"                Режим отладки отключен. В случае ошибок будут отображаться стандартные страницы об ошибках.\n"
+"                Режим отладки отключен. В случае ошибок будут отображаться "
+"стандартные страницы об ошибках.\n"
 "              "
 
 #: aleksis/core/templates/core/pages/system_status.html:71
@@ -2055,11 +2115,13 @@ msgstr "Пробное генерирование PDF"
 #: aleksis/core/templates/core/pages/test_pdf.html:14
 msgid ""
 "\n"
-"        This simple view can be used to ensure the correct function of the built-in PDF generation system.\n"
+"        This simple view can be used to ensure the correct function of the "
+"built-in PDF generation system.\n"
 "      "
 msgstr ""
 "\n"
-"        Эта простая страница может помочь проверить корректность настроек встроенной системы генерирования PDF.\n"
+"        Эта простая страница может помочь проверить корректность настроек "
+"встроенной системы генерирования PDF.\n"
 "      "
 
 #: aleksis/core/templates/core/partials/announcements.html:8
@@ -2117,9 +2179,15 @@ msgstr "Неизвестно"
 #: aleksis/core/templates/core/partials/splash_screen.html:11
 msgid ""
 "\n"
-"      This webbrowser doesn't support JavaScript, or its execution is blocked. Please use another browser to continue.\n"
+"      This webbrowser doesn't support JavaScript, or its execution is "
+"blocked. Please use another browser to continue.\n"
 "    "
 msgstr ""
+"\n"
+"      Этот веб-браузер не поддерживает JavaScript или его обработка "
+"заблокирована. Для продолжения воспользуйтесь, пожалуйста, другим "
+"браузером.\n"
+"    "
 
 #: aleksis/core/templates/core/perms/assign.html:12
 #: aleksis/core/templates/core/perms/assign.html:13
@@ -2231,8 +2299,11 @@ msgid "The invite feature is disabled."
 msgstr "Фукция приглашения выключена."
 
 #: aleksis/core/templates/invitations/disabled.html:15
-msgid "To enable it, switch on the corresponding checkbox in the authentication section of the "
-msgstr "Для активации включите соответствующий чекбокс в разделе авторизации на "
+msgid ""
+"To enable it, switch on the corresponding checkbox in the authentication "
+"section of the "
+msgstr ""
+"Для активации включите соответствующий чекбокс в разделе авторизации на "
 
 #: aleksis/core/templates/invitations/disabled.html:16
 msgid "site preferences page"
@@ -2399,26 +2470,23 @@ msgstr "Ошибка сети"
 
 #: aleksis/core/templates/offline.html:10
 msgid "Page not available offline."
-msgstr ""
+msgstr "В автономном режиме страница не доступна."
 
 #: aleksis/core/templates/offline.html:14
-#, fuzzy
-#| msgid ""
-#| "\n"
-#| "      There was an error accessing this page. You probably don't have an internet connection. Check to see if your WiFi\n"
-#| "      or mobile data is turned on and try again. If you think you are connected, please contact the system\n"
-#| "      administrators:\n"
-#| "    "
 msgid ""
 "\n"
-"      This page is not available offline. Since you probably don't have an internet connection, check to see if your WiFi\n"
-"      or mobile data is turned on and try again. If you think you are connected, please contact the system\n"
+"      This page is not available offline. Since you probably don't have an "
+"internet connection, check to see if your WiFi\n"
+"      or mobile data is turned on and try again. If you think you are "
+"connected, please contact the system\n"
 "      administrators:\n"
 "    "
 msgstr ""
 "\n"
-"      При доступе к этой странице произошла ошибка. Возможно, у Вас проблема с интернетом. Убедитесь, что Ваш WiFi\n"
-"      или мобильный интернет включены и попробуйте ещё раз. Если считаете, что с подключением всё хорошо, обратитесь,\n"
+"      Эта страница в автономном режимен не доступна. Возможно, у Вас "
+"проблема с интернетом. Убедитесь, что Ваш WiFi\n"
+"      или мобильный интернет включены и попробуйте ещё раз. Если считаете, "
+"что с подключением всё хорошо, обратитесь,\n"
 "      пожалуйста, к системным администраторам:\n"
 "    "
 
@@ -2454,12 +2522,14 @@ msgstr "Ошибка входа учётной записи третьей ст
 #: aleksis/core/templates/socialaccount/authentication_error.html:15
 msgid ""
 "\n"
-"            An error occurred while attempting to login via your third-party account.\n"
+"            An error occurred while attempting to login via your third-party "
+"account.\n"
 "            Please contact one of your site administrators.\n"
 "          "
 msgstr ""
 "\n"
-"            Во время попытки входа с Вашей сторонней учётной записью возникла ошибка входа.\n"
+"            Во время попытки входа с Вашей сторонней учётной записью "
+"возникла ошибка входа.\n"
 "            Обратитесь, пожалуйста, к администратору сайта.\n"
 "          "
 
@@ -2474,7 +2544,9 @@ msgstr "Удалить"
 
 #: aleksis/core/templates/socialaccount/connections.html:34
 msgid "You currently have no third-party accounts connected to this account."
-msgstr "Сейчас у Вас нет учётных записей третих сторон, соединённых с этой учётной записью."
+msgstr ""
+"Сейчас у Вас нет учётных записей третих сторон, соединённых с этой учётной "
+"записью."
 
 #: aleksis/core/templates/socialaccount/connections.html:37
 msgid "Add a Third-party Account"
@@ -2504,11 +2576,15 @@ msgstr "Вход отменён"
 #, python-format
 msgid ""
 "\n"
-"            You decided to cancel logging in to our site using one of your existing accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s\">sign in</a>.\n"
+"            You decided to cancel logging in to our site using one of your "
+"existing accounts. If this was a mistake, please proceed to <a href="
+"\"%(login_url)s\">sign in</a>.\n"
 "          "
 msgstr ""
 "\n"
-"            Похоже, Вы отменили вход на наш сайт с одной из Ваших учётных записей. Если это произошло случайно, Вы можете <a href=\"%(login_url)s\">продолжить вход здесь</a>.\n"
+"            Похоже, Вы отменили вход на наш сайт с одной из Ваших учётных "
+"записей. Если это произошло случайно, Вы можете <a href=\"%(login_url)s"
+"\">продолжить вход здесь</a>.\n"
 "          "
 
 #: aleksis/core/templates/socialaccount/signup.html:12
@@ -2518,7 +2594,8 @@ msgid ""
 "        %(site_name)s. As a final step, please complete the following form:"
 msgstr ""
 "Вы на пути к использованию своей учётной записи %(provider_name)s\n"
-"        для входа в %(site_name)s. Заполните, пожалуйста, для завершения эту форму:"
+"        для входа в %(site_name)s. Заполните, пожалуйста, для завершения эту "
+"форму:"
 
 #: aleksis/core/templates/socialaccount/snippets/provider_list.html:12
 #, python-format
@@ -2605,21 +2682,25 @@ msgstr "Система обнаружила новые проблемы с Ва
 #: aleksis/core/templates/templated_email/data_checks.email:6
 msgid ""
 "the system detected some new problems with your data.\n"
-"Please take some time to inspect them and solve the issues or mark them as ignored."
+"Please take some time to inspect them and solve the issues or mark them as "
+"ignored."
 msgstr ""
 "система обнаружила новые проблемы с Вашими данными.\n"
-"Уделите, пожалуйста, немного времени для их проверки и решения проблем, или же отметьте их для игнорирования."
+"Уделите, пожалуйста, немного времени для их проверки и решения проблем, или "
+"же отметьте их для игнорирования."
 
 #: aleksis/core/templates/templated_email/data_checks.email:15
 msgid ""
 "\n"
 "   the system detected some new problems with your data.\n"
-"   Please take some time to inspect them and solve the issues or mark them as ignored.\n"
+"   Please take some time to inspect them and solve the issues or mark them "
+"as ignored.\n"
 "  "
 msgstr ""
 "\n"
 "   система обнаружила новые проблемы с Вашими данными.\n"
-"   Уделите, пожалуйста, немного времени для их проверки и решения проблем, или же отметьте их для игнорирования.\n"
+"   Уделите, пожалуйста, немного времени для их проверки и решения проблем, "
+"или же отметьте их для игнорирования.\n"
 "  "
 
 #: aleksis/core/templates/templated_email/data_checks.email:23
@@ -2705,16 +2786,22 @@ msgid ""
 "\n"
 "        Backup tokens can be used when your primary and backup\n"
 "        phone numbers aren't available. The backup tokens below can be used\n"
-"        for login verification. If you've used up all your backup tokens, you\n"
-"        can generate a new set of backup tokens. Only the backup tokens shown\n"
+"        for login verification. If you've used up all your backup tokens, "
+"you\n"
+"        can generate a new set of backup tokens. Only the backup tokens "
+"shown\n"
 "        below will be valid.\n"
 "      "
 msgstr ""
 "\n"
-"        Резервные токены могут быть использованы, когда Ваши основной и резервный\n"
-"        телефонные номера недоступны. Резервные токены, указанные ниже, могут быть\n"
-"        использованы для верификации входа. Когда Вы используете все резервные токены,\n"
-"        Вы сможете сгенерировать новый набор резервных токенов. Действительными будут только\n"
+"        Резервные токены могут быть использованы, когда Ваши основной и "
+"резервный\n"
+"        телефонные номера недоступны. Резервные токены, указанные ниже, "
+"могут быть\n"
+"        использованы для верификации входа. Когда Вы используете все "
+"резервные токены,\n"
+"        Вы сможете сгенерировать новый набор резервных токенов. "
+"Действительными будут только\n"
 "        токены, указанные ниже.\n"
 "      "
 
@@ -2765,7 +2852,9 @@ msgstr ""
 
 #: aleksis/core/templates/two_factor/core/login.html:47
 msgid "Please login with your account to use the external application."
-msgstr "Для использования внешнего приложения войдите, пожалуйста, в свою учётную запись."
+msgstr ""
+"Для использования внешнего приложения войдите, пожалуйста, в свою учётную "
+"запись."
 
 #: aleksis/core/templates/two_factor/core/login.html:54
 msgid "Please login to see this page."
@@ -2774,24 +2863,28 @@ msgstr "Для просмотра этой страницы, пожалуйст
 #: aleksis/core/templates/two_factor/core/login.html:65
 msgid ""
 "\n"
-"                        We are calling your phone right now, please enter the\n"
+"                        We are calling your phone right now, please enter "
+"the\n"
 "                        digits you hear.\n"
 "                      "
 msgstr ""
 "\n"
-"                        Мы сейчас позвоним на Ваш номер. Напишите, пожалуйста, цифры,\n"
+"                        Мы сейчас позвоним на Ваш номер. Напишите, "
+"пожалуйста, цифры,\n"
 "                        которые Вы услышите.\n"
 "                      "
 
 #: aleksis/core/templates/two_factor/core/login.html:70
 msgid ""
 "\n"
-"                        We sent you a text message, please enter the tokens we\n"
+"                        We sent you a text message, please enter the tokens "
+"we\n"
 "                        sent.\n"
 "                      "
 msgstr ""
 "\n"
-"                        Мы отправили Вам текстовое сообщение. Напишите, пожалуйста, полученный\n"
+"                        Мы отправили Вам текстовое сообщение. Напишите, "
+"пожалуйста, полученный\n"
 "                        токен.\n"
 "                      "
 
@@ -2810,15 +2903,21 @@ msgstr ""
 #: aleksis/core/templates/two_factor/core/login.html:81
 msgid ""
 "\n"
-"                      Use this form for entering backup tokens for logging in.\n"
-"                      These tokens have been generated for you to print and keep safe. Please\n"
-"                      enter one of these backup tokens to login to your account.\n"
+"                      Use this form for entering backup tokens for logging "
+"in.\n"
+"                      These tokens have been generated for you to print and "
+"keep safe. Please\n"
+"                      enter one of these backup tokens to login to your "
+"account.\n"
 "                    "
 msgstr ""
 "\n"
-"                      Для входа воспользуйтесь формой для ввода резервных токенов.\n"
-"                      Эти токены были сгенерированы, чтобы Вы распечатали их и сохранили в надёжном месте.\n"
-"                      Для входа укажите, пожалуйста, один из резервных токенов.\n"
+"                      Для входа воспользуйтесь формой для ввода резервных "
+"токенов.\n"
+"                      Эти токены были сгенерированы, чтобы Вы распечатали их "
+"и сохранили в надёжном месте.\n"
+"                      Для входа укажите, пожалуйста, один из резервных "
+"токенов.\n"
 "                    "
 
 #: aleksis/core/templates/two_factor/core/login.html:109
@@ -2831,7 +2930,8 @@ msgstr "Или можете воспользоваться одним из ре
 
 #: aleksis/core/templates/two_factor/core/login.html:122
 msgid "As a last resort, you can use a backup token:"
-msgstr "В качестве последней возможности можете воспользоваться резервным токеном:"
+msgstr ""
+"В качестве последней возможности можете воспользоваться резервным токеном:"
 
 #: aleksis/core/templates/two_factor/core/login.html:125
 msgid "Use Backup Token"
@@ -2848,12 +2948,16 @@ msgstr "Доступ отсутствует"
 #: aleksis/core/templates/two_factor/core/otp_required.html:10
 msgid ""
 "The page you requested, enforces users to verify using\n"
-"          two-factor authentication for security reasons. You need to enable these\n"
+"          two-factor authentication for security reasons. You need to enable "
+"these\n"
 "          security features in order to access this page."
 msgstr ""
-"Для просмотра запрошенной страницы, с оглядкой на безопасность, необходима дополнительная\n"
-"          проверка пользователя с использованием двухфакторной аутентификации.\n"
-"          Для доступа к данной странице Вы должны включить эти функции безопасности."
+"Для просмотра запрошенной страницы, с оглядкой на безопасность, необходима "
+"дополнительная\n"
+"          проверка пользователя с использованием двухфакторной "
+"аутентификации.\n"
+"          Для доступа к данной странице Вы должны включить эти функции "
+"безопасности."
 
 #: aleksis/core/templates/two_factor/core/otp_required.html:14
 msgid ""
@@ -2901,7 +3005,8 @@ msgid ""
 "      "
 msgstr ""
 "\n"
-"        Вы устанавливаете для своей учётной записи новый уровень безопасности.\n"
+"        Вы устанавливаете для своей учётной записи новый уровень "
+"безопасности.\n"
 "        Для включения двухфакторной аутентификации пройдите несколько шагов\n"
 "        мастера настройки.\n"
 "      "
@@ -2913,20 +3018,24 @@ msgid ""
 "      "
 msgstr ""
 "\n"
-"        Выберите, пожалуйста, метод аутентификации, который Вы хотите использовать:\n"
+"        Выберите, пожалуйста, метод аутентификации, который Вы хотите "
+"использовать:\n"
 "      "
 
 #: aleksis/core/templates/two_factor/core/setup.html:23
 msgid ""
 "\n"
 "        To start using a token generator, please use your\n"
-"        favourite two factor authentication (TOTP) app to scan the QR code below.\n"
+"        favourite two factor authentication (TOTP) app to scan the QR code "
+"below.\n"
 "        Then, enter the token generated by the app.\n"
 "      "
 msgstr ""
 "\n"
-"        Для того, чтобы начать использование генератора токенов, воспользуйтесь, пожалуйста, своим\n"
-"        любимым приложением для двухфакторной аутентификации (TOTP) и отсканируйте QR-код, который видите ниже.\n"
+"        Для того, чтобы начать использование генератора токенов, "
+"воспользуйтесь, пожалуйста, своим\n"
+"        любимым приложением для двухфакторной аутентификации (TOTP) и "
+"отсканируйте QR-код, который видите ниже.\n"
 "        После этого напишите полученный генератором токен.\n"
 "      "
 
@@ -2957,11 +3066,13 @@ msgstr ""
 #: aleksis/core/templates/two_factor/core/setup.html:50
 msgid ""
 "\n"
-"            We are calling your phone right now, please enter the digits you hear.\n"
+"            We are calling your phone right now, please enter the digits you "
+"hear.\n"
 "          "
 msgstr ""
 "\n"
-"            Мы сейчас звоним на Ваш номер, – напишите, пожалуйста, цифры, которые услышите.\n"
+"            Мы сейчас звоним на Ваш номер, – напишите, пожалуйста, цифры, "
+"которые услышите.\n"
 "          "
 
 #: aleksis/core/templates/two_factor/core/setup.html:56
@@ -2971,22 +3082,29 @@ msgid ""
 "          "
 msgstr ""
 "\n"
-"            Мы отправили Вам текстовое сообщение. Напишите, пожалуйста, полученные токены.\n"
+"            Мы отправили Вам текстовое сообщение. Напишите, пожалуйста, "
+"полученные токены.\n"
 "          "
 
 #: aleksis/core/templates/two_factor/core/setup.html:63
 msgid ""
 "\n"
-"          We've encountered an issue with the selected authentication method. Please\n"
-"          go back and verify that you entered your information correctly, try\n"
-"          again, or use a different authentication method instead. If the issue\n"
+"          We've encountered an issue with the selected authentication "
+"method. Please\n"
+"          go back and verify that you entered your information correctly, "
+"try\n"
+"          again, or use a different authentication method instead. If the "
+"issue\n"
 "          persists, contact the site administrator.\n"
 "        "
 msgstr ""
 "\n"
-"          Мы заметили, что существует проблема с использованием выбранного метода авторизации. Вернитесь,\n"
-"          пожалуйста, назад, и убедитесь, что необходимые данные указаны правильно,\n"
-"          после чего попробуйте зайти ешё раз, или же воспользуйтесь другим вариантом входа. Если же\n"
+"          Мы заметили, что существует проблема с использованием выбранного "
+"метода авторизации. Вернитесь,\n"
+"          пожалуйста, назад, и убедитесь, что необходимые данные указаны "
+"правильно,\n"
+"          после чего попробуйте зайти ешё раз, или же воспользуйтесь другим "
+"вариантом входа. Если же\n"
 "          проблема остаётся, обратитесь к администратору сайта.\n"
 "        "
 
@@ -3012,7 +3130,8 @@ msgstr "Двухфакторная аутентификация успешно 
 #: aleksis/core/templates/two_factor/core/setup_complete.html:14
 msgid ""
 "\n"
-"        Congratulations, you've successfully enabled two-factor authentication.\n"
+"        Congratulations, you've successfully enabled two-factor "
+"authentication.\n"
 "      "
 msgstr ""
 "\n"
@@ -3033,13 +3152,16 @@ msgstr "Создать резервные коды"
 msgid ""
 "\n"
 "          However, it might happen that you don't have access to\n"
-"          your primary token device. To enable account recovery, generate backup codes\n"
+"          your primary token device. To enable account recovery, generate "
+"backup codes\n"
 "          or add a phone number.\n"
 "        "
 msgstr ""
 "\n"
-"          Между прочим, может так случиться, что у Вас не будет доступа к своему основному\n"
-"          устройству с токенами. Для включения восстановления учётки создайте резервные коды\n"
+"          Между прочим, может так случиться, что у Вас не будет доступа к "
+"своему основному\n"
+"          устройству с токенами. Для включения восстановления учётки "
+"создайте резервные коды\n"
 "          или добавьте номер телефона.\n"
 "        "
 
@@ -3056,8 +3178,12 @@ msgid "Disable Two-Factor Authentication"
 msgstr "Отключить двухфакторную аутентификацию"
 
 #: aleksis/core/templates/two_factor/profile/disable.html:12
-msgid "You are about to disable two-factor authentication. This weakens your account security, are you sure?"
-msgstr "Вы отключаете двухфакторную аутентификацию. Это снизит защиту Вашей учётной записи. Вы уверены?"
+msgid ""
+"You are about to disable two-factor authentication. This weakens your "
+"account security, are you sure?"
+msgstr ""
+"Вы отключаете двухфакторную аутентификацию. Это снизит защиту Вашей учётной "
+"записи. Вы уверены?"
 
 #: aleksis/core/templates/two_factor/profile/disable.html:26
 msgid "Disable"
@@ -3145,7 +3271,8 @@ msgid ""
 msgstr ""
 "\n"
 "        Не смотря на то, что мы Вам рекомендуем этого не делать, Вы можете \n"
-"        также отключить двухфакторную аутентификацию для своей учётной записи.\n"
+"        также отключить двухфакторную аутентификацию для своей учётной "
+"записи.\n"
 "      "
 
 #: aleksis/core/templates/two_factor/profile/profile.html:78
@@ -3287,52 +3414,60 @@ msgstr "Виджет информпанели создан."
 msgid "The dashboard widget has been deleted."
 msgstr "Виджет информпанели удалён."
 
-#: aleksis/core/views.py:1030
+#: aleksis/core/views.py:1030 aleksis/core/views.py:1031
 msgid "Your dashboard configuration has been saved successfully."
 msgstr "Ваша конфигурация информпанели сохранена."
 
-#: aleksis/core/views.py:1032
+#: aleksis/core/views.py:1032 aleksis/core/views.py:1033
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr "Конфигурация типовой/стандартной информпанели."
 
-#: aleksis/core/views.py:1103
+#: aleksis/core/views.py:1103 aleksis/core/views.py:1104
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr "Приглашение успешно создано. Код приглашения: {code}"
 
-#: aleksis/core/views.py:1200
+#: aleksis/core/views.py:1200 aleksis/core/views.py:1201
 msgid "We have successfully assigned the permissions."
 msgstr "Мы успешно назначили доступы."
 
-#: aleksis/core/views.py:1210
+#: aleksis/core/views.py:1210 aleksis/core/views.py:1211
 msgid "The global user permission has been deleted."
 msgstr "Глобальный пользовательский доступ удалён."
 
-#: aleksis/core/views.py:1220
+#: aleksis/core/views.py:1220 aleksis/core/views.py:1221
 msgid "The global group permission has been deleted."
 msgstr "Глобальный групповой доступ удалён."
 
-#: aleksis/core/views.py:1230
+#: aleksis/core/views.py:1230 aleksis/core/views.py:1231
 msgid "The object user permission has been deleted."
 msgstr "Объектный пользовательский доступ удалён."
 
-#: aleksis/core/views.py:1240
+#: aleksis/core/views.py:1240 aleksis/core/views.py:1241
 msgid "The object group permission has been deleted."
 msgstr "Объектный групповой доступ удалён."
 
-#: aleksis/core/views.py:1349
-msgid "The third-party account could not be disconnected because it is the only login method available."
-msgstr "Учётную запись третьей стороны нельзя отключить, т.к. это единственный способ входа."
+#: aleksis/core/views.py:1349 aleksis/core/views.py:1350
+msgid ""
+"The third-party account could not be disconnected because it is the only "
+"login method available."
+msgstr ""
+"Учётную запись третьей стороны нельзя отключить, т.к. это единственный "
+"способ входа."
 
-#: aleksis/core/views.py:1356
+#: aleksis/core/views.py:1356 aleksis/core/views.py:1357
 msgid "The third-party account has been successfully disconnected."
 msgstr "Учётная запись третьей стороны успешно отключена."
 
-#: aleksis/core/views.py:1432
-msgid "Person was invited successfully and an email with further instructions has been send to them."
-msgstr "Владелец указанного эл.адреса успешно приглашён. Инструкции о дальнейших действиях отправлены на эл.почту."
+#: aleksis/core/views.py:1432 aleksis/core/views.py:1433
+msgid ""
+"Person was invited successfully and an email with further instructions has "
+"been send to them."
+msgstr ""
+"Владелец указанного эл.адреса успешно приглашён. Инструкции о дальнейших "
+"действиях отправлены на эл.почту."
 
-#: aleksis/core/views.py:1443
+#: aleksis/core/views.py:1443 aleksis/core/views.py:1444
 msgid "Person was already invited."
 msgstr "Кто-то уже пригласил его/её."
 
@@ -3439,8 +3574,14 @@ msgstr "Кто-то уже пригласил его/её."
 #~ msgid "ICal Feeds"
 #~ msgstr "iCal-ленты"
 
-#~ msgid "These are URLs for different Calendar Feeds in the iCal (.ics) format. You can create as many as you want and import them in your calendar software."
-#~ msgstr "Здесь находятся ссылки на разные ленты календарей в формате iCal (.ics). Вы можете создать их столько, сколько будет необходимо и импортировать их в ПО для работы с календарями."
+#~ msgid ""
+#~ "These are URLs for different Calendar Feeds in the iCal (.ics) format. "
+#~ "You can create as many as you want and import them in your calendar "
+#~ "software."
+#~ msgstr ""
+#~ "Здесь находятся ссылки на разные ленты календарей в формате iCal (.ics). "
+#~ "Вы можете создать их столько, сколько будет необходимо и импортировать их "
+#~ "в ПО для работы с календарями."
 
 #~ msgid "Your iCal URLs"
 #~ msgstr "Ваши ссылки iCal"
@@ -3465,24 +3606,30 @@ msgstr "Кто-то уже пригласил его/её."
 
 #~ msgid ""
 #~ "\n"
-#~ "              This platform is powered by AlekSIS®, a web-based school information system (SIS) which can be used\n"
-#~ "              to manage and/or publish organisational artifacts of educational institutions. AlekSIS is free software and\n"
+#~ "              This platform is powered by AlekSIS®, a web-based school "
+#~ "information system (SIS) which can be used\n"
+#~ "              to manage and/or publish organisational artifacts of "
+#~ "educational institutions. AlekSIS is free software and\n"
 #~ "              can be used by anyone.\n"
 #~ "            "
 #~ msgstr ""
 #~ "\n"
-#~ "              Эта платформа использует AlekSIS®, веб-инструмент информационной системы для обучения (SIS) при помощи которой\n"
-#~ "              можно управлять и/или публиковать оргинформацию учебных заведений. AlekSIS - бесплатное ПО\n"
+#~ "              Эта платформа использует AlekSIS®, веб-инструмент "
+#~ "информационной системы для обучения (SIS) при помощи которой\n"
+#~ "              можно управлять и/или публиковать оргинформацию учебных "
+#~ "заведений. AlekSIS - бесплатное ПО\n"
 #~ "              и его может использовать любой желающий.\n"
 #~ "            "
 
 #~ msgid ""
 #~ "\n"
-#~ "              AlekSIS® is a registered trademark of the AlekSIS open source project, represented by Teckids e.V.\n"
+#~ "              AlekSIS® is a registered trademark of the AlekSIS open "
+#~ "source project, represented by Teckids e.V.\n"
 #~ "            "
 #~ msgstr ""
 #~ "\n"
-#~ "              AlekSIS® – зарегистрированная торговая марка проекта с открытым исходным кодом AlekSIS, которая представлена Teckids e.V.\n"
+#~ "              AlekSIS® – зарегистрированная торговая марка проекта с "
+#~ "открытым исходным кодом AlekSIS, которая представлена Teckids e.V.\n"
 #~ "            "
 
 #~ msgid "Website of AlekSIS"
@@ -3496,14 +3643,18 @@ msgstr "Кто-то уже пригласил его/её."
 
 #~ msgid ""
 #~ "\n"
-#~ "              The core and the official apps of AlekSIS are licenced under the EUPL, version 1.2 or later. For licence\n"
-#~ "              information from third-party apps, if installed, refer to the respective components below. The\n"
+#~ "              The core and the official apps of AlekSIS are licenced "
+#~ "under the EUPL, version 1.2 or later. For licence\n"
+#~ "              information from third-party apps, if installed, refer to "
+#~ "the respective components below. The\n"
 #~ "              licences are marked like this:\n"
 #~ "            "
 #~ msgstr ""
 #~ "\n"
-#~ "              Ядро и официальные дополнения AlekSIS лицензированы под лицензией EUPL, версии 1.2 или новее. Для получения информации\n"
-#~ "              о компонентах третих сторон, если таковы установлены, перейдите к соответствующим компонентам ниже.\n"
+#~ "              Ядро и официальные дополнения AlekSIS лицензированы под "
+#~ "лицензией EUPL, версии 1.2 или новее. Для получения информации\n"
+#~ "              о компонентах третих сторон, если таковы установлены, "
+#~ "перейдите к соответствующим компонентам ниже.\n"
 #~ "              Эти лицензии обозначены такой отметкой:\n"
 #~ "            "
 
@@ -3531,11 +3682,13 @@ msgstr "Кто-то уже пригласил его/её."
 
 #~ msgid ""
 #~ "\n"
-#~ "              Without activated JavaScript the progress status can't be updated.\n"
+#~ "              Without activated JavaScript the progress status can't be "
+#~ "updated.\n"
 #~ "            "
 #~ msgstr ""
 #~ "\n"
-#~ "              Без активного JavaScript статус выполнения обновляться не сможет.\n"
+#~ "              Без активного JavaScript статус выполнения обновляться не "
+#~ "сможет.\n"
 #~ "            "
 
 #~ msgid "Language"
@@ -3546,12 +3699,14 @@ msgstr "Кто-то уже пригласил его/её."
 
 #~ msgid ""
 #~ "\n"
-#~ "            Your administrator account is not linked to any person. Therefore,\n"
+#~ "            Your administrator account is not linked to any person. "
+#~ "Therefore,\n"
 #~ "            a dummy person has been linked to your account.\n"
 #~ "          "
 #~ msgstr ""
 #~ "\n"
-#~ "            Ваша административная учётная запись не соединена на с одним физлицом. Поэтому\n"
+#~ "            Ваша административная учётная запись не соединена на с одним "
+#~ "физлицом. Поэтому\n"
 #~ "            к Вашей учётной записи привязано фейковое физлицо.\n"
 #~ "          "
 
@@ -3564,8 +3719,10 @@ msgstr "Кто-то уже пригласил его/её."
 #~ msgstr ""
 #~ "\n"
 #~ "            Ваша учётная запись не связана с физлицом. Это значит,\n"
-#~ "            что у Вас нет доступа на к какой учебной информации. Обратитесь,\n"
-#~ "            пожалуйста, к администраторам AlekSIS в Вашем учебном заведении.\n"
+#~ "            что у Вас нет доступа на к какой учебной информации. "
+#~ "Обратитесь,\n"
+#~ "            пожалуйста, к администраторам AlekSIS в Вашем учебном "
+#~ "заведении.\n"
 #~ "          "
 
 #~ msgid "Impersonate"
diff --git a/aleksis/core/locale/tr_TR/LC_MESSAGES/django.po b/aleksis/core/locale/tr_TR/LC_MESSAGES/django.po
index c79394a38e698af3a7ccc7991756d9c7b2a82bd3..d81b066899e79032a2540d2433bbdd93d03dc6a9 100644
--- a/aleksis/core/locale/tr_TR/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/tr_TR/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: AlekSIS (School Information System) 0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-01-22 20:49+0100\n"
+"POT-Creation-Date: 2023-02-15 20:00+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -396,7 +396,7 @@ msgstr ""
 msgid "other"
 msgstr ""
 
-#: aleksis/core/models.py:189 aleksis/core/models.py:1345
+#: aleksis/core/models.py:189 aleksis/core/models.py:1353
 msgid "Linked user"
 msgstr ""
 
@@ -405,7 +405,7 @@ msgid "Additional name(s)"
 msgstr ""
 
 #: aleksis/core/models.py:199 aleksis/core/models.py:511
-#: aleksis/core/models.py:1431
+#: aleksis/core/models.py:1439
 msgid "Short name"
 msgstr ""
 
@@ -467,7 +467,7 @@ msgstr ""
 
 #: aleksis/core/models.py:244 aleksis/core/models.py:724
 #: aleksis/core/models.py:748 aleksis/core/models.py:843
-#: aleksis/core/models.py:1104
+#: aleksis/core/models.py:1112
 msgid "Description"
 msgstr ""
 
@@ -503,7 +503,7 @@ msgstr ""
 msgid "Can view statistics about group."
 msgstr ""
 
-#: aleksis/core/models.py:509 aleksis/core/models.py:1432
+#: aleksis/core/models.py:509 aleksis/core/models.py:1440
 msgid "Long name"
 msgstr ""
 
@@ -530,7 +530,7 @@ msgid "Additional fields"
 msgstr ""
 
 #: aleksis/core/models.py:723 aleksis/core/models.py:747
-#: aleksis/core/models.py:842 aleksis/core/models.py:1262
+#: aleksis/core/models.py:842 aleksis/core/models.py:1270
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr ""
@@ -560,7 +560,7 @@ msgid "Link"
 msgstr ""
 
 #: aleksis/core/models.py:752 aleksis/core/models.py:1079
-#: aleksis/core/models.py:1392
+#: aleksis/core/models.py:1400
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr ""
@@ -743,205 +743,205 @@ msgstr ""
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1103
+#: aleksis/core/models.py:1111
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1110 aleksis/core/templates/core/group/full.html:50
+#: aleksis/core/models.py:1118 aleksis/core/templates/core/group/full.html:50
 msgid "Group type"
 msgstr ""
 
-#: aleksis/core/models.py:1111
+#: aleksis/core/models.py:1119
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 msgid "Group types"
 msgstr ""
 
-#: aleksis/core/models.py:1124
+#: aleksis/core/models.py:1132
 msgid "Can view system status"
 msgstr ""
 
-#: aleksis/core/models.py:1125
+#: aleksis/core/models.py:1133
 msgid "Can manage data"
 msgstr ""
 
-#: aleksis/core/models.py:1126
+#: aleksis/core/models.py:1134
 msgid "Can impersonate"
 msgstr ""
 
-#: aleksis/core/models.py:1127
+#: aleksis/core/models.py:1135
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1128
+#: aleksis/core/models.py:1136
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1129
+#: aleksis/core/models.py:1137
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1130
+#: aleksis/core/models.py:1138
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1131
+#: aleksis/core/models.py:1139
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1132
+#: aleksis/core/models.py:1140
 msgid "Can invite persons"
 msgstr ""
 
-#: aleksis/core/models.py:1168
+#: aleksis/core/models.py:1176
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1176
+#: aleksis/core/models.py:1184
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1177
+#: aleksis/core/models.py:1185
 msgid "Notification sent"
 msgstr ""
 
-#: aleksis/core/models.py:1190
+#: aleksis/core/models.py:1198
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1191
+#: aleksis/core/models.py:1199
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1193
+#: aleksis/core/models.py:1201
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1194
+#: aleksis/core/models.py:1202
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1201
+#: aleksis/core/models.py:1209
 msgid "E-Mail address"
 msgstr ""
 
-#: aleksis/core/models.py:1233
+#: aleksis/core/models.py:1241
 msgid "Owner"
 msgstr ""
 
-#: aleksis/core/models.py:1237
+#: aleksis/core/models.py:1245
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1240
+#: aleksis/core/models.py:1248
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1243
+#: aleksis/core/models.py:1251
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1250
+#: aleksis/core/models.py:1258
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1251
+#: aleksis/core/models.py:1259
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1256
+#: aleksis/core/models.py:1264
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1259
+#: aleksis/core/models.py:1267
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1263
+#: aleksis/core/models.py:1271
 msgid "Back URL"
 msgstr ""
 
-#: aleksis/core/models.py:1264
+#: aleksis/core/models.py:1272
 msgid "Progress title"
 msgstr ""
 
-#: aleksis/core/models.py:1265
+#: aleksis/core/models.py:1273
 msgid "Error message"
 msgstr ""
 
-#: aleksis/core/models.py:1266
+#: aleksis/core/models.py:1274
 msgid "Success message"
 msgstr ""
 
-#: aleksis/core/models.py:1267
+#: aleksis/core/models.py:1275
 msgid "Redirect on success URL"
 msgstr ""
 
-#: aleksis/core/models.py:1269
+#: aleksis/core/models.py:1277
 msgid "Additional button title"
 msgstr ""
 
-#: aleksis/core/models.py:1271
+#: aleksis/core/models.py:1279
 msgid "Additional button URL"
 msgstr ""
 
-#: aleksis/core/models.py:1273
+#: aleksis/core/models.py:1281
 msgid "Additional button icon"
 msgstr ""
 
-#: aleksis/core/models.py:1275
+#: aleksis/core/models.py:1283
 msgid "Result fetched"
 msgstr ""
 
-#: aleksis/core/models.py:1300
+#: aleksis/core/models.py:1308
 msgid "Background task completed successfully"
 msgstr ""
 
-#: aleksis/core/models.py:1301
+#: aleksis/core/models.py:1309
 msgid "The background task '{}' has been completed successfully."
 msgstr ""
 
-#: aleksis/core/models.py:1307
+#: aleksis/core/models.py:1315
 msgid "Background task failed"
 msgstr ""
 
-#: aleksis/core/models.py:1308
+#: aleksis/core/models.py:1316
 msgid "The background task '{}' has failed."
 msgstr ""
 
-#: aleksis/core/models.py:1317
+#: aleksis/core/models.py:1325
 msgid "Background task"
 msgstr ""
 
-#: aleksis/core/models.py:1331
+#: aleksis/core/models.py:1339
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1332
+#: aleksis/core/models.py:1340
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1348
+#: aleksis/core/models.py:1356
 msgid "Additional attributes"
 msgstr ""
 
-#: aleksis/core/models.py:1386
+#: aleksis/core/models.py:1394
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1396
+#: aleksis/core/models.py:1404
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
-#: aleksis/core/models.py:1441
+#: aleksis/core/models.py:1449
 msgid "Can view room timetable"
 msgstr ""
 
-#: aleksis/core/models.py:1443
+#: aleksis/core/models.py:1451
 msgid "Room"
 msgstr ""
 
-#: aleksis/core/models.py:1444
+#: aleksis/core/models.py:1452
 msgid "Rooms"
 msgstr ""
 
@@ -1153,15 +1153,15 @@ msgstr ""
 msgid "Country for phone number parsing"
 msgstr ""
 
-#: aleksis/core/settings.py:539
+#: aleksis/core/settings.py:544
 msgid "English"
 msgstr ""
 
-#: aleksis/core/settings.py:540
+#: aleksis/core/settings.py:545
 msgid "German"
 msgstr ""
 
-#: aleksis/core/settings.py:541
+#: aleksis/core/settings.py:546
 msgid "Ukrainian"
 msgstr ""
 
@@ -2979,51 +2979,51 @@ msgstr ""
 msgid "The dashboard widget has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1030
+#: aleksis/core/views.py:1031
 msgid "Your dashboard configuration has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1032
+#: aleksis/core/views.py:1033
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1103
+#: aleksis/core/views.py:1104
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr ""
 
-#: aleksis/core/views.py:1200
+#: aleksis/core/views.py:1201
 msgid "We have successfully assigned the permissions."
 msgstr ""
 
-#: aleksis/core/views.py:1210
+#: aleksis/core/views.py:1211
 msgid "The global user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1220
+#: aleksis/core/views.py:1221
 msgid "The global group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1230
+#: aleksis/core/views.py:1231
 msgid "The object user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1240
+#: aleksis/core/views.py:1241
 msgid "The object group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1349
+#: aleksis/core/views.py:1350
 msgid "The third-party account could not be disconnected because it is the only login method available."
 msgstr ""
 
-#: aleksis/core/views.py:1356
+#: aleksis/core/views.py:1357
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1432
+#: aleksis/core/views.py:1433
 msgid "Person was invited successfully and an email with further instructions has been send to them."
 msgstr ""
 
-#: aleksis/core/views.py:1443
+#: aleksis/core/views.py:1444
 msgid "Person was already invited."
 msgstr ""
diff --git a/aleksis/core/locale/uk/LC_MESSAGES/django.po b/aleksis/core/locale/uk/LC_MESSAGES/django.po
index 85df9c54467e351c9d411ce177f81c4fc8bce30f..1e9d09001471473235e7347e0660f09b735954f6 100644
--- a/aleksis/core/locale/uk/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/uk/LC_MESSAGES/django.po
@@ -8,14 +8,18 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2023-01-22 20:49+0100\n"
-"PO-Revision-Date: 2023-01-25 05:57+0000\n"
+"PO-Revision-Date: 2023-02-08 22:40+0000\n"
 "Last-Translator: Serhii Horichenko <m@sgg.im>\n"
-"Language-Team: Ukrainian <https://translate.edugit.org/projects/aleksis/aleksis-core/uk/>\n"
+"Language-Team: Ukrainian <https://translate.edugit.org/projects/aleksis/"
+"aleksis-core/uk/>\n"
 "Language: uk\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n"
+"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != "
+"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % "
+"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || "
+"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n"
 "X-Generator: Weblate 4.12.1\n"
 
 #: aleksis/core/apps.py:155
@@ -184,7 +188,8 @@ msgid "Write your announcement:"
 msgstr "Складіть своє оголошеня:"
 
 #: aleksis/core/forms.py:276
-msgid "You are not allowed to create announcements which are only valid in the past."
+msgid ""
+"You are not allowed to create announcements which are only valid in the past."
 msgstr "Оголошення для минулого Вам створювати не дозволено."
 
 #: aleksis/core/forms.py:280
@@ -232,8 +237,10 @@ msgid "Grant the permission for all objects"
 msgstr "Надати дозвіл до всіх об'єктів"
 
 #: aleksis/core/forms.py:494
-msgid "You must select at least one group or person which should get the permission."
-msgstr "Ви повинні обрати принаймні одну групу або особу, хто буде мати дозвіл."
+msgid ""
+"You must select at least one group or person which should get the permission."
+msgstr ""
+"Ви повинні обрати принаймні одну групу або особу, хто буде мати дозвіл."
 
 #: aleksis/core/forms.py:499
 msgid "You must grant the permission to all objects or to specific objects."
@@ -398,6 +405,7 @@ msgid "other"
 msgstr "інший"
 
 #: aleksis/core/models.py:189 aleksis/core/models.py:1345
+#: aleksis/core/models.py:1353
 msgid "Linked user"
 msgstr "Пов'язаний користувач"
 
@@ -406,7 +414,7 @@ msgid "Additional name(s)"
 msgstr "Додаткові імена"
 
 #: aleksis/core/models.py:199 aleksis/core/models.py:511
-#: aleksis/core/models.py:1431
+#: aleksis/core/models.py:1431 aleksis/core/models.py:1439
 msgid "Short name"
 msgstr "Коротке ім'я"
 
@@ -447,8 +455,11 @@ msgid "Sex"
 msgstr "Стать"
 
 #: aleksis/core/models.py:221 aleksis/core/models.py:550
-msgid "This is an official photo, used for official documents and for internal use cases."
-msgstr "Це офіційне фото, яке використовується для документів та внутрішніх потреб."
+msgid ""
+"This is an official photo, used for official documents and for internal use "
+"cases."
+msgstr ""
+"Це офіційне фото, яке використовується для документів та внутрішніх потреб."
 
 #: aleksis/core/models.py:226 aleksis/core/models.py:554
 msgid "Display picture / Avatar"
@@ -468,7 +479,7 @@ msgstr "Основна група"
 
 #: aleksis/core/models.py:244 aleksis/core/models.py:724
 #: aleksis/core/models.py:748 aleksis/core/models.py:843
-#: aleksis/core/models.py:1104
+#: aleksis/core/models.py:1104 aleksis/core/models.py:1112
 msgid "Description"
 msgstr "Опис"
 
@@ -505,6 +516,7 @@ msgid "Can view statistics about group."
 msgstr "Може бачити статистику групи."
 
 #: aleksis/core/models.py:509 aleksis/core/models.py:1432
+#: aleksis/core/models.py:1440
 msgid "Long name"
 msgstr "Довге ім'я"
 
@@ -533,6 +545,7 @@ msgstr "Додаткові поля"
 #: aleksis/core/models.py:723 aleksis/core/models.py:747
 #: aleksis/core/models.py:842 aleksis/core/models.py:1262
 #: aleksis/core/templates/core/announcement/list.html:18
+#: aleksis/core/models.py:1270
 msgid "Title"
 msgstr "Назва"
 
@@ -563,6 +576,7 @@ msgstr "Посилання"
 #: aleksis/core/models.py:752 aleksis/core/models.py:1079
 #: aleksis/core/models.py:1392
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
+#: aleksis/core/models.py:1400
 msgid "Icon"
 msgstr "Піктограма"
 
@@ -744,205 +758,210 @@ msgstr "Пункт користувацького меню"
 msgid "Custom menu items"
 msgstr "Пункти користувацького меню"
 
-#: aleksis/core/models.py:1103
+#: aleksis/core/models.py:1103 aleksis/core/models.py:1111
 msgid "Title of type"
 msgstr "Назва типу"
 
 #: aleksis/core/models.py:1110 aleksis/core/templates/core/group/full.html:50
+#: aleksis/core/models.py:1118
 msgid "Group type"
 msgstr "Тип групи"
 
 #: aleksis/core/models.py:1111
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
+#: aleksis/core/models.py:1119
 msgid "Group types"
 msgstr "Типи груп"
 
-#: aleksis/core/models.py:1124
+#: aleksis/core/models.py:1124 aleksis/core/models.py:1132
 msgid "Can view system status"
 msgstr "Може переглядати стан системи"
 
-#: aleksis/core/models.py:1125
+#: aleksis/core/models.py:1125 aleksis/core/models.py:1133
 msgid "Can manage data"
 msgstr "Може керувати даними"
 
-#: aleksis/core/models.py:1126
+#: aleksis/core/models.py:1126 aleksis/core/models.py:1134
 msgid "Can impersonate"
 msgstr "Може маскуватися"
 
-#: aleksis/core/models.py:1127
+#: aleksis/core/models.py:1127 aleksis/core/models.py:1135
 msgid "Can use search"
 msgstr "Може шукати"
 
-#: aleksis/core/models.py:1128
+#: aleksis/core/models.py:1128 aleksis/core/models.py:1136
 msgid "Can change site preferences"
 msgstr "Може змінювати властивості сайту"
 
-#: aleksis/core/models.py:1129
+#: aleksis/core/models.py:1129 aleksis/core/models.py:1137
 msgid "Can change person preferences"
 msgstr "Може змінювати властивості особи"
 
-#: aleksis/core/models.py:1130
+#: aleksis/core/models.py:1130 aleksis/core/models.py:1138
 msgid "Can change group preferences"
 msgstr "Може змінювати властивості групи"
 
-#: aleksis/core/models.py:1131
+#: aleksis/core/models.py:1131 aleksis/core/models.py:1139
 msgid "Can test PDF generation"
 msgstr "Може генерувати тестові PDF"
 
-#: aleksis/core/models.py:1132
+#: aleksis/core/models.py:1132 aleksis/core/models.py:1140
 msgid "Can invite persons"
 msgstr "Може запрошувати осіб"
 
-#: aleksis/core/models.py:1168
+#: aleksis/core/models.py:1168 aleksis/core/models.py:1176
 msgid "Related data check task"
 msgstr "Завдання перевірки пов'язаних даних"
 
-#: aleksis/core/models.py:1176
+#: aleksis/core/models.py:1176 aleksis/core/models.py:1184
 msgid "Issue solved"
 msgstr "Проблема вирішена"
 
-#: aleksis/core/models.py:1177
+#: aleksis/core/models.py:1177 aleksis/core/models.py:1185
 msgid "Notification sent"
 msgstr "Сповіщення надіслане"
 
-#: aleksis/core/models.py:1190
+#: aleksis/core/models.py:1190 aleksis/core/models.py:1198
 msgid "Data check result"
 msgstr "Результат перевірки даних"
 
-#: aleksis/core/models.py:1191
+#: aleksis/core/models.py:1191 aleksis/core/models.py:1199
 msgid "Data check results"
 msgstr "Результати перевірки даних"
 
-#: aleksis/core/models.py:1193
+#: aleksis/core/models.py:1193 aleksis/core/models.py:1201
 msgid "Can run data checks"
 msgstr "Може запускати перевірки даних"
 
-#: aleksis/core/models.py:1194
+#: aleksis/core/models.py:1194 aleksis/core/models.py:1202
 msgid "Can solve data check problems"
 msgstr "Може розв'язувати проблеми перевірки даних"
 
-#: aleksis/core/models.py:1201
+#: aleksis/core/models.py:1201 aleksis/core/models.py:1209
 msgid "E-Mail address"
 msgstr "Адреса ел.пошти"
 
-#: aleksis/core/models.py:1233
+#: aleksis/core/models.py:1233 aleksis/core/models.py:1241
 msgid "Owner"
 msgstr "Власник"
 
-#: aleksis/core/models.py:1237
+#: aleksis/core/models.py:1237 aleksis/core/models.py:1245
 msgid "File expires at"
 msgstr "Файл дійсний до"
 
-#: aleksis/core/models.py:1240
+#: aleksis/core/models.py:1240 aleksis/core/models.py:1248
 msgid "Generated HTML file"
 msgstr "Згенерований файл HTML"
 
-#: aleksis/core/models.py:1243
+#: aleksis/core/models.py:1243 aleksis/core/models.py:1251
 msgid "Generated PDF file"
 msgstr "Згенерований файл PDF"
 
-#: aleksis/core/models.py:1250
+#: aleksis/core/models.py:1250 aleksis/core/models.py:1258
 msgid "PDF file"
 msgstr "Файл PDF"
 
-#: aleksis/core/models.py:1251
+#: aleksis/core/models.py:1251 aleksis/core/models.py:1259
 msgid "PDF files"
 msgstr "Файли PDF"
 
-#: aleksis/core/models.py:1256
+#: aleksis/core/models.py:1256 aleksis/core/models.py:1264
 msgid "Task result"
 msgstr "Результат завдання"
 
-#: aleksis/core/models.py:1259
+#: aleksis/core/models.py:1259 aleksis/core/models.py:1267
 msgid "Task user"
 msgstr "Користувач завдання"
 
-#: aleksis/core/models.py:1263
+#: aleksis/core/models.py:1263 aleksis/core/models.py:1271
 msgid "Back URL"
 msgstr "URL для повернення"
 
-#: aleksis/core/models.py:1264
+#: aleksis/core/models.py:1264 aleksis/core/models.py:1272
 msgid "Progress title"
-msgstr "Назва перебігу"
+msgstr "Назва процесу"
 
-#: aleksis/core/models.py:1265
+#: aleksis/core/models.py:1265 aleksis/core/models.py:1273
 msgid "Error message"
 msgstr "Повідомлення про помилку"
 
-#: aleksis/core/models.py:1266
+#: aleksis/core/models.py:1266 aleksis/core/models.py:1274
 msgid "Success message"
 msgstr "Повідомлення про успіх"
 
-#: aleksis/core/models.py:1267
+#: aleksis/core/models.py:1267 aleksis/core/models.py:1275
 msgid "Redirect on success URL"
 msgstr "Посилання для перенаправлення в разі успіху"
 
-#: aleksis/core/models.py:1269
+#: aleksis/core/models.py:1269 aleksis/core/models.py:1277
 msgid "Additional button title"
 msgstr "Назва додаткової кнопки"
 
-#: aleksis/core/models.py:1271
+#: aleksis/core/models.py:1271 aleksis/core/models.py:1279
 msgid "Additional button URL"
 msgstr "Посилання додаткової кнопки"
 
-#: aleksis/core/models.py:1273
+#: aleksis/core/models.py:1273 aleksis/core/models.py:1281
 msgid "Additional button icon"
 msgstr "Піктограма додаткової кнопки"
 
-#: aleksis/core/models.py:1275
+#: aleksis/core/models.py:1275 aleksis/core/models.py:1283
 msgid "Result fetched"
 msgstr "Отриманий результат"
 
-#: aleksis/core/models.py:1300
+#: aleksis/core/models.py:1300 aleksis/core/models.py:1308
 msgid "Background task completed successfully"
 msgstr "Фонове завдання успішно завершене"
 
-#: aleksis/core/models.py:1301
+#: aleksis/core/models.py:1301 aleksis/core/models.py:1309
 msgid "The background task '{}' has been completed successfully."
 msgstr "Фонове завдання '{}' було успішно завершене."
 
-#: aleksis/core/models.py:1307
+#: aleksis/core/models.py:1307 aleksis/core/models.py:1315
 msgid "Background task failed"
 msgstr "Збій фонового завдання"
 
-#: aleksis/core/models.py:1308
+#: aleksis/core/models.py:1308 aleksis/core/models.py:1316
 msgid "The background task '{}' has failed."
 msgstr "У фонового завдання '{}' стався збій."
 
-#: aleksis/core/models.py:1317
+#: aleksis/core/models.py:1317 aleksis/core/models.py:1325
 msgid "Background task"
 msgstr "Фонове завдання"
 
-#: aleksis/core/models.py:1331
+#: aleksis/core/models.py:1331 aleksis/core/models.py:1339
 msgid "Task user assignment"
 msgstr "Призначення користувача завдання"
 
-#: aleksis/core/models.py:1332
+#: aleksis/core/models.py:1332 aleksis/core/models.py:1340
 msgid "Task user assignments"
 msgstr "Призначення користувачів завдання"
 
-#: aleksis/core/models.py:1348
+#: aleksis/core/models.py:1348 aleksis/core/models.py:1356
 msgid "Additional attributes"
 msgstr "Додаткові атрибути"
 
-#: aleksis/core/models.py:1386
+#: aleksis/core/models.py:1386 aleksis/core/models.py:1394
 msgid "Allowed scopes that clients can request"
 msgstr "Дозволені межі дії, які можуть запитувати клієнти"
 
-#: aleksis/core/models.py:1396
-msgid "This image will be shown as icon in the authorization flow. It should be squared."
-msgstr "Це зображення буде іконкою під час авторизації. Воно повинне бути квадратним."
+#: aleksis/core/models.py:1396 aleksis/core/models.py:1404
+msgid ""
+"This image will be shown as icon in the authorization flow. It should be "
+"squared."
+msgstr ""
+"Це зображення буде іконкою під час авторизації. Воно повинне бути квадратним."
 
-#: aleksis/core/models.py:1441
+#: aleksis/core/models.py:1441 aleksis/core/models.py:1449
 msgid "Can view room timetable"
 msgstr "Може переглядати розклад кімнати"
 
-#: aleksis/core/models.py:1443
+#: aleksis/core/models.py:1443 aleksis/core/models.py:1451
 msgid "Room"
 msgstr "Кімната"
 
-#: aleksis/core/models.py:1444
+#: aleksis/core/models.py:1444 aleksis/core/models.py:1452
 msgid "Rooms"
 msgstr "Кімнати"
 
@@ -1055,8 +1074,10 @@ msgid "Automatically create new persons for new users"
 msgstr "Нові особи для нових користувачів створювати автоматично"
 
 #: aleksis/core/preferences.py:256
-msgid "Automatically link existing persons to new users by their e-mail address"
-msgstr "Пов'язувати існуючих осіб з новими користувачами автоматично за ел.адресами"
+msgid ""
+"Automatically link existing persons to new users by their e-mail address"
+msgstr ""
+"Пов'язувати існуючих осіб з новими користувачами автоматично за ел.адресами"
 
 #: aleksis/core/preferences.py:267
 msgid "Display name of the school"
@@ -1123,7 +1144,8 @@ msgid "Fields on person model which are editable by themselves."
 msgstr "Поля з описом особи, які можна редагувати самостійно."
 
 #: aleksis/core/preferences.py:424
-msgid "Editable fields on person model which should trigger a notification on change"
+msgid ""
+"Editable fields on person model which should trigger a notification on change"
 msgstr "Змінювані поля з описом особи, які повинні сповіщати щодо редагування"
 
 #: aleksis/core/preferences.py:438
@@ -1154,15 +1176,15 @@ msgstr "Автоматично оновлювати інформпанель т
 msgid "Country for phone number parsing"
 msgstr "Країна для розбору номера телефона"
 
-#: aleksis/core/settings.py:539
+#: aleksis/core/settings.py:539 aleksis/core/settings.py:544
 msgid "English"
 msgstr "Англійська"
 
-#: aleksis/core/settings.py:540
+#: aleksis/core/settings.py:540 aleksis/core/settings.py:545
 msgid "German"
 msgstr "Німецька"
 
-#: aleksis/core/settings.py:541
+#: aleksis/core/settings.py:541 aleksis/core/settings.py:546
 msgid "Ukrainian"
 msgstr "Українська"
 
@@ -1205,7 +1227,8 @@ msgstr ""
 #: aleksis/core/templates/403.html:19 aleksis/core/templates/404.html:16
 msgid ""
 "\n"
-"            If you think this is an error in AlekSIS, please contact your site\n"
+"            If you think this is an error in AlekSIS, please contact your "
+"site\n"
 "            administrators:\n"
 "          "
 msgstr ""
@@ -1237,12 +1260,14 @@ msgstr ""
 #: aleksis/core/templates/500.html:13
 msgid ""
 "\n"
-"            Your site administrators will automatically be notified about this\n"
+"            Your site administrators will automatically be notified about "
+"this\n"
 "            error. You can also contact them directly:\n"
 "          "
 msgstr ""
 "\n"
-"            Адміністратори сайту будуть сповіщені щодо цієї помилки автоматично.\n"
+"            Адміністратори сайту будуть сповіщені щодо цієї помилки "
+"автоматично.\n"
 "            Ви також можете звернутися до них безпосередньо:\n"
 "          "
 
@@ -1261,11 +1286,13 @@ msgstr ""
 #: aleksis/core/templates/503.html:13
 msgid ""
 "\n"
-"            This page is currently unavailable. If this error persists, contact your site administrators:\n"
+"            This page is currently unavailable. If this error persists, "
+"contact your site administrators:\n"
 "          "
 msgstr ""
 "\n"
-"            Ця сторінка наразі недоступна. Якщо ця помилка виникне знову, зверніться до адміністраторів сайту:\n"
+"            Ця сторінка наразі недоступна. Якщо ця помилка виникне знову, "
+"зверніться до адміністраторів сайту:\n"
 "          "
 
 #: aleksis/core/templates/account/account_inactive.html:5
@@ -1306,13 +1333,22 @@ msgstr "Підтвердити"
 
 #: aleksis/core/templates/account/email_confirm.html:12
 #, python-format
-msgid "Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an e-mail address for user %(user_display)s."
-msgstr "Підтвердіть, будь ласка, що <a href=\"mailto:%(email)s\">%(email)s</a> є адресою ел.пошти для користувача %(user_display)s."
+msgid ""
+"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an e-mail "
+"address for user %(user_display)s."
+msgstr ""
+"Підтвердіть, будь ласка, що <a href=\"mailto:%(email)s\">%(email)s</a> є "
+"адресою ел.пошти для користувача %(user_display)s."
 
 #: aleksis/core/templates/account/email_confirm.html:25
 #, python-format
-msgid "This e-mail confirmation link expired or is invalid. Please <a href=\"%(email_url)s\">issue a new e-mail confirmation request</a>."
-msgstr "Це посилання для підтвердження ел.пошти протерміноване або недійсне. Зробіть, будь ласка, для підтвердження <a href=\"%(email_url)s\">новий запит</a>."
+msgid ""
+"This e-mail confirmation link expired or is invalid. Please <a href="
+"\"%(email_url)s\">issue a new e-mail confirmation request</a>."
+msgstr ""
+"Це посилання для підтвердження ел.пошти протерміноване або недійсне. "
+"Зробіть, будь ласка, для підтвердження <a href=\"%(email_url)s\">новий "
+"запит</a>."
 
 #: aleksis/core/templates/account/password_change.html:5
 #: aleksis/core/templates/account/password_change.html:6
@@ -1346,12 +1382,14 @@ msgstr "Зміна паролю вимкнена."
 msgid ""
 "\n"
 "            Users are not allowed to edit their own passwords. If you think\n"
-"            this is an error please contact one of your site administrators.\n"
+"            this is an error please contact one of your site "
+"administrators.\n"
 "          "
 msgstr ""
 "\n"
 "            Користувачам не дозволяється змінювати свої паролі.\n"
-"            Якщо Ви думаєте, що це помилка, зверніться до адміністраторів сайту.\n"
+"            Якщо Ви думаєте, що це помилка, зверніться до адміністраторів "
+"сайту.\n"
 "          "
 
 #: aleksis/core/templates/account/password_reset.html:5
@@ -1365,8 +1403,12 @@ msgid "Reset password"
 msgstr "Скинути пароль"
 
 #: aleksis/core/templates/account/password_reset.html:17
-msgid "Forgotten your password? Enter your e-mail address below, and we'll send you an e-mail allowing you to reset it."
-msgstr "Забули пароль? Вкажіть нижче свою ел.пошту і ми надішлемо Вам листа для скидання пароля."
+msgid ""
+"Forgotten your password? Enter your e-mail address below, and we'll send you "
+"an e-mail allowing you to reset it."
+msgstr ""
+"Забули пароль? Вкажіть нижче свою ел.пошту і ми надішлемо Вам листа для "
+"скидання пароля."
 
 #: aleksis/core/templates/account/password_reset.html:30
 msgid ""
@@ -1390,7 +1432,8 @@ msgid ""
 msgstr ""
 "\n"
 "            Ми надіслали Вам ел.листа. Якщо Ви його не отримаєте протягом\n"
-"            декількох хвилин, зверніться, будь ласка, до адміністраторів сайту.\n"
+"            декількох хвилин, зверніться, будь ласка, до адміністраторів "
+"сайту.\n"
 "          "
 
 #: aleksis/core/templates/account/password_reset_from_key.html:15
@@ -1401,13 +1444,16 @@ msgstr "Несправний токен"
 #, python-format
 msgid ""
 "\n"
-"              The password reset link was invalid, possibly because it has already been used. Please request a <a href=\"%(passwd_reset_url)s\"\n"
+"              The password reset link was invalid, possibly because it has "
+"already been used. Please request a <a href=\"%(passwd_reset_url)s\"\n"
 "              class=\"blue-text text-lighten-2\">new password reset</a>.\n"
 "            "
 msgstr ""
 "\n"
-"              Посилання на скидання пароля недійсне або, ймовірно, вже використане. Зробіть, будь ласка, <a href=\"%(passwd_reset_url)s\"\n"
-"              class=\"blue-text text-lighten-2\">новий запит на скидання пароля</a>.\n"
+"              Посилання на скидання пароля недійсне або, ймовірно, вже "
+"використане. Зробіть, будь ласка, <a href=\"%(passwd_reset_url)s\"\n"
+"              class=\"blue-text text-lighten-2\">новий запит на скидання "
+"пароля</a>.\n"
 "            "
 
 #: aleksis/core/templates/account/password_reset_from_key.html:25
@@ -1456,8 +1502,10 @@ msgstr "Реєстрація"
 
 #: aleksis/core/templates/account/signup.html:12
 #, python-format
-msgid "Already have an account? Then please <a href=\"%(login_url)s\">sign in</a>."
-msgstr "Вже маєте обліковий запис? Тоді можете <a href=\"%(login_url)s\">увіти</a>."
+msgid ""
+"Already have an account? Then please <a href=\"%(login_url)s\">sign in</a>."
+msgstr ""
+"Вже маєте обліковий запис? Тоді можете <a href=\"%(login_url)s\">увіти</a>."
 
 #: aleksis/core/templates/account/signup.html:22
 #: aleksis/core/templates/socialaccount/signup.html:23
@@ -1501,13 +1549,17 @@ msgstr "Перевірте свою ел.пошту!"
 #: aleksis/core/templates/account/verification_sent.html:16
 msgid ""
 "\n"
-"            This part of the site requires us to verify that you are who you claim to be.\n"
-"            For this purpose, we require that you verify ownership of your e-mail address.\n"
+"            This part of the site requires us to verify that you are who you "
+"claim to be.\n"
+"            For this purpose, we require that you verify ownership of your e-"
+"mail address.\n"
 "          "
 msgstr ""
 "\n"
-"            Ця частина сайту вимагає перевірки, що Ви - саме той/та, хто має бути.\n"
-"            Саме для цього нам необхідно перевірити, що адреса ел.пошти належить саме Вам.\n"
+"            Ця частина сайту вимагає перевірки, що Ви - саме той/та, хто має "
+"бути.\n"
+"            Саме для цього нам необхідно перевірити, що адреса ел.пошти "
+"належить саме Вам.\n"
 "          "
 
 #: aleksis/core/templates/account/verification_sent.html:22
@@ -1520,8 +1572,10 @@ msgid ""
 msgstr ""
 "\n"
 "            Ми надіслали Вам для перевірки ел.листа.\n"
-"            Будь ласка, перейдіть за вказаним там посиланням. Якщо Ви не отримаєте\n"
-"            листа протягом декількох хвилин, зверніться, будь ласка, до нас.\n"
+"            Будь ласка, перейдіть за вказаним там посиланням. Якщо Ви не "
+"отримаєте\n"
+"            листа протягом декількох хвилин, зверніться, будь ласка, до "
+"нас.\n"
 "          "
 
 #: aleksis/core/templates/core/additional_field/edit.html:6
@@ -1696,29 +1750,39 @@ msgstr "Редагувати інформпанель"
 #: aleksis/core/templates/core/edit_dashboard.html:24
 msgid ""
 "\n"
-"          On this page you can arrange your personal dashboard. You can drag any items from \"Available widgets\" to \"Your\n"
-"          Dashboard\" or change the order by moving the widgets. After you have finished, please don't forget to click on\n"
+"          On this page you can arrange your personal dashboard. You can drag "
+"any items from \"Available widgets\" to \"Your\n"
+"          Dashboard\" or change the order by moving the widgets. After you "
+"have finished, please don't forget to click on\n"
 "          \"Save\".\n"
 "        "
 msgstr ""
 "\n"
-"          На цій сторінці Ви можете впорядкувати свою інформпанель. Перетягуйте будь-які елементи з \"Доступних віджетів\"\n"
-"          до \"Своєї інформпанелі\" або змінюйте порядок, перетягуючи віджети. Після закінчення не забудьте натиснути\n"
+"          На цій сторінці Ви можете впорядкувати свою інформпанель. "
+"Перетягуйте будь-які елементи з \"Доступних віджетів\"\n"
+"          до \"Своєї інформпанелі\" або змінюйте порядок, перетягуючи "
+"віджети. Після закінчення не забудьте натиснути\n"
 "          \"Зберегти\".\n"
 "        "
 
 #: aleksis/core/templates/core/edit_dashboard.html:30
 msgid ""
 "\n"
-"          On this page you can arrange the default dashboard which is shown when a user doesn't arrange his own\n"
-"          dashboard. You can drag any items from \"Available widgets\" to \"Default Dashboard\" or change the order\n"
-"          by moving the widgets. After you have finished, please don't forget to click on \"Save\".\n"
+"          On this page you can arrange the default dashboard which is shown "
+"when a user doesn't arrange his own\n"
+"          dashboard. You can drag any items from \"Available widgets\" to "
+"\"Default Dashboard\" or change the order\n"
+"          by moving the widgets. After you have finished, please don't "
+"forget to click on \"Save\".\n"
 "        "
 msgstr ""
 "\n"
-"          На цій сторінці Ви можете впорядкувати типову/стандартну інформпанель, яка відображається, якщо користувач\n"
-"          не впорядкував власну. Перетягуйте будь-які елементи з \"Доступних віджетів\" до \"Типової інформпанелі\" або змінюйте \n"
-"          порядок, перетягуючи віджети. Після закінчення не забудьте натиснути \"Зберегти\".\n"
+"          На цій сторінці Ви можете впорядкувати типову/стандартну "
+"інформпанель, яка відображається, якщо користувач\n"
+"          не впорядкував власну. Перетягуйте будь-які елементи з \"Доступних "
+"віджетів\" до \"Типової інформпанелі\" або змінюйте \n"
+"          порядок, перетягуючи віджети. Після закінчення не забудьте "
+"натиснути \"Зберегти\".\n"
 "        "
 
 #: aleksis/core/templates/core/edit_dashboard.html:48
@@ -1741,13 +1805,16 @@ msgstr "Призначити підлеглі групи до груп"
 #: aleksis/core/templates/core/group/child_groups.html:18
 msgid ""
 "\n"
-"          You can use this to assign child groups to groups. Please use the filters below to select groups you want to\n"
+"          You can use this to assign child groups to groups. Please use the "
+"filters below to select groups you want to\n"
 "          change and click \"Next\".\n"
 "        "
 msgstr ""
 "\n"
-"          Ви можете скористатися цим для призначення підлеглих груп до основних. Для обрання груп,\n"
-"          які хочете змінити, скористайтеся, будь ласка, фільтрами, що нижче та натисність \"Далі\".\n"
+"          Ви можете скористатися цим для призначення підлеглих груп до "
+"основних. Для обрання груп,\n"
+"          які хочете змінити, скористайтеся, будь ласка, фільтрами, що нижче "
+"та натисність \"Далі\".\n"
 "        "
 
 #: aleksis/core/templates/core/group/child_groups.html:31
@@ -1773,7 +1840,8 @@ msgid ""
 "          "
 msgstr ""
 "\n"
-"            Оберіть, будь ласка, декілька груп у порядку, за яким призначати.\n"
+"            Оберіть, будь ласка, декілька груп у порядку, за яким "
+"призначати.\n"
 "          "
 
 #: aleksis/core/templates/core/group/child_groups.html:72
@@ -1787,14 +1855,18 @@ msgstr "Обережно, будь ласка!"
 #: aleksis/core/templates/core/group/child_groups.html:79
 msgid ""
 "\n"
-"            If you click \"Back\" or \"Next\" the current group assignments are not saved.\n"
-"            If you click \"Save\", you will overwrite all existing child group relations for this group with what you\n"
+"            If you click \"Back\" or \"Next\" the current group assignments "
+"are not saved.\n"
+"            If you click \"Save\", you will overwrite all existing child "
+"group relations for this group with what you\n"
 "            selected on this page.\n"
 "          "
 msgstr ""
 "\n"
-"            Якщо натиснете \"Назад\" або \"Далі\" призначення цієї групи не збережуться.\n"
-"            Якщо натиснете \"Зберегти\", усі існуючі зв'язки підлеглої групи з цією групою будуть замінені на\n"
+"            Якщо натиснете \"Назад\" або \"Далі\" призначення цієї групи не "
+"збережуться.\n"
+"            Якщо натиснете \"Зберегти\", усі існуючі зв'язки підлеглої групи "
+"з цією групою будуть замінені на\n"
 "            обрані на цій сторінці.\n"
 "          "
 
@@ -1892,12 +1964,14 @@ msgstr "Додому"
 #: aleksis/core/templates/core/index.html:34
 msgid ""
 "\n"
-"        You didn't customise your dashboard so that you see the system default. Please click on \"Edit dashboard\" to\n"
+"        You didn't customise your dashboard so that you see the system "
+"default. Please click on \"Edit dashboard\" to\n"
 "        customise your personal dashboard.\n"
 "      "
 msgstr ""
 "\n"
-"        Ви ще не налаштували свою інформпанель, тож поки що бачите типову/стандартну. Для налаштування \n"
+"        Ви ще не налаштували свою інформпанель, тож поки що бачите типову/"
+"стандартну. Для налаштування \n"
 "         власної інформпанелі клацніть \"Редагувати інформпанель\".\n"
 "      "
 
@@ -1941,11 +2015,13 @@ msgstr "Активований режим обслуговування"
 #: aleksis/core/templates/core/pages/system_status.html:24
 msgid ""
 "\n"
-"                Only admin and visitors from internal IPs can access the site.\n"
+"                Only admin and visitors from internal IPs can access the "
+"site.\n"
 "              "
 msgstr ""
 "\n"
-"                Доступ до сайту мають лише адміністратор та відвідувачі з внутрішніми IP-адресами.\n"
+"                Доступ до сайту мають лише адміністратор та відвідувачі з "
+"внутрішніми IP-адресами.\n"
 "              "
 
 #: aleksis/core/templates/core/pages/system_status.html:36
@@ -1963,11 +2039,13 @@ msgstr "Активований режим налагодження"
 #: aleksis/core/templates/core/pages/system_status.html:49
 msgid ""
 "\n"
-"                The web server throws back debug information on errors. Do not use in production!\n"
+"                The web server throws back debug information on errors. Do "
+"not use in production!\n"
 "              "
 msgstr ""
 "\n"
-"                Веб-сервер кидає під час помилок інформацію щодо налагодження. Не використовуйте в продакшені!\n"
+"                Веб-сервер кидає під час помилок інформацію щодо "
+"налагодження. Не використовуйте в продакшені!\n"
 "              "
 
 #: aleksis/core/templates/core/pages/system_status.html:56
@@ -1977,11 +2055,13 @@ msgstr "Режим налагодження деактивований"
 #: aleksis/core/templates/core/pages/system_status.html:58
 msgid ""
 "\n"
-"                Debug mode is disabled. Default error pages are displayed on errors.\n"
+"                Debug mode is disabled. Default error pages are displayed on "
+"errors.\n"
 "              "
 msgstr ""
 "\n"
-"                Режим налагодження деактивований. В разі збоїв відображатимуться типові сторінки помилок.\n"
+"                Режим налагодження деактивований. В разі збоїв "
+"відображатимуться типові сторінки помилок.\n"
 "              "
 
 #: aleksis/core/templates/core/pages/system_status.html:71
@@ -2031,11 +2111,13 @@ msgstr "Спроба генерації PDF"
 #: aleksis/core/templates/core/pages/test_pdf.html:14
 msgid ""
 "\n"
-"        This simple view can be used to ensure the correct function of the built-in PDF generation system.\n"
+"        This simple view can be used to ensure the correct function of the "
+"built-in PDF generation system.\n"
 "      "
 msgstr ""
 "\n"
-"        Цей простий вигляд допоможе перевірити коректність налаштувань вбудованої системи генерації PDF.\n"
+"        Цей простий вигляд допоможе перевірити коректність налаштувань "
+"вбудованої системи генерації PDF.\n"
 "      "
 
 #: aleksis/core/templates/core/partials/announcements.html:8
@@ -2093,11 +2175,13 @@ msgstr "Невідомо"
 #: aleksis/core/templates/core/partials/splash_screen.html:11
 msgid ""
 "\n"
-"      This webbrowser doesn't support JavaScript, or its execution is blocked. Please use another browser to continue.\n"
+"      This webbrowser doesn't support JavaScript, or its execution is "
+"blocked. Please use another browser to continue.\n"
 "    "
 msgstr ""
 "\n"
-"      Цей веб-браузер не підтримує JavaScript або його обробка заблокована. Для продовження скористайтеся, будь ласка, іншим браузером.\n"
+"      Цей веб-браузер не підтримує JavaScript або його обробка заблокована. "
+"Для продовження скористайтеся, будь ласка, іншим браузером.\n"
 "    "
 
 #: aleksis/core/templates/core/perms/assign.html:12
@@ -2210,7 +2294,9 @@ msgid "The invite feature is disabled."
 msgstr "Функція запрошення деактивована."
 
 #: aleksis/core/templates/invitations/disabled.html:15
-msgid "To enable it, switch on the corresponding checkbox in the authentication section of the "
+msgid ""
+"To enable it, switch on the corresponding checkbox in the authentication "
+"section of the "
 msgstr "Для активації увімкніть відповідний чекбокс в розділі авторизації на "
 
 #: aleksis/core/templates/invitations/disabled.html:16
@@ -2383,14 +2469,18 @@ msgstr "Сторінка в автономному режимі не досту
 #: aleksis/core/templates/offline.html:14
 msgid ""
 "\n"
-"      This page is not available offline. Since you probably don't have an internet connection, check to see if your WiFi\n"
-"      or mobile data is turned on and try again. If you think you are connected, please contact the system\n"
+"      This page is not available offline. Since you probably don't have an "
+"internet connection, check to see if your WiFi\n"
+"      or mobile data is turned on and try again. If you think you are "
+"connected, please contact the system\n"
 "      administrators:\n"
 "    "
 msgstr ""
 "\n"
-"      Ця сторінка в автономному режимі не доступна. Можливо, у Вас проблема з інтернетом. Переконайтеся, що Ваш WiFi\n"
-"      або мобільний інтернет увімкнені та спробуйте ще раз. Якщо Ви думаєте, що із з'єднанням все добре, зверніться\n"
+"      Ця сторінка в автономному режимі не доступна. Можливо, у Вас проблема "
+"з інтернетом. Переконайтеся, що Ваш WiFi\n"
+"      або мобільний інтернет увімкнені та спробуйте ще раз. Якщо Ви думаєте, "
+"що із з'єднанням все добре, зверніться\n"
 "      до системних адміністраторів:\n"
 "    "
 
@@ -2426,12 +2516,14 @@ msgstr "Помилка входу облікового запису третьо
 #: aleksis/core/templates/socialaccount/authentication_error.html:15
 msgid ""
 "\n"
-"            An error occurred while attempting to login via your third-party account.\n"
+"            An error occurred while attempting to login via your third-party "
+"account.\n"
 "            Please contact one of your site administrators.\n"
 "          "
 msgstr ""
 "\n"
-"            Під час спроби входу з Вашим стороннім обліковим записом виникла помилка входу.\n"
+"            Під час спроби входу з Вашим стороннім обліковим записом виникла "
+"помилка входу.\n"
 "            Зверніться, будь ласка, до адміністратора сайту.\n"
 "          "
 
@@ -2446,7 +2538,9 @@ msgstr "Видалити"
 
 #: aleksis/core/templates/socialaccount/connections.html:34
 msgid "You currently have no third-party accounts connected to this account."
-msgstr "Зараз у Вас немає облікових записів третіх сторін, з'єднаних з цим обліковим записом."
+msgstr ""
+"Зараз у Вас немає облікових записів третіх сторін, з'єднаних з цим обліковим "
+"записом."
 
 #: aleksis/core/templates/socialaccount/connections.html:37
 msgid "Add a Third-party Account"
@@ -2460,7 +2554,8 @@ msgstr "Ви приєднуєте новий обліковий запис тр
 #: aleksis/core/templates/socialaccount/login.html:23
 #, python-format
 msgid "You are about to sign in using a third party account from %(provider)s."
-msgstr "Ви авторизуєтеся за допомогою стороннього облікового запису від %(provider)s."
+msgstr ""
+"Ви авторизуєтеся за допомогою стороннього облікового запису від %(provider)s."
 
 #: aleksis/core/templates/socialaccount/login.html:28
 msgid "Continue"
@@ -2476,11 +2571,15 @@ msgstr "Вхід скасований"
 #, python-format
 msgid ""
 "\n"
-"            You decided to cancel logging in to our site using one of your existing accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s\">sign in</a>.\n"
+"            You decided to cancel logging in to our site using one of your "
+"existing accounts. If this was a mistake, please proceed to <a href="
+"\"%(login_url)s\">sign in</a>.\n"
 "          "
 msgstr ""
 "\n"
-"            Схоже, що Ви скасували вхід до нашого сайту з одним із Ваших облікових записів. Якщо це сталося помилково, Ви можете <a href=\"%(login_url)s\">продовжити вхід тут</a>.\n"
+"            Схоже, що Ви скасували вхід до нашого сайту з одним із Ваших "
+"облікових записів. Якщо це сталося помилково, Ви можете <a href="
+"\"%(login_url)s\">продовжити вхід тут</a>.\n"
 "          "
 
 #: aleksis/core/templates/socialaccount/signup.html:12
@@ -2490,7 +2589,8 @@ msgid ""
 "        %(site_name)s. As a final step, please complete the following form:"
 msgstr ""
 "Ви на шляху до використання свого облікового запису у %(provider_name)s\n"
-"        для входу на %(site_name)s. Заповніть, будь ласка, для завершення цю форму:"
+"        для входу на %(site_name)s. Заповніть, будь ласка, для завершення цю "
+"форму:"
 
 #: aleksis/core/templates/socialaccount/snippets/provider_list.html:12
 #, python-format
@@ -2577,21 +2677,25 @@ msgstr "Система виявила деякі нові проблеми з В
 #: aleksis/core/templates/templated_email/data_checks.email:6
 msgid ""
 "the system detected some new problems with your data.\n"
-"Please take some time to inspect them and solve the issues or mark them as ignored."
+"Please take some time to inspect them and solve the issues or mark them as "
+"ignored."
 msgstr ""
 "система виявила деякі нові проблеми з Вашими даними.\n"
-"Приділіть, будь ласка, трохи часу для їх перевірки та вирішення проблем або позначте їх для ігнору."
+"Приділіть, будь ласка, трохи часу для їх перевірки та вирішення проблем або "
+"позначте їх для ігнору."
 
 #: aleksis/core/templates/templated_email/data_checks.email:15
 msgid ""
 "\n"
 "   the system detected some new problems with your data.\n"
-"   Please take some time to inspect them and solve the issues or mark them as ignored.\n"
+"   Please take some time to inspect them and solve the issues or mark them "
+"as ignored.\n"
 "  "
 msgstr ""
 "\n"
 "   система виявила деякі нові проблеми з Вашими даними.\n"
-"   Приділіть, будь ласка, трохи часу для їх перевірки та вирішення проблем або позначте їх для ігнору.\n"
+"   Приділіть, будь ласка, трохи часу для їх перевірки та вирішення проблем "
+"або позначте їх для ігнору.\n"
 "  "
 
 #: aleksis/core/templates/templated_email/data_checks.email:23
@@ -2677,16 +2781,22 @@ msgid ""
 "\n"
 "        Backup tokens can be used when your primary and backup\n"
 "        phone numbers aren't available. The backup tokens below can be used\n"
-"        for login verification. If you've used up all your backup tokens, you\n"
-"        can generate a new set of backup tokens. Only the backup tokens shown\n"
+"        for login verification. If you've used up all your backup tokens, "
+"you\n"
+"        can generate a new set of backup tokens. Only the backup tokens "
+"shown\n"
 "        below will be valid.\n"
 "      "
 msgstr ""
 "\n"
-"        Резервні токени можуть бути використані коли Ваші основний та резервний\n"
-"        телефонні номери не доступні. Резервні токени, що нижче, можуть бути використані\n"
-"        для перевірки на вході. Коли Ви використаєте усі резервні токени, Ви\n"
-"        зможете згенерувати новий набір резервних токенів. Дійсними будуть лише токени,\n"
+"        Резервні токени можуть бути використані коли Ваші основний та "
+"резервний\n"
+"        телефонні номери не доступні. Резервні токени, що нижче, можуть бути "
+"використані\n"
+"        для перевірки на вході. Коли Ви використаєте усі резервні токени, "
+"Ви\n"
+"        зможете згенерувати новий набір резервних токенів. Дійсними будуть "
+"лише токени,\n"
 "        що нижче.\n"
 "      "
 
@@ -2737,7 +2847,9 @@ msgstr ""
 
 #: aleksis/core/templates/two_factor/core/login.html:47
 msgid "Please login with your account to use the external application."
-msgstr "Для використання зовнішнього додатку увійдіть, будь ласка, у свій обліковий запис."
+msgstr ""
+"Для використання зовнішнього додатку увійдіть, будь ласка, у свій обліковий "
+"запис."
 
 #: aleksis/core/templates/two_factor/core/login.html:54
 msgid "Please login to see this page."
@@ -2746,24 +2858,28 @@ msgstr "Для перегляду цієї сторінки, будь ласка
 #: aleksis/core/templates/two_factor/core/login.html:65
 msgid ""
 "\n"
-"                        We are calling your phone right now, please enter the\n"
+"                        We are calling your phone right now, please enter "
+"the\n"
 "                        digits you hear.\n"
 "                      "
 msgstr ""
 "\n"
-"                        Ми зателефонуємо зараз на Ваш номер. Напишіть, будь ласка, цифри,\n"
+"                        Ми зателефонуємо зараз на Ваш номер. Напишіть, будь "
+"ласка, цифри,\n"
 "                        які Ви почуєте.\n"
 "                      "
 
 #: aleksis/core/templates/two_factor/core/login.html:70
 msgid ""
 "\n"
-"                        We sent you a text message, please enter the tokens we\n"
+"                        We sent you a text message, please enter the tokens "
+"we\n"
 "                        sent.\n"
 "                      "
 msgstr ""
 "\n"
-"                        Ми надіслали Вам текстове повідомлення. Напишіть, будь ласка, отриманий\n"
+"                        Ми надіслали Вам текстове повідомлення. Напишіть, "
+"будь ласка, отриманий\n"
 "                        токен.\n"
 "                      "
 
@@ -2782,15 +2898,21 @@ msgstr ""
 #: aleksis/core/templates/two_factor/core/login.html:81
 msgid ""
 "\n"
-"                      Use this form for entering backup tokens for logging in.\n"
-"                      These tokens have been generated for you to print and keep safe. Please\n"
-"                      enter one of these backup tokens to login to your account.\n"
+"                      Use this form for entering backup tokens for logging "
+"in.\n"
+"                      These tokens have been generated for you to print and "
+"keep safe. Please\n"
+"                      enter one of these backup tokens to login to your "
+"account.\n"
 "                    "
 msgstr ""
 "\n"
-"                      Для входу скористайтеся формою для введення резервних токенів.\n"
-"                      Ці токени були згенеровані, щоб Ви їх роздрукували та зберігали у надійному місці.\n"
-"                      Щоб увійти напишіть, будь ласка, один з резервних токенів.\n"
+"                      Для входу скористайтеся формою для введення резервних "
+"токенів.\n"
+"                      Ці токени були згенеровані, щоб Ви їх роздрукували та "
+"зберігали у надійному місці.\n"
+"                      Щоб увійти напишіть, будь ласка, один з резервних "
+"токенів.\n"
 "                    "
 
 #: aleksis/core/templates/two_factor/core/login.html:109
@@ -2820,12 +2942,16 @@ msgstr "Дозвіл відсутній"
 #: aleksis/core/templates/two_factor/core/otp_required.html:10
 msgid ""
 "The page you requested, enforces users to verify using\n"
-"          two-factor authentication for security reasons. You need to enable these\n"
+"          two-factor authentication for security reasons. You need to enable "
+"these\n"
 "          security features in order to access this page."
 msgstr ""
-"Для перегляду запитуванної сторінки, з огляду на безпеку, необхідна додаткова\n"
-"          перевірка користувача з використанням двохфакторної автентифікації.\n"
-"          Для доступу до цієї сторінки Вам потрібно увімкнути ці функції безпеки."
+"Для перегляду запитуванної сторінки, з огляду на безпеку, необхідна "
+"додаткова\n"
+"          перевірка користувача з використанням двохфакторної "
+"автентифікації.\n"
+"          Для доступу до цієї сторінки Вам потрібно увімкнути ці функції "
+"безпеки."
 
 #: aleksis/core/templates/two_factor/core/otp_required.html:14
 msgid ""
@@ -2874,7 +3000,8 @@ msgid ""
 msgstr ""
 "\n"
 "        Ви встановлюєте для свого облікового запису новий рівень безпеки.\n"
-"        Для увімкнення двохфакторної автентифікації пройдіть декілька кроків\n"
+"        Для увімкнення двохфакторної автентифікації пройдіть декілька "
+"кроків\n"
 "        майстра налаштування.\n"
 "      "
 
@@ -2885,20 +3012,24 @@ msgid ""
 "      "
 msgstr ""
 "\n"
-"        Оберіть, будь ласка, метод автентифікації, який Ви хочете використовувати:\n"
+"        Оберіть, будь ласка, метод автентифікації, який Ви хочете "
+"використовувати:\n"
 "      "
 
 #: aleksis/core/templates/two_factor/core/setup.html:23
 msgid ""
 "\n"
 "        To start using a token generator, please use your\n"
-"        favourite two factor authentication (TOTP) app to scan the QR code below.\n"
+"        favourite two factor authentication (TOTP) app to scan the QR code "
+"below.\n"
 "        Then, enter the token generated by the app.\n"
 "      "
 msgstr ""
 "\n"
-"        Для того, щоби почати використання генератора токенів, скористйтеся, будь ласка, своїм\n"
-"        улюбленим додатком для двохфакторної автентифікації (TOTP) та відскануйте QR-код, що нижче.\n"
+"        Для того, щоби почати використання генератора токенів, скористйтеся, "
+"будь ласка, своїм\n"
+"        улюбленим додатком для двохфакторної автентифікації (TOTP) та "
+"відскануйте QR-код, що нижче.\n"
 "        Після цього напишіть отриманий генератором токен.\n"
 "      "
 
@@ -2911,7 +3042,8 @@ msgid ""
 msgstr ""
 "\n"
 "        Напишіть, будь ласка, номер телефону, на який Ви хочете\n"
-"        отримувати текстові повідомлення. На наступному кроці він буде перевірений.\n"
+"        отримувати текстові повідомлення. На наступному кроці він буде "
+"перевірений.\n"
 "      "
 
 #: aleksis/core/templates/two_factor/core/setup.html:41
@@ -2929,11 +3061,13 @@ msgstr ""
 #: aleksis/core/templates/two_factor/core/setup.html:50
 msgid ""
 "\n"
-"            We are calling your phone right now, please enter the digits you hear.\n"
+"            We are calling your phone right now, please enter the digits you "
+"hear.\n"
 "          "
 msgstr ""
 "\n"
-"            Ми зараз телефонуємо на Ваш номер, – напишіть, будь ласка, цифри, які Ви почуєте.\n"
+"            Ми зараз телефонуємо на Ваш номер, – напишіть, будь ласка, "
+"цифри, які Ви почуєте.\n"
 "          "
 
 #: aleksis/core/templates/two_factor/core/setup.html:56
@@ -2943,22 +3077,29 @@ msgid ""
 "          "
 msgstr ""
 "\n"
-"            Ми надіслали Вам текстове повідомлення. Напишіть, будь ласка, отримані токени.\n"
+"            Ми надіслали Вам текстове повідомлення. Напишіть, будь ласка, "
+"отримані токени.\n"
 "          "
 
 #: aleksis/core/templates/two_factor/core/setup.html:63
 msgid ""
 "\n"
-"          We've encountered an issue with the selected authentication method. Please\n"
-"          go back and verify that you entered your information correctly, try\n"
-"          again, or use a different authentication method instead. If the issue\n"
+"          We've encountered an issue with the selected authentication "
+"method. Please\n"
+"          go back and verify that you entered your information correctly, "
+"try\n"
+"          again, or use a different authentication method instead. If the "
+"issue\n"
 "          persists, contact the site administrator.\n"
 "        "
 msgstr ""
 "\n"
-"          Ми помітили, що існує проблема з використанням обраного методу авторизації. Поверніться,\n"
-"          будь ласка, назад, та переконайтеся, що необхідні дані вказані правильно\n"
-"          і спробуйте увійте ще раз, або ж скористайтеся іншим варіантом входу. Якщо ж\n"
+"          Ми помітили, що існує проблема з використанням обраного методу "
+"авторизації. Поверніться,\n"
+"          будь ласка, назад, та переконайтеся, що необхідні дані вказані "
+"правильно\n"
+"          і спробуйте увійте ще раз, або ж скористайтеся іншим варіантом "
+"входу. Якщо ж\n"
 "          проблема залишається, зверніться до адміністратора сайту.\n"
 "        "
 
@@ -2984,7 +3125,8 @@ msgstr "Двохфакторна автентифікація успішно у
 #: aleksis/core/templates/two_factor/core/setup_complete.html:14
 msgid ""
 "\n"
-"        Congratulations, you've successfully enabled two-factor authentication.\n"
+"        Congratulations, you've successfully enabled two-factor "
+"authentication.\n"
 "      "
 msgstr ""
 "\n"
@@ -3005,13 +3147,16 @@ msgstr "Створити резервні коди"
 msgid ""
 "\n"
 "          However, it might happen that you don't have access to\n"
-"          your primary token device. To enable account recovery, generate backup codes\n"
+"          your primary token device. To enable account recovery, generate "
+"backup codes\n"
 "          or add a phone number.\n"
 "        "
 msgstr ""
 "\n"
-"          Між іншим, може так статися, що Ви не матимете доступу до свого основного\n"
-"          пристрою з токенами. Для увімкнення відновлення обліковки створіть резервні коди\n"
+"          Між іншим, може так статися, що Ви не матимете доступу до свого "
+"основного\n"
+"          пристрою з токенами. Для увімкнення відновлення обліковки створіть "
+"резервні коди\n"
 "          або додайте номер телефону.\n"
 "        "
 
@@ -3028,8 +3173,12 @@ msgid "Disable Two-Factor Authentication"
 msgstr "Вимкнути двохфакторну автентифікацію"
 
 #: aleksis/core/templates/two_factor/profile/disable.html:12
-msgid "You are about to disable two-factor authentication. This weakens your account security, are you sure?"
-msgstr "Ви вимикаєте двохфакторну автентифікацію. Це знизить захист Вашого облікового запису. Ви впевнені?"
+msgid ""
+"You are about to disable two-factor authentication. This weakens your "
+"account security, are you sure?"
+msgstr ""
+"Ви вимикаєте двохфакторну автентифікацію. Це знизить захист Вашого "
+"облікового запису. Ви впевнені?"
 
 #: aleksis/core/templates/two_factor/profile/disable.html:26
 msgid "Disable"
@@ -3117,7 +3266,8 @@ msgid ""
 msgstr ""
 "\n"
 "        Хоча ми рішуче застерігаємо Вас це не робити, Ви можете \n"
-"        також вимкнути двохфакторну автентифікацію для свого облікового запису.\n"
+"        також вимкнути двохфакторну автентифікацію для свого облікового "
+"запису.\n"
 "      "
 
 #: aleksis/core/templates/two_factor/profile/profile.html:78
@@ -3259,52 +3409,60 @@ msgstr "Віджет інформпанелі створений."
 msgid "The dashboard widget has been deleted."
 msgstr "Віджет інформпанелі видалений."
 
-#: aleksis/core/views.py:1030
+#: aleksis/core/views.py:1030 aleksis/core/views.py:1031
 msgid "Your dashboard configuration has been saved successfully."
 msgstr "Ваша конфігурація інформпанелі збережена."
 
-#: aleksis/core/views.py:1032
+#: aleksis/core/views.py:1032 aleksis/core/views.py:1033
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr "Конфігурація типової/стандартної інформпанелі збережена."
 
-#: aleksis/core/views.py:1103
+#: aleksis/core/views.py:1103 aleksis/core/views.py:1104
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr "Запрошення успішно створене. Код запрошення: {code}"
 
-#: aleksis/core/views.py:1200
+#: aleksis/core/views.py:1200 aleksis/core/views.py:1201
 msgid "We have successfully assigned the permissions."
 msgstr "Ми успішно призначили дозволи."
 
-#: aleksis/core/views.py:1210
+#: aleksis/core/views.py:1210 aleksis/core/views.py:1211
 msgid "The global user permission has been deleted."
 msgstr "Глобальний користувацький дозвіл видалений."
 
-#: aleksis/core/views.py:1220
+#: aleksis/core/views.py:1220 aleksis/core/views.py:1221
 msgid "The global group permission has been deleted."
 msgstr "Глобальний груповий дозвіл видалений."
 
-#: aleksis/core/views.py:1230
+#: aleksis/core/views.py:1230 aleksis/core/views.py:1231
 msgid "The object user permission has been deleted."
 msgstr "Об'єктний користувацький дозвіл видалений."
 
-#: aleksis/core/views.py:1240
+#: aleksis/core/views.py:1240 aleksis/core/views.py:1241
 msgid "The object group permission has been deleted."
 msgstr "Об'єктний груповий дозвіл видалений."
 
-#: aleksis/core/views.py:1349
-msgid "The third-party account could not be disconnected because it is the only login method available."
-msgstr "Обліковий запис третьої сторони не можна від'єднати оскільки він єдиний спосіб для входу."
+#: aleksis/core/views.py:1349 aleksis/core/views.py:1350
+msgid ""
+"The third-party account could not be disconnected because it is the only "
+"login method available."
+msgstr ""
+"Обліковий запис третьої сторони не можна від'єднати оскільки він єдиний "
+"спосіб для входу."
 
-#: aleksis/core/views.py:1356
+#: aleksis/core/views.py:1356 aleksis/core/views.py:1357
 msgid "The third-party account has been successfully disconnected."
 msgstr "Обліковий запис третьої сторони успішно від'єднаний."
 
-#: aleksis/core/views.py:1432
-msgid "Person was invited successfully and an email with further instructions has been send to them."
-msgstr "Особа успішно запрошена. Лист з інструкціями щодо наступних дій надісланий на її ел.пошту."
+#: aleksis/core/views.py:1432 aleksis/core/views.py:1433
+msgid ""
+"Person was invited successfully and an email with further instructions has "
+"been send to them."
+msgstr ""
+"Особа успішно запрошена. Лист з інструкціями щодо наступних дій надісланий "
+"на її ел.пошту."
 
-#: aleksis/core/views.py:1443
+#: aleksis/core/views.py:1443 aleksis/core/views.py:1444
 msgid "Person was already invited."
 msgstr "Особа вже була запрошена."
 
@@ -3411,8 +3569,14 @@ msgstr "Особа вже була запрошена."
 #~ msgid "ICal Feeds"
 #~ msgstr "iCal-стрічки"
 
-#~ msgid "These are URLs for different Calendar Feeds in the iCal (.ics) format. You can create as many as you want and import them in your calendar software."
-#~ msgstr "Тут містяться посилання на різні стрічки календарів у форматі iCal (.ics). Ви можете створити їх стільки, скільки Вам необхідно та імпортувати їх у ПЗ для роботи з календарями."
+#~ msgid ""
+#~ "These are URLs for different Calendar Feeds in the iCal (.ics) format. "
+#~ "You can create as many as you want and import them in your calendar "
+#~ "software."
+#~ msgstr ""
+#~ "Тут містяться посилання на різні стрічки календарів у форматі iCal (."
+#~ "ics). Ви можете створити їх стільки, скільки Вам необхідно та імпортувати "
+#~ "їх у ПЗ для роботи з календарями."
 
 #~ msgid "Your iCal URLs"
 #~ msgstr "Ваші посилання iCal"
@@ -3437,24 +3601,30 @@ msgstr "Особа вже була запрошена."
 
 #~ msgid ""
 #~ "\n"
-#~ "              This platform is powered by AlekSIS®, a web-based school information system (SIS) which can be used\n"
-#~ "              to manage and/or publish organisational artifacts of educational institutions. AlekSIS is free software and\n"
+#~ "              This platform is powered by AlekSIS®, a web-based school "
+#~ "information system (SIS) which can be used\n"
+#~ "              to manage and/or publish organisational artifacts of "
+#~ "educational institutions. AlekSIS is free software and\n"
 #~ "              can be used by anyone.\n"
 #~ "            "
 #~ msgstr ""
 #~ "\n"
-#~ "              Ця платформа базується на AlekSIS®, веб-інструменті інформаційної системи для навчання (SIS) за допомогою якої\n"
-#~ "              можна керувати та/або висвітлювати організаційні елементи навчальних закладів. AlekSIS - безплатне ПЗ\n"
+#~ "              Ця платформа базується на AlekSIS®, веб-інструменті "
+#~ "інформаційної системи для навчання (SIS) за допомогою якої\n"
+#~ "              можна керувати та/або висвітлювати організаційні елементи "
+#~ "навчальних закладів. AlekSIS - безплатне ПЗ\n"
 #~ "              і ним може користуватися будь-хто.\n"
 #~ "            "
 
 #~ msgid ""
 #~ "\n"
-#~ "              AlekSIS® is a registered trademark of the AlekSIS open source project, represented by Teckids e.V.\n"
+#~ "              AlekSIS® is a registered trademark of the AlekSIS open "
+#~ "source project, represented by Teckids e.V.\n"
 #~ "            "
 #~ msgstr ""
 #~ "\n"
-#~ "              AlekSIS® – зареєстрована торгова марка проекту з відкритим програмним кодом AlekSIS, що представлена Teckids e.V.\n"
+#~ "              AlekSIS® – зареєстрована торгова марка проекту з відкритим "
+#~ "програмним кодом AlekSIS, що представлена Teckids e.V.\n"
 #~ "            "
 
 #~ msgid "Website of AlekSIS"
@@ -3468,14 +3638,18 @@ msgstr "Особа вже була запрошена."
 
 #~ msgid ""
 #~ "\n"
-#~ "              The core and the official apps of AlekSIS are licenced under the EUPL, version 1.2 or later. For licence\n"
-#~ "              information from third-party apps, if installed, refer to the respective components below. The\n"
+#~ "              The core and the official apps of AlekSIS are licenced "
+#~ "under the EUPL, version 1.2 or later. For licence\n"
+#~ "              information from third-party apps, if installed, refer to "
+#~ "the respective components below. The\n"
 #~ "              licences are marked like this:\n"
 #~ "            "
 #~ msgstr ""
 #~ "\n"
-#~ "              Ядро та офіційні додатки AlekSIS ліцензовані EUPL, версії 1.2 та новіше. Для отримання інформації\n"
-#~ "              щодо додатків третіх сторін, якщо такі встановлені, перейдіть до відповідних компонентів нижче.\n"
+#~ "              Ядро та офіційні додатки AlekSIS ліцензовані EUPL, версії "
+#~ "1.2 та новіше. Для отримання інформації\n"
+#~ "              щодо додатків третіх сторін, якщо такі встановлені, "
+#~ "перейдіть до відповідних компонентів нижче.\n"
 #~ "              Ці ліцензії мають таку позначку:\n"
 #~ "            "
 
@@ -3503,11 +3677,13 @@ msgstr "Особа вже була запрошена."
 
 #~ msgid ""
 #~ "\n"
-#~ "              Without activated JavaScript the progress status can't be updated.\n"
+#~ "              Without activated JavaScript the progress status can't be "
+#~ "updated.\n"
 #~ "            "
 #~ msgstr ""
 #~ "\n"
-#~ "              Без активованого JavaScript статус виконання не зможе оновлюватися.\n"
+#~ "              Без активованого JavaScript статус виконання не зможе "
+#~ "оновлюватися.\n"
 #~ "            "
 
 #~ msgid "Language"
@@ -3518,12 +3694,14 @@ msgstr "Особа вже була запрошена."
 
 #~ msgid ""
 #~ "\n"
-#~ "            Your administrator account is not linked to any person. Therefore,\n"
+#~ "            Your administrator account is not linked to any person. "
+#~ "Therefore,\n"
 #~ "            a dummy person has been linked to your account.\n"
 #~ "          "
 #~ msgstr ""
 #~ "\n"
-#~ "            Ваш адміністративний обліковий запис не поєднаний з жодною особою. Через це\n"
+#~ "            Ваш адміністративний обліковий запис не поєднаний з жодною "
+#~ "особою. Через це\n"
 #~ "            до Вашого облікового запису приєднана фейкова особа.\n"
 #~ "          "
 
@@ -3536,8 +3714,10 @@ msgstr "Особа вже була запрошена."
 #~ msgstr ""
 #~ "\n"
 #~ "            Ваш обліковий запис не пов'язаний з фізособою. Це означає,\n"
-#~ "            що Ви не маєте жодного доступу до навчальної інформації. Зверніться,\n"
-#~ "            будь ласка, до адміністраторів AlekSIS у Вашому навчальному закладі.\n"
+#~ "            що Ви не маєте жодного доступу до навчальної інформації. "
+#~ "Зверніться,\n"
+#~ "            будь ласка, до адміністраторів AlekSIS у Вашому навчальному "
+#~ "закладі.\n"
 #~ "          "
 
 #~ msgid "Impersonate"
diff --git a/aleksis/core/mixins.py b/aleksis/core/mixins.py
index 809fcb65647abf70b258017a82fc2113fc95a1a2..e734b40a8f7cf55b86e1f496cfb8e8cfe0099cfb 100644
--- a/aleksis/core/mixins.py
+++ b/aleksis/core/mixins.py
@@ -130,7 +130,7 @@ class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase):
     icon_ = "radiobox-blank"
 
     site = models.ForeignKey(
-        Site, on_delete=models.CASCADE, default=settings.SITE_ID, editable=False
+        Site, on_delete=models.CASCADE, default=settings.SITE_ID, editable=False, related_name="+"
     )
     objects = CurrentSiteManager()
     objects_all_sites = models.Manager()
diff --git a/aleksis/core/models.py b/aleksis/core/models.py
index 04d7703ca42a6f87ea2fcd41487d9e173022d2cb..1a370c2c68af1569f92a9cc09ada7f8b5f671649 100644
--- a/aleksis/core/models.py
+++ b/aleksis/core/models.py
@@ -1093,6 +1093,14 @@ class CustomMenuItem(ExtensibleModel):
         return reverse("admin:core_custommenuitem_change", args=[self.id])
 
 
+class DynamicRoute(RegistryObject):
+    """Define a dynamic route.
+
+    Dynamic routes should be used to register Vue routes dynamically, e. g.
+    when an app is supposed to show menu items for dynamically creatable objects.
+    """
+
+
 class GroupType(ExtensibleModel):
     """Group type model.
 
diff --git a/aleksis/core/schema/__init__.py b/aleksis/core/schema/__init__.py
index e5fcb52b2c03bec68cfc152729cfb2870c0ab878..deab0e28b5d93e854a020aad687a618817196536 100644
--- a/aleksis/core/schema/__init__.py
+++ b/aleksis/core/schema/__init__.py
@@ -9,11 +9,12 @@ from haystack.inputs import AutoQuery
 from haystack.query import SearchQuerySet
 from haystack.utils.loading import UnifiedIndex
 
-from ..models import CustomMenu, Notification, PDFFile, Person, TaskUserAssignment
+from ..models import CustomMenu, DynamicRoute, Notification, PDFFile, Person, TaskUserAssignment
 from ..util.apps import AppConfig
 from ..util.core_helpers import get_allowed_object_ids, get_app_module, get_app_packages, has_person
 from .celery_progress import CeleryProgressFetchedMutation, CeleryProgressType
 from .custom_menu import CustomMenuType
+from .dynamic_routes import DynamicRouteType
 from .group import GroupType  # noqa
 from .installed_apps import AppType
 from .message import MessageType
@@ -54,6 +55,8 @@ class Query(graphene.ObjectType):
 
     custom_menu_by_name = graphene.Field(CustomMenuType, name=graphene.String())
 
+    dynamic_routes = graphene.List(DynamicRouteType)
+
     two_factor = graphene.Field(TwoFactorType)
 
     def resolve_ping(root, info, payload) -> str:
@@ -124,12 +127,16 @@ class Query(graphene.ObjectType):
     def resolve_search_snippets(root, info, query, limit=-1, **kwargs):
         indexed_models = UnifiedIndex().get_indexed_models()
         allowed_object_ids = get_allowed_object_ids(info.context.user, indexed_models)
-        results = SearchQuerySet().filter(id__in=allowed_object_ids).filter(text=AutoQuery(query))
-
-        if limit < 0:
-            return results
 
-        return results[:limit]
+        if allowed_object_ids:
+            results = (
+                SearchQuerySet().filter(id__in=allowed_object_ids).filter(text=AutoQuery(query))
+            )
+            if limit < 0:
+                return results
+            return results[:limit]
+        else:
+            return None
 
     def resolve_messages(root, info, **kwargs):
         return get_messages(info)
@@ -137,6 +144,14 @@ class Query(graphene.ObjectType):
     def resolve_custom_menu_by_name(root, info, name, **kwargs):
         return CustomMenu.get_default(name)
 
+    def resolve_dynamic_routes(root, info, **kwargs):
+        dynamic_routes = []
+
+        for dynamic_route_object in DynamicRoute.registered_objects_dict.values():
+            dynamic_routes += dynamic_route_object.get_dynamic_routes()
+
+        return dynamic_routes
+
     def resolve_two_factor(root, info, **kwargs):
         if info.context.user.is_anonymous:
             return None
diff --git a/aleksis/core/schema/dynamic_routes.py b/aleksis/core/schema/dynamic_routes.py
new file mode 100644
index 0000000000000000000000000000000000000000..5c2fd6336ddb05220447e5ac7df58bbbf98ef74f
--- /dev/null
+++ b/aleksis/core/schema/dynamic_routes.py
@@ -0,0 +1,18 @@
+import graphene
+
+
+class DynamicRouteType(graphene.ObjectType):
+    parent_route_name = graphene.String()
+
+    route_path = graphene.String()
+    route_name = graphene.String()
+
+    display_account_menu = graphene.Boolean()
+    display_sidenav_menu = graphene.Boolean()
+    menu_new_tab = graphene.Boolean()
+
+    menu_title = graphene.String()
+    menu_icon = graphene.String()
+
+    menu_permission = graphene.String()
+    route_permission = graphene.String()
diff --git a/aleksis/core/settings.py b/aleksis/core/settings.py
index 9e78a56d1169cc9386be8641098a622956c383da..c12ae3371376a0836bdd9898753e7f8d28317daa 100644
--- a/aleksis/core/settings.py
+++ b/aleksis/core/settings.py
@@ -203,6 +203,7 @@ TEMPLATES = [
                 "maintenance_mode.context_processors.maintenance_mode",
                 "dynamic_preferences.processors.global_preferences",
                 "aleksis.core.util.core_helpers.custom_information_processor",
+                "aleksis.core.util.context_processors.need_maintenance_response_context_processor",
             ],
         },
     },
@@ -281,8 +282,9 @@ CACHALOT_TIMEOUT = _settings.get("caching.cachalot.timeout", None)
 CACHALOT_DATABASES = set(["default", "default_oot"])
 SILENCED_SYSTEM_CHECKS += ["cachalot.W001"]
 CACHALOT_ENABLED = _settings.get("caching.query_caching", True)
+CACHALOT_UNCACHABLE_TABLES = ("django_migrations", "django_session")
 
-SESSION_ENGINE = "django.contrib.sessions.backends.cache"
+SESSION_ENGINE = "django.contrib.sessions.backends.cached_db"
 SESSION_CACHE_ALIAS = "default"
 
 # Password validation
@@ -394,6 +396,7 @@ OAUTH2_PROVIDER = {
     "SCOPES_BACKEND_CLASS": "aleksis.core.util.auth_helpers.AppScopes",
     "OAUTH2_VALIDATOR_CLASS": "aleksis.core.util.auth_helpers.CustomOAuth2Validator",
     "OIDC_ENABLED": True,
+    "OIDC_ISS_ENDPOINT": BASE_URL,
     "REFRESH_TOKEN_EXPIRE_SECONDS": _settings.get("oauth2.token_expiry", 86400),
     "PKCE_REQUIRED": False,
 }
@@ -591,6 +594,7 @@ YARN_INSTALLED_APPS = [
     "vue-apollo@^3.1.0",
     "vuetify@^2.6.7",
     "vue-router@^3.5.2",
+    "vue-cookies@^1.8.2",
     "vite@^4.0.1",
     "vite-plugin-pwa@^0.14.1",
     "vite-plugin-top-level-await@^1.2.2",
@@ -698,7 +702,7 @@ MAINTENANCE_MODE = _settings.get("maintenance.enabled", None)
 MAINTENANCE_MODE_IGNORE_IP_ADDRESSES = _settings.get(
     "maintenance.ignore_ips", _settings.get("maintenance.internal_ips", [])
 )
-MAINTENANCE_MODE_GET_CLIENT_IP_ADDRESS = "ipware.ip.get_ip"
+MAINTENANCE_MODE_GET_CLIENT_IP_ADDRESS = "aleksis.core.util.core_helpers.get_ip"
 MAINTENANCE_MODE_IGNORE_SUPERUSER = True
 MAINTENANCE_MODE_STATE_FILE_NAME = _settings.get(
     "maintenance.statefile", "maintenance_mode_state.txt"
diff --git a/aleksis/core/templates/503.html b/aleksis/core/templates/503.html
index 21578e63238f09081e35081b4ed45cf1e0a47a1c..ba7cb4005cfc084338f451db643c2268d45f634b 100644
--- a/aleksis/core/templates/503.html
+++ b/aleksis/core/templates/503.html
@@ -1,21 +1,4 @@
-{% extends "core/base.html" %}
-{% load i18n %}
+{% extends "core/vue_index.html" %}
 
-
-{% block content %}
-  <div class="container">
-    <div class="card red">
-      <div class="card-content white-text">
-        <i class="material-icons iconify small left" data-icon="mdi:alert-octagon-outline"></i>
-        <span class="card-title">{% blocktrans %}The maintenance mode is currently enabled. Please try again
-          later.{% endblocktrans %}</span>
-        <p>
-          {% blocktrans %}
-            This page is currently unavailable. If this error persists, contact your site administrators:
-          {% endblocktrans %}
-        </p>
-        {% include "core/partials/admins_list.html" %}
-      </div>
-    </div>
-  </div>
+{% block no_frontend %}
 {% endblock %}
diff --git a/aleksis/core/templates/core/partials/splash_screen.html b/aleksis/core/templates/core/partials/splash_screen.html
index f3491141c1d0bb48b1b767e382ce66ff87239936..10969c261082120648f4b682d2678ba0fee7977f 100644
--- a/aleksis/core/templates/core/partials/splash_screen.html
+++ b/aleksis/core/templates/core/partials/splash_screen.html
@@ -12,13 +12,23 @@
       This webbrowser doesn't support JavaScript, or its execution is blocked. Please use another browser to continue.
     {% endblocktrans %}
   </noscript>
+{% if need_maintenance_response %}
+  <p>
+    {% blocktrans %}
+      The maintenance mode is currently enabled. Please try again later.
+    {% endblocktrans %}
+  </p>
+{% endif %}
 </div>
+
+{% if not need_maintenance_response %}
 <div class="lds-ellipsis">
   <div></div>
   <div></div>
   <div></div>
   <div></div>
 </div>
+{% endif %}
 
 <style>
   #logo {
@@ -36,7 +46,7 @@
     max-height: calc(100vh - 10vh - calc(2 * min(85px, 15vh)));
   }
 
-  noscript {
+  noscript, p {
     font-family: Roboto, sans-serif;
     font-weight: 400;
   }
diff --git a/aleksis/core/templates/core/vue_index.html b/aleksis/core/templates/core/vue_index.html
index b39da47ea2154318d13ce0d60428f175299ee562..f2c914327ca849801172e8816297eedd724bb99d 100644
--- a/aleksis/core/templates/core/vue_index.html
+++ b/aleksis/core/templates/core/vue_index.html
@@ -29,6 +29,10 @@
       <app ref="aleksisApp"></app>
     </main>
 
-    {% vite_asset 'aleksis/core/frontend/index.js' %}
+    {% block no_frontend %}
+      {% if not need_maintenance_response %}
+        {% vite_asset 'aleksis/core/frontend/index.js' %}
+      {% endif %}
+    {% endblock no_frontend %}
   </body>
 </html>
diff --git a/aleksis/core/templates/search/indexes/core/room_text.txt b/aleksis/core/templates/search/indexes/core/room_text.txt
new file mode 100644
index 0000000000000000000000000000000000000000..165c30e8c240ddecc872520626cccb598a6ad7a0
--- /dev/null
+++ b/aleksis/core/templates/search/indexes/core/room_text.txt
@@ -0,0 +1,2 @@
+{{ object.name }}
+{{ object.short_name }}
diff --git a/aleksis/core/urls.py b/aleksis/core/urls.py
index bc2ccb7534132aa96f48198e339d46dfb9268734..d2c02ed4a5815bfb113fa0aff19700b153b20eb4 100644
--- a/aleksis/core/urls.py
+++ b/aleksis/core/urls.py
@@ -11,6 +11,7 @@ import calendarweek.django
 from ckeditor_uploader import views as ckeditor_uploader_views
 from graphene_django.views import GraphQLView
 from health_check.urls import urlpatterns as health_urls
+from maintenance_mode.decorators import force_maintenance_mode_off
 from oauth2_provider.views import ConnectDiscoveryInfoView
 from rules.contrib.views import permission_required
 from two_factor.urls import urlpatterns as tf_urls
@@ -24,7 +25,13 @@ urlpatterns = [
     path(settings.MEDIA_URL.removeprefix("/"), include("titofisto.urls")),
     path("__icons__/", include("dj_iconify.urls")),
     path("graphql/", csrf_exempt(GraphQLView.as_view(graphiql=True)), name="graphql"),
-    path("logo", views.LogoView.as_view(), name="logo"),
+    path("logo", force_maintenance_mode_off(views.LogoView.as_view()), name="logo"),
+    path(
+        ".well-known/openid-configuration/",
+        ConnectDiscoveryInfoView.as_view(),
+        name="oidc_configuration",
+    ),
+    path("oauth/", include("oauth2_provider.urls", namespace="oauth2_provider")),
     path(
         "django/",
         include(
@@ -166,11 +173,6 @@ urlpatterns = [
                 path("search/", views.PermissionSearchView.as_view(), name="haystack_search"),
                 path("maintenance-mode/", include("maintenance_mode.urls")),
                 path("impersonate/", include("impersonate.urls")),
-                path(
-                    ".well-known/openid-configuration/",
-                    ConnectDiscoveryInfoView.as_view(),
-                    name="oidc_configuration",
-                ),
                 path(
                     "oauth/applications/",
                     views.OAuth2ListView.as_view(),
@@ -201,7 +203,6 @@ urlpatterns = [
                     views.CustomAuthorizationView.as_view(),
                     name="oauth2_provider:authorize",
                 ),
-                path("oauth/", include("oauth2_provider.urls", namespace="oauth2_provider")),
                 path("__i18n__/", include("django.conf.urls.i18n")),
                 path(
                     "ckeditor/upload/",
diff --git a/aleksis/core/util/context_processors.py b/aleksis/core/util/context_processors.py
new file mode 100644
index 0000000000000000000000000000000000000000..acaf79cc7adf9f24b508bb96cd78c65d2a19a2f3
--- /dev/null
+++ b/aleksis/core/util/context_processors.py
@@ -0,0 +1,5 @@
+from maintenance_mode.http import need_maintenance_response
+
+
+def need_maintenance_response_context_processor(request):
+    return {"need_maintenance_response": need_maintenance_response(request)}
diff --git a/aleksis/core/util/core_helpers.py b/aleksis/core/util/core_helpers.py
index 511b6ada19c8ee3bc984ffef7865443142319888..c7f89fb5badfbca1e5014b78a150129afd990669 100644
--- a/aleksis/core/util/core_helpers.py
+++ b/aleksis/core/util/core_helpers.py
@@ -482,3 +482,10 @@ class OOTRouter:
 
 
 post_invalidation.connect(OOTRouter._invalidate_cachalot)
+
+
+def get_ip(*args, **kwargs):
+    """Recreate ipware.ip.get_ip as it was replaced by get_client_ip."""
+    from ipware.ip import get_client_ip  # noqa
+
+    return get_client_ip(*args, **kwargs)[0]
diff --git a/aleksis/core/vite.config.js b/aleksis/core/vite.config.js
index bf029ce617723720448c6376688bcf392a4eebab..2b73a5f14dd8096530c7fd64356302cd47943979 100644
--- a/aleksis/core/vite.config.js
+++ b/aleksis/core/vite.config.js
@@ -236,6 +236,18 @@ export default defineConfig({
                   "PWA-Is-Cacheable": "true",
                 },
               },
+              plugins: [
+                {
+                  fetchDidSucceed: async ({ request, response }) => {
+                    if (response.ok) {
+                      return response;
+                    }
+                    throw new Error(
+                      `${response.status} ${response.statusText}`
+                    );
+                  },
+                },
+              ],
             },
           },
           {
diff --git a/pyproject.toml b/pyproject.toml
index 8e8a58ec0b48950cf8ca832521ea2f4f006b77bf..77eb393517270e0b643871077531a4680c1c6b9a 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -113,7 +113,7 @@ ipython = "^8.0.0"
 django-oauth-toolkit = "^2.0.0"
 django-storages = {version = "^1.11.1", optional = true}
 boto3 = {version = "^1.17.33", optional = true}
-django-cleanup = "^6.0.0"
+django-cleanup = "^7.0.0"
 djangorestframework = "^3.12.4"
 Whoosh = "^2.7.4"
 django-titofisto = "^0.2.0"